Option Explicit 'lpBuffer : buffer for system directory 'uSize : size of directory buffer Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" _ (ByVal lpBuffer As String, ByVal nSize As Long) As Long'lpAppName : section name 'lpKeyName : key name 'lpDefault : default string 'lpReturnedString : destination buffer 'nSize : size of destination buffer 'lpFileName : initialization file name Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _ (ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long'lpAppName : section name 'lpKeyName : key name 'lpString : string to add 'lpFileName : initialization file Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _ (ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpString As Any, _ ByVal lpFileName As String) As Long '******************************************************************************** '** 函数功能:从ini配置文件中读取指定段名、关键字名的值 '** 调用语法: GetInIKeyValue(SectionName as string,KeyName As String,FileName As String) '** 参数说明: '** SectionName :段名 '** KeyName :关键字名 '** FileName :ini文件名包括路径 '** 返 回 值: '** String :返回关键字值 '** 处理说明: '** 调用API函数GetPrivateProfileString '****************************************************************************** Public Function GetInIKeyValue(ByVal SectionName As String, _ ByVal KeyName As String, _ ByVal FileName As String) As String Dim KeyValue$ Dim strTmp As String
KeyValue$ = String$(512, " ") GetPrivateProfileString SectionName, KeyName, "", KeyValue$, 512, FileName strTmp = Trim(KeyValue$) GetInIKeyValue = Left(strTmp, Len(strTmp) - 1) End Function'******************************************************************************** '** 函数功能:从ini配置文件中写入指定段名、关键字名及值 '** 调用语法: SetInIKeyValue(SectionName as string,KeyName As String,KeyValue as string ,FileName As String) '** 参数说明: '** SectionName :段名 '** KeyName :关键字名 '** KeyValue :关键字值 '** FileName :ini文件名包括路径 '** 返 回 值: '** 处理说明: '** 调用API函数WritePrivateProfileString '****************************************************************************** Public Sub SetInIKeyValue(ByVal SectionName As String, _ ByVal KeyName As String, _ ByVal KeyValue As String, _ ByVal FileName As String) Dim lng As Long
lng = WritePrivateProfileString(SectionName, KeyName, KeyValue, FileName) End Sub'******************************************************************************** '** 函数功能:读取系统目录路径 '** 调用语法: GetSysDir() '** 参数说明: '** 返 回 值: '** String :系统目录 '** 处理说明: '** 调用API函数GetSystemDirectory '****************************************************************************** Public Function GetSysDir() As String Dim sysDir$ Dim strTmp As String
sysDir = String$(128, " ") GetSystemDirectory sysDir$, 127 strTmp = Trim(sysDir$) GetSysDir = Left(strTmp, Len(strTmp) - 1) End Function
INI文件的写法可同于:[DatabaseInfo] Provider=SQLOLEDB.1 Data Source=AJIU '服务器名称 Initial Catalog=TestIII '数据库 User ID=sa '用户名 password= '口令
你是说读取INI文件里的数据库设置,再连接到某一数据库吗??INI文件读取模块:Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFilename As String) As Long Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As LongFunction ReadINI(AppName$, Keyname$, filename$) As String Dim RetStr As String RetStr = String(255, Chr(0)) ReadINI = Left(RetStr, GetPrivateProfileString(AppName$, ByVal Keyname$, "", RetStr, Len(RetStr), filename$)) End FunctionFunction WriteINI(mizainz$, Place$, Toput$, AppName$) r% = WritePrivateProfileString(mizainz$, Place$, Toput$, AppName$) End Function 打开数据库SettingFile = App.path & "\settings.ini" SYSDB = ReadINI("APP", "DBCONN", SettingFile) dim Conn as adodb.connection set conn=new adodb.connection conn.connectionstring=sysdb conn.open
使用INI的方式存取文件参数 在d盘根目录新建 aaa.ini文件模拟程序 '模块中 Option Explicit'------------------------- '声明 Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long'获得设置 Public Function MyGetSetting(Section As String, KeyName As String, DefaultValue As String) As String Dim X As Long Dim Holder As String * 255 X = GetPrivateProfileString(Section, KeyName, DefaultValue, Holder, 254, "d:\aaa.ini") MyGetSetting = Left$(Holder, InStr(Holder, Chr$(0)) - 1)End Function'保存设置 Public Sub MySetSetting(Section As String, KeyName As String, KeyValue As String) Dim X As Long X = WritePrivateProfileString(Section, KeyName, KeyValue, "d:\aaa.ini")End Sub'窗体中 Private Sub Command1_Click() '保存变量 MySetSetting "服务器名", "服务器名", "sv" MySetSetting "用户名", "用户名", "sa" MySetSetting "密码", "密码", "aaaa" MySetSetting "数据库名", "数据库名", "Mydatabase" MsgBox "保存成功" End SubPrivate Sub Command2_Click() '取出变量 MsgBox MyGetSetting("服务器名", "服务器名", "") MsgBox MyGetSetting("用户名", "用户名", "") MsgBox MyGetSetting("密码", "密码", "") MsgBox MyGetSetting("数据库名", "数据库名", "") End Sub
连接数据库SQL或Access数据库 Public db As Connection Set db = New Connection db.CursorLocation = adUseClient 'SQL db.Open "PROVIDER=SQLOLEDB.1;driver={SQL Server};server=yourServer;uid=sa;pwd=sa;database=yourBase;" 'Access 'db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\yourBase"
Sub Main() P_WorkPath = App.Path If Right$(P_WorkPath, 1) = "\" Then P_WorkPath = Left$(P_WorkPath, Len(P_WorkPath) - 1)
'读系统配置文件. P_SERVER = Trim$(GetIniStr("SMSET", "SERVER", P_WorkPath & "\Admini.INI")) P_DBNAME = Trim$(GetIniStr("SMSET", "DBNAME", P_WorkPath & "\Admini.INI")) P_USER = Trim$(GetIniStr("SMSET", "USER", P_WorkPath & "\Admini.INI")) P_PWD = Trim$(GetIniStr("SMSET", "PWD", P_WorkPath & "\Admini.INI")) End Sub'-------------------------------------------------------------- Private Declare Function WritePrivateProfileString _ Lib "kernel32" Alias "WritePrivateProfileStringA" _ (ByVal lpApplicationname As String, ByVal _ lpKeyName As Any, ByVal lsString As Any, _ ByVal lplFilename As String) As LongPrivate Declare Function GetPrivateProfileString Lib _ "kernel32" Alias "GetPrivateProfileStringA" _ (ByVal lpApplicationname As String, ByVal _ lpKeyName As String, ByVal lpDefault As _ String, ByVal lpReturnedString As String, _ ByVal nSize As Long, ByVal lpFileName As _ String) As Long' '读INI文件. '函数:GetIniStr '参数:AppName 项目名.In_Key 键名,sFileName 文件名 '返回值:成功:对应的键值.失败或不存在:"" Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal sFileName As String) As String
On Error GoTo GetIniStrErr
If VBA.Trim$(In_Key) = "" Then GoTo GetIniStrErr End If Dim GetStr As String GetStr = VBA.String(128, 0) GetPrivateProfileString AppName, In_Key, "", GetStr, 256, sFileName GetStr = VBA.Replace(GetStr, VBA.Chr(0), "") If GetStr = "" Then GoTo GetIniStrErr Else GetIniStr = GetStr GetStr = "" End If Exit FunctionGetIniStrErr: Err.Clear GetIniStr = "" GetStr = "" End Function' '写INI文件. '函数:WriteIniStr '参数:AppName 项目名.In_Key 键名,In_Data 键值,sFileName 文件名 '返回值:成功=TRUE.失败=FALSE Public Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal in_data As String, ByVal sFileName As String) As Boolean On Error GoTo WriteIniStrErr WriteIniStr = True If VBA.Trim(in_data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then GoTo WriteIniStrErr Else WritePrivateProfileString AppName, In_Key, in_data, sFileName End If Exit Function
WriteIniStrErr: Err.Clear WriteIniStr = False End Function
這樣很簡單呀。理清楚思路:1,怎麼用vb連接數據庫,2怎麼再ini文件中讀出設置Public StrUserName As String Public StrPassWord As String Public StrSource As String Public StrDateBase As StringPublic Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Private Sub Form_Activate() Dim StrFindFile As String StrFindFile = Dir(App.Path & "\readcard.ini", vbNormal) If StrFindFile = "" Then MsgBox "系統運行所需檔丟失,無法正常運行" & vbCrLf & "請立即與軟體供應商聯繫!", vbCritical + vbOKOnly, "系統錯誤資訊" End End If LoadParameter
On Error GoTo ConnError Set Conn = CreateObject("ADODB.Connection") Conn.ConnectionString = "Provider=SQLOLEDB.1;Password=" & StrPassWord & ";Persist Security Info=True;User ID= " & StrUserName & ";Initial Catalog=" & StrDateBase & ";Data Source=" & StrSource Conn.Open Exit Sub ConnError: MsgBox "打開資料庫失敗!請檢查資料庫是否正常運行!", vbCritical + vbOKOnly, "系統錯誤資訊" End Sub Public Function ReadFromIni(ByVal FileName As String, ByVal Section As String, ByVal Key As String) As String Dim I As Long Dim buff As String * 128 GetPrivateProfileString Section, Key, "", buff, 128, FileName I = InStr(buff, Chr(0)) ReadFromIni = Trim(Left(buff, I - 1)) End Function 就這樣從ini讀出PStrUserName ,StrPassWord ,StrSource , StrDateBase 然後送給連接符就可以了
如果odbc的话,调用odbc API可能会实现吧.
但是还是搞不清楚,你是什么意思
'lpBuffer : buffer for system directory
'uSize : size of directory buffer
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long'lpAppName : section name
'lpKeyName : key name
'lpDefault : default string
'lpReturnedString : destination buffer
'nSize : size of destination buffer
'lpFileName : initialization file name
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long'lpAppName : section name
'lpKeyName : key name
'lpString : string to add
'lpFileName : initialization file
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
'********************************************************************************
'** 函数功能:从ini配置文件中读取指定段名、关键字名的值
'** 调用语法: GetInIKeyValue(SectionName as string,KeyName As String,FileName As String)
'** 参数说明:
'** SectionName :段名
'** KeyName :关键字名
'** FileName :ini文件名包括路径
'** 返 回 值:
'** String :返回关键字值
'** 处理说明:
'** 调用API函数GetPrivateProfileString
'******************************************************************************
Public Function GetInIKeyValue(ByVal SectionName As String, _
ByVal KeyName As String, _
ByVal FileName As String) As String
Dim KeyValue$
Dim strTmp As String
KeyValue$ = String$(512, " ")
GetPrivateProfileString SectionName, KeyName, "", KeyValue$, 512, FileName
strTmp = Trim(KeyValue$)
GetInIKeyValue = Left(strTmp, Len(strTmp) - 1)
End Function'********************************************************************************
'** 函数功能:从ini配置文件中写入指定段名、关键字名及值
'** 调用语法: SetInIKeyValue(SectionName as string,KeyName As String,KeyValue as string ,FileName As String)
'** 参数说明:
'** SectionName :段名
'** KeyName :关键字名
'** KeyValue :关键字值
'** FileName :ini文件名包括路径
'** 返 回 值:
'** 处理说明:
'** 调用API函数WritePrivateProfileString
'******************************************************************************
Public Sub SetInIKeyValue(ByVal SectionName As String, _
ByVal KeyName As String, _
ByVal KeyValue As String, _
ByVal FileName As String)
Dim lng As Long
lng = WritePrivateProfileString(SectionName, KeyName, KeyValue, FileName)
End Sub'********************************************************************************
'** 函数功能:读取系统目录路径
'** 调用语法: GetSysDir()
'** 参数说明:
'** 返 回 值:
'** String :系统目录
'** 处理说明:
'** 调用API函数GetSystemDirectory
'******************************************************************************
Public Function GetSysDir() As String
Dim sysDir$
Dim strTmp As String
sysDir = String$(128, " ")
GetSystemDirectory sysDir$, 127
strTmp = Trim(sysDir$)
GetSysDir = Left(strTmp, Len(strTmp) - 1)
End Function
Provider=SQLOLEDB.1
Data Source=AJIU '服务器名称
Initial Catalog=TestIII '数据库
User ID=sa '用户名
password= '口令
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As LongFunction ReadINI(AppName$, Keyname$, filename$) As String
Dim RetStr As String
RetStr = String(255, Chr(0))
ReadINI = Left(RetStr, GetPrivateProfileString(AppName$, ByVal Keyname$, "", RetStr, Len(RetStr), filename$))
End FunctionFunction WriteINI(mizainz$, Place$, Toput$, AppName$)
r% = WritePrivateProfileString(mizainz$, Place$, Toput$, AppName$)
End Function
打开数据库SettingFile = App.path & "\settings.ini"
SYSDB = ReadINI("APP", "DBCONN", SettingFile)
dim Conn as adodb.connection
set conn=new adodb.connection
conn.connectionstring=sysdb
conn.open
在d盘根目录新建 aaa.ini文件模拟程序
'模块中
Option Explicit'-------------------------
'声明
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long'获得设置
Public Function MyGetSetting(Section As String, KeyName As String, DefaultValue As String) As String Dim X As Long
Dim Holder As String * 255 X = GetPrivateProfileString(Section, KeyName, DefaultValue, Holder, 254, "d:\aaa.ini")
MyGetSetting = Left$(Holder, InStr(Holder, Chr$(0)) - 1)End Function'保存设置
Public Sub MySetSetting(Section As String, KeyName As String, KeyValue As String) Dim X As Long X = WritePrivateProfileString(Section, KeyName, KeyValue, "d:\aaa.ini")End Sub'窗体中
Private Sub Command1_Click()
'保存变量
MySetSetting "服务器名", "服务器名", "sv"
MySetSetting "用户名", "用户名", "sa"
MySetSetting "密码", "密码", "aaaa"
MySetSetting "数据库名", "数据库名", "Mydatabase"
MsgBox "保存成功"
End SubPrivate Sub Command2_Click()
'取出变量
MsgBox MyGetSetting("服务器名", "服务器名", "")
MsgBox MyGetSetting("用户名", "用户名", "")
MsgBox MyGetSetting("密码", "密码", "")
MsgBox MyGetSetting("数据库名", "数据库名", "")
End Sub
Public db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
'SQL
db.Open "PROVIDER=SQLOLEDB.1;driver={SQL Server};server=yourServer;uid=sa;pwd=sa;database=yourBase;"
'Access
'db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\yourBase"
Sub Main()
P_WorkPath = App.Path
If Right$(P_WorkPath, 1) = "\" Then P_WorkPath = Left$(P_WorkPath, Len(P_WorkPath) - 1)
'读系统配置文件.
P_SERVER = Trim$(GetIniStr("SMSET", "SERVER", P_WorkPath & "\Admini.INI"))
P_DBNAME = Trim$(GetIniStr("SMSET", "DBNAME", P_WorkPath & "\Admini.INI"))
P_USER = Trim$(GetIniStr("SMSET", "USER", P_WorkPath & "\Admini.INI"))
P_PWD = Trim$(GetIniStr("SMSET", "PWD", P_WorkPath & "\Admini.INI"))
End Sub'--------------------------------------------------------------
Private Declare Function WritePrivateProfileString _
Lib "kernel32" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationname As String, ByVal _
lpKeyName As Any, ByVal lsString As Any, _
ByVal lplFilename As String) As LongPrivate Declare Function GetPrivateProfileString Lib _
"kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationname As String, ByVal _
lpKeyName As String, ByVal lpDefault As _
String, ByVal lpReturnedString As String, _
ByVal nSize As Long, ByVal lpFileName As _
String) As Long'
'读INI文件.
'函数:GetIniStr
'参数:AppName 项目名.In_Key 键名,sFileName 文件名
'返回值:成功:对应的键值.失败或不存在:""
Public Function GetIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal sFileName As String) As String
On Error GoTo GetIniStrErr
If VBA.Trim$(In_Key) = "" Then
GoTo GetIniStrErr
End If Dim GetStr As String
GetStr = VBA.String(128, 0)
GetPrivateProfileString AppName, In_Key, "", GetStr, 256, sFileName
GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
If GetStr = "" Then
GoTo GetIniStrErr
Else
GetIniStr = GetStr
GetStr = ""
End If
Exit FunctionGetIniStrErr:
Err.Clear
GetIniStr = ""
GetStr = ""
End Function'
'写INI文件.
'函数:WriteIniStr
'参数:AppName 项目名.In_Key 键名,In_Data 键值,sFileName 文件名
'返回值:成功=TRUE.失败=FALSE
Public Function WriteIniStr(ByVal AppName As String, ByVal In_Key As String, ByVal in_data As String, ByVal sFileName As String) As Boolean
On Error GoTo WriteIniStrErr
WriteIniStr = True
If VBA.Trim(in_data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then
GoTo WriteIniStrErr
Else
WritePrivateProfileString AppName, In_Key, in_data, sFileName
End If
Exit Function
WriteIniStrErr:
Err.Clear
WriteIniStr = False
End Function
Public StrPassWord As String
Public StrSource As String
Public StrDateBase As StringPublic Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Sub Form_Activate()
Dim StrFindFile As String
StrFindFile = Dir(App.Path & "\readcard.ini", vbNormal)
If StrFindFile = "" Then
MsgBox "系統運行所需檔丟失,無法正常運行" & vbCrLf & "請立即與軟體供應商聯繫!", vbCritical + vbOKOnly, "系統錯誤資訊"
End
End If
LoadParameter
On Error GoTo ConnError
Set Conn = CreateObject("ADODB.Connection")
Conn.ConnectionString = "Provider=SQLOLEDB.1;Password=" & StrPassWord & ";Persist Security Info=True;User ID= " & StrUserName & ";Initial Catalog=" & StrDateBase & ";Data Source=" & StrSource
Conn.Open
Exit Sub
ConnError:
MsgBox "打開資料庫失敗!請檢查資料庫是否正常運行!", vbCritical + vbOKOnly, "系統錯誤資訊"
End Sub
Public Function ReadFromIni(ByVal FileName As String, ByVal Section As String, ByVal Key As String) As String
Dim I As Long
Dim buff As String * 128
GetPrivateProfileString Section, Key, "", buff, 128, FileName
I = InStr(buff, Chr(0))
ReadFromIni = Trim(Left(buff, I - 1))
End Function
就這樣從ini讀出PStrUserName ,StrPassWord ,StrSource ,
StrDateBase 然後送給連接符就可以了