在 Softvelocity ODBC 驱动程序上找不到预期的词法元素
Expected lexical element not found on Softvelocity ODBC driver
我的 C# 程序 SQL 如下所示:
INSERT INTO PDRIVERP
(POLICY
,DRIVERNO
,POINTRECNO
,DRIVERPOINTS
,POINTDESCRIPTION
,DATEOFVIOLATION
,ADDOPERATOR
,DATEADDED
,TIMEADDED
) VALUES (
,0
,1
,37
,2
,'my desc'
,'75000'
,'34'
,{d '2020-07-29'}
,0
)
我有一个 table 定义,如下所示:
PDRIVERPOINTS FILE,DRIVER('TOPSPEED'),NAME(SourceName),RECLAIM,PRE(IN)
POLDRIVERKEY KEY(+IN:POLICY,+IN:DRIVERNO,+IN:POINTRECNO),OPT,NOCASE
POINTDESCRIPTIONKEY KEY(+IN:POINTDESCRIPTION),DUP,OPT,NOCASE
DRIVERPOINTSKEY KEY(+IN:DRIVERPOINTS),DUP,OPT,NOCASE
ADDEDBYKEY KEY(+IN:ADDOPERATOR,+IN:DATEADDED,+IN:TIMEADDED),DUP,OPT,NOCASE
DATEADDEDKEY KEY(+IN:DATEADDED,+IN:TIMEADDED,+IN:ADDOPERATOR),DUP,OPT,NOCASE
UPDATEDBYKEY KEY(+IN:UPDATEOPERATOR,+IN:DATEUPDATED,+IN:TIMEUPDATED),DUP,OPT,NOCASE
DATEUPDATEDKEY KEY(+IN:DATEUPDATED,+IN:TIMEUPDATED,+IN:UPDATEOPERATOR),DUP,OPT,NOCASE
RECKEY KEY(+IN:RECNO),OPT,NOCASE
REMARKS MEMO(1000)
RECORD RECORD
POLICY DECIMAL(13,0)
DRIVERNO DECIMAL(3,0)
POINTRECNO DECIMAL(3,0)
DRIVERPOINTS DECIMAL(3,0)
POINTDESCRIPTION STRING(80)
DATEOFVIOLATION STRING(8)
ADDOPERATOR STRING(15)
DATEADDED DATE
TIMEADDED TIME
UPDATEOPERATOR STRING(15)
DATEUPDATED DATE
TIMEUPDATED TIME
RECNO DECIMAL(13,0)
我也看到了这样的定义:
CLEAR(cDRP:Record)
cDRP:REMARKS = IN:REMARKS
cDRP:POLICY = IN:POLICY
cDRP:DRIVERNO = IN:DRIVERNO
cDRP:POINTRECNO = IN:POINTRECNO
cDRP:DRIVERPOINTS = IN:DRIVERPOINTS
cDRP:POINTDESCRIPTION = IN:POINTDESCRIPTION
cDRP:DATEOFVIOLATION = FORMAT(IN:DATEOFVIOLATION,@D2)
cDRP:ADDOPERATOR = IN:ADDOPERATOR
cDRP:DATEADDED = FORMAT(IN:DATEADDED,@D2)
cDRP:TIMEADDED = FORMAT(IN:TIMEADDED,@T1)
cDRP:UPDATEOPERATOR = IN:UPDATEOPERATOR
cDRP:DATEUPDATED = FORMAT(IN:DATEUPDATED,@D2)
cDRP:TIMEUPDATED = FORMAT(IN:TIMEUPDATED,@T1)
cDRP:RECNO = IN:RECNO
我收到这个错误:
ERROR [42000] [SoftVelocity Inc.][TopSpeed ODBC Driver]Expected lexical element not found: <identifier>
读取的一些示例数据如下所示:
请注意 table 中 DATEOFVIOLATION 和 DATEADDED 之间的不一致。显示不同,所以我试图作为字符串插入,但我突然想到我应该尝试作为日期插入。
我的 sql 怎么了?
为什么 DATEOFVIOLATION 和 DATEADDED 在 Softvelocity 数据库扫描器中显示不同?
如何从 ODBC 中获取更好的错误消息。也许可以告诉我哪个字段被破坏或字符串中有多少字符导致了语法错误?
Clarion 日期存储为长整型 (INT)。 75000 是一个有效的号角日期。我不确定为什么该列被标记为字符串,但使用“75000”应该可以。日期在 dateofviolation 中的 topscan 中显示为 75000,因为它被定义为字符串,或者因为图片未格式化(您可以在 topscan 菜单上更改它)。
我怀疑插入错误来自 DateAdded 列。我已经有十年或更长时间没有使用 TOPSPEED ODBC 驱动程序了(尽管我怀疑它没有改变)。我不记得驱动程序是否支持 ,{d '2020-07-29'} 作为值。我想如果你有文档,那会告诉你。
我会先尝试将 dateadded 列排除在外,看看插入是否有效。使用相同的技术找出导致插入失败的原因,然后您就可以从那里回家。
此外,回复:timeadded,0 在 Clarion 中表示“没有时间”。 1 = 午夜。尽管如此,该字段中的间隔 100 表示 1 秒,之后很容易做数学运算。
顺便说一句,最好的 Clarion 资源集位于 https://clarionhub.com、Skype 和 Clarion NNTP 新闻组(news.softvelocity.com - 您需要来自 SoftVelocity 的凭据)。
我的 C# 程序 SQL 如下所示:
INSERT INTO PDRIVERP
(POLICY
,DRIVERNO
,POINTRECNO
,DRIVERPOINTS
,POINTDESCRIPTION
,DATEOFVIOLATION
,ADDOPERATOR
,DATEADDED
,TIMEADDED
) VALUES (
,0
,1
,37
,2
,'my desc'
,'75000'
,'34'
,{d '2020-07-29'}
,0
)
我有一个 table 定义,如下所示:
PDRIVERPOINTS FILE,DRIVER('TOPSPEED'),NAME(SourceName),RECLAIM,PRE(IN)
POLDRIVERKEY KEY(+IN:POLICY,+IN:DRIVERNO,+IN:POINTRECNO),OPT,NOCASE
POINTDESCRIPTIONKEY KEY(+IN:POINTDESCRIPTION),DUP,OPT,NOCASE
DRIVERPOINTSKEY KEY(+IN:DRIVERPOINTS),DUP,OPT,NOCASE
ADDEDBYKEY KEY(+IN:ADDOPERATOR,+IN:DATEADDED,+IN:TIMEADDED),DUP,OPT,NOCASE
DATEADDEDKEY KEY(+IN:DATEADDED,+IN:TIMEADDED,+IN:ADDOPERATOR),DUP,OPT,NOCASE
UPDATEDBYKEY KEY(+IN:UPDATEOPERATOR,+IN:DATEUPDATED,+IN:TIMEUPDATED),DUP,OPT,NOCASE
DATEUPDATEDKEY KEY(+IN:DATEUPDATED,+IN:TIMEUPDATED,+IN:UPDATEOPERATOR),DUP,OPT,NOCASE
RECKEY KEY(+IN:RECNO),OPT,NOCASE
REMARKS MEMO(1000)
RECORD RECORD
POLICY DECIMAL(13,0)
DRIVERNO DECIMAL(3,0)
POINTRECNO DECIMAL(3,0)
DRIVERPOINTS DECIMAL(3,0)
POINTDESCRIPTION STRING(80)
DATEOFVIOLATION STRING(8)
ADDOPERATOR STRING(15)
DATEADDED DATE
TIMEADDED TIME
UPDATEOPERATOR STRING(15)
DATEUPDATED DATE
TIMEUPDATED TIME
RECNO DECIMAL(13,0)
我也看到了这样的定义:
CLEAR(cDRP:Record)
cDRP:REMARKS = IN:REMARKS
cDRP:POLICY = IN:POLICY
cDRP:DRIVERNO = IN:DRIVERNO
cDRP:POINTRECNO = IN:POINTRECNO
cDRP:DRIVERPOINTS = IN:DRIVERPOINTS
cDRP:POINTDESCRIPTION = IN:POINTDESCRIPTION
cDRP:DATEOFVIOLATION = FORMAT(IN:DATEOFVIOLATION,@D2)
cDRP:ADDOPERATOR = IN:ADDOPERATOR
cDRP:DATEADDED = FORMAT(IN:DATEADDED,@D2)
cDRP:TIMEADDED = FORMAT(IN:TIMEADDED,@T1)
cDRP:UPDATEOPERATOR = IN:UPDATEOPERATOR
cDRP:DATEUPDATED = FORMAT(IN:DATEUPDATED,@D2)
cDRP:TIMEUPDATED = FORMAT(IN:TIMEUPDATED,@T1)
cDRP:RECNO = IN:RECNO
我收到这个错误:
ERROR [42000] [SoftVelocity Inc.][TopSpeed ODBC Driver]Expected lexical element not found: <identifier>
读取的一些示例数据如下所示:
请注意 table 中 DATEOFVIOLATION 和 DATEADDED 之间的不一致。显示不同,所以我试图作为字符串插入,但我突然想到我应该尝试作为日期插入。
我的 sql 怎么了?
为什么 DATEOFVIOLATION 和 DATEADDED 在 Softvelocity 数据库扫描器中显示不同?
如何从 ODBC 中获取更好的错误消息。也许可以告诉我哪个字段被破坏或字符串中有多少字符导致了语法错误?
Clarion 日期存储为长整型 (INT)。 75000 是一个有效的号角日期。我不确定为什么该列被标记为字符串,但使用“75000”应该可以。日期在 dateofviolation 中的 topscan 中显示为 75000,因为它被定义为字符串,或者因为图片未格式化(您可以在 topscan 菜单上更改它)。
我怀疑插入错误来自 DateAdded 列。我已经有十年或更长时间没有使用 TOPSPEED ODBC 驱动程序了(尽管我怀疑它没有改变)。我不记得驱动程序是否支持 ,{d '2020-07-29'} 作为值。我想如果你有文档,那会告诉你。
我会先尝试将 dateadded 列排除在外,看看插入是否有效。使用相同的技术找出导致插入失败的原因,然后您就可以从那里回家。
此外,回复:timeadded,0 在 Clarion 中表示“没有时间”。 1 = 午夜。尽管如此,该字段中的间隔 100 表示 1 秒,之后很容易做数学运算。
顺便说一句,最好的 Clarion 资源集位于 https://clarionhub.com、Skype 和 Clarion NNTP 新闻组(news.softvelocity.com - 您需要来自 SoftVelocity 的凭据)。