Lazarus DBLookupCombobox无法将null转int64进行数据提交

Lazarus DBLookupCombobox can not convert null to int64 for data submission

我一直在使用 Lazarus 2.x 和 Firebird 3(通过 flamerobin),我尝试通过数据模块中的 TSQLConnection、TSQLQuery、TDataSource 提交记录。

我运行下面的脚本成功配置了DBLookupCombobox,其中记录显示没有任何问题。

procedure TForm3.FormCreate(Sender: TObject);
  begin
  appeals.SQLQuery4.Close;
  appeals.SQLQuery4.SQL.Text:='select id,fullname from promoter';

  appeals.SQLQuery4.Open;

  appeals.DataSource2.DataSet:=appeals.SQLQuery4;
  DBLookupComboBox1.ListSource:=appeals.DataSource2;
  DBLookupComboBox1.ScrollListDataset:=True;
  DBLookupComboBox1.Style:=csDropDownList;
  DBLookupComboBox1.KeyField:='id';
  DBLookupComboBox1.DataField:='id';
  DBLookupComboBox1.ListField:='fullname';    

  end;   

之后我使用以下代码片段提交记录:

procedure TForm3.Button1Click(Sender: TObject);
begin

  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,promoter_id=:code 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.SQLQuery1.Params.ParamByName('code').AsInteger:=DBLookupComboBox1.KeyValue;

  appeals.SQLTransaction1.StartTransaction;
  appeals.SQLQuery1.ExecSQL;
  appeals.SQLTransaction1.Commit;
  Application.MessageBox('Record submission with success !', 'Information', MB_ICONINFORMATION);                               

 end;

我还在 Form Create 事件中附加了以下脚本,但没有 wiki article 的任何运气。

If (DBLookupComboBox1.KeyValue = Null) And (appeals.SQLQuery4.RecordCount > 0) Then
    DBLookupComboBox1.KeyValue := appeals.SQLQuery4.FieldByName('id').AsVariant;

关于 DBLookupComboBox1.KeyValue 出现以下错误的任何想法都会对我有很大帮助!

我想通过从另一个 table、两个日期时间选择器和编辑控件加载数据的 DBLookupCombobox(外键)更新 table 的字段。

此致

我刚刚发现在 appeals.SQLTransaction1.Active:=false 之前,我必须将 DBLookupComboBox1.KeyValue 存储到一个局部变量中,因为之后数据库连接丢失,因此 DBLookupComboBox1.KeyValue 没有任何值,但是 NULL .

因此我必须在我的 SQL 查询中使用该局部变量来更新相应的记录。

下次要小心点!