【发布时间】:2009-11-08 17:57:12
【问题描述】:
对不起我的英语,但我希望你能理解我:P
我正在尝试在代码中创建新的 TSQLQuery 组件,而不是将它放在表单上。我写了那个代码:
var
sql:tsqlquery;
pole:TFMTBCDField;
....
sql:=tsqlquery.Create(self);
sql.SQLConnection:=ddm.konekszyn;
sql.SQL.Text:='SELECT COUNT(idrap) FROM raporty WHERE idkier="'+lvkierowcy.Selected.Caption+'";';
pole:=TFMTBCDField.Create(self);
pole.Name:='sqlilerap';
pole.FieldName:='COUNT(idrap)';
pole.FieldKind:=fkData;
pole.DisplayLabel:='COUNT(idrap)';
sql.Fields.Add(pole);
sql.Open;
showmessage(sql.FieldByName('COUNT(idrap)').AsString);
sql.Free;
pole.Free;
但是当我尝试访问数据时出现异常:
First chance exception at $75999617. Exception class EDatabaseError with message 'Field 'COUNT(idrap)' has no dataset'. Process htstrm2.exe (2308)
我该怎么办?
【问题讨论】:
-
您能否澄清一下 - 您是在打开查询时得到的,还是在尝试读取新字段的内容时得到的?它是在“SQL.Open”还是在“ShowMessage”行吐出?
-
好的 - 有趣的是,如果您将 'FieldByName('cnt').AsString' 更改为 'Fields[0].AsString' 会发生什么 - 同样的错误?
-
将您的 sql 查询更改为“SELECT COUNT(idrap) AS A FROM”。并使用 FieldByName('A') 或 Fields[0] 。使用参数化查询而不是字符串连接。