我使用adodataset 动态创建表,并插入一条数据,用savetofile保存为adtg格式的文件,代码如下
var
 ADODSET:TADODataSet; 
 sno:string;
 ...  ADODSET := TADODataSet.Create(Self);
  ADODSET.CommandType := cmdFile;
  adodset.commandtext :='sys.adtg';
  ADODSET.Close;
  ADODSET.FieldDefs.Clear;
  ADODSET.FieldDefs.Add('id', ftString,10,True);
  ADODSET.FieldDefs.Add('UserName', ftString,50,True);
  ADODSET.FieldDefs.Add('PassWord', ftString,50,true);
  ADODSET.FieldDefs.Add('LTD', ftString,10,True);
  ADODSET.FieldDefs.Add('sno', ftString,200,true);
  adodset.CreateDataSet;  sno := '1111111' ;
  adodset.Append;
  adodset.FieldByName('UserName').AsString := cxTextEdit1.text;
  adodset.FieldByName('PassWord').AsString := transfer(cxTextEdit3.text);
  adodset.FieldByName('LTD').AsString := '0';
  if cxComboBox1.ItemIndex = 1 then
    adodset.FieldByName('LTD').AsString := '1';
  adodset.FieldByName('sno').AsString := sno;
  adodset.Post;
  adodset.SaveToFile(filename,pfADTG);为什么到了“adodset.SaveToFile(filename,pfADTG);”出错?
错误信息:OLE error 80030050

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, DB, ADODB,DBClient, Grids, DBGrids;type
      TForm1 = class(TForm)
        BitBtn1: TBitBtn;
        ADODataSet1: TADODataSet;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        procedure BitBtn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
    var ADataSet:TDataSet;
      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;
    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;
        DataSet.Append;
        DataSet.FieldByName( 'Name' ).AsString:='111';
        DataSet.FieldByName( 'Value' ).AsInteger:=1;
        DataSet.Post;
        TClientDataSet(DataSet).SaveToFile( 'c:\123.txt' );
      end;
      ADataSet.Free;
    end;end.