我使用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
运行相似的代码,我有结果,但我总是有相同的消息错误
答案 0 :(得分:1)
您发布的代码绝对是一团糟。原因如下:
您在此处清除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
代替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;
,这是无效的。
让我们再试一次,在这个过程中稍微改进一下SQL。忽略你在这里发布的所有内容,然后重新开始:
dbgridappr2.DataSource
(我不知道DisableControls
的所有杂耍是什么,但除非你从不同的查询中更改数据源,否则这些都不是必需的。调用EnableControls
并且{{1}}会阻止在执行新查询时更新任何UI组件。)