这是我数据库数据:下面是我绑定出来的数据:
下面是代码:
function NewDataSet(dt:TDataSet):TDataSet; {重新构造DataSet}
var mydt:TDataSet;
cdt:TClientDataSet;
i:Integer; a:Integer;
def:TFieldDef; cc:Integer;
begin
if(dt<>nil)then
begin
cdt:=TClientDataSet.Create(Application);
cdt.FieldDefs.Assign(dt.FieldDefs);
cdt.FieldDefs.Add('ck',ftBoolean);
cdt.CreateDataSet;
mydt:=cdt as TDataSet;
mydt.Open;
with mydt do
begin
dt.Open;
dt.First;
while not dt.Eof do
begin
Append;
for a := 0 to dt.FieldDefs.Count - 1 do
begin
mydt.Fields[a].ReadOnly:=False; //这个很重要,务必加上
mydt.Fields[a].AsString:=dt.Fields[a].Value;
end;
mydt.FieldByName('ck').AsString:='False';
ShowMessage(mydt.FieldByName('mid').Value); //在这个地方弹出的值属于正常,和数据库中的相符
Post;
ShowMessage(mydt.FieldByName('mid').Value); //在这个地方弹出的值就从1开始,中间就只隔了一个提交,为什么它的值会被改变,是怎么改变的,
dt.Next;
end;
end;
Result:=mydt;
end
else
Result:=nil;
end;这个方法是将我从数据库中取出的数据增加一个名为“ck”的列,并为其添加值,但是绑定数据后发现mid的值始终是从一开始,和数据库里的mid的值不相符,百思不得其解!
下面是代码:
function NewDataSet(dt:TDataSet):TDataSet; {重新构造DataSet}
var mydt:TDataSet;
cdt:TClientDataSet;
i:Integer; a:Integer;
def:TFieldDef; cc:Integer;
begin
if(dt<>nil)then
begin
cdt:=TClientDataSet.Create(Application);
cdt.FieldDefs.Assign(dt.FieldDefs);
cdt.FieldDefs.Add('ck',ftBoolean);
cdt.CreateDataSet;
mydt:=cdt as TDataSet;
mydt.Open;
with mydt do
begin
dt.Open;
dt.First;
while not dt.Eof do
begin
Append;
for a := 0 to dt.FieldDefs.Count - 1 do
begin
mydt.Fields[a].ReadOnly:=False; //这个很重要,务必加上
mydt.Fields[a].AsString:=dt.Fields[a].Value;
end;
mydt.FieldByName('ck').AsString:='False';
ShowMessage(mydt.FieldByName('mid').Value); //在这个地方弹出的值属于正常,和数据库中的相符
Post;
ShowMessage(mydt.FieldByName('mid').Value); //在这个地方弹出的值就从1开始,中间就只隔了一个提交,为什么它的值会被改变,是怎么改变的,
dt.Next;
end;
end;
Result:=mydt;
end
else
Result:=nil;
end;这个方法是将我从数据库中取出的数据增加一个名为“ck”的列,并为其添加值,但是绑定数据后发现mid的值始终是从一开始,和数据库里的mid的值不相符,百思不得其解!
这里复制出来的"mid"字段定义就是自增吧?自增字段是不允许赋值的
还想问你一个问题就是,cdt.FieldDefs.Assign(dt.FieldDefs);既然我把他的自增字段mid加载进来了,有没有什么属性来改变mid是否自增?
+1post一次mid就+1。
谢谢你哈。