【问题标题】:I cant get my SQL INSERT statement to work with 2 tables in relationship in Delphi7我无法让我的 SQL INSERT 语句在 Delphi7 中处理 2 个有关系的表
【发布时间】:2013-09-08 14:43:04
【问题描述】:

我不断收到以下错误

Project PAT_p.exe 引发异常类 EOleException,并带有消息“当前提供程序不支持从单次执行返回多个记录集”。进程停止。使用 Step 或 Run 继续。

我的数据库中的表以一对多关系链接,其中 ID 是 tblDeelname 中的 PK,Nommer 是自动编号,而 PK 是 tblAntwoorde。不幸的是,这是针对学校的实际评估任务,并且必须存在这种关系。 我的 Delphi 代码如下:

Procedure TfrmDN.btnBDClick(Sender: TObject);
var

sNaam, sVan, sKNommer, sAntwoord, sInteger : string;

begin

 sNaam := lblNaam2.Caption;              //
 sVan := lblVan2.Caption;                //Declaring Strings
 sKNommer := lblKN2.Caption;             //
 sAntwoord := lblAntwoord1.Caption;      //
 inc(iTInskrywings);          // Global var starting at 100 which is declared on form activate
 sInteger := intostr(iTInskrywings);

 frmData.qryVGKompetisieDB.Active := false;    // query is on another form
 frmData.qryVGKompetisieDB.SQL.Text := 'insert into tblDeelnemers (ID, Naam, Van, Kontaknommer) VALUES ("'+sInteger+'", "'+sNaam+'", "'+sVan+'","'+sKNommer+'")'; // Inserting Data into first Table
 frmData.qryVGKompetisieDB.ExecSQL;
 frmData.qryVGKompetisieDB.SQL.Text := 'insert into tblAntwoorde (ID, Antwoord) VALUES ("'+sInteger+'", "'+sAntwoord+'")';   // Inserting Data into second Table
 frmData.qryVGKompetisieDB.ExecSQL;
 frmData.qryVGKompetisieDB.Active := true;

end;

进入表格的所有信息都来自编辑框,ID 是一个全局变量(也是必须存在的评估的一部分)。由于在这个女巫不希望我用 sql 插入整数值之前出现的另一个错误,我将整数变成了字符串。

请帮忙!!!

【问题讨论】:

  • 为什么在插入结束时将 qryVGKompetisieDB.Active 设置为 True ?如果您在数据库管理工具中执行这些 SQL 查询会发生什么?你的数据库引擎是什么?
  • @TLama 我正在使采石场成为现实,因为它显示在 dbgrid 中。我不确定如何在我的 DM 管理工具中使用它。我正在使用 Microsoft Access
  • 我看到的至少一个问题是您正试图在 INSERT 查询中打开数据集。您已将 SQL.Text 设置为 INSERT 查询并执行了它,但之后它不会将其更改回 SELECT 查询。您必须将SQL.Text 设置为某个SELECT 查询,然后将Active 设置为True。
  • @TLama 非常感谢这就是问题所在。我只是在执行后添加了一个 select 语句,它起作用了。我不认为您可以查看我关于 sql 中删除的其他问题。它在这里link

标签: sql delphi ms-access delphi-7


【解决方案1】:

感谢@TLama,我纠正了我的愚蠢错误,只在最后一次执行后添加了 select 语句。

Procedure TfrmDN.btnBDClick(Sender: TObject);
var

sNaam, sVan, sKNommer, sAntwoord, sInteger : string;

begin

 sNaam := lblNaam2.Caption;              
 sVan := lblVan2.Caption;                
 sKNommer := lblKN2.Caption;             
 sAntwoord := lblAntwoord1.Caption;      
 inc(iTInskrywings);          
 sInteger := intostr(iTInskrywings);

 frmData.qryVGKompetisieDB.Active := false;    
 frmData.qryVGKompetisieDB.SQL.Text := 'insert into tblDeelnemers (ID, Naam, Van, Kontaknommer) VALUES ("'+sInteger+'", "'+sNaam+'", "'+sVan+'","'+sKNommer+'")'; 
 frmData.qryVGKompetisieDB.ExecSQL;
 frmData.qryVGKompetisieDB.SQL.Text := 'insert into tblAntwoorde (ID, Antwoord) VALUES ("'+sInteger+'", "'+sAntwoord+'")';   
 frmData.qryVGKompetisieDB.ExecSQL;
 frmData.qryVGKompetisieDB.SQL.Text := 'SELECT * FROM tblDeelnemers'; // The select statement needs to be there so that the dbgrid can display properly  
 frmData.qryVGKompetisieDB.Active := true;

end;

【讨论】:

  • @DavidG 我不能接受它作为答案,因为它是作为评论而不是答案发布的:/
猜你喜欢
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
相关资源
最近更新 更多