vb数据库操作实例
- 格式:doc
- 大小:205.00 KB
- 文档页数:19
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”,但这种方法可以向任何方向移动行坐标。
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数据库连接vb数据库操作是初学者普遍感到头疼的地方,因为现有的vb教材和资料中的数据库操作这部分,多是泛泛而谈或是一带而过。
因此就想组织一个包括添加、修改、删除这些基本功能的数据库操作实例供大家参考。
久已未用vb6,机器里已经装上了VS 2008,再改回vb6,感觉实在是怪怪的。
还好有朋友帮忙,感谢“小二黑”网友供稿!也许有朋友觉得vb6版本已经很低了,做这个事还有意义吗?其实对微软来说,vb5是vb,vb6是vb,中的也是vb;而对于许多初学者来说,vb只是vb6,为什么这么说呢?因为对于许多不了解编程的朋友来说,似乎vb就是编程的代名词,学编程的第一反应就是学vb,而民间的电脑培训学校开设的多数都是vb6课程,那么他们学到的都是vb6;同时计算机等级考试也可以用vb6来过级,有相当部分的朋友是为了考证而学编程的,你相信他会放着简单易学的vb6不学,而去研究庞大的.NET吗?因此我觉得这个事还是值得去做的,所以就有了下面这几篇文章。
第一部分:vb数据库操作实例vb教程(续)--编写一个小型的信息管理系统vb教程(续)--准备数据库vb教程(续)--设计系统的界面及对象的属性vb教程(续)--为对象添加事件代码第二部分:补充内容vb教程(续)--ODBC数据源简介vb教程(续)--配置Access数据源vb教程(续)---配置SQL Server数据源vb教程(续)--VB的ADO对象vb教程(续)--vb adodb Connection对象简介vb教程(续)--vb连接Access数据库实例vb教程(续)--使用ADO Data控件连接Access的简单实例vb教程(续)--编写一个小型的信息管理系统受委托为编程入门网做一个简单的vb操作数据库的实例,来演示一下如何用vb向数据库中添加、修改、删除记录这些操作。
我觉得自己是比较菜的,几年来别人都在进步,只有我还在原地踏步。
不过没有办法,我们这一圈人里现在只有我机器上还有vb6,勉为其难,只有尝试一下了。
vb数据库操作实例在VB中,我们可以使用ADO(ActiveX Data Objects)来进行数据库操作。
ADO提供了一种统一的方法来访问各种类型的数据源,包括关系型数据库、文本文件、Excel文件等。
下面我们将分别以访问Access数据库和SQL Server数据库为例,介绍一些常见的数据库操作实例。
1. 访问Access数据库Access是一种常用的关系型数据库管理系统,我们可以使用VB来访问和操作Access数据库。
首先,我们需要添加对ADODB的引用,然后创建一个连接对象和一个命令对象。
```vbDim conn As New ADODB.ConnectionDim cmd As New mandconn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\path\to\database.accdb"conn.Opencmd.ActiveConnection = connmandType = adCmdTextmandText = "SELECT * FROM TableName"Dim rs As ADODB.RecordsetSet rs = cmd.ExecuteWhile Not rs.EOF'处理数据rs.MoveNextWendrs.Closeconn.Close```上述代码首先创建了一个连接对象`conn`,并设置了连接字符串,这里使用了Access数据库的OLEDB提供程序。
然后创建了一个命令对象`cmd`,并设置了命令的类型和文本。
接着执行了命令,并通过`Recordset`对象`rs`来获取查询结果。
最后使用`While`循环遍历结果集,并对数据进行处理。
2. 访问SQL Server数据库SQL Server是一种常用的关系型数据库管理系统,我们可以使用VB来访问和操作SQL Server数据库。
vb数据库编程实例:例子的Visual C#中实现DB2数据库的编程疯狂代码 / ĵ:http://DotNet/Article48395.html 在Visual Beta 1版本中访问IBM DB2等非SQL Server数据库通常是使用ODBC思路方法而在Beta 2中则改用OLE DB方式存取数据库 Beta1中连接串主要需声明数据库ODBCDNS名字但Beta 2中OLE DB连接串就较复杂了使用类也不相同由于DB2等数据库在大型机等应用中使用非常广泛.NET自然会全力支持此类编程开发为此下文将逐步阐述OLE DBDB2开发 OLE DB for DB2驱动 首先Visual 和Windows 2000 Server中并未直接提供DB2OLE DB驱动因此需下载Microsoft Host Integration Server 2000软件Software该软件Software包中含OLE DB Provider and ODBC driver for DB2需下载Server端软件Software包并在安装时选择安装Data Integration安装完成后就可使用其OLEDBDB2驱动了 设置数据库连接 首先我们需配置好DB2客户端设置打开视图选单项中服务器资源管理器在其数据连接中新增个连接指定选项时选择Microsoft OLE DB Provider for DB2下步连接选项中填写如下信息:Data Source: QCDB(请酌情修改)Network:TCP/IPIP Address:数据库服务器地址Network Port:DB2服务端口Username:数据库访问权限用户名Password:该用户口令Database initial Catalog:QCDBPackage collection:QCDBdefault schema:Userid 下步高级选项中选各自国家语言对应code page及CCSID最后按确认键完成创建连接 假设QCDB这个DB2数据库中有名为address新数据表其包含 4个字段:name、email、age和address我们可用服务器资源管理器打开上述连接及该数据表可输入数条中文记录确定中文能否正常显示 为项目增加数据库连接 用Visual Studio新建个项目激活服务器资源管理器上述连接用鼠标将该连接拖至新建WebForm上则OLE DB需要连接参数全部自动写入Web Form中上述连接生成语句如下:this.oleDbConnection1.ConnectionString= @Provider=DB2OLEDB;Cache Authentication=False;Integrated Security=;Password=freebsd9;Persist Security Info=True;User ID=userid;Initial Catalog=qcdb;Data Source=qcdb;Mode=ReadWrite;Extended Properties=;APPC Remote LU Alias=;APPC Local LU Alias=;APPC Mode Name=QPCSUPP;Network Transport Library=TCPIP;Host CCSID=37;PC Code Page=1282;Network Address=172.23.169.1;Network Port=4444;Package Collection=qcdb;Default Schema=userid;Alternate TP Name=;Process Binary as Character=False;Units of Work=RUW 用服务器资源管理器工具生成连接可避免错写各种参数从而可快速地实现数据库连接 Web Form显示数据库数据 为Web Form新增个OleDbDataAdapter类对象oleDbDataAdapter1为其选择数据连接时选上面建立连接如:erid选择使用SQL语句生成SQL语句如:Select ?from address最后提示完成再为Web Form新增个DataSet并命名为dataSet1用来放查询得到数据新增个显示数据用DataGrid命名为DataGird1最后在Web Form段中Page_Init部分中增加如下代码:oleDbConnection1.Open;//打开数据库连接oleDbDataAdapter1.Fill(dataSet1,Address);//将得来数据填入dataSetDataGrid1.DataBind;//绑定数据oleDbConnection1.Close;//关闭连接 编译运行后可见address表中内容被显示于Web FormDataBrid中OleDbConnection1等属性设置都在生成Web Form设计代码中 增加数据库数据 在Web Form上新增对应字段数量个数TextBox及个button为该按键增加Click响应事件代码如下:mandText= INSERT INTO ADDRESS(NAME, EMAIL, AGE, ADDRESS) VALUES (+TextBox1.Text+,+TextBox2.Text+, +TextBox3.Text+,+TextBox4.Text+);oleDbInsertCommand1.Connection.Open;//打开连接oleDbInsertCommand1.ExecuteNonQuery;//执行该SQL语句oleDbInsertCommand1.Connection.Close;//关闭连接 实际编程中我们需注意SQL语句单引号问题以及数字和串处理问题 删除数据库数据 在Web Form上新增个TextBox5及个按键要执行删除时在TextBox5中填入要删除记录name字段值然后按该按键执行删除该按键代码如下:.Data.OleDb.OleDbCommand oleDeleteCommand1.Data.OleDb.OleDbCommand;this.oleDbDataAdapter1.DeleteCommand= oleDeleteCommand1;//声明为oleDb命令mandText=DELETE FROM ADDRESS WHERE NAME=+TextBox5.Text+;oleDeleteCommand1.Connection= this.oleDbConnection1;//指明连接oleDeleteCommand1.Connection.Open;//打开连接oleDeleteCommand1.ExecuteNonQuery;//执行SQL语句oleDeleteCommand1.Connection.Close;//关闭连接 对于增加、更新和删除操作后DataGrid刷新可执行类似Select SQL语句即可 上述代码可供各种非SQL Server数据库编程参考和使用微软为此提供了如OLE DB Provider for Oracle、AS/400和VSAM等众多驱动OLE DB方式确实提供了较ODBC方式更为广泛数据存取范围如可存取Access库中数据、邮件系统中数据、Web上文本及图形、目录服务等等符合ODBC标准数据源就是符合OLE DB标准数据存储子集而且OLE DBAPI是符合COM标准和基于对象API这些都是较原ODBC方式有大幅改进从而为综合数据集成处理提供了更广泛支持 通过以上讲解笔者希望使读者初步了解在Visual 中以DB2为后台数据库时应用系统开发步骤也希望读者举反 3领会思想和思路方法以便更好地应用到自己系统开发中 上述在中文Windows 2000 Server、IBM DB2和Visual Beta 2环境中编译并正常运行2009-1-9 12:35:19疯狂代码 /。
VB编程实例4(单个数据库表应用程序) 1.打开工程vblx,添加一个窗口Form1,修改Form1的属性,名称(Nam e)为:fxs,Caption(窗口标题)为: 学生档案,保存在你的目录下.在fm ain中添加水平菜单(m3):数据库,添加下拉菜单(m31): 学生档案,其单击代码为:fxs.Show 2.准备好access数据库xs.m db,有两个表xs,cj,在数据源中添加系统DSN,选择驱动程序为Microsoft Access Driver,名称为lx,数据库指向你的xs.m db 添加ADO部件(Mi crosoft ADO Data Control 6.0)和DataGrid 部件(Microsoft DataGrid Control 6.0). 3.在窗体上放一个框架Fram e1,去掉Caption,设BorderStyle为0-None,在Fram e1上放一个Fram e2, 去掉Caption,设BorderStyle为0-None,在Fram e2上放置Adodc1,设其ConnectionString属性为DNS=lx, RecordSource的命令类型为2-adCm dTable,表名为xs,在Fram e2上放置命令按钮数组Comm and1(0~3),Caption分别为:添加,保存,删除,关闭在Fram e1上放一个Fram e3,去掉Caption,在Fram e3上放置标签数组zdm(0~7),设置字体,颜色, Caption分别为序号,登录名,姓名,性别,生日,电子邮件,电话,住址,放置文本框数组zdz(0~7), DataSource为Adodc1,DataField分别为xh,dlm,xm,xb,sr,eml,dh,dz 4.在窗体上放一个DataGrid1,设其DataSource为Adodc1,右击DataGrid1选择检索字段, 再右击调出属性页,在通用页设置允许添加,删除,更新,在列页设置各列的标题分别为: 序号,登录名,姓名,性别,生日,电子邮件,电话,住址,在布局页设置各列的宽和对齐方式5.响应Form的Load事件,添加如下代码: Left = (Screen.Width - Width) \ 2 Top = (Screen.Height - Height) \ 2'窗口居中 Fram e1.Left = 0: Fram e1.Top = 0 Fram e1.Width = ScaleWidth Fram e1.Height = ScaleHeight / 4 Fram e2.Left = (ScaleWidth -Fram e2.Width) \ 2 Fram e3.Left = (ScaleWidth - Fram e3.Width) \ 2 DataGrid1.Top = ScaleHeight / 4: DataGrid1.Left = 0 DataGrid1.Width = ScaleWidth DataGrid1.Height = ScaleHeight * 3 / 4 Adodc1.Refresh 响应Form的Resize事件,添加如下代码: If WindowState = 1 Then Exit Sub'最小化时不执行代码If WindowState = 0 Then Left = (Screen.Width - Width) \ 2 Top = (Screen.Height - Height) \ 2'正常窗口居中End If Fram e1.Left = 0: Fram e1.Top = 0 Fram e1.Width = ScaleWidth Fram e1.Height = ScaleHeight / 4 Fram e2.Left = (ScaleWidth - Fram e2.Width) \ 2 Fram e3.Left = (ScaleWidth - Fram e3.Width) \ 2 DataGrid1.Top = ScaleHeight / 4: DataGrid1.Left = 0 DataGrid1.Width = ScaleWidth DataGrid1.Height = ScaleHeight * 3 / 4 响应Form的Unload事件,添加如下代码: Adodc1.Recordset.Close 响应Comm and1的Click事件Select Case Index Case 0 Adodc1.Recordset.AddNew Case 1 Adodc1.Recordset.Update Case 2 Adodc1.Recordset.Delete Case 3 Unload fxs End Select。
《Visual Basic开发实战1200例(第Ⅱ卷)》光盘内容框架本书附带光盘内容包括本书源程序、部分录像文件等内容。
完整的光盘内容框架如图1所示。
图1 光盘内容框架图如何使用本书源程序1.开发及运行环境本书源程序都是在Windows Server 2003下开发的,程序测试环境为Windows Server 2003。
用户只有正确配置程序所需的运行环境以后,才可以使用本书中的源程序。
软件开发平台如下:操作系统:Windows Server 2003数据库:SQL Server 2000、Access 2003开发环境:Visual Basic分辨率:最佳效果1024× 7682.源程序使用方法(1)使用本书中的源程序时,请将源程序文件夹下的所有文件拷贝到计算机硬盘上,并去掉所有文件的只读属性。
(2)在系统上安装Visual Basic 、Access 2003、SQL Server 2000数据库、SQL Server 2005数据库。
3.附加SQL Server 2000数据库下面以MR\03\043\DataBase为例,讲解SQL Server 2000数据库的附加方法。
(1)将MR\03\043\DataBase文件夹下扩展名为.MDF和.LDF的两个文件拷贝到SQL Server 2000安装路径下的MSSQL/Data目录下。
(2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”节点上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”命令,如图2所示。
图2 选择“附加数据库”命令(3)在弹出的“附加数据库”对话框中选择刚拷贝过去的数据库文件(.MDF文件),如图3所示。
图3 选择所要附加的数据库(4)单击“确定”按钮,弹出如图4所示的提示框。
图4 系统提示(5)单击“确定”按钮,完成附加数据库操作。
:如果数据库在SQL Server 2000中附加失败,出现602错误,此时将该程序附加在SQL Server 2005数据库上即可。
vb数据库编程实例-回复VB数据库编程实例数据库是一个非常重要的工具,可用于存储和管理大量数据。
在编程中,使用数据库可以实现更高级的功能和更复杂的数据处理。
VB(Visual Basic)是一种基于对象的编程语言,提供了丰富的数据库编程功能。
在本篇文章中,我们将通过一个实例来介绍VB数据库编程的基本概念和步骤。
1. 数据库准备在开始之前,我们需要准备一个数据库。
我们可以使用任何数据库系统,如MySQL、Oracle或SQL Server。
在本实例中,我们将使用Microsoft Access作为我们的数据库。
打开Access并创建一个新的数据库文件,我们将其命名为“example.mdb”。
2. 创建表格在我们的例子中,我们将创建一个简单的用户表格。
该表格将包含用户的ID、姓名和年龄信息。
在Access中,创建一个新的表格,为表格添加三个字段,分别为“ID”(自动编号)、“Name”(文本类型)和“Age”(数值类型)。
3. 创建VB应用程序现在,我们将使用VB来创建一个窗体应用程序,以便能够与数据库进行交互。
打开Visual Studio,创建一个新的VB Windows Forms应用程序项目。
这将创建一个空的窗体。
4. 引用在VB中进行数据库编程,我们将使用库。
在解决方案资源管理器中的“引用”下,右键单击并选择“添加引用”。
在“COM”标签页下,找到“Microsoft ActiveX 数据对象2.8库”(或更高版本),勾选并点击“确定”按钮。
5. 添加控件在窗体设计器中,打开工具箱,并从中拖动一个“DataGridView”控件和四个“TextBox”控件到窗体上。
DataGridView将用于显示数据库中的数据,而TextBox将用于添加、更新和删除数据。
6. 设计界面调整控件的位置和大小,使其布局合理。
为TextBox控件添加标签,以标识其对应的数据库字段。
为DataGridView控件添加列,以与表格中的字段对应。
VB操作Access数据库方法使用ADODB首先,声明一个链接变量,并根据需要声明记录集变量。
建立与数据库的链接,如果数据库没有口令,最后一行可以不写(写上也不会错)。
这种方法虽然代码长一些,但对数据环境要求低,且结构清晰,所编写的发布程序也大为减小。
由于与链接SQL Server等数据库的方法一样,因而大量的操作数据库的代码相同,当数据库需要由Access扩充到一些大型数据库,或由一些大型数据库裁剪出一个简单数据库时,程序的移植会比较方便。
另外,这种方法对于Access97及Access2000均能很好地支持,兼容性好。
对于大量插入、删除、修改等操作,只在Connection层进行即可,既可提高速度又可减少代码。
如果还要获取具体的记录集内容,则须再根据条件打开具体的库表,代码如下: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 =fal se;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 & ";pwd=" & DbPw & ";DRIVER=SQL Server;DATABASE=" & DbName & ";WSID=GQS OFT;SERVER=" &DbIP'也可以使用这段简易代码 CnStr = "Provider=SQLOLEDB;Data Source=" & Db Ip & ";DATABASE=" & DbName & ";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”,但这种方法可以向任何方向移动行坐标。
第一部分:vb数据库操作实例vb神童教程(续)--编写一个小型的信息管理系统vb神童教程(续)--准备数据库vb神童教程(续)--设计系统的界面及对象的属性vb神童教程(续)--为对象添加事件代码vb神童教程(续)--编写一个小型的信息管理系统受委托为编程入门网做一个简单的vb操作数据库的实例,来演示一下如何用vb 向数据库中添加、修改、删除记录这些操作。
我觉得自己是比较菜的,几年来别人都在进步,只有我还在原地踏步。
不过没有办法,我们这一圈人里现在只有我机器上还有vb6,勉为其难,只有尝试一下了。
如果我写的这点幼稚的东西能为想要了解vb数据库操作的朋友提供哪怕是一丁点儿的参考和帮助,将是我最为高兴的事情,同时也希望高手不要见笑。
我做的这个实例名为“编程入门网网址管理系统”,算是一个小型的信息管理系统吧。
该系统后台使用的是Access数据库,程序中使用ADO代码链接的形式连接Access。
该系统具有向数据库中添加、修改、删除记录的功能,进行某项操作后能够实时刷新显示数据。
并在程序中加了相应的代码对输入的数据进行合法性校验,以避免输入错误的数据造成程序运行不正常,程序运行时各个操作及退出系统时均有友好的提示框请用户确认。
所有代码均在Windows 2003+Vusual Basic 6.0环境下调试通过。
系统运行时如下图:vb神童教程(续)--准备数据库我用的是Access 2003,因为需要讲解的仅仅是数据的添加、修改及删除,因此单数据库、单表就够了。
如果以后您要编写更复杂一些的信息管理系统而涉及到多表操作,则您还需要补充一些关系数据库方面的知识,比如实体、一对一联系、一对多联系等等;此外,对sql语言也需要有所了解。
具体您可以参考:数据库基础知识ABC。
首先,在“我的电脑”的e盘新建一个名为vb文件夹,先打开Access,新建一个名为Access_db的数据库(Access数据库文件的扩展名是.mdb),保存到刚才建立的文件夹中,则以后在程序中调用数据源的位置为E:\vb\Access_db.mdb。
然后在Access_db.mdb中建立一个名为wzdz的表(wzdz是“网站地址”的首字母缩写), 然后在wzdz表中添加网站名称、网站地址及网站描述三个字段,三个字段的属性是相同的,如下:▲数据类型:文本。
▲字段大小:50▲有效性规则:无。
▲必填字段:否▲允许空字符串:否▲索引:无“编号”这个字段使用的是Access的自动编号,并将其作为主键。
也就是说,您在表中设置以上三个字段即可,设置完毕保存表时,按Access的提示添加主键,Access会自动为您搞定。
具体操作您可以参考:vb神童教程(续)--vb连接Access数据库实例这样在建立了数据库及表结构之后,即使是调用没有记录的空库,系统也可以无差错运行,可以在运行时通过“添加记录”按钮向数据库中添加记录。
不过由于数据库是空的,系统第一次运行时数据显示控件没有数据可显示,显得空荡荡的,不太美观哦。
为了方便起见,我们在Access中给wzdz表中预先添加两条初始记录:添加的方法很简单:在Access的设计器中直接双击wzdz表名,在出来的窗口中添加即可。
添加时注意:因为我们使用的是Access的自动编号做主键,所以在添加时不用理“编号”这个字段,直接添加后三个字段即可。
下一步的工作,是设计系统的界面及设置各个对象的属性。
vb神童教程(续)--设计系统的界面及对象的属性本系统是一个很简单的数据库操作实例,能够对数据库的添加、修改及删除记录这几个基本的操作。
系统使用数据显示控件MSHFlexGrid显示数据库中的记录,使用数据链接控件Adodc链接数据库作为MSHFlexGrid的数据源,使用文本框来接收系统运行时用户输入的数据。
步骤如下:一、启动vb6,新建一个标准exe工程,并将工程中的form1的caption属性设置为“编程入门网网址管理系统”,width属性值设为7950,height属性值设为4620。
二、向窗体中添加一个Adodc控件。
如果在工具箱中找不到Adodc控件,可以右击工具箱,选择“部件...”菜单项,然后在“部件”窗口的“控件”选项卡中选中“Microsoft ADO Data Control6.0(OLEDB)”。
在VB的属性窗口我们对Adodc控件的三个个属性值进行编辑,其余属性值使用默认的即可:1、ConnectionString属性值设为:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\vb\Access_db.mdb;Persist Security Info=False这个属性设置了连接Access_db.mdb这个数据库。
2、RecordSourc属性值设为:select * from wzdz这个属性值中的sql语句的作用是查询出wzdz表中的所有记录。
3、Visible属性值设为False,作用是使其在运行时不可见。
三、向窗体添加一个MSHFlexGrid控件,如果工具箱中没有MSHFlexGrid控件,可以右击工具箱,选择“部件...”菜单项,然后在“部件”窗口的“控件”选项卡中选中“Microsoft Hierarchical FlexGrid Control 6.0 ”。
然后在vb 的属性窗口中将MSHFlexGrid控件的名称修改为MS1,如下图:然后对MSHFlexGrid控件进行如下设置:1、DataSource属性:在vb的属性窗口中将其值设为Adodc1,即使用Adodc控件作为其数据源。
2、BackColorBkg属性:在vb的属性窗口中将其值设为&H00FFE0E0&,这是设置的MSHFlexGrid控件的底色。
3、BackColorFixed属性:在vb的属性窗口中将其值设为&H00C0FFFF&,这是设置的MSHFlexGrid控件的显示标题的底色。
4、width属性:在vb的属性窗口中将其值设为7695.5、Height属性:在vb的属性窗口中将其值设为2175.6、右击MSHFlexGrid控件,在弹出的菜单中选“属性”,在弹出的“属性页”对话框的在“通用”选项卡中修改行为4,修改列为4,修改固定行为0,修改固定列为0。
如果数据链接正常,在“属性页”对话框的“带区”选项卡中可以看到列标题和列名称已经设置了,这里注意应该将“带区”选项卡中的“列标头”选项勾选上,否则运行时无法显示列标题,如下图。
“属性页”对话框的其它部分使用默认值即可。
四、向窗体中添加4个Label控件(标签),在vb的属性窗口为它们设置以下属性:1、caption属性:分别设置为网站名称、网站地址、网站描述及编号。
2、Alignment属性:均设为“2-Center”。
3、AutoSize属性:均设为True。
五、向窗体中添加4个TextBox控件(文本框),并调整它们的位置成一排与4个标签相对应,即:网站名称→Text1,网站地址→Text2,网站描述→Text3,编号→Text4。
六、向窗体中添加4个CommandButton控件(命令按钮),将它们的caption属性分别设置为“添加记录”、“修改记录”、“删除记录”和“退出系统”,并调整它们的位置成一排,放在文本框的下方。
七、在两排文本框和命令按钮中间,添加一个Line控件,适当拖动其两端的控制点将长短调整至适当,并将其BorderColor属性性设为&H00C00000&,作用是把文本框和命令按钮隔开,这样在视觉上似乎能好看些。
八、所有控件设置完毕后,界面如下图所示:下一步的工作,是为对象添加事件代码。
vb神童教程(续)--为对象添加事件代码一、form1的load事件代码:Private Sub Form_Load()Form1.MS1.ColWidth(0) = 600Form1.MS1.ColWidth(1) = 1000Form1.MS1.ColWidth(2) = 2300Form1.MS1.ColWidth(3) = 4000Form1.Text1.Text = ""Form1.Text2.Text = ""Form1.Text3.Text = ""Form1.Text4.Text = ""End Sub主要是在系统初始化时设置MSHFlexGrid控件的列宽,并将文本框置空。
二、“添加记录”按钮(command1)的click事件代码:Private Sub Command1_Click()Dim sc As IntegerIf Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Then'即网站名称、网站地址和网站描述的内容必须填全了才打开数据库连接写入数据'由于系统数据库设计为“编号”字段采用的是Access的自动编号'因此在添加记录时不接收编号的数据,由Access自动加编号MsgBox ("请输入完整的网站信息")Elsesc = MsgBox("确实要添加这条记录吗?", vbOKCancel, "提示信息")If sc = 1 Then'运行时如果用户点击的是MsgBox提示框的“确定”按钮,返回值是1Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim Str1 As StringDim Str2 As StringDim Str3 As StringStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;"Str2 = "Data Source=E:\vb\Access_db.mdb;"Str3 = "Jet OLEDB:Database Password="conn.Open Str1 & Str2 & Str3strSQL = "select * from wzdz"rs.Open strSQL, conn, 3, 3rs.AddNewrs!网站名称 = Text1.Textrs!网站地址 = Text2.Textrs!网站描述 = Text3.Textrs.Updaters.Closeconn.CloseMsgBox ("添加记录成功!")Adodc1.Refresh'刷新数据源,MSHFlexGrid控件会实时刷新显示数据End If'以下四条语句的作用是在操作完成后将文本框置空Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""End IfEnd Sub三、“修改记录”按钮(command2)的click事件代码:Private Sub Command2_Click()If Not IsNumeric(Text4.Text) Or Val(Text4.Text) = 0 Then'编号字段是Access的自动编号,为自然数'因此对text4的内容进行校验,如果不是数值或为0则跳出sub过程 MsgBox "记录号是大于0的自然数,请输入正确的编号!"Exit SubEnd IfIf Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Then '对三个文本框的内容进行校验,不接收空值MsgBox "请输入完整的网站信息!"Exit SubEnd IfDim sc As Integersc = MsgBox("确实修改这条记录吗?", vbOKCancel, "提示信息")If sc = 1 Then'运行时如果用户点击的是MsgBox提示框的“确定”按钮,返回值是1Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim Str1 As StringDim Str2 As StringDim Str3 As StringStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;"Str2 = "Data Source=E:\vb\Access_db.mdb;"Str3 = "Jet OLEDB:Database Password="conn.Open Str1 & Str2 & Str3strSQL = "select * from wzdz where 编号=" & Val(Text4.Text) & "" rs.Open strSQL, conn, 3, 3If rs!编号 = Val(Text4.Text) Then'由于系统数据库使用的是自动编号作为主键'因此以编号字段的内容作为判断的依据'如果rs!编号 = Val(Text4.Text)说明数据库中有此记录,'才会修改其它三个字段的内容'否则给出“不存在此记录”的提示信息并关闭数据连接rs!网站名称 = Text1.Textrs!网站地址 = Text2.Textrs!网站描述 = Text3.Textrs.Updaters.Closeconn.CloseMsgBox ("修改记录成功!")Adodc1.Refresh '刷新数据源,MSHFlexGrid控件会实时刷新显示数据 ElseMsgBox ("不存在此记录!")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""rs.Closeconn.CloseExit SubEnd IfEnd If'以下四条语句的作用是在操作完成后将文本框置空Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""End Sub四、“删除记录”按钮(command3)的click事件代码:Private Sub Command3_Click()If Not IsNumeric(Text4.Text) Or Val(Text4.Text) = 0 Then'编号字段是Access的自动编号,为自然数'因此对text4的内容进行校验,如果不是数值或为0则跳出sub过程MsgBox "编号是大于0的自然数,请输入正确的编号!"Exit SubEnd IfDim sc As Integersc = MsgBox("确实要删除这个记录吗?", vbOKCancel, "删除确认!")If sc = 1 Then'运行时如果用户点击的是MsgBox提示框的“确定”按钮,返回值是1Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim Str1 As StringDim Str2 As StringDim Str3 As StringStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;"Str2 = "Data Source=E:\vb\Access_db.mdb;"Str3 = "Jet OLEDB:Database Password="conn.Open Str1 & Str2 & Str3strSQL = "select * from wzdz where 编号=" & Val(Text4.Text) & ""rs.Open strSQL, conn, 3, 3If rs!编号 = Val(Text4.Text) Then'由于系统数据库使用的是自动编号作为主键'因此以编号字段的内容作为判断的依据'如果rs!编号 = Val(Text4.Text)说明数据库中有此记录并进行删除操作 '否则给“不存在此记录”的提示信息并关闭数据连接rs.Deleters.Closeconn.CloseMsgBox ("删除记录成功!")Adodc1.Refresh '刷新数据源,MSHFlexGrid控件会实时刷新显示数据 ElseMsgBox ("不存在此记录!")Text4.Text = ""rs.Closeconn.CloseExit SubEnd IfEnd If'以下四条语句的作用是在操作完成后将文本框置空Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""End Sub五、“退出系统”按钮(command4)的click事件代码:Private Sub Command4_Click()Dim sc As Integersc = MsgBox("确实要退出系统吗?", vbOKCancel, "提示信息")If sc = 1 Then'运行时如果用户点击的是MsgBox提示框的“确定”按钮,返回值是1 EndEnd IfEnd Sub六、添加完事件代码之后,我们这个实例至此完成,运行一下吧!Private Sub Form_Load()Form1.MS1.ColWidth(0) = 600Form1.MS1.ColWidth(1) = 1000Form1.MS1.ColWidth(2) = 2300Form1.MS1.ColWidth(3) = 4000Form1.Text1.Text = ""Form1.Text2.Text = ""Form1.Text3.Text = ""Form1.Text4.Text = ""End SubPrivate Sub Command1_Click()Dim sc As IntegerIf Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Then'即网站名称、网站地址和网站描述的内容必须填全了才打开数据库连接写入数据'由于系统数据库设计为“编号”字段采用的是Access的自动编号'因此在添加记录时不接收编号的数据,由Access自动加编号MsgBox ("请输入完整的网站信息")Elsesc = MsgBox("确实要添加这条记录吗?", vbOKCancel, "提示信息")If sc = 1 Then'运行时如果用户点击的是MsgBox提示框的“确定”按钮,返回值是1 Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim Str1 As StringDim Str2 As StringDim Str3 As StringStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;"Str2 = "Data Source=D:\VBporj\accessdb\caiwu.mdb;"Str3 = "Jet OLEDB:Database Password="conn.Open Str1 & Str2 & Str3strSQL = "select * from Access_db"rs.Open strSQL, conn, 3, 3rs.AddNewrs("网站名称") = Text1.Textrs("网站地址") = Text2.Textrs("网站描述") = Text3.Textrs.Updaters.Closeconn.CloseMsgBox ("添加记录成功!")Adodc1.Refresh'刷新数据源,MSHFlexGrid控件会实时刷新显示数据End If'以下四条语句的作用是在操作完成后将文本框置空Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""End IfEnd SubPrivate Sub Command2_Click()If Not IsNumeric(Text4.Text) Or Val(Text4.Text) = 0 Then'编号字段是Access的自动编号,为自然数'因此对text4的内容进行校验,如果不是数值或为0则跳出sub过程MsgBox "记录号是大于0的自然数,请输入正确的编号!"Exit SubEnd IfIf Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Then'对三个文本框的内容进行校验,不接收空值MsgBox "请输入完整的网站信息!"Exit SubEnd IfDim sc As Integersc = MsgBox("确实修改这条记录吗?", vbOKCancel, "提示信息")If sc = 1 Then'运行时如果用户点击的是MsgBox提示框的“确定”按钮,返回值是1Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim Str1 As StringDim Str2 As StringDim Str3 As StringStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;"Str2 = "Data Source=D:\VBporj\accessdb\caiwu.mdb;"Str3 = "Jet OLEDB:Database Password="conn.Open Str1 & Str2 & Str3strSQL = "select * from Access_db where 编号=" & Val(Text4.Text) & "" rs.Open strSQL, conn, 3, 3If rs!编号= Val(Text4.Text) Then'由于系统数据库使用的是自动编号作为主键'因此以编号字段的内容作为判断的依据'如果rs!编号= Val(Text4.Text)说明数据库中有此记录,'才会修改其它三个字段的内容'否则给出“不存在此记录”的提示信息并关闭数据连接rs!网站名称= Text1.Textrs!网站地址= Text2.Textrs!网站描述= Text3.Textrs.Updaters.Closeconn.CloseMsgBox ("修改记录成功!")Adodc1.Refresh '刷新数据源,MSHFlexGrid控件会实时刷新显示数据ElseMsgBox ("不存在此记录!")Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""rs.Closeconn.CloseExit SubEnd IfEnd If'以下四条语句的作用是在操作完成后将文本框置空Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""End SubPrivate Sub Command3_Click()If Not IsNumeric(Text4.Text) Or Val(Text4.Text) = 0 Then'编号字段是Access的自动编号,为自然数'因此对text4的内容进行校验,如果不是数值或为0则跳出sub过程MsgBox "编号是大于0的自然数,请输入正确的编号!"Exit SubEnd IfDim sc As Integersc = MsgBox("确实要删除这个记录吗?", vbOKCancel, "删除确认!")If sc = 1 Then'运行时如果用户点击的是MsgBox提示框的“确定”按钮,返回值是1 Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim Str1 As StringDim Str2 As StringDim Str3 As StringStr1 = "Provider=Microsoft.Jet.OLEDB.4.0;"Str2 = "Data Source=D:\VBporj\accessdb\caiwu.mdb;"Str3 = "Jet OLEDB:Database Password="conn.Open Str1 & Str2 & Str3strSQL = "select * from Access_db where 编号=" & V al(Text4.Text) & "" rs.Open strSQL, conn, 3, 3If rs!编号= Val(Text4.Text) Then'由于系统数据库使用的是自动编号作为主键'因此以编号字段的内容作为判断的依据'如果rs!编号= Val(Text4.Text)说明数据库中有此记录并进行删除操作'否则给“不存在此记录”的提示信息并关闭数据连接rs.Deleters.Closeconn.CloseMsgBox ("删除记录成功!")Adodc1.Refresh '刷新数据源,MSHFlexGrid控件会实时刷新显示数据ElseMsgBox ("不存在此记录!")Text4.Text = ""rs.Closeconn.CloseExit SubEnd IfEnd If'以下四条语句的作用是在操作完成后将文本框置空Text1.Text = ""Text2.Text = ""Text3.Text = ""Text4.Text = ""End SubPrivate Sub Command4_Click()Dim sc As Integersc = MsgBox("确实要退出系统吗?", vbOKCancel, "提示信息")If sc = 1 Then'运行时如果用户点击的是MsgBox提示框的“确定”按钮,返回值是1EndEnd IfEnd Sub。