第8章VB数据库应用
VB与数据库应用开发.ppt
6.1 VisualBasic 6.0与数据库
数据类型 整型 长整型 单精度型 双精度型 关键字 Integer Long Single Double 存储信息 整数数值数据 整数数值数据 实数数据 实数数据 2 4 4 8 存储空间(Byte)
二进制型
字节型 文本型 日期型 逻辑型或布尔型 OLE型 备注型 计数器
6.1 VisualBasic 6.0与数据库
Visual Basic 6.0数据库开发平台 的优点
简单性。Visual Basic 6.0为每种数据访问 模式提供了相应控件,通过这些控件只要编 写少量的代码或甚至不编写任何代码就可以 访问和操作数据库。 灵活性。Visual Basic 6.0不像一般的数据 库(如FoxPro,Access等)那样局限于特定的 应用程序结构,也不需要用某些指令对当前 打开的数据库进行操作,因而比较灵活。
Visual Basic 6.0数据库编程的特征
Visual Basic 6.0处理的数据库大多为关系 型数据库。 支持ADO存取模式,即ActiveX Data Object 数据对象存取模式。 支持对象连接与嵌入数据库和组件对象模型。 针对不同的数据库(如SQL Server、Oracle 等)可以开发完善的客户机/服务器应用程序, 管理数据源和创建服务器端控件。
Visual Basic 6.0应用系统的体系 结构
用户界面和应用程序
Jet数据库引擎
数 据 库
图6.1 Visual Basic 6.0操作数据库示意图
6.2
Visual Basic 6.0应用系统的体系 结构
1.用户界面和应用程序 用户界面是用户所看得见的用于交互的界面,它 包括显示数据并允许用户查看或更新数据的窗 体。 2.Jet数据库引擎 Visual Basic 6.0使用的数据库引擎是Jet数据库引 擎,它是应用程序和数据库存储之间的一种接 口,它将与数据库相关的内存管理、游标管理 和错误处理等具体而复杂的细节问题抽象为一 个既高度一致又简化的编程接口,对所支持的 不同类型的数据库提供统一的外部接口,将对 记录集的操作转化成对数据库的物理操作。
VB中对数据库的操作
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数据库详解引言:在软件开发中,数据库是非常重要的一个组成部分。
它可以允许我们存储和管理大量的数据,并且可以通过查询和操作这些数据来满足我们的业务需求。
在Visual Basic(VB)中,数据库的使用也变得非常常见和重要。
本文将详细介绍VB中的数据库相关知识,包括数据库的概念、VB中的数据库操作、数据访问对象 (DAO)和数据控件(Data Control)的使用。
一、数据库的概念数据库是一个有组织的数据集合,可以通过一定的模型进行存储和管理。
它可以提供强大的数据存储和查询功能,可以让我们轻松地存储和检索大量的数据。
数据库通常由表 (Table)组成,每个表都包含一系列的行和列,行代表数据的记录,列代表数据的字段。
表可以通过主键 (Primary Key)来建立关联关系和索引,以方便对数据的查询和操作。
二、VB中的数据库操作VB提供了多种方式来连接和操作数据库。
常见的数据库操作方式有ADO (ActiveX Data Objects)、DAO (Data Access Objects)和ODBC (Open Database Connectivity)等。
ADO是VB中最常用的数据库操作对象,它提供了一套完整的对象模型来访问和操作数据库。
通过ADO,我们可以连接数据库、执行SQL语句或存储过程、获取查询结果等。
DAO是VB中的另一个数据库操作对象,它类似于ADO,但是更加适用于Access数据库的操作。
ODBC是一种数据库连接标准,它可以让我们连接和操作各种不同类型的数据库。
三、数据访问对象(DAO)的使用DAO是VB中的一个非常重要的数据库访问对象,它可以帮助我们轻松地对数据库进行操作。
DAO提供了一套完整的对象模型,包括数据库 (Database)、表 (Table)、字段(Field)等。
通过DAO,我们可以连接数据库、执行SQL语句、执行事务操作等。
下面是一个使用DAO连接数据库的示例:Dim db As DatabaseSet db = OpenDatabase("C:\mydatabase.mdb")其中,OpenDatabase函数用于打开一个数据库文件,并返回一个数据库对象。
VB数据库详解
引言:VB(VisualBasic)是一种面向对象的编程语言,广泛应用于Windows平台的软件开发中。
在软件开发过程中,数据库是不可或缺的一部分。
数据库的使用可以帮助我们存储和管理大量的数据,而VB作为一种强大的编程语言,可以与数据库进行交互。
本文将详细介绍VB中数据库的相关知识,包括数据库连接、查询、插入、更新和删除等。
通过深入了解VB数据库,读者将能够更好地开发和管理数据库应用程序。
概述:数据库是用来存储和管理大量数据的工具,它提供了高效的数据访问和操作方式。
在VB中,我们可以使用不同的数据库引擎来进行数据库操作,如MicrosoftAccess、SQLServer等。
通过使用这些数据库引擎,我们可以在VB程序中实现各种数据库相关的功能。
正文内容:一、数据库连接1.1数据库连接的重要性数据库连接是VB与数据库进行通信的桥梁,它允许我们在程序中进行数据的读取和写入操作。
选择合适的数据库连接方法可以提高程序的性能和安全性。
1.2VB中的数据库连接方式使用ADO(ActiveXDataObjects)对象来实现数据库连接。
ADO提供了多种连接方式,如使用OLEDB、ODBC等。
在数据库连接之前,需要确定数据库的类型、位置和凭据等信息。
二、数据查询2.1数据查询的目的数据查询用于从数据库中获取所需要的数据。
通过查询可以实现对数据的检索、筛选和排序等操作。
2.2VB中的数据查询方法使用SQL语句进行数据查询。
查询结果可以通过Recordset对象进行获取和处理。
2.3SQL语句的编写技巧了解常用的SQL语句,如SELECT、FROM、WHERE、ORDERBY等。
使用通配符和运算符来实现复杂的条件查询。
使用聚合函数和分组功能来计算数据的统计值。
三、数据插入3.1数据插入的作用数据插入用于将数据写入数据库中。
插入数据可以通过INSERTINTO语句来实现,也可以通过ADO对象的AddNew和Update方法来实现。
vb数据库编程实例
vb数据库编程实例VB数据库编程实例:实现学生信息管理系统在计算机编程中,数据库是一项关键技术,用于有效地存储和管理数据。
VB(Visual Basic)是一种广泛使用的编程语言,可以轻松地与数据库进行交互。
本文将详细介绍如何使用VB进行数据库编程,以一个学生信息管理系统的实例为例。
第一步:建立数据库首先,我们需要建立一个数据库来存储学生的信息。
在本实例中,我们将使用Microsoft Access数据库。
打开Microsoft Access并创建一个新的数据库文件。
然后,创建一个新的数据表,其中列的字段如下:- 学生ID(StudentID):主键,唯一标识一个学生- 姓名(Name):学生的全名- 年龄(Age):学生的年龄- 专业(Major):学生所在的专业- 成绩(Grade):学生的总评成绩保存数据库并记录其路径,以便在VB中进行引用。
第二步:创建VB项目打开Visual Studio或任何其他VB开发环境,创建一个新的VB 项目。
命名为“学生信息管理系统”或其他适当的名称。
第三步:连接数据库在VB中连接数据库需要使用。
首先,我们需要导入System.Data和System.Data.OleDb命名空间。
然后,在VB代码中添加以下代码片段来连接到数据库:vbDim connStr As String ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=<数据库路径>"Dim conn As New OleDbConnection(connStr)将`<数据库路径>`替换为第一步中保存的数据库文件路径。
第四步:加载学生信息接下来,我们将在VB中加载学生信息。
添加一个按钮控件到窗体上,并将其命名为“加载”。
然后,为该按钮的Click事件添加以下代码:vbPrivate Sub LoadButton_Click(sender As Object, e As EventArgs) Handles LoadButton.ClickDim selectQuery As String = "SELECT * FROM Students"Dim adapter As New OleDbDataAdapter(selectQuery, conn)Dim dataSet As New DataSet()adapter.Fill(dataSet, "Students")DataGridView1.DataSource =dataSet.T ables("Students")End Sub在此代码中,我们执行一个简单的查询,从数据库中检索所有学生的信息。
Vb数据库应用实例
Vb数据库应用试验
一、试验目的
1.了解vb数据库控件的使用.
2.了解vb自带的数据库软件access的使用
二、运行效果图示
三、操作步骤
1、创建数据库和表
打开vb,通过“外接程序”菜单的下拉菜单“可视化数据管理器”创建access数据库和表(这样创建数据库的好处是可移植性强,这样的数据库不会存在不兼容问题),设计好试题和选项。
2、用户界面设计
数据库和表建好后,回到vb窗体,设计用户界面。
说明:
1.使用data控件连接数据库,设置好它的databasename属性和recordsource属性。
2.使用label标签控件显示试题,设置好它的datasoure属性和datafield属性。
3.使用文本框显示填空题作答区,设置好它们的datasoure属性和datafield属性(只是为
了让这个简单考试软件能显示填空题)。
4.使用option控件数组显示四个选项。
5.使用commamd按钮控件显示第一题、最后一题、上一题、下一题。
6.所有控件都设计好后,data控件可以设为不可见状态,程序运行时不必显示。
3、代码
4、生成工程exe。
使用VB数据控件访问数据库
使用VB数据控件访问数据库Visual Basic是一种功能强大的编程语言,它允许程序员使用数据控件访问数据库。
在本文中,我们将介绍如何使用VB数据控件来连接和操作数据库。
首先,我们需要使用VB的数据控件来建立与数据库的连接。
VB提供了多种数据控件,包括ADO控件(ActiveX Data Objects,ActiveX数据对象)、DAO控件(Data Access Objects,数据访问对象)和ODBC控件(Open Database Connectivity,开放数据库连接)等。
在这里,我们将使用ADO控件。
要使用ADO控件,我们首先需要将其添加到项目中。
打开VB的开发环境,选择"工具"->"选项"->"控件"选项卡。
在这里,我们可以看到可用的控件列表。
找到ADO控件并勾选它,然后点击"应用"和"确定"。
在VB的表单上添加一个数据控件(如ADODC控件),这个控件将用于建立与数据库的连接。
在属性窗口中,我们可以设置连接字符串,选择需要连接的数据库,以及指定用户名和密码等。
可以使用连接字符串来指定连接的数据库类型和位置,如"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\mydatabase.mdb;User Id=admin;Password=;"一旦连接到数据库,我们就可以使用数据控件来执行各种数据库操作,如查询、插入、更新和删除等。
数据控件提供了一些方法和属性,可以轻松地执行这些操作。
此外,我们还可以使用数据控件的AddNew方法和Update方法来插入和更新数据库记录。
例如,我们可以使用Recordset.AddNew方法添加一条新的记录,然后使用Recordset.Update方法将更改保存到数据库中。
当我们完成对数据库的操作后,我们需要关闭数据库连接。
数据库vb课程设计
数据库vb课程设计一、课程目标知识目标:1. 让学生掌握数据库的基本概念,了解数据库在VB中的应用。
2. 使学生学会使用VB编程语言对数据库进行基本的操作,如建立、查询、更新和删除。
3. 让学生掌握数据库连接技术,能够实现VB程序与数据库的连接。
技能目标:1. 培养学生运用VB语言进行数据库编程的能力,能独立完成简单的数据库应用项目。
2. 培养学生分析问题、解决问题的能力,能根据实际需求设计合适的数据库结构。
情感态度价值观目标:1. 激发学生对计算机编程和数据库技术的兴趣,培养主动学习的态度。
2. 培养学生的团队协作精神,学会与他人共同分析和解决问题。
3. 增强学生的信息素养,认识到数据库技术在现实生活中的应用和重要性。
课程性质分析:本课程为高年级数据库vb课程设计,旨在帮助学生将所学理论知识与实际应用相结合,提高学生的实际操作能力。
学生特点分析:高年级学生对数据库和VB编程有一定的基础,具备一定的自学能力和问题分析能力。
教学要求:1. 结合课本内容,注重理论与实践相结合,强化学生的动手操作能力。
2. 采取案例教学,引导学生主动参与,培养学生的编程思维。
3. 鼓励学生提问和发表见解,提高学生的沟通能力和团队合作精神。
二、教学内容1. 数据库基本概念:介绍数据库的定义、作用、分类,重点讲解关系型数据库。
教材章节:第一章 数据库基础2. VB数据库操作:讲解在VB中如何使用ADO技术连接数据库,进行增删改查等基本操作。
教材章节:第二章 ADO数据库编程3. 数据库设计:教授如何设计合理的数据库结构,包括数据表、字段、主键等。
教材章节:第三章 数据库设计4. VB数据库项目实战:通过一个具体案例,让学生动手实践数据库编程,包括数据库连接、操作和界面设计。
教材章节:第四章 数据库应用实例5. 课程总结与拓展:总结本课程所学内容,引导学生进行拓展学习,了解数据库技术在其他领域的应用。
教材章节:第五章 课程总结与拓展教学内容安排和进度:第1周:数据库基本概念学习第2周:VB数据库操作理论讲解第3-4周:数据库设计实践第5-6周:VB数据库项目实战第7周:课程总结与拓展教学内容注重科学性和系统性,结合教材章节,由浅入深地组织课程内容,使学生能够逐步掌握数据库VB编程技能。
vb 第八讲数据库基础
Page ‹#›
排序
子句ORDER BY { 列名 [ASC|DESC] } [,…n] 查询选修了“0001”号课程的同学的学号,并按成绩的降序排列
SELECT 学号,成绩 FROM 课程注册 WHERE 课程号=’0001’ ORDER BY 成绩 DESC
ITCAST版权所有
Page ‹#›
1. 数据库基础知识
1. 数据库: 所谓数据库(Database)是指一组排列成易于处理或读取的 相关信息,它是由一个或多个表对象组成的集合。这有些类似于 Excel的工作簿和工作表。 2. 数据库管理系统: 数据库管理系统(DataBase Management System,简称 DBMS)是指在操作系统支持下为数据库建立、使用和维护而配 置的系统软件。
患者病例号 200212002 200306007
姓名 李小青 羡平
性别 男 女
年龄 36 28
200307003
200307006
王东
刘戈
男
女
ITCAST版权所有
12
40
Page ‹#›
关联
序号
1 2 3 4 5
日期
2001-10-1 2002-1-9 2002-11-3 2003-6-3 2003-10-7
十天掌握程序设计基础
—第八讲
数据库基础
ITCAST签约讲师 潘志红
ITCAST版权所有
本讲内容
1. 数据库的基础知识
2. 关系型数据库
3. 关系型数据库的分类 4. Access数据库简介 5. SQL Server数据库简介 6. SQL结构化查询语句
ITCAST版权所有
Page ‹#›
vb数据库操作实例培训资料
v b数据库操作实例第一部分:vb数据库操作实例vb神童教程(续)--编写一个小型的信息管理系统vb神童教程(续)--准备数据库vb神童教程(续)--设计系统的界面及对象的属性vb神童教程(续)--为对象添加事件代码vb神童教程(续)--编写一个小型的信息管理系统受委托为编程入门网做一个简单的vb操作数据库的实例,来演示一下如何用vb向数据库中添加、修改、删除记录这些操作。
我觉得自己是比较菜的,几年来别人都在进步,只有我还在原地踏步。
不过没有办法,我们这一圈人里现在只有我机器上还有vb6,勉为其难,只有尝试一下了。
如果我写的这点幼稚的东西能为想要了解vb数据库操作的朋友提供哪怕是一丁点儿的参考和帮助,将是我最为高兴的事情,同时也希望高手不要见笑。
我做的这个实例名为“编程入门网网址管理系统”,算是一个小型的信息管理系统吧。
该系统后台使用的是Access数据库,程序中使用ADO代码链接的形式连接Access。
该系统具有向数据库中添加、修改、删除记录的功能,进行某项操作后能够实时刷新显示数据。
并在程序中加了相应的代码对输入的数据进行合法性校验,以避免输入错误的数据造成程序运行不正常,程序运行时各个操作及退出系统时均有友好的提示框请用户确认。
所有代码均在Windows2003+Vusual Basic 6.0环境下调试通过。
系统运行时如下图:vb神童教程(续)--准备数据库我用的是Access 2003,因为需要讲解的仅仅是数据的添加、修改及删除,因此单数据库、单表就够了。
如果以后您要编写更复杂一些的信息管理系统而涉及到多表操作,则您还需要补充一些关系数据库方面的知识,比如实体、一对一联系、一对多联系等等;此外,对sql语言也需要有所了解。
具体您可以参考:数据库基础知识ABC。
首先,在“我的电脑”的e盘新建一个名为vb文件夹,先打开Access,新建一个名为Access_db的数据库(Access数据库文件的扩展名是.mdb),保存到刚才建立的文件夹中,则以后在程序中调用数据源的位置为E:\vb\Access_db.mdb。
用VB开发数据库应用程序基本理论
属性
若把Visual Basic中的对象看作名词,那么属性 便是它的形容词。属性可看作对象的静态特性。 程序运行时,通过对这些属性的改变,使对象的 状态发生变化。所有Visual Basic6.0程序中的 对象都有许多属性,它们是用来描述和反映对象 特性的参数。 例如,文本框的属性包括BackColor、 ForeColor、Enabled、Height、Width、Left、 Top,Name等属性。 要更改一个对象的属性,可以修改属性的值。
C/S——VB数据库应用系统开发
数据库应用系统结构 Visual Basic快速入门 开放数据库连接(ODBC) 数据访问接口(ADO) VB数据库编程举例 VB开发数据库应用系统实例分析
数据库应用系统结构
集中式结构 文件服务器结构 客户/服务器结构 浏览器/服务器结构 分布式数据库结构
方法
对象的动作和行为称为对象的方法。 方法就像动词。 例如,窗体的显示或隐藏就是窗体对象的 方法。 例:在显示在窗体语句 Form1.show 中show表示方法。
控件
控件分类 常用的内部控件 将Active X控件添加到工具箱中 将可插入的对象控件添加到工具箱中
控件分类
Visual Basic6.0中的控件通常分为三类: 内部控件:在默认状态下,工具箱中的控件都是内部控件。 这些控件被“封装”在Visual Basic6.0的EXE文件中, 不可从工具箱中删除。注意:有的控件没有图形表示,如 时钟(Timer)控件。 Active X控件:这类控件单独保存在.Ocx类型的文件中, 其中包括各种版本Visual Basic6.0提供的控件,还有仅 在专业版和企业版中提供的控件。此外,还有许多其他软 件供应商提供的Active X控件。 可插入的对象:用户可将Excel工作表或者PowerPoint 幻灯片等作为一个对象添加到工具箱中,编程时可根据需 要随时建立。
2019年-数据库技术与应用第8章-VB.NET与数据库应用程序-PPT精品文档-PPT精选文档
28
8.3 数据更新程序的设计
8. “查询”按钮Button1的Click事件代码:
Private Sub Button1_Click(。。。)。。。 Dim sqlstr As String sqlstr = "select * from 学生 where 学号 like ‘" &_ TextBox1.Text & "'" Me.SqlDataAdapter1.SelectCommand. _ CommandText = sqlstr DataSet11.Clear() Me.SqlDataAdapter1.Fill(Me.DataSet11, "学生") End Sub
16
8.2 数据库访问控件对象
数据访问操作过程:
SqlConnection连接数据库
SqlCommand执行查询或更新数据库命令
SqlCommand1. ExcuteNonQuery()
SqlDataReader1= SqlCommand1.Excutereader()
更新数据库
查询结果送入SqlDataReader
对只读对象中数据进行操作
17
8.2. 数据库访问控件对象
或 SqlConnection连接数据库 SqldataAdapter执行查询或更新数据库命令
Adapter.SelectCommand. ExcuteNonQuery( ) adapter.Fill( 数据集或数据表 )
更新数据库
查询结果送入DataSet或DataTable
27
8.3 数据更新程序的设计
MsgBox(ex.Message) Exit Sub End Try Case "取消" Mybind.CancelCurrentEdit() ‘重新刷新一次数据集 SqlDataAdapter1.Fill(Me.DataSet11, "学生") Case "关闭" Me.Close() End Select End Sub
数据库应用课程设计vb
数据库应用课程设计vb一、教学目标本课程旨在通过学习Visual Basic(VB)编程语言,让学生掌握数据库应用的基本原理和方法。
具体的教学目标如下:1.了解VB的基本语法和数据类型。
2.掌握数据库的创建和管理方法。
3.学习使用VB进行数据库的增删改查操作。
4.理解程序流程控制和函数的使用。
5.能够独立编写简单的VB数据库应用程序。
6.具备基本的数据库设计和管理能力。
7.熟练使用VB进行数据处理和分析。
8.能够阅读和理解VB程序代码。
情感态度价值观目标:1.培养学生对计算机编程的兴趣和热情。
2.培养学生独立思考、解决问题的能力。
3.培养学生团队协作、沟通交流的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.VB基本语法和数据类型:变量、常量、数据类型、运算符、表达式等。
2.数据库的创建和管理:数据库引擎的安装和配置、数据表的创建、字段属性设置、数据类型等。
3.数据库的增删改查操作:插入、删除、修改、查询数据的方法和技巧。
4.程序流程控制:顺序结构、选择结构、循环结构等。
5.函数的使用:内置函数、自定义函数、过程调用等。
6.数据库应用实例:设计并实现一个简单的学生信息管理系统。
三、教学方法为了提高教学效果,本课程将采用以下几种教学方法:1.讲授法:讲解VB基本语法、数据类型、数据库管理等基本概念和原理。
2.案例分析法:通过分析实际案例,让学生掌握数据库的创建、使用和维护方法。
3.实验法:让学生动手实践,实际操作数据库,巩固所学知识。
4.讨论法:分组讨论问题,培养学生的团队协作和沟通能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《Visual Basic数据库应用教程》。
2.参考书:相关VB和数据库技术的书籍。
3.多媒体资料:教学PPT、视频教程、在线案例等。
4.实验设备:计算机、网络环境、数据库服务器等。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采取以下评估方式:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性。
数据库原理及应用(VB部分)
Visual Basic 编程入门
菜单栏
工具栏 标题栏 工程资 源编辑 器窗口
窗体设计 器窗口 工具箱 代码编辑 器窗口
属性窗口
窗体布 局窗口
计算机基础教研室 Tel:7522324
North China Electric Power University
Visual Basic 编程入门
属性窗口
Boolean
Date Variant
2
8 16 变长
计算机基础教研室 Tel:7522324
North China Electric Power University
Visual Basic 语言基础
字符串型(String) VB字符串是由双引号括起来的一串字符 不含任何字符(长度为0)的字符串称为空串 String型变量有变长和定长之分 例: Dim NameA As String '声明变长字符 串变量 Dim NameB As String * 20 '声明定长字符串变量 逻辑型(Boolean) 逻辑型数据的取值:True或False 例: Dim BoolR As Boolean BoolR = 6>8 Print BoolR '输出:False
Print "a变量和b变量内容交换前:"; a; b
可分成以下两行输入: Print "a变量和b变量内容交换前:"; _
a; b
单引号后面的内容为注释,可放在一行语句的最后,或单独占据一行。 数值前加上前缀&H和&O分别表示十六进制和八进制数。
计算机基础教研室 Tel:7522324
North China Electric Power University
VB程序设计及数据库应用
(Knuth对算法的定义)算法是对特定问题求 解步骤的一种描述。此外,算法的规则序列 须满足如下五个条件:
(1) 有穷性。算法必须总是在执行有穷步 之后结束;
(2) 确定性。算法的每一个步骤必须是确 切地定义的;
100010110100010111111000 110100010111101100 100010010100010111100000
3. 高级语言:计算机的发展应用促使人们寻求一些与人类 自然语言相接近且能为计算机所接受的通用易学的计算机 语言。如C、 Pascal、 Basic、 Foxpro、Fortune、 perl ……
(3) 输入。算法有零个或多个输入; (4) 输出。算法有一个或多个输出,即与
输入有某个特定关系的量; (5) 能行性。算法中有待执行的运算和操
作必须是相当基本的,即是说,它们原则上 都是能够精确地进行的,而且用笔和纸做有 穷次就可以完成。
算法设计的要求
评价一个好的算法有以下几个标准:
VB是一种可视化的、面向对象的、事件驱动的、结构化 程序设计语言。
::004113A2:: 8945 E0
MOV DWORD PTR [EBP-20], EAX
11000111010001011111100000000001000000000000000000000000
二进制代码:11000111010001011110110000000010000000000000000000000000
程序设计概述
2.程序设计语言 程序设计语言是一种人造语言,人们发明程序设计语言 的目的就是编写程序。 机器语言 高级语言 -历史上先后流行的高级语言有:Fortran、 Algol、COBOL 、BASIC、Pascal、C、VB、VC、Java等。 编译方式和解释方式 VB源程序可以采用编译方式运行,也可采用解释方式运 行。一般在系统开发的程序调试测试阶段,采用解释方 式运行;程序开发完成后,把源程序编译成目标程序, 以后就直接运行目标程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8章VB数据库应用8.1 基本要求1. 掌握关系型数据库的基本概念及Access数据库的建立;2. 掌握Data控件和Access数据库的连接;3. 掌握数据绑定控件和数据控件的连接;4. 掌握ADODC控件的使用;5. 了解VB中使用结构化查询语言SQL的方法。
8.2 知识点1.关系型数据库中一些基本概念(1) 记录(Record): 每一行数据为一条记录。
(2) 字段(Field): 每一列为一个字段。
(3) 数据表(Table): 由记录的集合组成的二维表格称为数据表。
(4) 数据库(Database): 多个相互关联的数据表的集合。
(5) 主键: 一个字段或多个字段的组合,唯一地标识了表中的一行。
它不允许有空值,主键是表中所保存的每一条记录的唯一标识。
(6) 索引: 通过索引可以快速访问数据库中的指定信息。
在数据库设计器中可以创建三种类型的索引,分别是唯一索引、主键索引和簇索引。
通常在数据库表中如果为表定义了一个主键将自动地创建主键索引,主键索引是唯一索引的特殊类型。
主键索引要求主键值是唯一的。
(7) 关系: 一个数据库可以由多张表组成,根据不同情况,表与表之间可以建立不同类型的关系。
表之间的关系有一对一关系,一对多关系和多对多关系。
2.关系数据库模型关系数据库模型的逻辑结构是一张二维表,和我们在日常生活中使用的表格在直观上是一致的。
一个关系对应于一张二维表。
表中的一列称为一个“字段”。
表中的一行称为一个“记录”。
每个表都应有一个主关键字,主关键字可以是表的一个字段或字段的组合,且对表中的每一行都唯一。
3. SQL查询语言(1)用Select语句可以从数据库中查询符合条件的记录。
语法格式:SELECT <字段表> FROM <表名> WHERE <条件>GROUP BY <分组字段> HA VING <分组条件>ORDER BY 字段[ASC|DESC]其中:字段表部分:包含了查询结果要显示的字段清单,字段之间有逗号分隔。
要选择表中所有字段,可用“*”代替。
FROM子句:用于指定一个或多个表。
WHERE子句:用于限制记录的选择。
GROUP BY和HA VING子句:用于分组和分组过滤处理。
它能把在指定字段列表中有相同值的记录合并成一条记录。
ORDER BY子句:决定了查找出来的记录的排列顺序。
(2)用Insert语句能插入记录。
语法格式:INSERT INTO 表名[(列名1,…)]V ALUES(值1,值2,…,值n)WHERE 条件(3)用Update语句能更新记录的字段内容语法格式:UPDATE 表名SET 字段1=表达式1,字段2=表达式2,…WHERE 条件(4)用Delete语句能删除表中的记录。
语法格式:DELETE FROM 表名WHERE 条件4. Data控件Data控件通过一个称为记录集(Recordset)的对象来访问数据库中的数据。
一个记录集是数据库中的一组记录,一个记录集可以来自基本表或SQL命令执行的结果。
访问数据控件Data1的记录集的语法如下:数据控件对象.RecordsetData控件连接设置:(1)设置Connect属性:指定Data控件所要连接的数据库格式,默认值为Access (2)设置DatabaseName属性:设置Data控件所连接的数据源的名称及位置。
例如,连接到“D:\supermarket.mdb”。
(3)设置RecordSource属性:指定数据控件所连接的记录来源,可以来自数据库中的某张数据表,也可以是查询的结果或者来自一个有返回记录的SQL语句。
如,选择数据库supermarket.mdb中的类别信息表class。
(4)设置RecordsetType属性:指定数据控件存放记录的类型,包含表类型记录集(Table)、动态集类型记录集(Dynaset)和快照类型记录集(Snapshot),默认值为动态集类型。
5. Data控件及其记录集的常用方法(1)Refersh方法:更新Data控件所连接的数据。
(2)UpdateControls方法:从一个Data控件的Recordset对象中取得当前记录,并且在绑定到某个控件中显示。
(3)UpdateRecord方法:保存被连接的控件的当前值。
UpdateRecord方法与执行Edit 方法编辑一个字段并随后执行Update方法产生同样效果,除非无事件发生。
(4)AddNew方法:向可更新的记录集Recordset对象中添加一条新记录。
新记录的每个字段如果有默认值将以默认值表示,如果没有则为空白。
(5)Update方法:调用AddNew方法之后,或现有记录的任何字段值发生更改之后,调用Update方法可以把更改保存到数据库中。
(6)Delete方法:删除当前记录的内容,在删除后应将当前记录移到下一个记录。
(7)Edit方法:对可更新的当前记录进行编辑修改。
(8)Find方法:用于查找记录,包含FindFirst、FindLast、FindNext和FindPreviou方法。
(9)Move方法:移动Recordset对象中当前记录的位置,包含MoveFirst、MoveLast、MoveNext和MovePrevious方法,这四种方法分别是移到第一条记录、移到最后一条记录、移到下一条记录和移到前一条记录。
当在最后一个记录时,如果使用了MoveNext方法时EOF的值会变为True,如果再使用MoveNext方法就会出错。
对于MovePrevious方法如果前移,结果也是同样。
(10)Seek方法:用于已经建索引的表类型(Table)记录集,通过一个已被设置为索引(Index)的字段,查找符合条件的记录,并使该记录为当前记录。
6. Data控件的常用事件(1)Reposition事件:当某一个记录成为当前记录之后触发。
通常利用该事件对当前记录的数据内容进行计算,使用Move方法、Find方法或单击Data控件的移动按钮都可以触发该事件。
(2)Validate事件:当某一记录成为当前记录之前,或是在Update、Delete、Unload 或Close操作之前触发。
7. 数据绑定控件通常把具有数据源属性(DataSource)的控件称为数据绑定控件。
Picture、Label、TextBox、CheckBox、Image、OLE、ListBox和ComboBox都可作为数据绑定控件,另外DataList、DataCombo、DataGrid和MSHFlexGrid控件也是常用的数据绑定控件。
它们都有Datasource 属性,通过该属性可以和Data控件所连接的记录集Recordset的某个字段绑定并显示该字段的内容。
与Data控件绑定的相关属性(1)DataSource属性:从下拉列表中选择想要绑定的控件名称,如选择Data1。
(2)DataField属性:从下拉列表中选择要显示的字段名称。
8. ADODC控件ADODC控件可利用Microsoft ActiveX Data Objects数据对象(ADO)快速建立数据绑定控件和数据提供者之间的连接。
数据提供者可以是任何符合OLE DB规范的数据源。
ADODC控件和Data控件在概念上很相似,都可以将一个数据源连接到一个数据绑定控件,也都有相同的外观按钮。
但是,相比较来说ADODC更加灵活,适应性更广。
9. ADODC控件的常用属性(1)ConnectionString属性:是一个连接字符串,用来连接到数据源。
可以是OLE DB 文件(.UDL)、ODBC数据源(.DSN)或连接字符串。
(2)RecordSource属性:返回或设置一个记录集的查询,用于决定从数据库中查询什么信息。
(3)UserName属性:用户名称,当数据库受密码保护时,需要指定该属性。
这个属性也可在设置ConnectionString属性时设置。
(4)Password属性:设置ADO Recordset对象创建过程中所使用的口令,当访问一个受保护的数据库时是必须的。
10. ADO对象模型Connection对象是ADO对象模型中最重要的一个对象,通过该对象建立和数据库的连接,可以说它是ADO的源头,只有创建了Connection对象之后,才可以创建和使用上图中的Command对象和Recordset对象。
(1)Connection对象在ADO对象模型中,通常是先创建Connection对象。
创建Connection对象的代码如下:Dim cn As ADODB.Connection ‘定义一个Connection类别的对象变量Set cn = New ADODB.Connection ‘创建一个对象实例cn也可以将这两句代码合成为一句,下面的效果等价于执行前面的两条语句。
Dim cn As New ADODB.Connection然后指定该对象所连接的数据源。
设置Connection对象连接数据源的代码如下:CnnStr="Provider=Microsoft.Jet.Oledb.3.51;" & "Data Source=D:\supermarket.mdb;"(2)Recordset对象Recordset 对象是一个记录集,可以来自基本表或SQL命令执行的结果。
和前面在Data 控件以及ADODC控件中所用到Recordset是相同性质的。
先创建Recordset对象,然后打开数据表:Dim rs As New ADODB.Recordsetrs.CursorLocation=adUserClientrs.Open “provider”, cn, adO penKeyset, adLockPessimistic(3)Command对象Command对象主要是用来执行SQL语句。
(4)Field对象Field对象代表各字段的类型和值。
每个Field对象对应于Recordset中的一列。
Recordset 对象含有由Field对象组成的Fields集合。
使用Field对象的Value属性可设置或返回当前记录的数据。
读取字段值的常用语法格式如下:方法一:Recordset.Fields(i).Value: 存取第i个字段的内容。
方法二:Recordset.Fields(字段名称).V alue:根据字段名称来存取字段的内容。
方法三:Recordset![字段名称](5)Error对象用来检测和判断在数据库操作中出现的错误,比如连接失败等。
在VB中,出现特定ADO的错误将引发On Error事件,并且该错误将出现在Error对象中。