...
解决方案 »
- Instr函数的用法
- 一串16进制数双位取反并+小数点,高手来帮忙啊!
- Shell explorer 打不开一些特殊形式网址,怎么办?(有例子,请看!)
- 对于mshflexgrid,手填与绑定各有何优缺点呢?请各位讲讲,先谢一下。
- 窗体ONLOAD的时候,怎么总是自动触发窗体上控件的ONCLICK呢???????
- VB里可以调用ACCESS吗?
- 如何编写DLL
- 我无法结帐了, 怎么办?
- 请问在哪里有很多控件包下载,或者哪里有控件使用的说明下载?
- 关于 Document的菜鸟问题。。在线等
- 高分超级难题:服务器端如何同时监控二百个客户端软件其中哪些已关闭或已强制关闭。
- 我要离开程序员生活了...
Private Const ODBC_CONFIG_DSN = 2 ' Configure (edit) data source
Private Const ODBC_REMOVE_DSN = 3 ' Remove data source
Private Const vbAPINull As Long = 0& ' NULL Pointer
Private Declare Function SQLAllocEnv Lib "odbc32.dll" (phenv&) As Integer
Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" (ByVal hwndParent As Long, ByVal fRequest As Long, ByVal lpszDriver As String, ByVal lpszAttributes As String) As Long'********************************************
'函数:创建SQL DSN
Public Function CreateSQLDSN(ByVal DSN As String, ByVal Server As String, ByVal Database As String, _
ByVal Driver As String, ByVal Description As String) As Boolean
Dim strAttributes As String
SQLConfigDataSource vbAPINull, ODBC_REMOVE_DSN, Driver, "DSN=" & DSN
strAttributes = "DSN=" & DSN & Chr$(0) & _
"Description=" & Description & Chr$(0) & _
"Server=" & Server & Chr$(0) & _
"Database=" & Database & Chr$(0)
If SQLConfigDataSource(vbAPINull, ODBC_ADD_DSN, Driver, strAttributes) = 0 Then
CreateSQLDSN = False
Else
CreateSQLDSN = True
End If
End Function创建Foxpro(DBF)数据源如下:
Private Const mc_RegKeyRun$ = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal Hkey As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" _
(ByVal Hkey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal Hkey As Long, ByVal lpSubKey As String, _
phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
(ByVal Hkey As Long, ByVal lpValueName As String, _
ByVal lpReserved As Long, lpType As Long, lpData As Any, _
lpcbData As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
(ByVal Hkey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
ByVal cbData As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
(ByVal Hkey As Long, ByVal lpSubKey As String, _
phkResult As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
(ByVal Hkey As Long, ByVal lpSubKey As String) As Long
Private Const REG_SZ = 1 ' Unicode nul terminated String
Private Const REG_DWORD = 4 ' 32-bit number
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003
Private Const HKEY_PERFORMANCE_DATA = &H80000004
Private Const ERROR_SUCCESS = 0&'**********************************************
'函数:创建DBF DSN
Public Function CreateDBFDSN(ByVal DSN As String, ByVal FilePath As String, ByVal Description As String) As Boolean
Dim phkResult As Long
Dim strRegVal As String
Dim retVal As Boolean
retVal = False
On Error GoTo ErrProc RegOpenKey HKEY_CURRENT_USER, "Software\ODBC\ODBC.INI\ODBC Data Sources", phkResult
strRegVal = "Microsoft Visual Foxpro Driver"
RegSetValueEx phkResult, DSN, 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
RegCloseKey phkResult RegDeleteKey HKEY_CURRENT_USER, "Software\ODBC\ODBC.INI\" & DSN RegCreateKey HKEY_CURRENT_USER, "Software\ODBC\ODBC.INI\" & DSN, phkResult
strRegVal = "Yes"
RegSetValueEx phkResult, "BackgroundFetch", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = "Machine"
RegSetValueEx phkResult, "Collate", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = "Yes"
RegSetValueEx phkResult, "Deleted", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = Description
RegSetValueEx phkResult, "Description", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = "C:\WINNT\System32\vfpodbc.dll"
RegSetValueEx phkResult, "Driver", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = "No"
RegSetValueEx phkResult, "Exclusive", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = "Yes"
RegSetValueEx phkResult, "Null", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = "No"
RegSetValueEx phkResult, "SetNoCountOn", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = FilePath
RegSetValueEx phkResult, "SourceDB", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2
strRegVal = "DBF"
RegSetValueEx phkResult, "SourceType", 0, REG_SZ, ByVal strRegVal, Len(strRegVal) + 2 RegCloseKey phkResult
retVal = True
ErrProc:
CreateDBFDSN = retVal
End Function
rdoRegisterDataSource 方法示例
下面示例说明使用 rdoRegisterDataSource 方法建立新的 ODBC 数据源项。
Private Sub RegisterDataSource()
Dim en As rdoEnvironment
Dim cnTest As rdoConnection
Dim strAttribs As String
'建造关键字字符串。
strAttribs = "Description=" _
& "SQL Server on server SEQUEL" _
& Chr$(13) & "OemToAnsi=No" _
& Chr$(13) & "SERVER=SEQUEL" _
& Chr$(13) & "Network=DBNMPNTW" _
& Chr$(13) & "Database=WorkDB" _
& Chr$(13) & "Address=\\SEQUEL\PIPE\SQL\QUERY"
'建立新的注册的 DSN。
rdoEngine.rdoRegisterDataSource "示例", _
"SQL Server", True, strAttribs
'打开数据库。
Set en = rdoEngine.rdoEnvironments(0)
Set cnTest = en.OpenConnection( _
dsname:="示例", _
Prompt:=rdDriverNoPrompt, _
Connect:="UID=;PWD=;")
End Sub RDO对象的全称为Microsoft Remote Data Objects,VB 6带有这个部件。如果你想运行上面的代码,可以在“引用”对话框中选择Microsoft Remote Data Objects 2.0。如果想在窗体使用RDO控件(类似Data控件),可以在“部件”对话框选择Microsoft RemoteData Control 6.0。
引用
Microsoft OLE DB Service Component 1.0 TYPE library
和ADO然后添加如下代码Option Explicit
Dim adoConn As ADODB.Connection
Private Function BuildAdoConnection(ByVal ConnectionString As String) As String ' display the ADO Connection Window (ADO DB Designer) Dim dlViewConnection As MSDASC.DataLinks On Error GoTo Err_BuildAdoConnection
If Not (Trim$(ConnectionString) = "") Then
Set adoConn = New ADODB.Connection
adoConn.ConnectionString = ConnectionString
Set dlViewConnection = New MSDASC.DataLinks
dlViewConnection.hWnd = Me.hWnd
If dlViewConnection.PromptEdit(adoConn) Then
BuildAdoConnection = adoConn.ConnectionString
Else
BuildAdoConnection = ConnectionString
End If
Set dlViewConnection = Nothing
Set adoConn = Nothing
Else
Set dlViewConnection = New MSDASC.DataLinks
dlViewConnection.hWnd = Me.hWnd
Set adoConn = dlViewConnection.PromptNew
BuildAdoConnection = adoConn.ConnectionString
Set dlViewConnection = Nothing
Set adoConn = Nothing
End IfExit_BuildAdoConnection: On Error Resume Next
If Not (adoConn Is Nothing) Then
Set adoConn = Nothing
End If
If Not (dlViewConnection Is Nothing) Then
Set dlViewConnection = Nothing
End If
On Error GoTo 0
Exit FunctionErr_BuildAdoConnection: Select Case Err
Case 0
Resume Next
Case -2147217805
adoConn.ConnectionString = ""
Resume
Case 91
Resume Exit_BuildAdoConnection
Case Else
MsgBox "Error: " & Err.Number & vbCrLf & vbCrLf & Err.Description, vbInformation, App.Title & " - Advisory"
Resume Exit_BuildAdoConnection
End Select
End Function
Private Sub Command1_Click()
Set adoConn = New ADODB.Connection
Dim strAdoConn As String
strAdoConn = BuildAdoConnection("") 'strAdoConn 为连接字符串
MsgBox strAdoConn
End Sub
如果你有这个方面的问题请到数据库去提问或发表你的意见
来源:论坛转载无法确定出处,如有版权问题请与我们联系 一、手工配置
1.ODBC数据源管理器
在进行数据库开发时,为了达到配置ODBC,进行DSN定义注册的目的,微软给出了一个手工操作的解决方法。在Windows 9X操作系统的控制面板中,有一个名为“ODBC数据源(32位)”的图标,可以通过它激活专门为用户设置ODBC环境的程序(ODBC Data Source Administrator,ODBC数据源管理器)。在Windows 2000操作系统中,上述图标被放置在控制面板的“管理工具”里面。
这个用于设置ODBC环境的程序叫做桌面驱动程序,它支持数种DBMS(Database Management System,数据库管理系统)。当用户想增加一个数据源和一个所需要的驱动程序时,可以通过ODBC数据源管理器的配置对话框配置特定类型的数据库。大多数情况下,在编写对数据库操作的程序时,我们至少需要知道诸如数据库文件名、系统(本地或远程)、文件夹等信息,同时要给数据源命名。
2.定义数据源的类型
用户可以定义以下三种类型的数据源:
●用户数据源:作为位于计算机本地的用户数据源而创建的,并且只能被创建这个数据源的用户所使用;
●系统数据源:作为属于计算机或系统而不是特定用户的系统数据源而创建的,用户必须有访问权才能使用;
●文件数据源:指定到文件中作为文件数据源而定义的,任何已经正确地安装了驱动程序的用户皆可以使用这种数据源。
3.数据源注册的步骤
以Microsoft Access为例,如果在C:\myfile\文件夹里创建了一个名为myexample.mdb的数据库文件,其注册步骤如下:
●在控制面板里找到“ODBC数据源”图标,打开数据源管理器的交互界面;
●笔者创建的数据库文件是供本机上的用户使用的,所以这里选择“用户 DSN”;
●然后按下“添加”按钮,在弹出的数据源管理器对话框里,为自己所要创建的数据源选择一个驱动程序,本文的数据库文件是用Microsoft Access创建的,所以要选择“Microsoft Access Driver (*.mdb)”;
●按“完成”按钮后,进入一个标题为“ODBC Microsoft Access 安装”的界面,在其中设置“数据源名”为“mydatasource”,选取数据库文件 “C:\myfile\myexample.mdb”,然后确定即可。
这样我们就完成了一个简单的ODBC数据源的注册。当然,在以上的步骤中,用户可以根据自己的不同需要,设置不同的选项。
注册结束后,我们便可以在对数据库的编程中,操作该数据库了。
二、在VB中注册数据源
在VB中对数据库进行编程时,可以利用RegisterDataSource方法为ODBC数据源输入连接信息到 Windows 注册表中。它的语法是:
RegisterDataSource DSN, driver, silent, attributes
其中参数代表的含义分别为:
●DSN:字符串表达式,它是在引用数据源描述信息块时所使用的名字。例如,如果数据源是一个ODBC远程数据库,这就是服务器的名字;如果是用户DSN,则是注册的数据源的名字。
●drive:字符串表达式,表示ODBC驱动程序的名称。它并不是 ODBC 驱动程序动态连接库 (DLL) 文件名。例如,SQL Server 是驱动程序名,而 SQLSRVR.DLL 是 DLL 文件名。必须安装ODBC 及相应的驱动程序。
●silent:布尔类型值,如果不想显示 ODBC 驱动程序对话框,用以提示指定驱动程序的信息,该值就为 True;如果希望显示 ODBC 驱动程序对话框,该值就为 False。如果 silent 为 True,那么attributes必须包含所有必需的指定驱动程序的信息。
●attributes:字符串表达式,它是一个要添加到 ODBC.INI 文件中的关键字列表。编写程序时,可以根据需要选择若干attributes的参数进行设置。
例如:我们可以编写如下的VB程序,达到与上面手工注册一样的目的。程序清单如下:
Sub RegisterDataSource()
Dim strAttribs As String
’建造关键字字符串。
’C:\myfile\myexample.l.mdb数据库文件名(包含路径)
strAttribs =“DBQ=” _
& “C:\myfile\myexample.mdb” _
& Chr$(13) & “OemToAnsi=No” _
& Chr$(13) & “SERVER=SEQUEL” _
& Chr$(13) & “Network=DBNMPNTW” _
& Chr$(13) & “Database=WorkDB”_
& Chr$(13) &“Address=\\SEQUEL\PIPE\SQL\QUERY”
’建立新的注册的 DSN。
rdoEngine.rdoRegisterDataSource “mydatasource”,
“Microsoft Access Driver (*.mdb)”, True,
strAttribs
End Sub
Private Sub Form_Load()
Call rdoRegisterDataSource
End Sub
注意:为了在代码中使用rdoEngine和远程数据对象,必须先在“引用"对话框中设置一个到 Microsoft Remote Data Object 2.0 对象库的引用,否则在第一次引用rdoEngine 对象时会导致编译错误。
三、利用注册表合并
1.解决思路
考查ODBC数据源注册后对Windows注册表的修改情况,我们可以发现所注册的数据源对Windows注册表的影响关键集中在[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI]里。
这样,我们导出[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI],每次以之为模板,把所要注册的数据源信息加入到注册表导出文件的对应位置,然后再将该文件与系统注册表合并即可。
2.具体操作
首先,我们要弄清楚Regedit 及其参数的含义。Regedit是打开系统注册表的命令。在“开始\运行\”中输入即可。它的三个参数含义如下:
●Regedit /e myfile.reg :表示把注册表文件导出到myfile.reg 文件中,相当于复制整个注册表文件到myfile.reg中;
●Regedit /c myfile.reg:表示把myfile.reg导入注册表,相当于用该文件的内容覆盖了注册表的内容;
●Regedit /s myfile.reg :表示把myfile.reg文件的内容与注册表文件的内容进行合并。
我们只需在注册表中将有用的部分导出,而后将所要注册的数据源的信息加入,再与系统注册表合并就可以了。这个合并的过程,我们既可以手工输入来实现,也可以通过编程实现自动合并。
注意:为了防止误操作,一定要将系统注册表作一次备份。
小 结
从安全的角度考虑,笔者首推利用在Windows控制面板中的ODBC数据源管理工具来进行数据源注册,以免因对注册表的不熟或疏忽造成不必要的损失。当然,还有一些应用工具,可以实现对ODBC数据源的注册,用户可以根据不同的需求选择使用