热情软件屋

 

如何转换ACCESS数据到SQL SERVER


编号:QA002172
建立日期: 1999年12月6日 最后修改日期:1999年12月9日
所属类别:

adan:
    操作系统:Win95/Win98/NT
    编程工具:Visual Basic
    问题:我正用VB编的数据库程序,本地数据库是ACCESS,网络数据库是SQL SERVER。需要定期将新录入和修改过的信息由本地数据库(ACCESS)的信息传到SQL,我不想用ACCESS的导入/导出工具,就用INSERT INTO写了个插入语句,但字符型字段没有问题,但传日期型数据、OLE型数据(照片)时出现“实时错误‘13’。类型不匹配”错误,而我反复检查,两个数据库的结构是完全一致的;还有在数据内容为NULL时会出现“实时错误‘94’。无效使用NULL”错误?
    下面是我的源程序:
    Private Sub mnuDataRyxxUpload_Click()
     If MsgBox("进入上报程序,必须保证已与信息中心网络连通。", vbYesNo, "系统提示") = vbYes Then
     Dim Localdb As Connection
     Dim adoPrimaryRS As Recordset
     Set Localdb = New Connection
     Localdb.CursorLocation = adUseClient
     '网络数据库
     Localdb.Open
    "PROVIDER=MSDASQL;dsn=CInformation;uid=gzxz;pwd=gzxz;database=CInformation;"
     '本机数据库
     'Localdb.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=D:\My
    Program Files\CInformation.mdb;Jet OLEDB:Database
    Password=chendan;"
    
     Set adoPrimaryRS = New Recordset
     '全部数据
     'adoPrimaryRs.Open "select
    Rybh,Zwbh,Xm,Xb,Csrq,Bmch,Mz,Whcd,Sfzh,Ky,Csd,Hjd,Hjzz,Xsd,Xszz,Sf,Gzdw,Zy,Z
    c,Sg,Tx,Lx,Tstz,Tbtsbj,Scjdrq,Scjddwqh,Scjddw,Qkjl,Zmx,Zcx,Xszk,Cfjg,Cljg,Bz
    from Personnel Order by Rybh", db, adOpenStatic, adLockOptimistic
     '本机数据
     adoPrimaryRS.Open "select
    Rybh,Zwbh,Xm,Xb,Csrq,Bmch,Mz,Whcd,Sfzh,Ky,Csd,Hjd,Hjzz,Xsd,Xszz,Sf,Gzdw,Zy,Z
    c,Sg,Tx,Lx,Tstz,Tbtsbj,Scjdrq,Scjddwqh,Scjddw,Qkjl,Zmx,Zcx,Xszk,Cfjg,Cljg,Bz
    from Personnel where Rybh like '" + "R" + Dw + Bm + "%' Order by Rybh",
    Localdb, adOpenStatic, adLockOptimistic
     If adoPrimaryRS.RecordCount = 0 Then
     MsgBox "没有需要上报的数据", vbOKOnly, "系统提示"
     Else
     Dim Netdb As ADODB.Connection
     Dim cmdUpload As ADODB.Command
     Set Netdb = New ADODB.Connection
     '本机数据库
     Netdb.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=D:\My
    Program Files\CInformation.mdb;Jet OLEDB:Database
    Password=chendan;"
     '网络数据库
     'Netdb.Open
    "PROVIDER=MSDASQL;dsn=CInformation;uid=gzxz;pwd=gzxz;database=CInformation;"
     Set cmdUpload = New ADODB.Command
     Set cmdUpload.ActiveConnection = Netdb
     'cmdUpload.CommandType =
     cmdUpload.CommandTimeout = 15
     cmdUpload.Prepared = True
    
     MsgBox "进入上报程序。注意:必须保证网络接通。", vbOKOnly, "系统提示
    "
     Do While Not adoPrimaryRS.EOF
     MsgBox adoPrimaryRS.Fields("Csrq")
     cmdUpload.CommandText = "insert into
    Personnel(Rybh,Zwbh,Xm,Xb,Csrq) values ('" + adoPrimaryRS.Fields("Rybh") +
    "','" + adoPrimaryRS.Fields("Zwbh") + "','" + adoPrimaryRS.Fields("Xm") +
    "','" + adoPrimaryRS.Fields("Xb") + "','" + adoPrimaryRS.Fields("Csrq") +
    "')"
     MsgBox cmdUpload.CommandText
     cmdUpload.Execute
     adoPrimaryRS.MoveNext
     Loop
     MsgBox "数据传送完毕", vbOKOnly, "系统提示"
     Netdb.Close
     End If
     adoPrimaryRS.Close
     Localdb.Close
     End If
    End Sub

回答:

    在Ms Sql7 中有OPENROWSET (T-SQL)例:
    SELECT a.*
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
     'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders)
    
    insert into sqlTbl_a
    SELECT a.*
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
     'c:\MSOffice\Access\Samples\northwind.mdb';'admin';'mypwd', Orders)
    adan看到回答后说:
    该问题对日期型字段用format函数转换后可以互传了,但NULL字段则还不知道怎样转换?错误94可能是access和sql server对NULL的表示方法不同,怎样才能实现转换?最好能有例子。
    huang的意见:
    不要象上面这么烦,直接用SQL7中的DTS就可快速导入。非常简单。

此问题由于溪玥回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio