在工程中加入窗体,选择ODBC登录模板,仔细看里面的代码吧。
解决方案 »
- VB+ORACLE数据库提示实时错误如何处理-进程内存不足
- 一个非常弱的问题在CSDN搜索了老半天都没找到答案
- 找支持多列下拉表格,会计金额输入,支持打印,支持Footer的OCX控件
- 用picture比较占内存还是用image,用BMP好呢,还是用JPG或者GIF
- 关于变量传递的问题
- microsoft visual basic 运行时错误“1004 怎么解决,求救大家”
- 大家好,刚开始学习ADO,请大家给点建议。谢谢,12小时在线。
- 如何将button控件数组按数量动态排列成几行?
- 各位大虾:我想将我的程序发布,但是想让没注册的用户在用过30天后让系统自动失效,哪位高人解决?
- 请问微软的MDB库最大容量是多少记录?
- VB 的数据类型转换怎么做?如int->str
- 制作安装盘时出现的问题
Public Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal henv&, ByVal fDirection%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN%, ByVal szDescription$, ByVal cbDescriptionMax%, pcbDescription%) As IntegerPublic Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env&)'ODBC常数
Public Const SQL_SUCCESS As Long = 0
Public Const SQL_FETCH_NEXT As Long = 1
Sub p_GetDSNsAndDrivers()
Dim i As Long
Dim s_DSNItem As String * 1024
Dim s_DRVItem As String * 1024
Dim s_DSN As String
Dim i_DSNLen As Integer
Dim i_DRVLen As Integer
Dim l_Henv As Long On Error GoTo Proc_Err
cbo_DSNList.AddItem "<None>" i = 0
If SQLAllocEnv(l_Henv) <> -1 Then
Do Until i <> SQL_SUCCESS
s_DSNItem = Space$(1024)
s_DRVItem = Space$(1024)
i = SQLDataSources(l_Henv, SQL_FETCH_NEXT, s_DSNItem, 1024, i_DSNLen, s_DRVItem, 1024, i_DRVLen)
s_DSN = Left$(s_DSNItem, i_DSNLen)
If s_DSN <> Space(i_DSNLen) Then
cbo_DSNList.AddItem s_DSN
End If
Loop
End If
cbo_DSNList.ListIndex = 0Proc_Exit:
Exit Sub
Proc_Err:
Call gi_ShowMsg(-1, Err.Description, vbExclamation)
End Sub
Private Const SQL_ERROR As Long = -1
Private Const SQL_FETCH_NEXT As Long = 1Private 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 Declare Function SQLDataSources Lib "ODBC32.DLL" (ByVal henv As Long, ByVal fDirection As Integer, ByVal szDSN As String, ByVal cbDSNMax As Integer, pcbDSN As Integer, ByVal szDescription As String, ByVal cbDescriptionMax As Integer, pcbDescription As Integer) As Integer'搜索系统中所有的DSN(ODBC)数据源和对应的驱动 0表示失败,其余数值表示返回的驱动或数据源的数量(数组从1开始)
Public Function fun_GetDSNsAndDrivers(ByRef strArr_DSNs() As String, ByRef strArr_DRVs() As String) As Long
Dim int_Ret As Integer
Dim sDSNItem As String * 1024
Dim sDRVItem As String * 1024
Dim int_I As Integer
Dim sDSN As String
Dim sDRV As String
Dim iDSNLen As Integer
Dim iDRVLen As Integer
Dim lHenv As Long '对环境处理
On Error GoTo doError
ReDim strArr_DSNs(0) As String
ReDim strArr_DRVs(0) As String
If SQLAllocEnv(lHenv) <> SQL_ERROR Then
int_I = 0
sDSNItem = Space(1024)
sDRVItem = Space(1024)
int_Ret = SQLDataSources(lHenv, SQL_FETCH_NEXT, sDSNItem, 1024, iDSNLen, sDRVItem, 1024, iDRVLen)
Do Until int_Ret <> SQL_SUCCESS
sDSN = Left$(sDSNItem, iDSNLen)
sDRV = Left$(sDRVItem, iDRVLen)
int_I = int_I + 1
If int_I = 1 Then
ReDim strArr_DSNs(1 To 1) As String
ReDim strArr_DRVs(1 To 1) As String
Else
ReDim Preserve strArr_DSNs(1 To int_I) As String
ReDim Preserve strArr_DRVs(1 To int_I) As String
End If
strArr_DSNs(int_I) = sDSN
strArr_DRVs(int_I) = sDRV
sDSNItem = Space(1024)
sDRVItem = Space(1024)
int_Ret = SQLDataSources(lHenv, SQL_FETCH_NEXT, sDSNItem, 1024, iDSNLen, sDRVItem, 1024, iDRVLen)
Loop
fun_GetDSNsAndDrivers = int_I
Else
fun_GetDSNsAndDrivers = 0
End If
Exit Function
doError:
fun_GetDSNsAndDrivers = 0
End Function