dbgrid中如何加一个自增字段? ( 积分: 100 )

  • 主题发起人 主题发起人 kaideng
  • 开始时间 开始时间
K

kaideng

Unregistered / Unconfirmed
GUEST, unregistred user!
目标:在dbgrid显示检索数据时,动态增加一个自增字段在dbgrid中标记记录号
进展:看了坛子里的很多文章,大体知道应该动态创建一个计算字段实现(别说在数据库设计时增加自增字段,不现实),我用的是adoquery和dbgrid的组合。
问题:计算字段能创建并显示自增,但其他字段都不显示了,例如Sql:='select * from A',运行后dbgrid只显示一个'No'字段(No是我创建的自增字段)。
代码:
...
createfile;//创建计算函数
ADOQuery3.SQL.Add(ssql);
ADOQuery3.ExecSQL;
ADOQuery3.open;
...

procedure createfile;//建計算字段的過程
Var HHH : TStringField ;
begin
HHH:=TStringField.Create(nil);
 HHH.FieldName := 'No' ;
 HHH.Size := 2 ;
 HHH.Calculated := true ;
 HHH.dataset := AdoQuery3 ;
end;

procedure TForm1.ADOQuery3CalcFields(DataSet: TDataSet);
begin
ADOQuery3.FieldByName('No').AsInteger:=autoNo;
inc(autoNo);//autoNo是全局变量,控制自增
end;

结语:各位大侠,我错在什么地方了?真的很着急,希望各位赐教
 
目标:在dbgrid显示检索数据时,动态增加一个自增字段在dbgrid中标记记录号
进展:看了坛子里的很多文章,大体知道应该动态创建一个计算字段实现(别说在数据库设计时增加自增字段,不现实),我用的是adoquery和dbgrid的组合。
问题:计算字段能创建并显示自增,但其他字段都不显示了,例如Sql:='select * from A',运行后dbgrid只显示一个'No'字段(No是我创建的自增字段)。
代码:
...
createfile;//创建计算函数
ADOQuery3.SQL.Add(ssql);
ADOQuery3.ExecSQL;
ADOQuery3.open;
...

procedure createfile;//建計算字段的過程
Var HHH : TStringField ;
begin
HHH:=TStringField.Create(nil);
 HHH.FieldName := 'No' ;
 HHH.Size := 2 ;
 HHH.Calculated := true ;
 HHH.dataset := AdoQuery3 ;
end;

procedure TForm1.ADOQuery3CalcFields(DataSet: TDataSet);
begin
ADOQuery3.FieldByName('No').AsInteger:=autoNo;
inc(autoNo);//autoNo是全局变量,控制自增
end;

结语:各位大侠,我错在什么地方了?真的很着急,希望各位赐教
 
大家帮帮忙啊。谢了先
 
ADOQuery3.FieldByName('No').AsInteger:=autoNo; // 错误
自动增量字段不能修改或赋值,否则将产生错误.
 
自动增量字段不能修改或赋值,否则将产生错误
关注中、、、、、、、、
 
......可以付值啊,我的程序没抱错,就是其他字段都不显示
我程序的dbgrid显示
no
1
2
3
4
...
就一列
 
你建立的'No'字段类型是不是自动增量,我从你程序看你没没有设置字段类型,但这不是重要问题,你更改数据字段值后,在要显示数据的代码中加
adoconnection.Close
adoconnection1.Open
试下.
 
AdoQuery中显示的字段如果没有默认字段。所有字段将显示的Dbgrid中,否则显示在AdoQuery中显示指定的字段数目。 以目前这种情况来看。这个过程 procedure createfile;//建計算字段的過程 加了一个计算字段在AdoQuery中的字段中。

也就是说已经存在一个默认的字段了,那么其余的当然就无法显示了。你应该将所有的字段加入AdoQuery的显示字段中。
 
to:boylafong
试了,好像不管用
to:fzzf
我和你有同感,哈哈,但select * from...在没open的时候还不知道所有field的name,open了又不能在追加field了,难道要开另一个query统计field的name?,我觉得有点傻,也影响速度
 
后退
顶部