使用ADO+SQL开发。有一个数据录入界面。用户一次性可能会录入几十条数据。我不想用户输入就真正地写入数据库。而是想先输入一个临时的地方(临时表???),放在DBGRID里面SHOW给用户看(可以修改),最后总确定再一起写到真正的数据库表中。请问应该如何实现啊?在此谢谢各位大虾了。最好有例子参考。

解决方案 »

  1.   

    adoquery.locktype:=ltBatchOptimistic;procedure Btn_saveDataClick()
    begin
     adoquery1.updatebatch();
    end;
      

  2.   

    对呀!就是要建立临时表啊!先 insert 临时表,在select 临时表,在update 临时表,最后在insert 正式表 就可以了,都是简单的增、删、查、改操作嘛!应该不难吧!!
      

  3.   

    插入临时表:
     with dm1.ADOQ1 do begin
           close;
           sql.Clear;
           sql.Add('insert  into  临时表(字段1,字段2) values(值1,值2)');
           execsql;
         end;  所有的插入、修改、删除都用这个格式,只是把sql 换一下就行了查询临时表:  
      with ADOQ1 do begin
           close;
           sql.Clear;
           sql.Add('select * from 临时表');
           open;
      end;所有的查询都用这种格式。

    ADOQ1.FieldByName('字段1');
    获得查询出来的该字段的值
      

  4.   

    创建临时表,用的时候在调用,代码如下:
    //创建临时表
    procedure CreateTemporaryTable;
    var
      ADataSet:TDataSet;
    begin
      ADataSet:=TDataSet.Create(Self);
      with ADataSet.FieldDefs do
        begin
          Add(′Name′,ftString,30,False);
          Add(′Value′,ftInteger,0,False);
        end;
      with DataSource1 do
        begin
          DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
          DataSet.Open;
        end;
      ADataSet.Free;
    end;//创建临时表函数
    function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;
    var
     TempTable:TClientDataSet;
    begin
      TempTable:=nil;
      Result:=nil;
      if AFieldDefs<>nil then
      begin
        try
          TempTable:=TClientDataSet.Create(Application);
          TempTable.FieldDefs.Assign(AFieldDefs);
          TempTable.CreateDataSet;
          Result:=(TempTable as TDataSet);
        Except
          if TempTable<>nil then
          TempTable.Free;
          Result:=nil;
        raise;
        end;
      end;
    end;//***********************************************************/
      

  5.   

    可以用clientDataSet做个内存表
      

  6.   

    我的主表是MaintainInfor,字段分别如下
    [InforID] [int] IDENTITY (1, 1) NOT NULL ,
    [MobileType] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [SN] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [MalCode] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
    [whereIs] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [Analyst] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [State] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,
    [InforDT] [datetime] NULL ,
    [Number] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ===================================================================
    我想用户输入数据。一次可能是20条一批输入。在这批提交前能在一个DBGRID看到。如果有错误能修改。最后再全部提交到真正的MaintainInfor表中。请问是用临时表好么???
      

  7.   

    已经有点眉目了。等代码完成了就贴上来共享或者留下E-mail我发你。顺便问下。好比
    select * from tablenumber可以写成存储过程么?实质就是表名可以用参数传递么?
    create procedure selecttable
    as  @tablename
    select * from @tablename