在 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 的凭据)。