对不起我的英语,但我希望你能理解我: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)
我该怎么办?
答案 0 :(得分:1)
甚至不做场。诸如此类的查询返回一个且仅返回一个字段。所以只需从fields数组中引用:
var
sql:tsqlquery;
....
sql:=tsqlquery.Create(self);
sql.SQLConnection:=ddm.konekszyn;
sql.SQL.Text:='SELECT COUNT(idrap) FROM raporty WHERE idkier="'+lvkierowcy.Selected.Caption+'";';
sql.Open;
showmessage(sql.fields[0].AsString);
sql.Free;
答案 1 :(得分:0)
您的数据库驱动程序报告聚合表达式的空字段名称。
别名你的领域:
sql:=tsqlquery.Create(self);
sql.SQLConnection:=ddm.konekszyn;
sql.SQL.Text:='SELECT COUNT(idrap) AS cnt FROM raporty WHERE idkier="'+lvkierowcy.Selected.Caption+'";';
pole:=TFMTBCDField.Create(self);
pole.Name:='sqlilerap';
pole.FieldName:='cnt';
pole.FieldKind:=fkData;
pole.DisplayLabel:='cnt';
sql.Fields.Add(pole);
sql.Open;
showmessage(sql.FieldByName('cnt').AsString);
sql.Free;
pole.Free;
答案 2 :(得分:0)
您必须明确地将数据集分配给该字段,尝试添加此行
pole.DataSet:=sql;
再见。
答案 3 :(得分:0)
别名返回的列。然后,您可以使用该别名来访问它:
sql.SQL.Text:='SELECT COUNT(idrap) AS iDrapCount FROM raporty WHERE dkier
="'+lvkierowcy.Selected.Caption+'";';
....
pole.FieldName := 'iDrapCount';
答案 4 :(得分:-1)
尝试将此行添加到您的查询中:
AND idrap <> nil