Delphi paradox 数据库 字段名 ServiceDate 类型 A 长度10 用下面的语句存成字符串. 格式 01/23/2007
Table1.FieldValues['ServiceDate']:=dateToStr(DateTimePicker1.Date);用SQL 语句查寻
Query1.SQL.Add('SELECT  DocID, ServiceDate, Lastname, FirstName, Gender'); // 都是字段名
Query1.SQL.Add('FROM appointment.db');
Query1.SQL.Add('WHERE ServiceDate = dateToStr(DateTimePicker1.Date)'); // 我要查询这一天的所有记录错误提示:
Project abc.exe raised exception class EDBEngineError with message 'Invalid use of keyword.
Token: Date)
Line number:2'. Process stopped. Use Step or Run to continue.
如果最后一句改为
Query1.SQL.Add('WHERE ServiceDate = "01/23/2007"'); 
就可以. 请问为什么?怎样改?

解决方案 »

  1.   

    我发现是变量比较时出了问题.
    请问如何在WHERE 中比较字符串?
    赋值只能用单引号,比较时要用双引号.总是不能匹配.

      tmpdatestring   : string;
        tmpdatestring   := '01/23/2007';WHERE ServiceDate = tmpdatestring; // 总是有错. 其中ServiceDate 是数据库中一个字符型字串.
    请帮忙!
      

  2.   

    'WHERE ServiceDate = '+ '''+tmpdatestring+'''; 
    将日期型字段当成是字符型做字符串的结合操作,加上单引号即可。
      

  3.   

    Query1.SQL.Add( 'WHERE ServiceDate = '''+dateToStr(DateTimePicker1.Date)+''' '); // 我要查询这一天的所有记录 
      

  4.   

    dateToStr(DateTimePicker1.Date)是Delphi的语句,数据库不认得这个!
      

  5.   

    我用'WHERE ServiceDate =  '+  ' ' '+tmpdatestring+ ' ' ';  
    运行时不提示错误,但没有输出结果,一条记录都没有.
    我的程序是:
    var
    tmpdatestring   : string;tmpdatestring := '08/08/2007';
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT  DocID, ServiceDate, Lastname, FirstName, Gender, ');
    Query1.SQL.Add('AccountingNum, Birthday, Address, Phone1, OHIP, VC, ');
    Query1.SQL.Add('ServiceCode, Diagcode, Phone2, Provider, PaidBy, Fee');
    Query1.SQL.Add('FROM appointment.db');
    Query1.SQL.Add('WHERE ServiceDate = '+'''+tmpdatestring+'''); 
    Query1.RequestLive := true;
    Query1.Open; 好象是delphi 的 SQL 中变量不支持 paradox 数据库,如果是真的那就没有办法了.
     
      

  6.   

    var 
    tmpdatestring   : string;
    sql: string;
    begin
      tmpdatestring :=  '08/08/2007 ';
      sql := 'SELECT  DocID, ServiceDate, Lastname, FirstName, Gender FROM appointment.db';
      sql :=  sql + 'WHERE ServiceDate = '+ ''''+tmpdatestring+'''';
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add(sql);
      //Query1.RequestLive := true;
      Query1.Open;
    end;
    试试这个,不好意思,上次解答的时候引号的时候出现问题。
    “好象是delphi 的 SQL 中变量不支持 paradox 数据库”。这句话不对,你可以把整个Query1.SQL.Add(变量)中的变量看成是通知数据库执行的字符串命令,将它传到数据库中使数据库执行。 
      

  7.   

    谢谢 NEWolf_Delphi! 问题解决了. 四个单引号考贝成了双字节,改成单字节就可以用了. 怎样给你分?
      

  8.   

    干嘛四个单引号呢?写#39代码最好看,最实用。sql := sql + 'WHERE ServiceDate = ' + #39 + tmpDateString + #39;