VB使用ADODB操作数据库的常用方法
- 格式:docx
- 大小:17.69 KB
- 文档页数:5
VB使用ADODB操作数据库Dim conn As New ADODB.Connection ’创建一个 Connection 实例,在这里使用New等于将Dim和Set合并为一段代码执行Dim rs As ADODB.Recordset ’创建一个 Recordset 实例,不使用New 是因为,经常需要重复使用Set,因此没必要在这里使用Dim CnStr As String, Sql As String ’创建两个字符串变量分别存放两个集合的SQL语句代码段1、装载数据库(不属于Recordset集合)=============Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$’以上5个字符串变量分别表示文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员密码FileName = App.Path & "\’数据库名’"DbIp = "数据库地址"DbName = "数据库名"DbUser = "数据操作员用户名"DbPw = "操作员密码"’以上变量根据数据库类型的不同而不同,有可能只需要1至两个变量’1)连接Access数据库:’-------------------CnStr = "PROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source=" & FileNa me & ";Jet OLEDB:Database Password=" & DbPw’2)连接Oracle数据库:’-------------------CnStr = "PROVIDER=MSDAORA.1;Password=" & DbPw & ";User ID=" & DbUser & ";Data S ource=" & FileName & ";Persist Security Info=True"’其中:’PASSWORD:密码’User ID: 用户号’Data Source: 数据库名’Persist Security Info:’Provider:’3)连接VF的DBF库:’----------------CnStr = "PROVIDER=MSDASQL.1;Persist Security Info=False;Driver={Microsoft Visual FoxPro Driver};UID=" & DbUser & ";SourceDB=" & FileName &";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"’4)连接SQL的数据库’------------------CnStr = "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid=" & DbUser & ";pwd=" & DbPw & ";DRIVER=SQL Server;DATABASE=" & DbName & ";WSID=GQSOFT;SERVER= " &DbIP’也可以使用这段简易代码 CnStr = "Provider=SQLOLEDB;Data Source=" & DbIp & ";DATABASE=" & DbName & ";U ID=" & DbUser & ";pwd=" & DbPwConn.Open cnstr ’使用 Connection 集合的 Open 方法与数据库建立连接2、Recordset集合的常用方法==========================’1)打开一个表’------------Sql = "select * from 表名" ’SQL查询语句Set rs = New ADODB.Recordset ’新建一个实例rs.Open Sql, conn ’使用 Open 方法打开数据库中的一个表’注意,这种打开方式只能使用 rs.MoveNext (即,向后移动行坐标)而不能像其他方向,并且不能修改数据内容’’rs.Open Sql, conn,1 ’虽然只加了个“1”,但这种方法可以向任何方向移动行坐标。
VBA中数据库操作的实用技巧VBA(Visual Basic for Applications)是一种广泛应用在Microsoft Office中的编程语言。
在数据处理和管理方面,VBA提供了丰富的功能和灵活性。
本文将介绍一些VBA 中数据库操作的实用技巧,帮助您更高效地处理和管理数据。
1. 连接数据库与数据库进行交互的第一步就是建立连接。
VBA中可以使用ADO(ActiveX Data Objects)来连接各种类型的数据库,如Access、SQL Server等。
使用连接字符串可以指定数据库的位置和其他相关参数。
以下是连接Access数据库的示例代码:```Dim conn As ADODB.ConnectionDim strConn As StringstrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\mydatabase.accdb;"Set conn = New ADODB.Connectionconn.Open strConn' 使用数据库连接进行操作conn.CloseSet conn = Nothing```2. 执行查询在连接数据库后,您可以使用VBA执行各种查询操作。
通过使用执行器对象(如ADODB.Recordset)和SQL语句,您可以从数据库中检索和筛选数据。
以下是执行查询的示例代码:```Dim conn As ADODB.ConnectionDim rs As ADODB.RecordsetDim strSQL As String' 建立连接(省略连接代码)strSQL = "SELECT * FROM customers WHERE country='USA';"Set rs = conn.Execute(strSQL)' 处理查询结果Do Until rs.EOF' 处理每一行数据rs.MoveNextLoop' 释放资源rs.CloseSet rs = Nothing```3. 插入、更新和删除数据除了查询数据,VBA还可以用于插入、更新和删除数据库中的数据。
VB中对数据库的操作''数据库操作(SmDbCtrl)'Option ExplicitPublic DbStyle As StringDim CT As SmDataDiap''====================================== ================================== '创建一个SQLSERVER定形连接(连接到SQL)'函数名:CreateShape'参数: P_Cnn ADODB连接,ServerName 服务器名,DBname 数据库名,UserID 登录用户名,UPw 登录密码,Timerout 连接超时'返回值:TRUE 连接成功.FALSE 连接失败.'例: CreateShape P_Cnn,"CJH","cjherp001","sa","123",15'====================================== ==================================Public Function CreateShape(ByRef P_Cnn As ADODB.Connection, _ServerName As String, _DbName As String, _UserID As String, _UPw As String, _Optional Timerout As Long = 15) As BooleanDim ReturnVal As BooleanDim ConnStr As StringErr.ClearOn Error Resume NextConnStr = "Provider=MSDataShape;Data Provider=SQLOLEDB.1;Password=" & UPw & ";Persist Security Info=True;User ID=" & UserID & _";Initial Catalog=" & DbName & ";Data Source=" & ServerNameP_Cnn.ConnectionString = ConnStrP_Cnn.ConnectionTimeout = TimeroutP_/doc/9c5451052.html,mandTimeou t = TimeroutP_Cnn.OpenDoEventsIf Err.Number = 0 ThenDbStyle = "SQL"ReturnVal = TrueElseErr.ClearDbStyle = ""ReturnVal = FalseEnd IfCreateShape = ReturnValErr.ClearEnd Function'====================================== ================================== '创建一个连接(连接到SQL)'函数名:CreateSqlConn'参数: P_Cnn ADODB连接,ServerName 服务器名,DBname 数据库名,UserID 登录用户名,UPw 登录密码,Timerout 连接超时'返回值:TRUE 连接成功.FALSE 连接失败.'例: CreateSqlConn p_cnn,"CJH","cjherp001","sa","123",15'====================================== ================================== Public Function CreateSqlConn(ByRef P_Cnn As ADODB.Connection, _ServerName As String, _DbName As String, _UserID As String, _UPw As String, _Optional Timerout As Long = 15) As BooleanDim ReturnVal As BooleanErr.ClearOn Error Resume NextIf P_Cnn.State = adStateOpen And Not IsEmpty(adStateOpen) ThenP_Cnn.CloseEnd IfP_Cnn.Provider = "MSDASQL.1"P_Cnn.ConnectionString = "Driver={SQL Server};Server=" & ServerName & ";DataBase=" & DbName & ";Uid=" & UserID &";Pwd=" & UPw & ";APP=" & App.Path & ";WSID=" & UserID & ";Connect Timeout=" & Timerout & ";"P_Cnn.ConnectionTimeout = TimeroutP_/doc/9c5451052.html,mandTimeou t = TimeroutP_Cnn.OpenDoEventsIf Err.Number = 0 ThenDbStyle = "SQL"ReturnVal = TrueElseErr.ClearDbStyle = ""ReturnVal = FalseEnd IfCreateSqlConn = ReturnValErr.ClearEnd Function''====================================== ================================== '创建一个连接(连接到ACCESS)'函数名:CreateMdbConn'参数: MdbCnn ADODB连接,MdbPath ACCESS数据库路径,Provider JET引擎版本,UserID 登录用户名,UserWord 登录密码'返回值:TRUE 连接成功.FALSE 连接失败.'例: CreateMdbConn p_cnn,"C:\DEMO.MDB","sa","123"'====================================== ==================================Public Function CreateMdbConn(ByRef MdbCnn As ADODB.Connection, _MdbPath As String, _Optional Provider = "Microsoft.Jet.OLEDB.4.0;", _Optional UserID As String = "admin", _Optional UserWord As String = "") As BooleanDim ConStr As StringErr.ClearOn Error Resume NextIf MdbCnn.State = adStateOpen And Not IsEmpty(adStateOpen) ThenMdbCnn.CloseEnd If'/------------------------------------------------------------------ConStr = "Provider=" & Provider & _"Data Source=" & MdbPath & ";" & _"Jet OLEDB:Database Password=" & UserWord & ";" & _"User ID=" & UserID & ";"MdbCnn.ConnectionString = ConStrMdbCnn.OpenDoEventsIf Err.Number = 0 ThenDbStyle = "MDB"CreateMdbConn = TrueElseErr.ClearDbStyle = ""CreateMdbConn = FalseEnd IfErr.ClearEnd Function'====================================== ==============================='创建一个连接(连接到其它数据库类型)'函数名:CreateOtherConn'参数: OtherCnn ADODB连接,FilePath 数据库路径,UserName 登录用户名,PassWord 登录密码,DbType SmDbType枚举数据库类型'返回值:TRUE 连接成功.FALSE 连接失败.'例:'CreateOtherConn Cnn, "E:\CjhLx\dbf", , , FoxPro'StrSql = "select * from [employee.dbf]"'Set Rs = RsOpen(Cnn, StrSql)'Set DataGrid1.DataSource = Rs'====================================== ===============================Public Function CreateOtherConn(ByRef OtherCnn As ADODB.Connection, _FilePath As String, _Optional UserName As String = "admin", _Optional PassWord As String = "", _Optional DbType As SmDbType = Access) As BooleanDim ConnStr As StringDim DriveName(5) As StringDim tDbType(5) As StringDim UserPwd(5) As StringErr.Clear'/驱动程序DriveName(1) = "{Microsoft Access Driver (*.mdb)}"DriveName(2) = "{Microsoft Excel Driver (*.xls)}"DriveName(3) = "{Microsoft Text Driver (*.txt; *.csv)}"DriveName(4) = "{Microsoft Visual FoxPro Driver};SourceType=DBF"DriveName(5) = "{Microsoft dBase Driver (*.dbf)}"'/类型tDbType(1) = "MDB"tDbType(2) = "XLS"tDbType(3) = "TXT"tDbType(4) = "FDB"tDbType(5) = "DDB"'/用户名和密码.UserPwd(1) = "Uid=" & UserName & ";Pwd=" & PassWord & ";"UserPwd(2) = "Uid=" & UserName & ";Pwd=" & PassWord & ";"UserPwd(3) = ""UserPwd(4) = "Uid=" & UserName & ";Pwd=" & PassWord & ";"UserPwd(5) = "Uid=" & UserName & ";Pwd=" & PassWord & ";"On Error Resume NextIf OtherCnn.State = adStateOpen And Not IsEmpty(adStateOpen) ThenOtherCnn.CloseEnd IfConnStr = "Provider=MSDASQL.1;Persist Security Info=False;DRIVER=" & DriveName(DbType) & ";" & UserPwd(DbType) & "DBQ=" & FilePathOtherCnn.ConnectionString = ConnStrOtherCnn.OpenDoEventsIf Err.Number = 0 ThenDbStyle = tDbType(DbType)CreateOtherConn = TrueElseErr.ClearDbStyle = ""CreateOtherConn = FalseEnd IfErr.ClearEnd Function'====================================== =================================== '打开一个记录集'函数名:RsOpen'参数: P_Cnn ADODB连接,StrSql SQL查询语句,SetNothing 非连接方式(TRUE默认).连接方式(FALSE)'返回值:记录集'例: RsOpen P_CNN,"SELECT ACHGOODS.* FROM ACHGOODS WHERE GDSID='001''====================================== =================================== Public Function RsOpen(ByRef P_Cnn As ADODB.Connection, _StrSql As String, _Optional SetConnect As Boolean = True) As ADODB.RecordsetDim Rs As New ADODB.RecordsetErr.ClearOn Error Resume NextIf P_Cnn.State <> 1 Then P_Cnn.OpenIf SetConnect Then '使用非连接Rs.CursorLocation = adUseClient '使用客户端游标Rs.LockType = adLockBatchOptimistic '开放式批更新Rs.CursorType = adOpenKeyset '键集游标Else '使用连接(主要用于更新二进制字段)Rs.CursorLocation = adUseClientRs.CursorType = adOpenKeysetRs.LockType = adLockOptimistic '记录锁定End IfRs.Open StrSql, P_Cnn '执行SQLIf SetConnect Then Set Rs.ActiveConnection = Nothing '设置非连接If Err.Number = 0 ThenSet RsOpen = Rs.CloneElseSet RsOpen = NothingEnd IfRs.CloseSet Rs = NothingErr.ClearEnd Function'//执行一条SQL语句Public Function ExecSql(ByRef P_Cnn As ADODB.Connection, _StrSql As String) As BooleanErr.ClearIf P_Cnn.State <> 1 Then P_Cnn.OpenP_Cnn.Execute StrSqlExecSql = (Err.Number = 0)Err.ClearEnd Function''======================================================================== '建立数据库'函数名:CreateDataBase'参数: ServerName 服务器名,UserID 用户名(SA),Pwd 登录密码,DataBasName 建立的数据库名,DataBasPath 库文件目录的绝对路径'返回值:无'例: CreateDataBase "CJH","SA","123","CJHERP001","C:\DB"'====================================== ================================== Public Function CreateDataBase(ServerName As String, _UserID As String, _Pwd As String, _DataBasName As String, _DataBasPath As String) As BooleanDim A As Long, LeftName As StringDim DbC As New ADODB.ConnectionDim CreateBasSql As StringDim BagTrFlag As BooleanErr.ClearIf CreateSqlConn(DbC, ServerName, "Master", UserID, Pwd) ThenIf Right$(DataBasPath, 1) <> "\" Then DataBasPath = DataBasPath & "\"On Error GoTo Errhan:DataBasPath = Trim$(DataBasPath)If Len(DataBasPath) < 2 Then Exit FunctionIf Dir$(Left$(DataBasPath, 2), vbDirectory) = "" Then Beep: Exit Function '根目录是否存在'/---------------------------------------------------------If Right$(DataBasPath, 1) <> "\" Then DataBasPath = DataBasPath & "\"For A = 1 To Len(DataBasPath)If Mid$(DataBasPath, A, 1) = "\" ThenLeftName = Left$(DataBasPath, A)'/如果目录不存在,则先建立If Dir$(LeftName, vbDirectory) = "" Then MkDir LeftName: DoEventsEnd IfNextErr.ClearDbC.BeginTrans'/---------------------------------------------------------CreateBasSql = " CREATE DATABASE " & DataBasName & " ON (NAME=" & DataBasName & ",FILENAME='" & DataBasPath & DataBasName & ".mdf', SIZE=20,FILEGROWTH=4) " & _ " LOG ON (NAME=" & DataBasName & "Log" & ",FILENAME='" & DataBasPath & DataBasName & "Log.ldf',SIZE=20,FILEGROWTH=0)"DbC.Execute CreateBasSql/doc/9c5451052.html,mitTransEnd IfErrhan:If Err.Number <> 0 Then DbC.RollbackTransCreateDataBase = (Err.Number = 0)DbC.CloseSet DbC = NothingErr.ClearEnd Function''建立数据表'函数名:CreageDbT ab'参数: P_Cnn ADO连接,CreateTableSql 建表字符串'返回值:无'例:CreateDbTab P_CNN,CreateTabStrPublic Function CreateDbTab(ByRef P_Cnn As ADODB.Connection, _CreateTableSql As String) As BooleanErr.ClearOn Error Resume NextIf P_Cnn.State <> 1 Then P_Cnn.OpenP_Cnn.BeginTransP_Cnn.Execute CreateTableSqlP_/doc/9c5451052.html,mitTransCreateDbTab = (Err.Number = 0)Err.ClearEnd Function''得到服务器上所有的数据库名'函数名:GetAllDatabases'参数: ServerName 服务器名,UserID 登录用户名(SA),Pwd 登录密码'返回值:数据库名的字符串数组'例: GetAllDatabases "CJH","SA","123"Public Function GetAllDatabases(ServerName As String, _UserID As String, _Pwd As String, _Optional strDriver As String = "SQL Server") As String()Dim PCnn As New ADODB.ConnectionDim RsSchema As New ADODB.RecordsetDim ConnStr As StringDim ReturnVal() As StringDim ReID As LongErr.ClearOn Error Resume NextConnStr = "Driver={" & strDriver & "};"ConnStr = ConnStr & "Server=" & ServerName & ";"ConnStr = ConnStr & "uid=" & UserID & ";pwd=" & Pwd & ";"PCnn.ConnectionString = ConnStrPCnn.Open: ReID = 0Set RsSchema = PCnn.OpenSchema(adSchemaCatalogs)Do Until RsSchema.EOFReID = ReID + 1ReDim Preserve ReturnVal(ReID - 1)ReturnVal(ReID - 1) = RsSchema!Catalog_NameRsSchema.MoveNextLoopIf PCnn.State = adStateOpen And Not IsEmpty(adStateOpen) ThenPCnn.CloseEnd IfGetAllDatabases = ReturnValErr.ClearEnd Function''取某数据库下的数据表'函数名:GetDbTabS'参数: P_Cnn ADO连接'返回值:包含数据表的字符串数组'例: TabArr=GetDbTabS(P_CNN)Public Function GetDbTabs(ByRef P_Cnn As ADODB.Connection) As String()Dim RstSchema As ADODB.RecordsetDim strCnn As StringDim ReturnVal() As StringDim ReID As LongErr.ClearOn Error Resume NextIf P_Cnn.State <> 1 Then P_Cnn.OpenSet RstSchema = P_Cnn.OpenSchema(adSchemaTables)ReID = 0Do Until RstSchema.EOFIf UCase$(Left$(RstSchema.Fields("TABLE_TYPE"), 3)) <> "SYS" ThenReID = ReID + 1ReDim Preserve ReturnVal(ReID - 1)ReturnVal(ReID - 1) = RstSchema.Fields("TABLE_NAME") ' & ":" & RstSchema!TABLE_TYPEEnd IfRstSchema.MoveNextLoopRstSchema.CloseSet RstSchema = NothingGetDbTabs = ReturnValErr.ClearEnd Function'====================================== ====================================== '取临时表名'函数名:GetTmpName'参数:'返回值:一个唯一的临时表名'例: TmpName=GetTmpName()'(注:临时表名="#TmpTal" & 累加数 & 毫秒数)'====================================== ====================================== Public Function GetTmpName(Optional UserName As String= "") As StringDim ReturnVal As StringDim TimVal As StringStatic K As LongErr.ClearOn Error Resume NextK = K + 1If K >= 2147483645# Then K = 0 '累加数TimVal = timeGetTime() '毫秒数ReturnVal = "#" & "TmpTal" & UserName & TimVal & CT.ToStr(K)GetTmpName = IIf(Err.Number = 0, ReturnVal, "")Err.ClearEnd Function''====================================== ================================='对表格或记录集以 INSERT INTO 保存.'函数名:GetInsertIntoSql'参数: P_Cnn ADO连接,mRs 记录集,DateTabName 目标数据表名'返回值:SQL语句'例: InsertIntoDB P_CNN,RS,"ACHGOODS"'====================================== =================================Public Function InsertIntoDB(ByRef P_Cnn As ADODB.Connection, _DateTabName As String, _ByRef MRs As ADODB.Recordset) As BooleanDim StrSql As StringDim TabFied() As SmFiedArrtr '数据库字段Dim SaveFied() As SmFiedArrtr '表格与数据库同时存在的字段Dim SaveID As LongDim AddSave As BooleanDim AddFile As SmFiedArrtrDim FileCon As StringDim FldVal As StringDim TmpVal As VariantDim FldType As LongDim A As Long, B As Long, I As LongDim FldValColl As New Collection'/--------------------------------------------------------------------------------------Err.ClearOn Error Resume NextIf (MRs.EOF And MRs.BOF) Then Exit FunctionErase TabFiedIf P_Cnn.State <> 1 Then P_Cnn.OpenTabFied = GetTabFldAttrib(P_Cnn, DateTabName) '取数据库字段If UBound(TabFied, 1) > 0 ThenSaveID = 0: AddSave = FalseFor A = 0 To MRs.Fields.Count - 1For B = 0 To UBound(TabFied, 1)If UCase$(TabFied(B).FieldName) =UCase$(MRs.Fields(A).Name) Then'处理重复的字段名.Err.ClearFldValColl.Add TabFied(B), "_" & UCase$(TabFied(B).FieldName)If Err.Number <> 457 ThenSaveID = SaveID + 1ReDim Preserve SaveFied(SaveID - 1)SaveFied(SaveID - 1) = TabFied(B)End IfExit ForEnd IfNextNext'/---------------------------------------------------------------------------------------'/保存字段列表For A = 0 To UBound(SaveFied, 1) '字段列表If SaveFied(A).FieldType <> 205 ThenFileCon = FileCon & "[" & SaveFied(A).FieldName & "],"End IfNext AFileCon = Left$(FileCon, Len(FileCon) - 1)MRs.MoveFirstWhile Not MRs.EOFFldVal = ""For I = 0 To UBound(SaveFied, 1)FldType = SaveFied(I).FieldType '字段类型If FldType <> 205 Then '将IMAGE字段排除TmpVal = CT.ToStr(MRs.Fields(SaveFied(I).FieldName)) '字段值If Len(TmpVal) = 0 Then '对空或NULL的处理Select Case FldTypeCase 2, 3, 4, 5, 6, 17, 131 '数值类型If SaveFied(I).FieldIsNull <> 0 Then '可接受NULLFldVal = FldVal & "NULL,"ElseFldVal = FldVal & "0,"End IfCase 135 '日期If SaveFied(I).FieldIsNull <> 0 Then '可接受NULLFldVal = FldVal & "NULL,"ElseIf DbStyle = "MDB" ThenFldVal = FldVal & "#" & Now() & "#,"ElseFldVal = FldVal & "'" & Now() & "',"End IfEnd IfCase Else '其它类型If SaveFied(I).FieldIsNull <> 0 ThenFldVal = FldVal & "NULL,"ElseFldVal = FldVal & "'',"End IfEnd SelectElseSelect Case FldTypeCase 2, 3, 4, 5, 6, 17, 131 '数值类型FldVal = FldVal & "" & TmpVal & ","Case 135If DbStyle = "MDB" ThenFldVal = FldVal & "#" & TmpVal & "#,"ElseFldVal = FldVal & "'" & TmpVal & "',"End IfCase Else '其它类型FldVal = FldVal & "'" & Replace(TmpVal, "'", "''") & "',"End SelectEnd IfEnd IfNextFldVal = Left$(FldVal, Len(FldVal) - 1)StrSql = "INSERT INTO [" & DateTabName & "] (" & FileCon & ") VALUES (" & FldVal & ")"P_Cnn.Execute StrSqlMRs.MoveNextWendEnd IfSet FldValColl = NothingInsertIntoDB = (Err.Number = 0)Err.ClearEnd Function''对表格或记录集以 UPDATE 保存.'函数名:GetUpdataSql'参数: P_Cnn ADO连接,mRs 记录集,DateTabName 目标数据表名,WhereStr 更新条件'返回值:SQL语句'例: UpdataDB P_CNN,RS,"ACHGOODS","WHERE GDSID='001'"Public Function UpdataDB(ByRef P_Cnn As ADODB.Connection, _DateTabName As String, _ByRef MRs As ADODB.Recordset, _WhereStr As String) As BooleanDim StrSql As StringDim TabFied() As SmFiedArrtr '数据库字段Dim SaveFied() As SmFiedArrtr '表格与数据库同时存在的字段Dim SaveID As LongDim AddSave As BooleanDim AddFile As SmFiedArrtrDim FileCon As StringDim FldVal As StringDim TmpVal As VariantDim FldType As LongDim A As Long, B As Long, I As Long'/----------------------------------------------------------------------------------------Err.ClearOn Error Resume Next'If MRs.EOF And MRs.BOF Then Exit FunctionErase TabFiedIf P_Cnn.State <> 1 Then P_Cnn.OpenTabFied = GetTabFldAttrib(P_Cnn, DateTabName) '取数据库字段If UBound(TabFied, 1) > 0 ThenSaveID = 0For A = 0 To MRs.Fields.Count - 1For B = 0 To UBound(TabFied, 1)If UCase$(TabFied(B).FieldName) = UCase$(MRs.Fields(A).Name) ThenSaveID = SaveID + 1ReDim Preserve SaveFied(SaveID - 1)SaveFied(SaveID - 1) = TabFied(B)Exit For '找到数据库与记录集中相同的值,跳出循环.End IfNextNext'/--------------------------------------------------------------------------------------MRs.MoveFirstWhile Not MRs.EOFFldVal = ""For I = 0 To UBound(SaveFied, 1)FldType = SaveFied(I).FieldType '字段类型If FldType <> 205 Then '将IMAGE字段排除TmpVal = CT.ToStr(MRs.Fields(SaveFied(I).FieldName)) '字段值If Len(TmpVal) = 0 Then '对空或NULL的处理Select Case FldTypeCase 2, 3, 4, 5, 6, 17, 131 '数值类型If SaveFied(I).FieldIsNull <> 0 Then '可按受NULLFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]=NULL"ElseFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]=0"End IfCase 135 '日期时间If SaveFied(I).FieldIsNull <> 0 Then '可接受NULLFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]=NULL"ElseIf DbStyle = "MDB" ThenFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]=#" & Now() & "#"ElseFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]='" & Now() & "'"End IfEnd IfCase Else '其它类型If SaveFied(I).FieldIsNull <> 0 ThenFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]=NULL"ElseFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]=''"End IfEnd SelectElseSelect Case FldTypeCase 2, 3, 4, 5, 6, 17, 131 '数值类型FldVal = FldVal & ",[" & SaveFied(I).FieldName & "]=" & TmpValCase 135If DbStyle = "MDB" ThenFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]=#" & TmpVal & "#"ElseFldVal = FldVal & ",[" & SaveFied(I).FieldName & "]='" & TmpVal & "'"End IfCase Else '其它类型FldVal = FldVal & ",[" & SaveFied(I).FieldName & "]='" & Replace(TmpVal, "'", "''") & "'"End SelectEnd IfEnd IfNextFldVal = " Set " & Right$(FldVal, Len(FldVal) - 1) & " " & WhereStrStrSql = "UpDate [" & DateTabName & "]" & FldValP_Cnn.Execute StrSqlMRs.MoveNextWendEnd IfUpdataDB = (Err.Number = 0)Err.ClearEnd Function''取某数据表下所有的字段及其属性'函数名:GetTabFldAttrib'参数: P_Cnn ADO连接,DateTabName 目标数据表名'返回值:SmFiedArrtr 类型数组'例: FiedAtrrib=GetTabFldAttrib(P_CNN,"ACHGOODS")Public Function GetTabFldAttrib(ByRef P_Cnn As ADODB.Connection, _DbTableName As String) As SmFiedArrtr()Dim A As LongDim StrSql As StringDim Rs As New ADODB.RecordsetDim ReturnVal() As SmFiedArrtrDim ReID As LongErr.ClearOn Error Resume NextIf P_Cnn.State <> 1 Then P_Cnn.OpenStrSql = "Select T op 1 * From [" & DbTableName & "]" '取字段名Set Rs = RsOpen(P_Cnn, StrSql)Set Rs.ActiveConnection = NothingErase ReturnVal: ReID = 0For A = 0 To Rs.Fields.Count - 1ReID = ReID + 1ReDim Preserve ReturnVal(ReID - 1)ReturnVal(ReID - 1).FieldType = Rs.Fields(A).Type '数据类型ReturnVal(ReID - 1).FieldName = Rs.Fields(A).Name '字段名ReturnVal(ReID - 1).FieldIsNull = Rs.Fields(A).Attributes And adFldIsNullable '是否可接受NULLReturnVal(ReID - 1).FieldDefSize = Rs.Fields(A).DefinedSize '定义的数据长度ReturnVal(ReID - 1).FieldActSize = 0 '实际数据长度(因只有字段名),故此值是0NextSet Rs = NothingGetTabFldAttrib = ReturnValErr.ClearEnd Function''取某数据表下除IMAGE字段名的所有字段名'函数名:GetTabFldName'参数: P_Cnn ADO连接,DateTabName 目标数据表名'返回值:String 类型数组'例: StrFld=GetTabFldName(P_CNN,"ACHGOODS")Public Function GetTabFldName(ByRef P_Cnn As ADODB.Connection, _DbTabname As String) As StringDim N As LongDim ReturnVal As StringDim FltArt() As SmFiedArrtrErr.ClearOn Error Resume NextIf P_Cnn.State <> 1 Then P_Cnn.OpenReturnVal = ""FltArt() = GetTabFldAttrib(P_Cnn, DbT abname)For N = 0 To UBound(FltArt)If FltArt(N).FieldType <> 205 ThenReturnVal = ReturnVal & DbTabname & "." & FltArt(N).FieldName & ","End IfNextReturnVal = Left$(ReturnVal, Len(ReturnVal) - 1)GetTabFldName = IIf(Err.Number = 0,ReturnVal, "")Err.ClearEnd Function''取记录集下所有的字段及其属性'函数名:GetRsAttrib'参数: mRs 记录集'返回值:FiedArrtr类型数组'例: RsAtrrib=GetRsAttrib(Rs)Public Function GetRsAttrib(ByRef MRs As ADODB.Recordset) As SmFiedArrtr()Dim A As LongDim ReturnVal() As SmFiedArrtrDim Rs As New ADODB.RecordsetDim ReID As LongErr.ClearSet Rs = MRs.CloneErase ReturnValFor A = 0 To Rs.Fields.Count - 1ReID = ReID + 1ReDim Preserve ReturnVal(ReID - 1)ReturnVal(ReID - 1).FieldType = Rs.Fields(A).Type '数据类型ReturnVal(ReID - 1).FieldName = Rs.Fields(A).Name '字段名ReturnVal(ReID - 1).FieldIsNull = Rs.Fields(A).Attributes And adFldIsNullable '是否可接受NULLReturnVal(ReID - 1).FieldDefSize = Rs.Fields(A).DefinedSize '定义的数据长度ReturnVal(ReID - 1).FieldActSize = Rs.Fields(A).ActualSize '数据的实际长度NextSet Rs = NothingGetRsAttrib = ReturnValErr.ClearEnd Function''取[窗体控件]与[字段]的对应关系'函数名:GetConT oFld'参数: P_Cnn ADODB.Connection,SelectStr SQL语句.'返回值:SmCtrlCorRs 类型数组'例: FrmAndFied=GetConT oFld(P_Cnn,Me)'*窗体控件命名规则:1-3 控件类型,4 W读写标志,R只读标志,其它,不作处理, 5 数据类型,6----最后.相对的字段名'*关于数据类型:C -字符 I 整数 F 浮点数 A 金额 U 单价 D 日期 T 时间Public Function GetConToFld(ByRef P_Cnn As ADODB.Connection, ByRef Frm As Object, SelectStr As String) As SmCtrlCorRs()Dim RevArr() As SmCtrlCorRsDim StrSql As StringDim Rs As New ADODB.RecordsetErr.ClearOn Error Resume Next' If (Frm Is Nothing) Or (P_Cnn Is Nothing) Then Exit Function ' If Len(Trim$(DbTabname)) = 0 Then DbTabname = /doc/9c5451052.html,'' StrSql = "SELECT TOP 1 * FROM [" & DbTabname & "]"StrSql = SelectStrIf P_Cnn.State <> 1 Then P_Cnn.OpenSet Rs = RsOpen(P_Cnn, StrSql)RevArr = GetConT oRs(Frm, Rs)GetConT oFld = RevArrSet Rs = NothingErase RevArrErr.ClearEnd Function''取[窗体控件]与[记录集]的对应关系'函数名:GetConT oRs'参数: Frm 源窗体名,mRs 源记录集'返回值:SmCtrlCorRs 类型数组'例: FrmAndFied=GetConT oRs(Me,Rs)'*窗体控件命名规则:1-3 控件类型,4 W读写标志,R只读标志,其它,不作处理, 5 数据类型,6----最后.相对的字段名'*关于数据类型:C -字符 I 整数 F 浮点数 A 金额 U 单价 D 日期 T 时间Public Function GetConToRs(ByRef m_Frm As Object, _ByRefMRs As ADODB.Recordset) As SmCtrlCorRs()Dim A As Long, B As LongDim SaveID As LongDim AddSave As BooleanDim ArrayCon() As Control '控件Dim TabFied() As SmFiedArrtr '数据库字段Dim SetFied() As String '同时存在的字段Dim ReturnVal() As SmCtrlCorRs '定义一个结构数组,用于返回Dim AddFile As SmCtrlCorRsDim Rs As New ADODB.RecordsetDim SId As LongDim FrmCon As ControlDim ConName As StringDim ConID As LongDim Frm As FormErr.ClearOn Error Resume NextErase ArrayCon: ConID = 0Set Frm = m_FrmFor Each FrmCon In Frm.Controls '取控件,放入一个数组中ConName = /doc/9c5451052.html,'/将图片框控件排除If UCase$(TypeName(FrmCon)) = UCase$("PictureBox") Or UCase$(TypeName(FrmCon)) = UCase$("Image") Or UCase$(TypeName(FrmCon)) = UCase$("SMPICBOX") ThenElseIf Len(ConName) > 5 ThenIf UCase$(Mid$(ConName, 4, 1)) = "W" Or UCase$(Mid$(ConName, 4, 1)) = "R" ThenConID = ConID + 1ReDim Preserve ArrayCon(ConID - 1)Set ArrayCon(ConID - 1) = FrmConEnd IfEnd IfEnd IfNext'/---------------------------------------------------------------------------------------------Erase TabFiedSet Rs = MRs.CloneIf Rs.EOF And Rs.BOF ThenRs.AddNewEnd IfTabFied = GetRsAttrib(MRs) '取字段属性If UBound(TabFied, 1) > 0 ThenSaveID = 0: AddSave = FalseFor A = 0 To UBound(TabFied, 1)For B = 0 To UBound(ArrayCon, 1)ConName = UCase$(Right$(ArrayCon(B).Name, Len(ArrayCon(B).Name) - 5))。
VB使用ADODB操作数据库的常用方法在 VB 中,可以使用 ADODB (ActiveX Data Objects) 对象来操作数据库。
ADODB 提供了各种对象和方法,以便于连接到数据库,执行查询和更新操作。
以下是VB使用ADODB对象操作数据库的常用方法:1.引用ADODB对象库在 VB 项目中,首先需要引用 ADODB 对象库。
在菜单栏选择 "项目",然后选择 "引用"。
在引用对话框中,勾选 "Microsoft ActiveX Data Objects x.x Library",然后点击确定。
2. 创建 Connection 对象Connection 对象用于建立与数据库的连接。
可以使用以下代码创建Connection 对象:```Dim conn As New ADODB.Connectionconn.Provider = "Microsoft.ACE.OLEDB.12.0" ' 数据库提供程序conn.ConnectionString = "Data Source=<数据库路径>;Persist Security Info=False;" ' 数据库连接字符串conn.Open ' 打开数据库连接```3. 创建 Recordset 对象Recordset 对象用于保存数据库查询结果。
可以使用以下代码创建Recordset 对象:```Dim rs As New ADODB.Recordset```4.执行查询操作可以使用 Connection 对象的 Execute 方法执行 SQL 查询语句,并将结果保存到 Recordset 对象中。
以下是一个例子:```rs.Open "SELECT * FROM <表名>", conn```可以使用 rs 对象的 MoveNext 和 EOF 属性来遍历查询结果:```Do While Not rs.EOF'处理每一行数据rs.MoveNextLoop```5.执行更新操作可以使用 Connection 对象的 Execute 方法执行 SQL 更新语句,例如插入、修改或删除数据。
VB 用Adodc 控件连接sql server 2000 数据库的方法提供提序理抿’高圾I 斯有, 选择您希望堆接的數据Micro soft QLE DB der for SQL Stirrer Ml crrosof t 0L£ DB Simpl e Pr GVI der OLE D£ Fr QV I ier fsr MSirectory ServiG^sS^L Server Repli c aiion 00 DB Provi der f QT UTS下一歩題)»配有插图的详细用法请看jiben06@ 邮箱里的邮箱。
下面是文字介绍VB 用Adodc 控件连接sql server 2000 数据库的方法:1、打开vb 新建“标准EXE ;Mi crosoftHi crosoft Microsoft Microsoft Microsoft Microsoft Micrssoft Microsoft NicroEoftDB Pravi «ier for IB Fr Qvi -ler far DB Pr ovi «ler £oir DB Fr ovi der for DB Frovi «ier for DB Pr ovi Jer DB F T ovi derBata. fflLRing Serific 皀兀 STS F^ck^jges Indexing Service Internet Fublishing ODBC Drivers for OLAP S er TO ce E 8. 0 for Oracle确定HO.h帮助 I4. 0 OIJ BB Pxo^i der& iz >ActiveX EXE ActiveX PELAvti veK 控件Ac 丈 档 Eit«DHTML 应用程尊IIS 应用程取消 帮审⑩厂不再显恭这牛对话框迪〕2、在菜单栏点击“工程”,弹出下拉菜单,鼠标单击“部件”;■工程疋〕榕式咸调试⑪运行曲 且粛刖面体(£)亀诉加iflDI © 您竊加模块is 质加类複块X ) '賀添抑用尸控件迪) 衙 醸加雇性更広);:寸“勺彳」h-- L I. I 乔方n w "匚1裁3r质力D Citi Report,|廉力|] DHINL Fa 事乔加 Lfct« ErLvirom.erit 更雪ActiveX 设计器⑥…► 南加文件电)… CtrHD | 移除 Form I ® I___ : __ : ________ : _________________ J l◎引用®…\部件位),…Ctrl+r工程1雇性电)一3、在控件选项卡下面选择"Microsoft ADO Data Control 6.0(SP6)" 和新建闻再丨董新.ActiveX S 档Dll"Microsoft DataGrid Control 6.0 (SP6)", 单击“确定”按钮;部件LEUlAt tr Icti ¥«)[ Control nodul* Ma croifrftikccos B&rC^dr Control 9 0 Microsoft ActiveMovieControl血crogoft ADO B臥备CeiLtr^l 6 0 侶PE)Agrht C 畫・0Mi crssoft Chwt Cwitr^l 5- 0 WLSMi croxeft C OM Central & 0Microsoft CoMonMi cros^ft* Ml 1TFQS <>£tMi eras fittMierasfrft DiiJL>o理CorLtrel E. 0 (£D&t* Boimd Usd CflMr^ls 6, CDftttCri A匚砸ti"。
VB使用ADODB操作数据库的常用方法ADO常用方法下面是我所掌握的使用ADO对数据库操作的一些常用方法,主要是提供给初学者作为参考,有不对的地方请指正.如有补充不胜荣幸准备工作========Dim conn As New ADODB。
Connection ’创建一个Connection 实例,在这里使用New等于将Dim和Set合并为一段代码执行Dim rs As ADODB。
Recordset ’创建一个Recordset 实例,不使用New 是因为,经常需要重复使用Set,因此没必要在这里使用Dim CnStr As String,Sql As String’创建两个字符串变量分别存放两个集合的SQL语句代码段1、装载数据库(不属于Recordset集合)=============Dim FileNamw$,DbIp$,DbName$, DbUser$,DbPw$'以上5个字符串变量分别表示文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员密码FileName = App。
Path & "\’数据库名'”DbIp = ”数据库地址"DbName = ”数据库名"DbUser = "数据操作员用户名”DbPw = "操作员密码”'以上变量根据数据库类型的不同而不同,有可能只需要1至两个变量’1)连接Access数据库:'-—-----——-——-——-—--CnStr = "PROVIDER=microsoft。
jet.oledb。
3.51;persist security info =false;data source="& FileName & ”;Jet OLEDB:Database Password="&DbPw’2)连接Oracle数据库:'--—-—---—-——-——-——-CnStr = "PROVIDER=MSDAORA。
VB用ADO和DAO连接数据库的几种方法-、用DAO控件连接数据库1.与Access2000数据库连接Private Sub Command1_Click()'也可直接在控件属性中设置以下各项但在控件属性中不能写入密码'只有在数据数没有密码的情况下可以省略Data1.RefreshData1.Connect="Access2000;"Data1.DatabaseName=App.Path+"\chncmadb.mdb"'数据库没有密码此句可省Data1.Connect=";pwd=123456"'Data1.RecordSource="耕地资源管理单元属性数据表2004"Data1.RecordSource="select*from耕地资源管理单元属性数据表2004" Data1.Refresh’move后才能正确显示记录个数End Sub2.与没有密码的DBF文件数据库连接Private Sub Command2_Click()Data1.Connect="dBASE III;"Data1.DatabaseName=App.Path'Data1.RecordSource="DBF"Data1.RecordSource="select*from dbf"Data1.Refresh’move后才能正确显示记录个数End Sub3.与没有密码的Excel文件数据库连接Private Sub Command3_Click()Data1.Connect="Excel8.0;"Data1.DatabaseName=App.Path&"\EXcel.xls"Data1.RecordSource="select*from[EXcel.xls]"Data1.Refresh’move后才能正确显示记录个End Sub二、用DAO代码连接数据库'在使用DAO对象前应选定Visual Basic菜单下的[工程]中的引用了菜单中的[Microsoft DAO3.6Object Library]选项,或其它版本1.DAO代码与Access数据库连接Private Sub Command1_Click()Dim Db As DatabaseDim Rs As Recordset'以共享、读写方式打开'如果无密码最后一个参数可以不要SetDb=OpenDatabase(App.Path&"\chncmadb.mdb",False,False, ";pwd=123456")'不需要move来更新记录个数'Set Rs=Db.OpenRecordset("耕地资源管理单元属性数据表2004")'需要move来更新记录个数Set Rs=Db.OpenRecordset("select*from[耕地资源管理单元属性数据表2004]")If Rs.RecordCount>0ThenRs.MoveLastRs.MoveFirstEnd IfEnd Sub2.DAO代码与没有密码的DBF文件数据库连接Private Sub Command2_Click()Dim Db As DatabaseDim Rs As Recordset'以共享、读写方式打开Set Db=OpenDatabase(App.Path,False,False,"dbase III;")'不需要move来更新记录个数'Set Rs=Db.OpenRecordset("DBF")’需要move来更新记录个数Set Rs=Db.OpenRecordset("select*from[DBF]")If Rs.RecordCount>0ThenRs.MoveLastRs.MoveFirstEnd IfEnd sub3.'DAO代码与没有密码的Excel文件数据库连接Private Sub Command3_Click()Dim Db As DatabaseDim Rs As Recordset'以共享、读写方式打开'如果无密码最后一个参数可以不要SetDb=OpenDatabase(App.Path&"\EXcel.xls",False,False,"Excel 8.0;") '不需要move来更新记录个数'Set Rs=Db.OpenRecordset("EXcel.xls")'表格中的工作目录sheet'需要move来更新记录个数Set Rs=Db.OpenRecordset("select*from[EXcel.xls]")'表格中的工作目录sheet'If Rs.RecordCount>0ThenRs.MoveLastRs.MoveFirstEnd IfEnd Sub三、用ADO控件连接数据库'也可直接在控件属性中设置以下各项1.ADO控件与Access2000数据库连接Private Sub Command1_Click()'连接有密码的Access数据库'Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&App.Path&"\chncmadb1.mdb;Jet OLEDB:DataBase PASSWORD=123456"'连接没有密码的Access数据库Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4 .0;Data Source="&App.Path&"\chncmadb.mdb;Persist Security Info=False"'Adodc1.RecordSource="[耕地资源管理单元属性数据表2004]"Adodc1.RecordSource="select*from[耕地资源管理单元属性数据表2004]"Adodc1.RefreshSet DataGrid1.DataSource=Adodc1DataGrid1.RefreshEnd Sub2.'ADO控件与DBF表连接Private Sub Command2_Click()'Adodc1.ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files;DBQ="&App.Path&";SourceType=DBF;"'Adodc1.ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=DSN=Visual FoxPro Tables;UID=;SourceDB=”&app.path&”;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Colla te=Machine;N ull=Yes;Deleted=Yes;"'Adodc1.ConnectionString="Provider=MSDASQL.1;PersistSecurity Info=False;Extended Properties=DSN=dBASE Files;DBQ=”&app.path&”;;DefaultDir=”&app.path&”;DriverId=533;MaxBufferSize=2048;PageTimeout=5;"'能使表名长度不受限制Adodc1.ConnectionString="Provider=MSDASQL.1;Driver=M icrosoft Visual Foxpro Driver;SourceDB="&App.Path&";SourceType=DBF;Locale Identifier=2052"'Adodc1.RecordSource="[DBF1]"Adodc1.RecordSource="select*from DBF1"Adodc1.RefreshSet DataGrid1.DataSource=Adodc1DataGrid1.RefreshEnd Sub3.'ADO控件与Excel表连接Private Sub Command3_Click()'下面一句测试未能通过'Adodc1.ConnectionString="DataProvider=MSDASQL.1;driver=Microsoft Excel Driver*.xls);DBQ="& App.Path&"\EXcel.xls"'Adodc1.ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=DSN=Excel Files;DBQ="&App.Path& "\EXcel.xls;DefaultDir=”&app.path &”;DriverId=790;MaxBufferSize=2048;PageTimeout=5;"Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="&App.Path&"\EXcel.xls;Extended Properties='Excel 8.0;HDR=Yes'"'Adodc1.RecordSource="[EXcel.xls]"Adodc1.RecordSource="select*from[EXcel.xls]"Adodc1.RefreshSet DataGrid1.DataSource=Adodc1DataGrid1.RefreshEnd Sub4.'ADO控件与Oracle数据库连接Private Sub Command4_Click()'Adodc1.ConnectionString="Provider=MSDAORA.1;Password=chncmadb;UserID=chncmadb;Data Source=towebserver;Persist Security Info=True"Adodc1.ConnectionString="Provider=OraOLEDB.Oracle.1;Pa ssword=chncmadb; Persist Security Info=True;User ID=chncmadb;Data Source=towebserver"'Adodc1.RecordSource="T320481TR012004"'表名不能加方括号Adodc1.RecordSource="select*from T320481TR012004"Adodc1.RefreshSet DataGrid1.DataSource=Adodc1DataGrid1.RefreshEnd Sub5.'ADO控件与SQLserver数据库连接'未测试Private Sub Command5_Click()Adodc1.ConnectionString="Provider=SQLOLEDB.1;Password=111;Persist Security Info=True;User ID=111;Initial Catalog=111;Data Source=111"'Adodc1.RecordSource="T320481TR012004"Adodc1.RecordSource="select*from T320481TR012004"Adodc1.RefreshSet DataGrid1.DataSource=Adodc1DataGrid1.RefreshEnd Sub四、用ADO代码连接数据库'在使用ADO对象前应选定Visual Basic菜单下的[工程]中的引用了菜单中的[Microsoft.ActiveX Data Object2.5Library]选项,或其它版本1.'ADO代码与Access2000数据库连接Private Sub Command1_Click()Dim AdoCnn As ADODB.ConnectionDim AdoRs As ADODB.RecordsetSet AdoCnn=New ADODB.ConnectionSet AdoRs=New ADODB.RecordsetAdoCnn.CursorLocation=adUseClient'.open后面的字符串可以参考ADO控件连接.ConnectionString 后面的的字符串AdoCnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& App.Path&"\chncmadb1.mdb;Jet OLEDB:DataBase PASSWORD=123456"AdoRs.Open"select*from[耕地资源管理单元属性数据表2004]",AdoCnn, adOpenDynamic,adLockPessimistic,adCmdText Set DataGrid1.DataSource=AdoRsSet AdoRs=NothingSet AdoCnn=NothingEnd Sub2.'ADO代码与DBF表连接Private Sub Command2_Click()Dim AdoCnn As ADODB.ConnectionDim AdoRs As ADODB.RecordsetSet AdoCnn=New ADODB.ConnectionSet AdoRs=New ADODB.RecordsetAdoCnn.CursorLocation=adUseClient'.open后面的字符串可以参考ADO控件连接.ConnectionString 后面的的字符串AdoCnn.Open"Provider=MSDASQL.1;Driver=Microsoft Visual Foxpro Driver;SourceDB="&App.Path&";SourceType=DBF;Locale Identifier=2052"AdoRs.Open"select*from[DBF1]",AdoCnn,adOpenDynamic, adLockPessimistic,adCmdTextSet DataGrid1.DataSource=AdoRsSet AdoRs=NothingSet AdoCnn=NothingEnd Sub3.'ADO代码与Excel表连接Private Sub Command3_Click()Dim AdoCnn As ADODB.ConnectionDim AdoRs As ADODB.RecordsetSet AdoCnn=New ADODB.ConnectionSet AdoRs=New ADODB.RecordsetAdoCnn.CursorLocation=adUseClient'.open后面的字符串可以参考ADO控件连接.ConnectionString 后面的的字符串AdoCnn.Open"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source="&App.Path&"\EXcel.xls;ExtendedProperties='Excel8.0;HDR=Yes'"AdoRs.Open"select*from[EXcel.xls]",AdoCnn,adOpenDynam ic, adLockPessimistic,adCmdTextSet DataGrid1.DataSource=AdoRsSet AdoRs=NothingSet AdoCnn=NothingEnd Sub4.'ADO代码与Oracle数据库连接Private Sub Command4_Click()Dim AdoCnn As ADODB.ConnectionDim AdoRs As ADODB.RecordsetSet AdoCnn=New ADODB.ConnectionSet AdoRs=New ADODB.RecordsetAdoCnn.CursorLocation=adUseClient'.open后面的字符串可以参考ADO控件连接.ConnectionString 后面的的字符串AdoCnn.Open"Provider=OraOLEDB.Oracle.1;Password=chnc madb;Persist Security Info=True;User ID=chncmadb;Data Source=towebserver"AdoRs.Open"select*fromT320481TR012004",AdoCnn,adOpenDynamic, adLockPessimistic,adCmdTextSet DataGrid1.DataSource=AdoRsSet AdoRs=NothingSet AdoCnn=NothingEnd Sub5.'ADO代码与SQLserver数据库连接'未测试Private Sub Command5_Click()Dim AdoCnn As ADODB.ConnectionDim AdoRs As ADODB.RecordsetSet AdoCnn=New ADODB.ConnectionSet AdoRs=New ADODB.RecordsetAdoCnn.CursorLocation=adUseClient'.open后面的字符串可以参考ADO控件连接.ConnectionString 后面的的字符串AdoCnn.Open"Provider=SQLOLEDB.1;Password=111;Persist SecurityInfo=True;User ID=111;Initial Catalog=111;Data Source=111"AdoRs.Open"select*fromT320481TR012004",AdoCnn,adOpenDynamic, adLockPessimistic,adCmdTextSet DataGrid1.DataSource=AdoRsSet AdoRs=NothingSet AdoCnn=NothingEnd Sub。
VBA中数据库操作与连接的实现方法在VBA编程中,数据库操作与连接是非常重要的一部分。
使用VBA可以连接各种数据库,如Access、SQL Server、Oracle等,并对数据库进行各种操作,如查询、插入、更新和删除数据。
本文将介绍VBA中实现数据库操作与连接的方法。
一、连接数据库在VBA中连接数据库常用的方法是使用ADO (ActiveX Data Objects)来建立与数据库的连接。
ADO是一套由微软提供的用于操纵各种数据源的组件。
下面是一个简单的连接Access数据库的示例:```vbaDim conn As New ADODB.ConnectionDim strConn As StringstrConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\路径\数据库文件.accdb"conn.Open strConn```上述代码中,我们首先声明了一个ADODB.Connection 类型的变量conn,并创建了一个字符串变量strConn,用于存储连接字符串。
然后,我们通过conn.Open方法打开数据库连接,传入连接字符串作为参数。
连接字符串中的Provider表示数据库的提供者,这里使用了Access数据库的提供者。
Data Source表示数据库的文件路径,根据实际情况进行修改即可。
除了Access数据库,如果是连接SQL Server数据库,连接字符串可以类似如下:```vbastrConn = "Provider=SQLOLEDB;Data Source=服务器地址;Initial Catalog=数据库名称;User ID=用户名;Password=密码"```需要根据实际情况修改服务器地址、数据库名称、用户名和密码。
二、执行SQL语句连接数据库成功后,我们可以通过执行SQL语句来对数据库进行操作。
VB使用ADODB操作数据库的常用方法ADO常用方法下面是我所掌握的使用ADO对数据库操作的一些常用方法,主要是提供给初学者作为参考,有不对的地方请指正。
如有补充不胜荣幸准备工作========Dim conn As New ADODB.Connection '创建一个Connection 实例,在这里使用New等于将Dim和Set合并为一段代码执行Dim rs As ADODB.Recordset '创建一个Recordset 实例,不使用New 是因为,经常需要重复使用Set,因此没必要在这里使用Dim CnStr As String, Sql As String'创建两个字符串变量分别存放两个集合的SQL语句代码段1、装载数据库(不属于Recordset集合)=============Dim FileNamw$, DbIp$, DbName$, DbUser$, DbPw$'以上5个字符串变量分别表示文件路径和文件名、数据库地址、数据库名、数据操作员用户名、操作员密码FileName = App.Path & "\'数据库名'"DbIp = "数据库地址"DbName = "数据库名"DbUser = "数据操作员用户名"DbPw = "操作员密码"'以上变量根据数据库类型的不同而不同,有可能只需要1至两个变量'1)连接Access数据库:'-------------------CnStr = "PROVIDER=microsoft.jet.oledb.3.51;persist security info =false;data source="& FileName & ";Jet OLEDB:Database Password="& DbPw'2)连接Oracle数据库:'-------------------CnStr = "PROVIDER=MSDAORA.1;Password="& DbPw & ";User ID="& DbUser & ";Data Source="& FileName & ";Persist Security Info=True"'其中:'PASSWORD: 密码'User ID: 用户号'Data Source: 数据库名'Persist Security Info:'Provider:'3)连接VF的DBF库:'----------------CnStr = "PROVIDER=MSDASQL.1;Persist Security Info=False;Driver={Microsoft Visual FoxPro Driver};UID="& DbUser & ";SourceDB="& FileName &";SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;"'4)连接SQL的数据库'------------------CnStr = "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;uid="& DbUser & ";p wd="& DbPw & ";DRIVER=SQL Server;DATABASE="& DbName & ";WSID=GQSOFT; SERVER="&DbIP'也可以使用这段简易代码CnStr = "Provider=SQLOLEDB;Data Source=" & DbIp & ";DATABASE=" & D bName & ";UID=" & DbUser & ";pwd=" & DbPwConn.Open cnstr '使用Connection 集合的Open 方法与数据库建立连接2、Recordset集合的常用方法=========================='1)打开一个表'------------Sql = "select * from 表名"'SQL查询语句Set rs = New ADODB.Recordset '新建一个实例rs.Open Sql, conn '使用Open 方法打开数据库中的一个表'注意,这种打开方式只能使用rs.MoveNext (即,向后移动行坐标)而不能像其他方向,并且不能修改数据内容''rs.Open Sql, conn,1 '虽然只加了个“1”,但这种方法可以向任何方向移动行坐标。
''以下参数代表了这个可选值的含义'0 = adOpenForwardOnly (默认值)打开仅向前类型游标。
'1 = adOpenKeyset 打开键集类型游标。
'2 = adOpenDynamic 打开动态类型游标。
'3 = adOpenStatic 打开静态类型游标。
''虽然使用以上方法可以可以实现行坐标(游标)的任意移动,但是仍然无法写入数据。
因此需要进一步的对Open 方法进行完善'rs.Open Sql, conn, 1, 3 '后面的3是确定读写权限的'以下参数代表了这个可选值的含义'1 = adLockReadOnly (默认值)只读—不能改变数据。
'2 = adLockPessimistic 保守式锁定(逐个)—在编辑时立即锁定数据源的记录。
'3 = adLockOptimistic 开放式锁定(逐个)—只在调用Update 方法时才锁定记录。
'4 = adLockBatchOptimistic 开放式批更新—用于批更新模式(与立即更新模式相对)。
''2)读写数据'----------'增加一行记录并对新记录的内容进行修改并保存可以如下写法rs.AddNew '增加一行记录rs("...")="..."'数据读写操作...rs.UpDate '保存写入资料,如果使用只读权限,则不能使用这个方法rs.Close '这个方法用来关闭你所代开的表,如果不使用这个方法也可以,但是数据库仍然认为你在对标进行锁定,可造成数据库负担过重2、对数据进行筛选和排序=======================Sql = "select * from 表名"'SQL查询语句'以上为打开一个表的所有内容Sql = "select top 50 * from 表名"'SQL查询语句'以上为只打开前50行的记录Sql = "select top 50 列名1,列名2,列名5 from 表名"'SQL查询语句'以上为只打开前50行的记录,并且只打开第1、2、5列数据Sql = "select * from 表名where 列名1='"& 字段& "'"'SQL查询语句'以上为一个简单的筛选,表示打开的内容必须符合[列名1='" & 字段& "'"]的内容'需要注意的是,数据库列的类型必须匹配,比如字符串类型需要以单引号括起'而数字类型则不能用单引号括起'另外SQL语句还支持通配符,例如列名1 like '%" & 字段& "%'" 表示包含[字段]'在表达式中的匹配'? _(下划线)任何单一字符'* or % 零个或多个字符'# 任何单一数字(0 —9)'[charlist] 任何在字符表中的单一字符'[!charlist] 任何不在字符表中的单一字符'注:根据数据库的不同?、_和*、%的应用有所差别,比如SQL只使用% 和_ 分别代表多个字符和单一字符Sql = "select * from 表名where 列名1='"& 字段& "' ORDER BY 字段1 ASC"'对查询结果进行升序排列Sql = "select * from 表名where 列名1='"& 字段& "' ORDER BY 字段1 DESC"'对查询结果进行降序排列Sql = "select * from 表名where 列名1='"& 字段& "' ORDER BY 字段1 DESC, ORDER BY 字段2 DESC"'对查询结果进行多维降序排列(速度奇慢,不推荐使用)3、Recordset集合的常用属性方法==============================rs.BOF '是否游标在最上边rs.EOF '是否游标在最下边rs.RecordCount '记录集的行数(如果使用像前类型的游标,可能返回不准确)rs.AddNew '新建一行记录rs.Update '保存当前行被修改的记录rs.Delete '删除当前行rs.Close '关闭记录集4、Fields集合的一些属性的解释============================='以下为简写,正常情况需要rs.Fileds.。