一个access2000数据库,一个sql7.0数据库。。怎样在vb中将access2000数据库的数据insert into 到sql7.0数据库。不要用ado循环记录,直接用sql语句,给个例程。
1、使用DAO(ADO无此功能):
Dim str As String
str = "ODBC;DSN=test;UID=sa;PWD=;Database=testDB;"
Set wsp = DBEngine.CreateWorkspace("MainWS", "admin", "")
Set dbtemp = wsp.OpenDatabase("", 0, 0, str)
dbtemp.OpenRecordset "insert into XXTable select * from [;database=" & App.Path & "\db1.mdb].Table"
2、不行
Dim str As String
str = "ODBC;DSN=test;UID=sa;PWD=;Database=testDB;"
Set wsp = DBEngine.CreateWorkspace("MainWS", "admin", "")
Set dbtemp = wsp.OpenDatabase("", 0, 0, str)
dbtemp.OpenRecordset "insert into XXTable select * from [;database=" & App.Path & "\db1.mdb].Table"
2、不行
解决方案 »
- 一段纯vbs实现zip压缩的代码,无需dll或者winrar支持
- Datagrid 控件问题
- 我是VB新手,我现在手中有个程序,我想得到它的某些内存地址里的信息,请问,如何比对前后2次内存的变化?
- 请问 Crystal Reports Automation Serve?
- winsock里的这个参数是做什么的?
- vb.net,win程序中列表的问题(样式)
- filesystemobject是在哪个包里啊??
- 关于串口的问题,向各位请教!
- 如何将我的程序嵌入IE的工具栏当中就象金山词霸或网络码蚁之类的软件
- 两个ado数据源rs1和rs2,如何将rs1中的数据insert 到rs2中?
- 请问VB中的IMAGE控件的文件名是什么?
- 超级难题,没人知道的秘密
1:
在 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) Code:
Dim adoConnection As New ADODB.Connection
'ADODB.Connection 一定要连接 SQL Server
adoConnection.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Data Source=billgate"
adoConnection.Execute SQL参阅《如何转换ACCESS数据到SQL SERVER》
http://go1.163.com/~askpro/msg22/qa72.htm2.当然也可以了,写到SP里:
在 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)
其实我也一直很希望有其它的途径来解决这个问题,一直没找到方法就以为没有,我真是笨呀,呵呵……
ado错误:[oledb provider refurend message]找不到可安装的isam
装 MDAC_TYPE.exe
1。用Openrowset,online doc有例子。注意字段的顺序,最好用select tableaccess.f1,tableaccess.f2,...;还有就是一些字段的format,入日期。2. 在Enterprise Manager作好DTS Package直接调用。两个方法我都用过。可行。
秘码,是不是我语法有错误。
Code:
Dim adoConnection As New ADODB.Connection
'ADODB.Connection 一定要连接 SQL Server
adoConnection.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Data Source=billgate"
adoConnection.Execute SQLif sql7.0数据库的表aaa有新记录,then 插入到access表bbb 的SQL:
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'd:\nwind97.mdb';'admin';'', bbb)
SELECT aaa.*
FROM aaa
WHERE aaa.ID_Field NOT IN
(SELECT ID_Field
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'd:\nwind97.mdb';'admin';'', bbb)
)if access表bbb有记录,而sql7.0表aaa没有,then 删除access表bbb的记录的SQL:
DELETE FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'd:\nwind97.mdb';'admin';'', bbb)
WHERE ID_Field NOT IN (SELECT ID_Field FROM aaa)
adoConnection.Execute SQL
SP 确实不幸
CREATE PROCEDURE [test1]
@Path varchar(100),
@Provider varchar(200)='Microsoft.Jet.OLEDB.4.0',
@User varchar(100)='Admin',
@Password varchar(100)=''
AS
exec ('select * FROM OPENROWSET('''+ @Provider +''',''' + @Path + ''';'''+ @User +''';'''+ @Password+''', 产品)')
而且DTS本身就是自动化部件,所有的东西都可以在运行时修改。我的程序就坐到了可以动态连接不同的服务器,传送的数据以及数据过滤器都是可由用户来设置的。SQL2000的DTS还要强大,只是我还没有好好用过。
Alter Procedure sp_send
/*将access的签到记录传送到sql7.0*/
As insert into kqnote(sfzhm,time)
SELECT sfzhm,time
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'd:\mrdx\sjk\jms.mdb';'admin';'', kqnote)
where send = 0
/*将以传送的记录标记*/
update OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'd:\mrdx\sjk\jms.mdb';'admin';'', kqnote)
set send = 1
where send =0/*同步员工记录,添加新员工记录*/
INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'd:\mrdx\sjk\jms.mdb';'admin';'', workers) (sfzhm,name)
select sqlsfzhm ,sqlname from sqlworkers
where sqlsfzhm NOT IN (select sfzhm from OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'd:\mrdx\sjk\jms.mdb';'admin';'', workers)) /*如果sql7.0 cztime is null 则为在职员工。删除access的多的员工记录*/
DELETE FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'd:\mrdx\sjk\jms.mdb';'admin';'', workers)
where sfzhm NOT IN (select sqlsfzhm from sqlworkers where cztime is null)在我这个应用中,是不是不该用sp.我的结构是客户端分布在各处,数据用access,每日定时传送到sql7.0
我希望客户端少维护和更改。
请创建如下SP(copy 下来执行,别改,其实就是在 SP 里凑一个SQL,用 execute 执行),
"\\yours\..\nwind97.mdb"为你的路径:CREATE PROCEDURE [MySPTest1]
@UNCPath varchar(100) ='\\yuer\d\nwind97.mdb',--SP参数:可改为你默认的 mdb 路径
@TableName varchar(100) ='产品'--SP参数:可改为你默认的表名
AS
declare @sql varchar(256)
set @sql='select * FROM OPENROWSET('+'''Microsoft.Jet.OLEDB.4.0'',''' + @UNCPath + ''';'+'''admin'';'+''''',' +@TableName +')'
execute (@sql)
--exec ('select * FROM OPENROWSET('+'''Microsoft.Jet.OLEDB.4.0'',' +'''\\yours\..\nwind97.mdb'';'+'''admin'';'+''''',' +'产品)')--调用例句:
--MySPTest1 'd:\nwind97.mdb','产品'
--or
--MySPTest1
客户端分布在各处,也就是\\yuer\d\nwind97.mdb'中,电脑名也要用参数,我不知这样理解对不对,如果这样就太麻烦了。我想这样勉强在sp中,也许不是经典的方法。
再次谢谢playyuer,你让我学到了许多东西,尤其你回复很快。希望能多向你请教。另外也感谢所有关注次贴的朋友。
不过Insert 会些问题,更新其中的text字段也有问题。可以看Sql联机文档。