我的查询语句是这样的:
Try
    ADOQuery1.Close;
    ADOQuery1.SQL.Text := 'SELECT * FROM IODate WHERE aa = i AND ae = j';
    ADOQuery1.Open;
   DBGrid1.Update;
   DBGrid1.Show;
  Except
  //  Memo1.SetFocus;
   FORM2.Close;
   end;
原来的ADOQuery1.SQL.Text 是显示整个数据库的,就是select * from IODate,这个IODate就是表名
 
i是指文本型的用户名,j是时间型的一个日期
为什么我查询的时候老是出错,错误是i和j没有默认值,这是怎么回事啊??
还有就是如果我把i.j换成常量来进行查询,错误就没了,但是数据库中显示的查询结果只有网格,没有数据,这个是怎么回事??到底执行查询的代码该怎么写啊??请教!!

解决方案 »

  1.   

    把I和J在前面赋值没有啊
    如果没有,
    i:=edit1.text;
    j:=edit2.text;
    ADOQuery1.SQL.Text := 'SELECT * FROM IODate WHERE aa = i AND ae = j'
      

  2.   

    ADOQuery1.SQL.Text := 'SELECT * FROM IODate WHERE aa = ''' + i + ''' AND ae = '''+ j''
      

  3.   

    with AdoQuery do begin
      Close;
      Sql.Text:= 'SELECT * FROM IODate WHERE aa = :value1 AND ae = :value2';
      Parameters.ParambyName('value1').value:= i;
      Parameters.ParambyName('Value2').DataType:= ftDate;
      Parameters.ParambyName('Value2').value:= j;
      Open;
    end;
      

  4.   

    你把SQL语句用showmessage()显示一下就知道错在那里了,很显然i,j没有加引号嘛。你要么用'''给i,j加引号,要么用parambyname参数。