|
我找到一些网上的代码,拼接到一起,可以使用附加数据库的功能。
代码是vb环境下,你移植到vba中应该也是可以的了。
test 数据库中包含 northwind 数据库 中的 custermor 表,也就是这一个表。
附件 包含 :一个vb 工程文件(源码) 和 一个我做好的exe
你试试看如何。
========================
代码部分:
'定义三个文本框的变量
Dim servername As String
Dim userid As String
Dim pwd As String
Dim ExternFile As String '定义sql脚本文件存放路径
'------------------------------------------------
Dim conn As New Connection
Dim rs As New Recordset
Dim sql As String
'------------------------------------------------
Dim sqlpath As String '定义数据库路径
Private Sub create_db() '执行脚本文件把sql安装目录中的mdf 和 ldf文件附加到数据库服务器
ExternFile = App.Path & "\" & "create_db.SQL"
'-----------------------------------------------
If IsNull(Me.Text1) = True Then '
servername = ""
Else
servername = Me.Text1 '给窗体模块级别变量servername赋值
End If
'-----------------------------------------------
If IsNull(Me.Text2) = True Then '
userid = ""
Else
userid = Me.Text2 '给窗体模块级别变量userid赋值
End If
'----------------------------------------------
If IsNull(Me.Text3) = True Then '
pwd = ""
Else
pwd = Me.Text3 '给窗体模块级别变量pwd赋值
End If
'----------------------------------------------
sql = "master.dbo.xp_cmdshell 'osql -U " & userid & " -P " & pwd & " -i """ & ExternFile & """'"
On Error GoTo runtime_Err
conn.Open "provider=sqloledb;data source=" & servername & ";user id=" & userid & ";pwd=" & pwd
conn.Execute sql '这一句执行的可能会慢一些
MsgBox " 'test数据库' 附加成功!", vbInformation, "附加 test数据库 信息..."
runtime_Exit:
Exit Sub
runtime_Err:
MsgBox Err.Description, vbInformation, "附加 'test' 错误!"
Resume runtime_Exit
End Sub
Private Sub Command1_Click() '附加数据库
Call create_db '执行脚本文件把sql安装目录中的mdf 和 ldf文件附加到数据库服务器
End Sub
Private Sub Command3_Click()
Me.Command3.Enabled = False
'通过读注册表的方法取得sql的安装路径。
'郁闷:sqlpath_temp的返回值尾部竟然包含一个空格
sqlpath_temp = QueryValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\MSSQLServer\Setup", "sqlpath")
Debug.Print "sqlpath_temp =" & " " & sqlpath_temp
'---------------------------------------------------------------------
If sqlpath_temp = "" Then '如果没有安装sql服务器的话
MsgBox "检测到本机尚未安装sql服务器;" + vbCr + "" + "请先安装sql服务器,再运行本程序.", vbInformation, "'初始化错误!"
End '直接退出
Else
'只有当 sqlpath_temp<>"" 该句代码才有意义。否则,运行时错误"无效的过程调用或参数"
sqlpath = Left(sqlpath_temp, Len(sqlpath_temp) - 1) & "\" & "data"
Debug.Print "sqlpath=" & " " & sqlpath
If Dir(sqlpath & "\test_Data.mdf") = "" Then
'创建一个当前路径的sql脚本文件,给后续的代码使用
Open App.Path & "\" & "create_db.SQL" For Output As 1
Print #1, "EXEC sp_attach_db @dbname = N'test',"
Print #1, "@filename1 = N'" & sqlpath & "\test_Data.mdf',"
Print #1, "@filename2 = N'" & sqlpath & "\test_log.ldf'"
Close 1
On Error GoTo runtime_Err
'拷贝数据文件和日志文件 到服务器的安装目录
FileCopy App.Path & "\" & "test_Data.mdf", sqlpath & "\test_Data.mdf"
FileCopy App.Path & "\" & "test_log.ldf", sqlpath & "\test_log.ldf"
MsgBox "初始化检测成功!", vbInformation, "初始化信息"
'让附加数据库控件有效
With Me
.Text1.Enabled = True
.Text2.Enabled = True
.Text3.Enabled = True
.Command1.Enabled = True
End With
runtime_Exit:
Exit Sub
runtime_Err:
MsgBox Err.Description, vbInformation, "初始化错误!"
End '干脆退出app
Resume runtime_Exit
Else
MsgBox " 'test数据库'已经附加成功!" + vbCr + "" + vbCr + " 'test'数据库 已存在", vbInformation, "无需再附加数据库"
End If
End If
End Sub
========================
[ 本帖最后由 wu8313 于 2007-10-30 20:38 编辑 ] |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|