如何在DBGrid中显示与数据库中的值不同的值?

时间:2016-04-10 19:47:26

标签: database delphi dbgrid

问题

enter image description here

我有download: counter++ <check-download project>/mvn generate-resources if error and counter < maxRetryCount goto download if not error <your project>/mvn ... else display appropriate error message ,并且有一些列显示来自MS Access数据库的DBGdrid。如何将它们更改为ID's等实际值?

我有代码(测试代码,我只是试图从表中获取所有项目名称,我可以将它们保存到数组或变量,并使用显示id的item name, client name, employee name值更改),但我不知道如何更改DBGrid值字段。

DBGrid

也许您对如何解决问题有任何建议,我将不胜感激。

在MS Access中,我已经查找显示名称there,有没有办法在procedure TForm2.Button1Click(Sender: TObject); var i,j:integer; mas:string; begin Button1.Enabled := false; Button2.Enabled := true; Button3.Enabled := true; Form1.ADOQuery1.SQL.Text := 'SELECT * FROM items_specification'; Form1.ADOQuery1.Open; j:= Form1.ADOQuery1.RecordCount; Form1.ADOQuery1.Close; i:=1; repeat Form1.ADOQuery1.SQL.Text := 'SELECT * FROM items_specification WHERE item_id = :ID'; Form1.ADOQuery1.Parameters.ParamByName('ID').Value := i; Form1.ADOQuery1.Open; mas:= Form1.ADOQuery1['item_name']; Form1.ADOQuery1.Close; inc(i); ShowMessage(mas) ; until (i = j+1); 中执行此操作?

已更新

但代码并不重要..我的重要问题是如何在DBGrid中设置项目名称,客户名称和员工姓名(在值不是列标题中)?!在MS Access中那些id为number的字段,所以如果我甚至编辑DBGrid它不允许我将值更改为字符串..只有我能想象的方法是破坏MS Access中的关系并更改字段到DBGrid,但我认为这不是最好的方法。

1 个答案:

答案 0 :(得分:4)

要在DBGrid单元格中显示数据库中实际不存在的值,您可以添加calculated field

双击源:ADOQuery1并将所需的所有字段添加到可用字段列表中。然后添加一个新字段 (我已将其他字段留空,因为我很懒,但您应该确保添加要列出的数据库中的所有字段)

enter image description here

您可以根据需要设置属性(不要忘记对话框中间的单选按钮)。

在您的表单中,将添加一个与您在Name(带有数据集名称前缀)中提供的名称相匹配的新字段。
然后双击数据集的OnCalcFields事件(ADOQuery1)并插入代码以填充计算字段,例如:

procedure TForm44.ADOQuery1CalcFields(DataSet: TDataSet);
begin
  ADOQuery1ExampleCalc1.AsString:= 'Prefix:'+DataSet.FieldByName('Field1').AsString;
  ADOQuery1ExampleCalc2.AsInteger:= DataSet.FieldByName('Amount').AsInteger+100;
end;

注意
如果显示多行,您会发现它可能显示缓慢。在这种情况下,将FieldByName替换为实际的字段引用,例如ADOQuery1Field1
FieldByName每次调用时都会执行查找,从而减慢速度。

注2
您还可以在OnCalcFields事件中组合来自2个数据库表的数据,但请注意,对于显示的每一行,都会调用一次事件,因此请确保您的查找是快速的。 如果不是,那么更改查询中的SQL语句可能是个更好的主意。

进一步阅读
请参阅此处(如果您想在运行时执行此操作):Adding a calculated field to a Query at run time

以下是官方文档:http://docwiki.embarcadero.com/RADStudio/Seattle/en/Defining_a_Calculated_Field

示例代码:http://docwiki.embarcadero.com/RADStudio/Seattle/en/Programming_a_Calculated_Field