你把Query的语句改一下,象这样:Select * from table1改为Select *,space(20) as mycol from table1,在DBGrid中连上mycol的字段就可以随便改。
当然不能改,你改的值没有地方可以保存,你说能能不能改! 也就是说你一POST就铁定会报错!
对了,你的sql语句里边至少要有你想修改的字段名! 如果你连这都没有,添加一列有什么意义?
TO lastlove() : 我的新增字段的属性就是按照你最开始说的那样摄制的。但是在Query里动态增加字段之后,在Query Open的时候数据库提示该列没有找到! TO xjb2001(痴墨): 那么你说我该怎么办?给个建议好吗?谢谢。
var fld: TStringField; begin fld:= TStringField.Create(Self); fld.FieldKind:=fkdata; fld.FieldName := 'test'; fld.Name := 'test' fld.DataSet := Qry; with dbgrd.Columns.Add do begin FieldName:='test'; title.caption:='test' end; end;
你用的是什么数据库,如果你用的是SQLServer数据库,我给你的代码可行呀!
TO forgot2000(忘记2000年) : 我使用的确实是SQL Server 2000,但是我按照你的方法作了之后,运行时提示:Invalid use of keyword.Token:,0。 我的query是cachedupdates模式,即CachedUpdates:=true 并且RequestLive:=true。所以才出现上面的情况。
也就是说你一POST就铁定会报错!
如果你连这都没有,添加一列有什么意义?
我的新增字段的属性就是按照你最开始说的那样摄制的。但是在Query里动态增加字段之后,在Query Open的时候数据库提示该列没有找到!
TO xjb2001(痴墨):
那么你说我该怎么办?给个建议好吗?谢谢。
begin
fld:= TStringField.Create(Self);
fld.FieldKind:=fkdata;
fld.FieldName := 'test';
fld.Name := 'test'
fld.DataSet := Qry;
with dbgrd.Columns.Add do
begin
FieldName:='test';
title.caption:='test'
end;
end;
我使用的确实是SQL Server 2000,但是我按照你的方法作了之后,运行时提示:Invalid use of keyword.Token:,0。
我的query是cachedupdates模式,即CachedUpdates:=true 并且RequestLive:=true。所以才出现上面的情况。
在程序开始或者你需要的地方动态创建创建一个本地表,该表包含所有你需要的列,然后把你检索到的数据逐行填写道该表中(也就显示出来了),操作完毕后根据需要再保存到自己的数据表中,Free动态创建的本地表。
语句就不写了,太长了。
该方法速度可能会比较慢,多了一道工序,如果你的机子比较快,数据量不大,该方法很容易实现。
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, Grids, DBGrids, DBTables;type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
Table1a: TIntegerField;
Table1b: TIntegerField;
Table1c: TIntegerField;
Table1f: TIntegerField;
procedure Table1CalcFields(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
table1f.value:=table1a.value+table1b.value+table1c.Value; {计算字段f的值}
end;end. 简单吧!!!
[email protected]