dos的数据,能否先转换成文本文件?如果可以的话,先转换成文本文件,然后用SQL的导入/导出向导就可以导入数据了.

解决方案 »

  1.   

    to: zjcxc(邹建)
       補充說明一下,這個導出不是做了一次就完了,以後不時還會用到,比如我公司某操作員阿蘭在舊的dos程序中錄入客戶訂單: cpo.dbf, 而阿純在新系統中錄入生產工程單,生產工程單需要調用客戶訂單的數據,因此每天都要從cpo.dbf中導入新的資料添加到新系統中的sqlserver表cpo中.dos的数据,可以先转换成文本文件,不過需要額外做個轉換小程序,如用vfp等, 似乎有點麻煩.SQL的导入/导出向导本身就可以直接從clipper表導入,但也需要作額外的人工干預,而且是新產生一個表,而不是添加到一個存在的表中.
        我是想可不可以在delphi中用ado控件adocommand通過sql命令如此之類的方式來實現,將那些步驟寫入到程序中,這樣導入資料的工作就交給了操作員自己來做了,既省心又方便.
      

  2.   

    .dbf
    可以直接导入到SQL SERVER
      

  3.   

    用dbf数据库,那就可以直接导了,自己写语句导也可以.
      

  4.   

    --不知道你的dbf是那一种--/* dBase IV文件
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'dBase IV;DATABASE=C:\' --c:\是目录
    ,'select * from [客户资料4.dbf]') --客户资料4.dbf是文件名
    --*/--/* dBase III文件
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'dBase III;DATABASE=C:\'
    ,'select * from [客户资料3.dbf]')
    --*/--/* FoxPro 数据库
    select * from openrowset('MSDASQL',
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', --c:\是目录
    'select * from [aa.DBF]') --aa.dbf是文件名/*--说明:SourceDB=c:\    c:\是dbf文件的存放目录
    [aa.DBF]        是dbf文件名
    --*/
      

  5.   

    clipper针对dBASE各版本推出的关系数据库管理系统,不知道你是使用dBASE的哪个版本.
    1.如果是dBase IV
    登录sqlserver的查询分析器,执行下面的代码(以c:\cpo.dbf为例):
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
               ,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\'
               ,'select * from cpo.dbf')
    2.如果是dBase III
    登录sqlserver的查询分析器,执行下面的代码(以c:\cpo.dbf为例):
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
               ,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\'
               ,'select * from cpo.dbf')
      

  6.   

    樓上兩位一定要救救我了:我的dbf肯定不是vfp的表,我分別用了dBase III,dBase IV的驅動方式,都出錯如下:select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase III;DATABASE=C:\','select * from cpo.dbf')伺服器: 訊息 7357,層級 16,狀態 2,行 1
    Could not process object 'select * from cpo.dbf'. The OLE DB provider 'MICROSOFT.JET.OLEDB.4.0' indicates that the object has no columns.select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV; DATABASE=C:\','select * from cpo.dbf')伺服器: 訊息 7357,層級 16,狀態 2,行 1
    Could not process object 'select * from cpo.dbf'. The OLE DB provider 'MICROSOFT.JET.OLEDB.4.0' indicates that the object has no columns.我用了 laughsmile(海边的星空) 的方法加了HDR=NO;IMEX=2也是一樣.我抱著試試看的心態,也用了VFP的驅動方式:
    select * from openrowset('MSDASQL','Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 'select * from CPO.DBF')伺服器: 訊息 7399,層級 16,狀態 1,行 1
    OLE DB provider 'MSDASQL' reported an error. The provider did not give any information about the error.
      

  7.   

    发个文件过来看看:[email protected]
    如果可以的话.
      

  8.   

    to: zjcxc(邹建) :
    我看了csdn上的資料,從你給另一個帖子的回覆上知道: 被查詢的表在sql上需要是sqlserver機器上的表,而不是本地表,所以我改了一下路徑,是可以查詢了,但出現了如下錯誤;
    select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV;DATABASE=f:\program\hgq\tmpcpo\','select * from cpo.dbf order by inter')伺服器: 訊息 8114,層級 16,狀態 9,行 1
    Error converting data type DBTYPE_DATE to datetime.   我查了一下原表,是操作員在錄入日期時,將2000/01/31錄入成了0200/01/31,這已經超出了sqlserver的datetime字段規定的日期範圍,所以出錯.
       但是cpo.dbf這個表很大,有6萬多條記錄,日期字段有好幾個,請問邹建先生,可不可以讓命令凡是找到不符合規定的日期自動設為NULL值,或其他辦法也可?
      

  9.   

    我先將不規範的記錄找出來修改後,再執行;
    insert into cpo_bak select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','dBase IV;DATABASE=f:\program\hgq\tmpcpo\','select * from cpo.dbf order by inter')
    終於大攻告成,真是要好好謝謝邹建先生了.