我使用TADOConnect与TADOQuery组件来访问OFFICE Access数据库.
问题出在:
1.用TADOQuery来查询数据库,不能使用where子句.只能使用select部分,而不能使用where部分.
2.用TAdoQuery删除一张表的数据,不能使用delete from 表名.而在TADOCommand中可以.
3.在TAdoCommand中的delete from 表名,如果在加上where ...就会出错!!!
为什么?解答一下!谢谢!

解决方案 »

  1.   

    先说一下,以前用delphi6带的Mdac出错,
    而我使用delphi7的Mdac也出错!!
      

  2.   

    where 子句是可以用的,但是必须符合SQL92标准,你的SQL是怎么写的呀?
      

  3.   

    Delphi中的SQL那句:
    adoq.sql.Add('select * from 表名 where 字段名 = '+IntToStr(AccountID));adoq是TADOQuery
    字段名是整型.
    AccountID是一整型值!thanks!
      

  4.   

    给你一个我的例子:
      main.query.close;
      main.query.sql.clear;
      main.query.SQL.Add('SELECT * from liushi WHERE (1=1)');
      tj:='';
      tj:=tj+'and(流水>='+inttostr(spinedit1.value)+')';
      tj:=tj+'and(流水<='+inttostr(spinedit2.value)+')';
      tj:=tj+'and(合计>='+floattostr(minhj)+')';
      tj:=tj+'and(合计<='+floattostr(maxhj)+')';
      if weizhi.Text<>'' then
        tj:=tj+'and(位置 like'+'''%'+weizhi.text+'%'''+')';
      tj:=tj+'and(日期>=#'+formatdatetime('yyyy-m-dd hh:mm:ss',dt1.datetime)+'#)';
      tj:=tj+'and(日期<=#'+formatdatetime('yyyy-m-dd hh:mm:ss',dt3.datetime)+'#);';
      main.query.sql.add(tj);
      //showmessage(main.query.sql.Text);
      main.query.open;
      

  5.   

    建议在access中写一个简单的带where条件的sql语句,如果不能运行就证明是access数据库损坏,一般修复一下就可以了,建议试试。
      

  6.   

    magc888(繁星):
    select * from liushi where 1=1 这边我不用后面的and应该不用括号吧。
    这样还是会出错!!我的操作系统是windows 2000 Family Server
      

  7.   

    killlaoli(菜鸟):
     在MS SQL Server 2000中,那些SQL语句不会出错的。
     如何修复access数据库?
      

  8.   

    那就不是我说的问题了,有时意外操作后,access会损坏,就不支持复杂的查询了。
    修复方法:
    工具-》数据库实用工具-》压缩和修复
      

  9.   

    修复了!还是提示语法错误!去掉where子句就不会!
    而这些sql语句在ms sql server中的测试是没有问题的!惨!!
      

  10.   

    不对啊,既然你用的是access,为什么在MS SQL Server 2000中去试验access数据有没有问题?如果你确定sql写的没问题的话,就一定是access的问题,修复一下试试吧。
      

  11.   

    修复了。ms sql server 2000中只是分析语法是否错误!数据库是在access中的。确定sql语句没有错误。因为:
    select * from 表 where 字段=1;
    已经写成这么简单的了编译还会错误!!!!
    修复后还是错!
      

  12.   

    正常情况下是没问题的,只要SQL语句不是太复杂
    将SQL语句在Access中的“查询”去执行试试,可以的话就没问题
      

  13.   

    试试
    adoq.sql.Add('select * from 表名 where 字段名 = '+'"'+IntToStr(AccountID)+'"');
      

  14.   

    你的“字段”是中文的吗?如果是英文,修改字段名试试,我遇到过的一种情况是
    字段名是Access中的关键字(不知有没有这种说法?)
    用来查询修改就不行,如session,data等
      

  15.   

    hnxrm(浪子):
    改成你说的那样,还是错!
    wzrlover(流光逝水):
    在access中的查询不会有错误!
    字段是英文的,但绝对不是access关键字,因为字段很自己设定的!
      

  16.   

    怎么可能,我也写过好几个access的项目,还重来没碰到过你说的那种情况
    是不是你的数据库建模有问题
    一般来说,add或txt提交的sql,delphi程序是不检查的错误与否的,就算你里面写的一团糟,程序也能执行,只不过返回的东西就不是你所想要的了!
    还有对于需不需要返回结果集是用的方法是不同的,这个总不会不知道吧!
      

  17.   

    试试
    adoq.sql.Add('select * from 表名 where 字段名 = '''+IntToStr(AccountID)+'''');
    select * from table能运行嘛?具体报的错误是什么?
      

  18.   

    建议看微软系列丛书<<ADO编程技术>>,清华出版社,老外写的.
    里面写的很清楚.
      

  19.   

    我用的access2000数据库,win2kpro,delphi6,一下是我的connectstring=Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=db.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
    我给你的例子在很多机器上运行很正常。
      

  20.   

    delphi0build(超级模块):
     至于数据库,那是别人建立的。我只需要往里面读写改东西就可以了。
     我也不知道怎么会这样,那些 SQL 语句在ms sql server中不会错误的!
    ------------------------------------
     flyingkiller(大飞虫) :
     先说一下,我的字段是整型的。
     select * from table是可以运行的。
     报错是提示在where附近语法错误。
     而写成
     select * from Table where 字段=1 
     这样简单也会提示错误!
      

  21.   

    ssl2000(大宋):现在看书未免也太晚了。而我并不是sql语言问题。
    现在只求解决问题。
      

  22.   

    hansion3406(阿木):
     那么喜欢?另一本电子书给你!
     http://ahpei.myetang.com/directx8/01.rar
     http://ahpei.myetang.com/directx8/02.rar
     ...
     http://ahpei.myetang.com/directx8/13.rar