我想你的id字段是属于自动增加(autoincreasement)的吧,在这种情况下,你可以控制记录转移的过程中不对临时表的id字段记行赋值即可。

解决方案 »

  1.   

    我想你的id字段是increament类型的吧,那么你可以控制赋值过程中不对该字段赋值即可。另外,你这一段代码
    FileNames  :=  StringReplace(Trim(adoQuery1.FieldList.Text),  #13#10,  ';',  [rfReplaceAll]);
    while  not  adoQuery1.Eof  do  begin
    Table1.Append;
    Table1[FileNames]  :=  adoQuery1[FileNames];
    Table1.Post;
    adoQuery1.Next;是否只对一个字段进行操作啊
      

  2.   

    for i:=1 to adoQuery1.recordcount do
    begin
    table1.Append;
    table1.Fields.fields[0]:=adoQuery1.fields.fields[0];
    table1.Fields.fields[1]:=adoQuery1.fields.fields[1];
    table1.Fields.fields[2]:=adoQuery1.fields.fields[2];
    table1.Fields.fields[3]:=adoQuery1.fields.fields[3];
    adoQuery1.Next;
    table1.Post;
    end
    我的程序里table1.Fields.fields[0]就是table1的id字段
      

  3.   

    为什么不用SQL 来生成临时表
    SELECT INTO
      

  4.   

    看一看你临时表是如何生成的?
    它是不是也有一个id?是不是也是自动增加的?//肯定是啊;
    所以不要给id给值就可以了;
      

  5.   

    To: black(小熊) 
    看了您的回复,我把代码改为:
    procedure TForm1.Button6Click(Sender: TObject);
    var
        FileNames:  string;
        i:integer;
    begin
        Table1.Close;
        Table1.FieldDefs.Assign(adoQuery1.FieldDefs);
        Table1.TableName  :=  'NewTable';
        Table1.CreateTable;
        Table1.Open;
        for i:=1 to adoQuery1.recordcount do
    begin
    table1.Append;
    table1.Fields.fields[0]:=adoQuery1.fields.fields[0];
    table1.Fields.fields[1]:=adoQuery1.fields.fields[1];
    table1.Fields.fields[2]:=adoQuery1.fields.fields[2];
    table1.Fields.fields[3]:=adoQuery1.fields.fields[3];
    adoQuery1.Next;
    table1.Post;
    end;
    end;
    但是还是不行呀,错误提示还是field id can't be modified.那个id就是sql server数据库的那个只读的id字段呀!
      

  6.   

    把第一行
    table1.fields.fields[0]:=adoQuery.fields.fields[0]删除后
    再试试
      

  7.   

    这个问题不解决,工作无法进行。
    难道让我辞职吗?
    SOS!
      

  8.   

    black(小熊) :现在可以了!!!!把id字段的
    table1.Fields.fields[3]:=adoQuery1.fields.fields[3];
    删除就可以了哦!!!谢谢小熊!!!过会结帐!!