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 查询中使用该局部变量来更新相应的记录。
下次要小心点!
我一直在使用 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 查询中使用该局部变量来更新相应的记录。
下次要小心点!