一个小问题(10分)

  • 主题发起人 主题发起人 lafaer
  • 开始时间 开始时间
L

lafaer

Unregistered / Unconfirmed
GUEST, unregistred user!
我调试程序时出现:

Gneral SQL error
[Microsoft][ODBC MicroSoft Access 驱动程序]参数不足,期待是 1.if Query1.Active then

程序就是在这出错的.望能帮助.

Query1.Active:=False;
Query1.SQL.Clear;
Query1.SQL.Add('select DateDuty From OnDuty Where EmpId=StEmpId');
Query1.Active:=true;
If Not Query1.Eof then
begin
FrmQryd.Label1.Caption:='出勤次数:'+intTostr(Query1.RecordCount)+'次';
FrmQryd.ShowModal;

 
EmpId、StEmpId都是 OnDuty 的列吗
 
Query1.SQL.Add('select DateDuty From OnDuty Where EmpId=StEmpId');


这句话是有错误吧。
你先到sqlplus执行一下
 
应该是你的SQL语句有问题
 
StEmpId是已赋值的变量.
 
因StEmpId是已赋值的变量.不可将其当作字符串
Query1.SQL.Add('select DateDuty From OnDuty Where EmpId=StEmpId');写的不对
 
Query1.SQL.Add('select DateDuty From OnDuty Where EmpId=StEmpId')
改成Query1.SQL.Add('select DateDuty From OnDuty Where EmpId=:StEmpId')
加上Query1.Params[0].AsString := stEmpId
 
这个问题我已经发现,现在又有新的问题了如下:
Query1.SQL.Add('select DateDuty From OnDuty Where EmpId=:EmpId and DateDuty Between Edit1.Text and Edit2.Text');
其中DateDuty是一个时间字段,是不是要把Edit1.Text和Edit2.Text转化为时间常量呢?
反正是老是出错.清指出.
 
你是什么数据库?
这个可能有细微差别
 
注意一下你的时间格式,同时你的sql语句是有问题的,不能这样写的
 
Edit1.Text书写的格式和acess定义的书写格式是一样的.

拿应该怎样写呢?
 
可以这样:
'select DateDuty From OnDuty Where EmpId=:EmpId and DateDuty Between '''
+ Edit1.Text + '''' and + '''' + Edit2.Text + ''''
也可以用参数Params
 
能解释一下么?

怎么还有语法错误呢?
 
我估计你的定义格式与输入格式不相同。
nghoul的引号是多余的。

你发邮件Nizvoo@etang.com
 
yyyy-mm-dd hh:mm:ss
 
我用的格式是中日期:94-06-08形式
在Edit1.Text:
ONDuty表格:
EmpId DateDuty
1 00-03-12
2 00-03-12
1 00-03-13
.
.
.
Edit1.Text:00-03-12
Edit2.Text:00-03-17
就是这样,想你们所说语法没有错误了么?
怎么就是不成功呢?


 
你在Access里头先执行执行。
 
这样好了,用参数
'select DateDuty From OnDuty Where EmpId=:EmpId and DateDuty Between :begindate and :enddate'
Query1.ParamByName('begindate').AsDateTime := strtoDate('00-01-01');
Query1.ParamByName('enddate').AsDateTime := strtoDate('03-01-01');
 
这样肯定可以,我刚才测了一把,呵呵
 
后退
顶部