Delphi中FireDAC实现新增、更新、删除记录的方法求助
嘿,我来帮你搞定Delphi里FireDAC配合TDBGrid的增删改功能!看你已经搞定了下拉框加载和多表查询,剩下这三个功能其实也不难,给你直接上可用的代码,记得根据你实际的塞尔维亚语表结构替换字段名哦:
新增记录功能
这个功能会向protocols表插入一条新记录,关联你已有的Department下拉框值:
procedure TForm1.btnAddClick(Sender: TObject); begin try // 让查询进入新增编辑状态 FDQueryProtocols.Append; // 替换成你实际的列名,这里用测试名示例 FDQueryProtocols.FieldByName('Department').AsString := cbbDepartment.Text; FDQueryProtocols.FieldByName('ProtocolNumber').AsString := edtProtocolNumber.Text; FDQueryProtocols.FieldByName('CreateDate').AsDateTime := Now; // 提交新增到数据库 FDQueryProtocols.Post; // 刷新表格显示新记录 FDQueryProtocols.Refresh; ShowMessage('记录新增成功!'); except on E: Exception do begin FDQueryProtocols.Cancel; // 出错时取消编辑 ShowMessage('新增失败:' + E.Message); end; end; end;
更新记录功能
先确保TDBGrid选中了要修改的记录,然后更新对应字段:
procedure TForm1.btnUpdateClick(Sender: TObject); begin // 检查是否有选中的记录 if FDQueryProtocols.Active and not FDQueryProtocols.IsEmpty then try // 进入编辑模式 FDQueryProtocols.Edit; // 更新字段值,替换为你的实际列名 FDQueryProtocols.FieldByName('Department').AsString := cbbDepartment.Text; FDQueryProtocols.FieldByName('ProtocolNumber').AsString := edtProtocolNumber.Text; FDQueryProtocols.FieldByName('UpdateDate').AsDateTime := Now; // 提交更新 FDQueryProtocols.Post; FDQueryProtocols.Refresh; ShowMessage('记录更新成功!'); except on E: Exception do begin FDQueryProtocols.Cancel; ShowMessage('更新失败:' + E.Message); end; end else ShowMessage('请先选中一条要更新的记录!'); end;
删除记录功能
删除前加个确认对话框,避免误删操作:
procedure TForm1.btnDeleteClick(Sender: TObject); begin if FDQueryProtocols.Active and not FDQueryProtocols.IsEmpty then begin if MessageDlg('确定要删除这条记录吗?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then try FDQueryProtocols.Delete; // 如果开启了缓存更新,需要提交到数据库 if FDQueryProtocols.CachedUpdates then FDQueryProtocols.ApplyUpdates(0); FDQueryProtocols.Refresh; ShowMessage('记录删除成功!'); except on E: Exception do ShowMessage('删除失败:' + E.Message); end; end else ShowMessage('请先选中一条要删除的记录!'); end;
几个关键注意事项:
- 确保你的
TFDConnection已经正确配置并成功连接到数据库 - 如果你的查询开启了CachedUpdates(缓存更新),增删改之后一定要调用
FDQueryProtocols.ApplyUpdates(0)把更改提交到数据库,之后可以用FDQueryProtocols.CommitUpdates清除缓存 - 所有代码里的字段名(比如
Department、ProtocolNumber)记得替换成你实际的塞尔维亚语表结构列名 - TDBGrid必须关联到
TDataSource,且DataSource的DataSet属性要设置为你的FDQueryProtocols查询组件
内容的提问来源于stack exchange,提问作者user9784250




