Lazarus DBGrid在记录提交后完全空白



我一直在用Lazarus 2.x(免费帕斯卡(和火鸟3(通过flamerobin(,我尝试通过TSQLConnection,TSQLQuery,TDBConnection在数据模块(上诉(等提交记录。

我运行以下代码片段,记录成功提交到 firebird,但不幸的是,之后数据库连接丢失,因此无法通过 DBGrid 看到任何记录(甚至没有列标题 - 完全空白(。我必须终止应用程序并重新打开它,才能通过 DBGrid 直观地了解我的火鸟。

按钮单击事件

appeals.SQLTransaction1.Active:=false;
appeals.SQLQuery1.SQL.Text:='UPDATE appeals set name=:name,date_entry=:entry,date_suspended=:suspended,'+
'date_court=:court,date_judgement=:judgement where id='+IntToStr(row_num);
appeals.SQLQuery1.Params.ParamByName('name').AsString:=Trim(Edit1.Text);
appeals.SQLQuery1.Params.ParamByName('entry').AsDate:=DateTimePicker1.Date;
appeals.SQLQuery1.Params.ParamByName('suspended').AsDate:=IncDay(DateTimePicker1.Date,10);
appeals.SQLQuery1.Params.ParamByName('court').AsDate:=DateTimePicker2.Date;
appeals.SQLQuery1.Params.ParamByName('judgement').AsDate:=IncDay(DateTimePicker2.Date,20);
appeals.SQLTransaction1.StartTransaction;
appeals.SQLQuery1.ExecSQL;
appeals.SQLTransaction1.Commit;

我也用过.提交保留正如拉撒路论坛中提到的,但没有成功。知道我可以做些什么才能在提交后在 DBGrid 中查看我的记录。

问候

DBgrid 不显示任何内容的原因是 SqlQuery1.ExecSQL 不返回结果集,因此 SqlQuery1 无法提供任何记录供 DBGrid 显示。因此,请在提交后调用 SqlQuery1.Open。

但是,在调用 SqlQuery1.Open 之前,您需要为其提供一个要执行的 SELECT 语句,因为 SQL UPDATE 语句不会返回结果集,正如您已经发现的那样。 因此,执行以下操作:

[...]
appeals.SQLTransaction1.StartTransaction;
appeals.SQLQuery1.ExecSQL;
appeals.SQLTransaction1.Commit;
appeals.SQLQuery1.Sql.Text := 'Select * from appeals where ...';
appeals.SQLQuery1.Open;

显然替换了"..."在"where"子句中加上适当的内容。 通常。应参数化 SELECT 查询,以限制返回的行数和表在服务器上锁定的时间量。

最新更新