我实现把数据保存为XML文件  先用ADOQUERY查询,然后保存
  form1.ClientDataSet1.SaveToFile('e:\hhhh.xml',dfxml);已经成功,
 但是如何导入呢反过来把刚才生成的XML导入数据库怎么实现呢 ?????????  form1.ClientDataSet1.LoadFromFile('e:\hhhh.xml');
 现在已经把数据导入到ClientDataSet里面 但是如何实现从ClientDataSet到SQL数据库对应的表呢?还需要用什么控件呢

解决方案 »

  1.   

    晕倒..你在装载后更新就行了.如下: 
    form1.ClientDataSet1.LoadFromFile('e:\hhhh.xml');
    form1.ClientDataSet1.ApplyUpdates(0);
      

  2.   

    //当然如果要将数据直接插入到SQL数据库中,你可以使用我写的一个函数,如下:
    procedure GetInsertSQL(CDS:TClientDataSet;TableName:String;SQLS:TStrings);
      function GetFieldValueStr(Field:TField):String;
      begin
        case Field.DataType of
          ftFMTBcd,ftBCD,ftFloat,ftInteger,ftSmallInt,ftBytes:Result:=Field.AsString;
          ftBoolean:if Field.AsString='True' then Result:='1' else Result:='0';
          else Result:=''''+Field.AsString+'''';
        end;
      end;
    var
      fi:Integer;
      Names:String;
      Values:String;
    begin
      SQLS.Clear;
      with CDS do
      begin
        MergeChangeLog;
        First;
        while Not Eof do
        begin
          Names :='';
          Values:='';
          for fi:=0 to Fields.Count-1 do
          begin
            if Fields[fi].AsString<>'' then
            begin
              Names:=Fields[fi].FieldName;
              Values:=GetFieldValueStr(Fields[fi]);
              Break;
            end;
          end;
          for fi:=fi+1 to Fields.Count-1 do
          begin
            if Fields[fi].AsString<>'' then
            begin
              Names:=Format('%s,%s',[Names,Fields[fi].FieldName]);
              Values:=Format('%s,%s',[Values,GetFieldValueStr(Fields[fi])]);;
            end;
          end;
          if (Names<>'') and (Values<>'') then
          SQLS.Add(Format('insert into %s(%s)values(%s)',[TableName,Names,Values]));
        end;
      end;
    end;
    //使用方法如下
    GetInsertSQL(CDS,TableName,SQLS);
    ADOQuery1.Close;
    for i:=0 to SQLS.Count-1 do
    begin
      ADOQuery1.SQL.Text:=SQLS[i];
      ADOQuery1.Execute;
    end;
      

  3.   

    //注释一下
    GetInsertSQL(CDS,TableName,SQLS);//通过一个TClientDataSet和表名获得其插入SQL语句序列
    ADOQuery1.Close;
    for i:=0 to SQLS.Count-1 do//分别执行这个SQL序列
    begin
    ADOQuery1.SQL.Text:=SQLS[i];
    ADOQuery1.ExeSQL;
    end;
      

  4.   

    delphi有处理xml的控件呀,为什么不用呢。xmldocument
    挺好用的。
      

  5.   

    form1.ClientDataSet1.Open;
    form1.ClientDataSet1.LoadFromFile('d:\aa.xml'); 
    form1.ClientDataSet1.ApplyUpdates(0);
     这样为什么不可以呢?
     还有什么简单办法吗 目的就是把XML文件导入SQL数据库
      

  6.   


    ClientDataSet1.LoadFromFile('d:\aa.xml');
    showmessage(form1.ClientDataSet1.XMLData);//有数据,也就是XML文件的内容已经加载到ClientDataSet1,但是下面的ApplyUpdates好像没有起作用,没有数据库表还是没有数据?
     try
       ClientDataSet1.ApplyUpdates(0);
      except 
      end;
      

  7.   

    clientdataset1.ApplyUpdates(0);
    这个只是对于更改原数据库记来说的,我试了,可以更新
      

  8.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB, Provider, DBClient, Grids, DBGrids;type
      TForm1 = class(TForm)
        ClientDataSet1: TClientDataSet;
        DataSetProvider1: TDataSetProvider;
        ADOQuery1: TADOQuery;
        ADOConnection1: TADOConnection;
        Button1: TButton;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Button2: TButton;
        Button3: TButton;
        ADOQuery1serviceid: TIntegerField;
        ADOQuery1servicename: TStringField;
        ADOQuery1Class: TStringField;
        ADOQuery1powerblockname: TStringField;
        ADOQuery1Proc_Code: TStringField;
        ADOQuery1keynum: TStringField;
        ADOQuery1deleted_flag: TStringField;
        ADOQuery1comment: TStringField;
        ADOQuery1TransShow: TIntegerField;
        ClientDataSet1serviceid: TIntegerField;
        ClientDataSet1servicename: TStringField;
        ClientDataSet1Class: TStringField;
        ClientDataSet1powerblockname: TStringField;
        ClientDataSet1Proc_Code: TStringField;
        ClientDataSet1keynum: TStringField;
        ClientDataSet1deleted_flag: TStringField;
        ClientDataSet1comment: TStringField;
        ClientDataSet1TransShow: TIntegerField;
        DBGrid2: TDBGrid;
        DataSource2: TDataSource;
        ADOTable1: TADOTable;    procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    form1.ADOConnection1.Connected:=true;
    form1.ADOQuery1.Active:=true;
    form1.ADOTable2.Active:=true;
    form1.ClientDataSet1.Active:=true;
    form1.ADOTable1.Active:=true;
      try
      form1.ClientDataSet1.Open ;
      except
      end;
      ClientDataSet1.LoadFromFile('d:\aa.xml');
      showmessage(form1.ClientDataSet1.XMLData);
      ClientDataSet1.CheckBrowseMode();
      try
       ClientDataSet1.ApplyUpdates(0);
      except
      end;end;
    end.可是我得真的不行 呀大哥 小弟试了很多次了 请赐教
      

  9.   

    //在装载文件之前不要,ClientDataSet需要是关闭的。
    unit Unit1;interfaceuses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, DB, ADODB, Provider, DBClient, Grids, DBGrids;type
    TForm1 = class(TForm)
    ClientDataSet1: TClientDataSet;
    DataSetProvider1: TDataSetProvider;
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
    Button1: TButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Button2: TButton;
    Button3: TButton;
    ADOQuery1serviceid: TIntegerField;
    ADOQuery1servicename: TStringField;
    ADOQuery1Class: TStringField;
    ADOQuery1powerblockname: TStringField;
    ADOQuery1Proc_Code: TStringField;
    ADOQuery1keynum: TStringField;
    ADOQuery1deleted_flag: TStringField;
    ADOQuery1comment: TStringField;
    ADOQuery1TransShow: TIntegerField;
    ClientDataSet1serviceid: TIntegerField;
    ClientDataSet1servicename: TStringField;
    ClientDataSet1Class: TStringField;
    ClientDataSet1powerblockname: TStringField;
    ClientDataSet1Proc_Code: TStringField;
    ClientDataSet1keynum: TStringField;
    ClientDataSet1deleted_flag: TStringField;
    ClientDataSet1comment: TStringField;
    ClientDataSet1TransShow: TIntegerField;
    DBGrid2: TDBGrid;
    DataSource2: TDataSource;
    ADOTable1: TADOTable;procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;var
    Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    form1.ADOConnection1.Connected:=true;
    form1.ADOQuery1.Active:=true;
    form1.ADOTable2.Active:=true;
    form1.ADOTable1.Active:=true;
    ClientDataSet1.Active:=False;
    ClientDataSet1.LoadFromFile('d:\aa.xml');
    showmessage(form1.ClientDataSet1.XMLData);
    ClientDataSet1.CheckBrowseMode();
    try
    ClientDataSet1.ApplyUpdates(0);
    except
    end;end;
    end.