【发布时间】:2015-08-30 18:59:52
【问题描述】:
我知道这个问题可能在我无法开始之前就被问到了。我将我的 SQL 设置为有两个表,但在这种情况下,我只会使用一个名为“Book”的表。它有各种列,但我想使用的列是“WR”、“Customer”、“Contact”、“Model”、“SN”、“Status”、“Tech”、“WDone”和“IN”。
我想在名为edtWR 的编辑框中输入文本,并且我希望按钮btnSearch 搜索“WR”列,直到找到匹配项(所有条目都会不同)。一旦它必须将“客户”、“联系人”、“型号”、“SN”、“状态”写入标签,让我们称它们为lblCustomerlblContactlblModellblSN&lblStatus。
一旦该人确认这是他们想要的“WR”,就必须在编辑框和一份名为edtTech、mmoWDone 和edtIN 的备忘录中输入文本,然后单击btnUpdate。然后应该更新该记录。
我有 3 个名为 dtbOut 的 ADO 连接,这是我的 ADOConnection1,tableOut 这是我的 ADOTable,dataOut 是 ADODataSet。如果有帮助,dataOut 的命令文本是 Select * From Book。
我可以让整个过程在 access 数据库上完美运行,但我几乎没有 SQL 经验,我需要帮助。我会添加Access数据库的代码以备参考。
procedure TFOut.btnSearchClick(Sender: TObject);
begin
dataout.Filter := 'WR = ''' + 'WR ' + edtwr.Text + '''';
dataout.Filtered := True;
dataout.First;
lblcustomer.Caption := 'Customer: ' + dataout.FieldByName('Customer').AsString;
lblcontact.Caption := 'Contact: ' + dataout.FieldByName('Contact').AsString;
lblSN.Caption := 'SN: ' + dataout.FieldByName('SN').AsString;
lblModel.Caption := 'Model: ' + dataout.FieldByName('Model').AsString;
lblstatus.Caption := 'Status: ' + dataout.FieldByName('Status').AsString;
procedure TFOut.btnUpdateClick(Sender: TObject);
begin
dataout.Edit;
dataout.FieldByName('Tech').AsString := edtTech.Text;
dataout.FieldByName('WDone').AsString := mmoWDone.Lines.GetText;
dataout.FieldByName('IN').AsString := edtIN.Text;
dataout.Post;
end
我是否需要表单上的任何其他组件才能在 SQL 中执行此操作,我需要什么以及如何开始。我读了很多东西,看来我需要得到一个ADOQuery1,但是当谈到ADOQuery1.SQL 部分时,我会掉下来。我也尝试过 Access 方式,我可以搜索,但是一旦我尝试更新,我就会收到“用于更新或刷新的键列信息不足”错误,我也不知道如何解决。
如果我需要另外说明问题,请说明如何更改以使其更清楚,如果我需要在整个说明或代码中添加任何内容,请告知我。
【问题讨论】:
-
为什么不使用 TDBEdit、TDBMemo 和 TDBText 等数据感知组件,而不是 TEdit、TMemo 和 TLabel 组件?
-
我没有使用数据感知组件。它只是普通的 TEdit、TMemo 和 TLabels 组件。是什么让您想到它的数据感知组件? @MartynA
-
感谢编辑@marc_s
-
“我没有使用数据感知组件。”我知道,这就是我问你为什么不使用它们的原因,因为它们会自动处理诸如将数据集字段值来回复制到它们的 GUI 表示的事情。通常没有理由在代码中这样做。
-
如果我是你,我会把这个项目放在一边,看看无数在线 Delphi 数据库教程中的任何一个,例如delphi.about.com/od/database/a/databasecourse.htm 了解 DB 感知控件如何为您节省大量编码,并在初学者往往不擅长的地方做正确的事情。顺便说一句,对于初学者来说最有指导意义的 db-aware 组件是 TDBNavigator,因为它有助于可视化 Delphi 的 TDataSet 模型的状态特性,这是 DB-aware 组件的操作所基于的。