使用BatchMove可将一个表中的数据导入Microsoft Text Driver (*.txt; *类型的表中去

解决方案 »

  1.   

    to crob:
    BatchMove要求有概要文件(.sch),我觉得很烦,也不及会用。不想用BDE,有没有更好的方法实现?比如函数?多谢!
      

  2.   

    Crob的方法好,写函数可以,select后用AsString转换后保存;用AsInteger...反转换后insert回去。但我没试过。
      

  3.   

    你是否考可以虑用sql server中的存储过程或函数把数据记录输出到文本文件在传输过来。
      

  4.   

    存储过程里如何写文本文件呢?在BatchMove里怎么样定义字段分隔符啊?请教!在PB里似乎好实现一些,以前我没用DELPHI做过,我想应该会有现成的函数或方法的。
      

  5.   

    用Bcp命令,不过他一次只能导出一个表,写一个.bat文件导出所有的表,在Delphi中调用(WinExec)只能导出数据。
    用ADOTable的SaveToFile,保存为.xml,恢复时用LoadFromFile,然后Post
      

  6.   

    bcp命令格式可以参考SQLServer的帮助
      

  7.   

    方法1、用ClientDataSet.SaveToFile和ClientDataSet.LoadFromFile
    一种存储格式是Binary,一种是XML(虽然不是.txt,应该是明码吧)方法2、用T-SQL实现,不过麻烦些。
          1) 生成表 这个到SQL Server里找个表Gernerate SQL Script,照着写就行了。
             比如说 
             var
                sl : TStringList;
             try
                sl := TStringList.Create;
                sl.Add('');//这里加上如果表存在,就删除,然后生成表这类的SQL 
                for i := 0 to DataSet.FieldCount - 1 do begin
                   Case DataSet.Fields[i].DataType of
                      ftInteger : sl.Add('');// 找到field的类型及大小 
                      ftString  : sl.Add('');
                      .....  
                   end;        
                end;
            2)先Delete from tablename, 
              再用Insert tablename(field1,field2...) values(value1,value2....)
            while not DataSet.Eof do begin
               for i := 0 to DataSet.FieldCount - 1 do begin
                  Case DataSet.Fields[i].DataType of
                     ......//这里根据不同的数据类型加入field1...,value1....
                           //ftString类型当中如果有单引号,要替换成双引号
                  end;
               end;  
               DataSet.Next;
            end;
          3)sl.SaveToFile('.sql');
          4)恢复的时候,用个Query什么的ExecSQL
      

  8.   

    我认为用BatchMove等并非合理,你可以用Tstream自己写一个数据库数据保存文本文件。
      

  9.   

    能否将客户端数据存储成以xml格式的文本呢?
    delphi好像可以实现这一点