我使用delphi XE5,我有一个有7个表的数据库,我的问题是:我单击一个运行以下代码的按钮:
dbgridappr2.Enabled:=false;
adoquery4.Parameters.Clear;
datasource6.DataSet:=adoquery4;
ADOQuery4:=TADOQuery.Create(Application);
adoquery4.Active:=False;
adoquery4.Connection:=ADOConnection1;
adoquery4.SQL.Clear;
adoquery4.SQL.Add('select SPEC.ISp AS ''Spécialité'',COUNT(APPR.NValAp) AS ''Nombre dApprentis de même Spécialité'' ');
adoquery4.SQL.Add('FROM APPR,SPEC ');
adoquery4.SQL.Add('where SPEC.CSp=APPR.CSp ');
adoquery4.SQL.Add('GROUP BY SPEC.ISp ');
adoquery4.SQL.Add('ORDER BY COUNT(APPR.NValAp) desc ');
ADOQuery4.Prepared := True;
ADOQuery4.ExecSQL;
//adoquery4.Open;
adoquery4.Active:=true;
dbgridappr2.Visible:=true;
dbgridappr2.DataSource:=datasource6;
dbgridappr2.Enabled:=true;
我在DbGrid
中得到了结果,但是消息错误显示了不正确的参数?
我更改了按钮代码,但始终收到相同的错误消息。我有10个按钮,它们都使用不同的AdoQuery
运行类似的代码,我有结果,但总是有相同的消息错误。
发布于 2015-01-23 08:13:49
你贴出的代码是一堆烂摊子。原因如下:
在这里清除adoquery4.Parameters
,并将adoquery4
分配给datasource6.DataSet
dbgridappr2.Enabled:=false;
adoquery4.Parameters.Clear;
datasource6.DataSet:=adoquery4;
然后立即丢弃现有的adoquery4
(进程中的内存泄漏),并将其替换为TADOQuery
的新实例。
ADOQuery4:=TADOQuery.Create(Application);
然后关闭新创建的ADOQuery4
(此时不可能是Active
),分配一个连接(这很好),清除SQL
(这里不可能有任何内容):
adoquery4.Active:=False;
adoquery4.Connection:=ADOConnection1;
adoquery4.SQL.Clear;
到目前为止,你所做的事情中有90%是毫无意义的。
然后调用ADOQuery4.ExecSQL;
,它用于执行不返回行集的查询,如INSERT
、DELETE
等。您需要使用ADOQuery4.Open
或ADOQuery4.Active := True
来代替SELECT
。这是所得到的错误的实际原因;您使用返回行集的SQL语句调用ExecSQL
,这是无效的。
让我们再试一次,在这个过程中稍微改进一下SQL。忽略你在这里发布的所有内容,重新开始:
ADOQuery4.DisableControls;
try
// If the query is
if ADOQuery4.Active then
ADOQuery4.Close;
ADOQuery4.Parameters.Clear;
ADOQuery4.SQL.Clear;
AdoQuery4.SQL.Add('select SPEC.ISp AS ''Spécialité'',');
AdoQuery4.SQL.Add('COUNT(APPR.NValAp) AS ''Nombre dApprentis de même Spécialité''');
AdoQuery4.SQL.Add('FROM APPR INNER JOIN SPEC');
AdoQuery4.SQL.Add('ON SPEC.CSp = APPR.CSp');
AdoQuery4.SQL.Add('GROUP BY SPEC.ISp ');
AdoQuery4.SQL.Add('ORDER BY COUNT(APPR.NValAp) desc');
ADOQuery4.Open;
finally
ADOQuery4.EnableControls;
end;
(我不知道dbgridappr2.DataSource
的所有杂耍都是关于什么的,但是除非您要从不同的查询中更改数据源,否则这些都没有必要。在执行新查询时,对DisableControls
和EnableControls
的调用将阻止更新任何UI组件。)
https://stackoverflow.com/questions/28113296
复制