同一个SQL语句,能在Access执行,不能在Delphi4里执行?(100分)

  • 主题发起人 主题发起人 Thinboy
  • 开始时间 开始时间
T

Thinboy

Unregistered / Unconfirmed
GUEST, unregistred user!
同一个SQL语句,能在Access执行,不能在Delphi4里执行?

我用Delphi 4 写程序,使用ODBC访问Access2000数据库,
有一个SQL语句:Insert into targettable Select * from sourcetable where condition=true
这个语句在Access里头的查询执行,是正常的,没有问题出现,但是在Delphi4中,当运行这个语
句的时候,就出现了如下的错误:
General SQL Error. [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in
criteria expression.

我试过了好多可能性的解决方法,都是不行!这是啥回事呢?
谢谢!
 
可能是ACCESS2000的问题,我写的VB程序也不能使用ACCESS2000建的库,更何况
Delphi了
 
>>where condition=true ??
condition 是一个字段吗?
 
后来,我使用batchmove组件来代替这个SQL语句,
速度是慢了很多,但是起码能够运行!

还没有人给出一个解决方案出来
分数如何给呢?
 
你确定targettable和sourcetable的字段结构一样吗?
如果一样,给我你原始的SQL语句,包括TableName,Condition,我帮你分析
 
if condition is not a key word
I think it's the problem of ODBC:(
try d5's ADO.

According the error message, I think the only way you can try is list
all the field in source and target table in your sql statement
 
我有时也是对不兼容问题头非常大,我一直使用 sybase ,后来公司换用oracl ,
许多语句都不可以使用了,有时是因为 oracl不支持,有时是因为 Delphi的问题
只有,多试试了
 
关键是你在D4里面是如何连接access的,如果是DAO3.6,那么肯定没问题.
如果是其他的,比如ODBC,就可能出现上面的情况.

因为不管DAO还是ODBC,都不是完全标准的SQL,都有一些扩展,而其中一些
扩展是不兼容的.
 
数据库连接不能采用ODBC,采用ADO即可
 
condition="true" 如何
 
好象是ODBC 的问题吧,我也曾经见过这种现象,最好是把ACCESS2000 换成ACCESS97 应该就没有问题,try
 
你把源表copy一份,将其中的数据删除换个名字再试试。
 
在现在的数据库中,逻辑字段越来越不吃香了(都改成了Bit)
在SQL语句中尽量不要写诸如condition=true这样的语句。
如果非要用到Boolean型的字段,则采用参数的方法:
Query1.SQL.text := 'Insert into targettable Select * from sourcetable
where condition=:lcondition';
Query1.ParamByName(lcondition).AsBoolean := True;
Query1.ExecSQL;
 
可以把Insert into targettable Select * from sourcetable where condition=true
作成ACCESS里的一个带参数固定查询
然后在DELPHI里调用
 
access里,false==0
 
多人接受答案了。
 
后退
顶部