Delphi 从dbgrid中选择字段

Delphi 从dbgrid中选择字段,delphi,delphi-7,dbgrid,tadotable,Delphi,Delphi 7,Dbgrid,Tadotable,我有一个链接到DataSource(链接到TaToTable)的DBGrid。所有这些都通过一个TADOConnection并连接到一个MS Access 网格包含各种值,我希望在单击特定字段时对其进行编辑。 我在更新普通文本字段时没有遇到任何困难,但是我无法编辑包含OLE对象的字段 我想做的是,当我单击一个字段时,我想打开一个打开的对话框,让我选择一个文件。之后,我选择的文件必须更新到我选择的行的字段 我该怎么做呢?我自己想出来了。将其张贴在此处,以便其他人能够受益。我刚转到我的DBGrid,

我有一个链接到DataSource(链接到TaToTable)的DBGrid。所有这些都通过一个TADOConnection并连接到一个MS Access

网格包含各种值,我希望在单击特定字段时对其进行编辑。 我在更新普通文本字段时没有遇到任何困难,但是我无法编辑包含OLE对象的字段

我想做的是,当我单击一个字段时,我想打开一个打开的对话框,让我选择一个文件。之后,我选择的文件必须更新到我选择的行的字段


我该怎么做呢?

我自己想出来了。将其张贴在此处,以便其他人能够受益。我刚转到我的DBGrid,在对象检查器中的“事件”下,我选择了OnCellClick:

procedure TfrmOne.dbgOneCellClick(Column: TColumn);
begin
var
  line : integer;
begin
  line := DataSource1.DataSet.FieldValues['ID'];
如您所见,第行获取所选行的字段值,在本例中为ID。每行都有其唯一的ID(主键),链接/来自数据库。使用这个主键,我做了一个简单的IF语句:

tblOne.Close;
tblOne.Open;
tblOne.First
while not tblOne.Eof do
if tblOne['ID'] = line then
begin
 if OpenDialog1.Execute then
  {*Insert Code here*}
 Exit;
end else
 tblOne.Next;
end;
基本上,在第二段代码中,ID与当前表行匹配。如果不匹配,数据库将移动一行,直到最终匹配为止。从这里可以专门处理该行(如最初在DBGrid中看到/选择的)和更新字段(OLE对象)


这不是Append或Edit命令的替代,它只允许用户执行opendialog,然后将这些文件保存到DBGrid中的选定字段。请注意,要将照片添加到数据库(jpeg),您需要BlobStream等。可以在此处找到完整的指南:

DevExpress QuantumGrid具有此功能和更多功能。谢谢,但是有没有办法在不使用非标准组件的情况下实现此功能?您可能需要尝试网格的columns属性。在这里,您可以将列定义为具有省略号按钮,然后可以处理事件。。。这可能会提供您正在寻找的功能类型。您可以在表单中放置一个按钮并打开对话框。使按钮不可见。调整网格单元格中按钮的大小和位置。使按钮在退出时不可见。在按钮的onclick事件中,执行opendialog,获取文件名,将dbgrid置于编辑状态,并使用所选文件更新字段。关于()如何将varius组件添加到dbgrid的一些教程。通过上述修改,您可以实现您想要的。