如何转换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就可快速导入。非常简单。
此问题由于溪玥回答。
| |
|
|
| |
|
|