Dynamic 使用VB6 for SQL server的动态DSN

Dynamic 使用VB6 for SQL server的动态DSN,dynamic,vb6,dsn,Dynamic,Vb6,Dsn,我想在VB6应用程序中创建动态DSN。我已经在我的模块中尝试了以下代码。使用以下Microsoft链接- 我的密码在这里- Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" _ (ByVal hwndParent As Long, ByVal fRequest As Long, _ ByVal lpszDriver As String, ByVal lpszAttributes

我想在VB6应用程序中创建动态DSN。我已经在我的模块中尝试了以下代码。使用以下Microsoft链接-

我的密码在这里-

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

Public Function PrepareDSN(strServerName As String, strDBName As String, strDSN As String, strDBUser As String, strDBUserPassword As String) As Boolean
On Error GoTo error_hdl
Dim boolError As Boolean
Dim strDSNString As String
PrepareDSN = False

strDSNString = Space(MAX_BUFFER_SIZE)
strDSNString = ""
strDSNString = strDSNString & "DSN=" & strDSN & Chr(0)
strDSNString = strDSNString & "DESCRIPTION=" & "DSN Created Dynamically On " & CStr(Now) & Chr(0)
strDSNString = strDSNString & "Server=" & strServerName & Chr(0)
strDSNString = strDSNString & "DATABASE=" & strDBName & Chr(0)
strDSNString = strDSNString & Chr(0)



 If Not CBool(SQLConfigDataSource(0, _
                        ODBC_ADD_DSN, _
                        ODBCDriverDescription, _
                        strDSNString)) Then
    boolError = True
    MsgBox ("Error in PrepareDSN::SQLConfigDataSource")


  End If

If boolError Then
    Exit Function
End If
PrepareDSN = True
Exit Function

error_hdl:
    MsgBox "PrepareDSN_ErrHandler::" & err.Description
End Function

这里我的函数“SQLConfigDataSource”总是返回false。请建议。

缺少两样东西

1) 您没有定义请求类型ODBC\U ADD\U DSN 2) 未设置数据库驱动程序

下面是修改后的代码,我成功地使用它连接到我的数据库

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
'!!!!!!!!!!
Private Const ODBC_ADD_DSN = 1 'Define request type
'!!!!!!!!!!
Public Function PrepareDSN(strServerName As String, strDBName As String, strDSN As String, strDBUser As String, strDBUserPassword As String) As Boolean
On Error GoTo error_hdl
Dim boolError As Boolean
Dim strDSNString As String
PrepareDSN = False

strDSNString = Space(MAX_BUFFER_SIZE)
strDSNString = ""
strDSNString = strDSNString & "DSN=" & strDSN & Chr(0)
strDSNString = strDSNString & "DESCRIPTION=" & "DSN Created Dynamically On " & CStr(Now) & Chr(0)
strDSNString = strDSNString & "Server=" & strServerName & Chr(0)
strDSNString = strDSNString & "DATABASE=" & strDBName & Chr(0)
strDSNString = strDSNString & Chr(0)


'!!!!!!!!!!
Const Driver As String = "SQl Server" 'Set driver descr
'!!!!!!!!!!
 If Not CBool(SQLConfigDataSource(0, _
                         ODBC_ADD_DSN, _
                        Driver, _
                        strDSNString)) Then
    boolError = True
    MsgBox ("Error in PrepareDSN::SQLConfigDataSource")


  End If

If boolError Then
    Exit Function
End If
PrepareDSN = True
Exit Function

error_hdl:
    MsgBox "PrepareDSN_ErrHandler::" & Err.Description
End Function

纯粹出于兴趣,是否需要创建DSN,或者您是否可以使用无DSN连接?是的,Westie,我也尝试实现相同的功能,但已经有900个报表使用DSN设计报表,我认为如果我选择的DSN较少,那么我必须删除报表中的所有字段并重新绑定,是这样吗?还是我的想法错了?@Teju MB您应该在模块顶部添加一个
Option Explicit
语句,以便强制声明变量。您已经使用了
ODBC\u ADD\u DSN
,但它没有在任何地方声明
Option Explicit
会提醒您这一点。+1,非常感谢Luke和Jac,我只想澄清1.在创建DSN之前,它是否会检查,因为DSN是否存在,如果存在,它是否会覆盖?2.它创建了用户DSN,那么系统DSN呢?