VB中调用VF数据库

合集下载

如何在VB中连接数据库

如何在VB中连接数据库

如何在VB中连接数据库我们对数据库进行操作时,一方面要使用户可以在程序界面上对需要的数据进行访问;另一方面可以对数据库中的数据进行各种操作,最终的操作结果还要反馈给用户。

用户在对数据进行访问时,需要应用程序对数据库做许多底层的操作,如果要开发人员编写代码的话,需要花费大量的精力。

为了简化开发过程,一些开发工具使用控件对数据库进行操作。

在VB中就有几个这样的控件,如Data控件、ADO控件。

下面就介绍一下Data控件和ADO控件以及ADO对象的使用。

一、Data控件通过设置数据控件的属性,我们可以将Data控件连到一个特定的数据库和其中的一个表上。

但是,Data控件本身是不能显示数据的,它只能处理信息流在应用程序和数据库间的转换。

为了能在界面中显示数据,我们使用VB中的普通控件在窗体上显示数据。

首先,在VB中建立一个标准的工程。

在窗体中添加控件其中,Data1就是一个Data控件。

然后改变控件的一些属性,属性修改后如接下来我们要对Data控件进行设置。

要对特定的数据库进行操作,就要连接到这个特定的数据库中。

在Data控件中要对Databasename属性进行设置,在对此属性进行设置时会弹出一个对话框,可以选择数据库的路径。

一个数据库中可能会有许多张表,我们还要指定一张表。

这个可以通过Data控件的Recordsource属性来设置。

如果设置好了Databasename 属性,在你设置Recordsource属性时就会出现一个列表,列出所连接数据库中所有的表,在其中就可以选择某个要使用的表。

这样就可以了吗?用户在界面上是看不到任何数据的。

为了能够让用户对数据进行操作,还有设置相关控件的属性。

在窗体上有三个文本框控件,分别是用来显示表中的对应字段的。

要使文本框对应显示表中的字段,要对文本框的Datasource和Datafield属性进行设置。

在Datasource中要选择对应的数据控件,在这个工程中只有Data控件,所以只能选择此控件,其名字为data1。

VB中对数据库的操作

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数据控件访问数据库
mmand5)
(3)程序代码
Private Sub Command1_Click() s = Trim(InputBox("请输入要查找的学号", "查找")) t = "学号='" & s & "'" Data1.Recordset.FindFirst t If Data1.Recordset.NoMatch Then MsgBox "找不到学号为" & s & "的学生 ! " Data1.Recordset.MoveFirst End If
10.11 使用VB数据控件访问数据库
VB提供了多种访问数据库的方式,其中数据控件(Data) 是一种使用简便、处理快速的标准控件
1.数据控件的用途
利用Data控件可以建立应用程序与数据库的联系,操作数 据库中的数据,还能利用文本框、列表框等控件,实现数据 的浏览、编辑等功能。
2.
与添加其他控件的方法一样,其外观如下:
Excel数据清单(C:\My Documents\成绩单.xls)内容如下:
(1)创建应用程序的用户界面
(2)设置对象属性
设置数据控件Data1: Connect属性为Excel8.0 DataBaseName属性为C:\My Documents\成绩单.xls RecordSource属性为Sheet1$ (工作表名)
设置文本框(Text1-Text4): 对应“成绩库.dbf”的4个字段 DataSource属性为Data1 DataField属性分别为“学号”、“姓名”、“成绩”和
“班号”
设置五个命令按钮(Command1-Command5)

VBVFP联合应用

VBVFP联合应用

VBVFP联合应用VB+VFP联合应用各类语言都有其长处和缺憾,如何取长补短呢?希望这篇文章能起到抛砖引玉的效果。

目标:必须在VFP环境对CSV格式文件中所有的字符“/”替换成“-”分析:如果在VFP中读入CSV格式文件然后再找字符“/”再替换成“-”,势必比较困难,速度也会很慢。

因为不知道字符“/”将出现在那个字段。

也不清楚字符“/”出现的位置。

而这类问题的处理如果用VB就很简单。

可以在VB中正行读入,然后使用Replace命令就可以了,然后循环读取下一行,直到文件末尾。

可以使用OLE组件技术在VFP中调用VB实现的相关功能。

具体方法如下:首先用VB生成一个Dll,名为Lib,模块名为Tools。

在T ools模块中写入下列代码。

例如:Public Function ReplaceA(ByVal Source As String)If Source = '' ThenExit FunctionEnd IfOn Error GoTo Open_ErrDim Destination As StringDestination = 'c:/tmp.t'FileCopy Source, DestinationKill SourceOn Error GoTo Replace_ErrDim textLineOpen Destination For Input As #1 Open Source For Output As #2Do While Not EOF(1)Line Input #1, textLinetextLine = Replace(textLine, '/', '-') Print #2, textLineLoopClose #1Close #2Kill DestinationExit_Sub:Exit FunctionReplace_Err:Debug.Print Err.Description Resume Exit_SubOpen_Err:Debug.Print Err.Description Resume Exit_SubEnd Function然后在VFP中调用方法如下:mytools = createobject('Lib.myLib')mytools.ReplaceA('完整文件名并且要带绝对路径') release mytools。

VFB写DLL给VB调用

VFB写DLL给VB调用

VFB写DLL给VB调用Function FF_WINMAIN(ByVal hInstance As HINSTANCE) As L ong '程序入口函数'hInstance EXE或DLL的模块句柄,就是在内存中的地址,EXE 通常固定为 &H400000 DLL 一般不固定'编译为 LIB静态库时,这里是无任何用处' DLL 例题 ******** 函数无需返回值' DLL被加载到内存时,不要执行太耗时间的代码,若需要耗时就用多线程。

' AfxMsg "DLL被加载到内存时 "' EXE 例题 ********' AfxMsg "EXE刚启动 "' 如果这个函数返回TRUE(非零),将会结束该软件。

如果没有启动窗口,那么此函数过后,也会终止软件。

' 您可以在此函数做程序初始化。

' (这里的EXE、DLL表示自己的,无法获取其它EXE、DLL入口和出口)Function = FalseEnd FunctionSub FF_WINEND(ByVal hInstance As HINSTANCE) '程序出口,程序终止后的最后代码。

'hInstance EXE或DLL的模块句柄,就是在内存中的地址,EXE 通常固定为 &H400000 DLL 一般不固定'编译为 LIB静态库时,这里是无任何用处' DLL 例题 ********' 卸载DLL,DLL被卸载,需要快速完成,不能用进程锁。

' AfxMsg "DLL被卸载时 "' EXE 例题 ********' 程序即将结束,这里是最后要执行的代码,(:无法停止被退出的命运。

' AfxMsg "EXE退出 "' (这里的EXE、DLL表示自己的,无法获取其它EXE、DLL入口和出口)End Sub'*************同文件夹里,有VB工程源码,演示调用FB的DLL 方法 **********************'点击顶部工具栏【齿轮】图标,就编译为DLL 了,'函数后面加 Export 表示导出函数,那样VB里就可以定义使用了'导出后,函数名全部自动变大写,且在后面加符号 @0 @4 @8 等,@后面的数字是 1个参数 *4'=====================关键函数================'--------------------------------------------------------------------------Function BStrToString(nBStr As BStr) As String '将VB里的字符串转换为FB里使用的字符串Dim L As Long = Peek(Long,Cast(UInteger,nBStr) - 4)Dim ss As String = String(L,0)memcpy StrPtr(ss),nBStr,LFunction = ssEnd Function'--------------------------------------------------------------------------Function StringT oBStr(nStr As String) As BStr '将FB里的字符串转换为VB里使用的字符串Function = SysAllocString( Cast(WString Ptr, StrPtr(nStr) ) ) '伪造 VB 字符串End Function'--------------------------------------------------------------------------Function BStrToStringW(nBStr As BStr) As String '将VB里的字符串转换为FB里使用的字符串,用于字符数组'注意,假如字符串里包含 chr(0) 将会在此被截断Dim ss As StringIf nBStr <> 0 Thenss = * CPtr(WString Ptr, nBStr)End IfFunction = ssEnd Function'--------------------------------------------------------------------------Sub SetBstr(ByRef nBStr As BStr,nStr As String ) ' 修改VB字符串,用于字符数组'必须是 ByRef ,不然修改不了nBStr,默认是 ByValIf nBStr = 0 Then'无字符nBStr = SysAllocString(nStr) '新增字符串Else'有字符SysReAllocString(@nBStr,nStr) '修改字符串End IfEnd Sub'============================================='警告!警告!警告!在工程属性里,必须去掉支持GDI+(默认选中),不然VB软件和VB的IDE会失去响应。

如何在VBA中调用数据库

如何在VBA中调用数据库

如何在VBA中调用数据库在VBA编程中,调用数据库是一项非常有用的功能。

通过调用数据库,我们可以在VBA中连接和操作各种类型的数据库,包括Microsoft Access、SQL Server、Oracle 等,实现数据的读写和处理。

本文将详细介绍如何在VBA 中调用数据库,并给出一些实际应用的示例。

首先,我们需要在VBA中添加对数据库的引用。

在VBA编辑器中,点击"工具",再点击"引用",弹出引用对话框。

在这个对话框中,我们可以选择需要引用的数据库类型。

例如,如果我们要连接Microsoft Access数据库,可以选择"Microsoft Access XX.X Object Library",其中的XX.X表示具体版本号。

选择完毕后,点击"确定"按钮进行确认。

一旦成功引用了数据库,在VBA代码中就可以使用相关的对象和方法来连接和操作数据库了。

首先,我们需要创建一个数据库连接对象,以实现与数据库的连接。

对于不同类型的数据库,我们可以使用相应的连接对象。

以连接Microsoft Access数据库为例,我们可以使用"ADODB.Connection"对象来进行连接。

下面是一个连接Microsoft Access数据库的示例代码:```Dim conn As New ADODB.Connectionconn.ConnectionString ="Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\example.accdb"conn.Open```在这个示例代码中,我们首先创建了一个名为"conn"的ADODB.Connection对象。

然后,通过设置"ConnectionString"属性指定了连接字符串,其中包括了Microsoft Access数据库的提供程序和文件路径。

浅谈在VB中实现对Foxpro数据库的自然连接操作

浅谈在VB中实现对Foxpro数据库的自然连接操作
F 、 o数 据 库 为 例 ) 自然 连 接 操 作 。 o Pr 的
1 自然 连 接
在 进 行 数 据 库 系 统 设 计 时 , 消 除 冗 余 度 . 入 异 常 、 除 异 常 而 须 将 一 个 库 分 为 几 个 库 , 往 往 在 为 插 删 但
查 询时 通 常要 牵 涉到 几 个库 , 接 运算 就 是 按 照某 种 条 件 将两 个 库 组 合 在 一起 , 连 自然 连 接 也称 等 值 连
J i i g t a a a e fF x r t on n wo d t b s so o p o wih VB
W EIPi — i g ng p n
( ̄ t e a is De r m e , Guiho ] da h m tc pa t nt z u Edu a i c ton Coleg l e+G uian y g,G u z ou 55 03,Chi i h 00 na)
A’ a t a ig O h e h oo y a o aa ae i B a d jiig J c :B sn n t e tc n lg b utd tb s n V n o nn - qr
t o da a a e w t b s s ofFoxp o wih n ex r t ampl e
Kc wo d :VI,ted t b s fF x r y rs 3 h aa a eo o p o,d t c e ̄o jc a aac s be t
本 文 从 调 用 数 据 库 存 取 对 象 ( aaA cs jc ) 方 法 出 发 , 现 了 非 A cs D t c esObe t 的 实 ces格 式 数 据 库 ( 以
接 , 连 接 运 算 中 的 特 例 , 给 定 两 个 库 , 过 判 断 两 库 中 某 一 公 共 字 段 的 值 相 等 而 将 两 库 中 记 录 相 连 是 即 通

VB使用ADODB操作数据库的常用方法

VB使用ADODB操作数据库的常用方法

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中连接数据库

如何在VB中连接数据库

如何在VB中连接数据库
一、连接方式
1、ODBC数据库连接
打开新工程,在菜单栏上选择“工具”-“Data Links”,可以看到“数据链接”对话框,点击“新建”按钮,此时可以看到“ODBC
Microsoft登录”对话框,点击“帐户”按钮,此时可以看到“ODBC Microsoft登录”对话框,在“服务器”框中填入数据库服务器的IP地址,在“用户名”和“口令”框中填入账号和密码,点击“测试”按钮,
确认能够通过测试,然后点击“完成”按钮,可以得到正确的数据库连接。

2、ADO连接
在工程中添加引用,选择Microsoft ActiveX Data Object 2.8 Library(或者是更高版本),在程序中添加如下代码:
Private Sub Form_Loa
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
End Sub
其中,Data Source指定数据库的IP地址,Initial Catalog指定数
据库名,User ID指定数据库用户名,Password指定数据库口令。

3、DAO连接
打开新工程,在菜单栏上选择“工具”-“Data Links”,可以看到“数据链接”对话框,点击“新建”按钮,此时可以看到“DAO
Microsoft登录”对话框,在“服务器”框中填入数据库服务器的IP地址,在“用户名”和“口令”框中填入账号和密码,点击“测试”按钮,
确认能够通过测试,然后点击“完成”按钮,可以得到正确的数据库连接。

vb连接数据库详解

vb连接数据库详解

作为微软旗下一款优秀的RAD工具,VB在数据库应用开发方面的能力十分强大。

微软设计了多种数据库访问方法,下面通过对VB访问数据库的多种技术进行深入剖析,并总结出实际开发中的几点经验。

希望能够对那VB的初学者有所帮助。

(注意,文中所有的描述均在Windows 2000 professional和Visual Basic 6.0的环境下进行的)一. DAO、RDO、ODBC和ADO在VB的开发环境中,可以使用三种数据库访问方式,它们分别是:数据访问对象(DAO)、远程数据对象(RDO)和ADO对象模型。

DAO:数据访问对象是用来显露了Microsoft Jet数据库引擎(最早是给Microsoft Access 所使用,现在已经支持其它数据库),并允许开发者通过ODBC直接连接到其他数据库一样,直接连接到Access 表。

DAO 最适用于单系统应用程序或在小范围本地分布使用。

其内部已经对Jet数据库的访问进行了加速优化,而且其使用起来也是很方便的。

所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式。

VB已经把DAO模型封装成了Data控件,分别设置相应的DatabaseName属性和RecordSource属性就可以将Data控件与数据库中的记录源连接起来了。

以后就可以使用Data控件来对数据库进行操作。

RDORDO(Remote Data Objects)远程数据对象是一个到ODBC的、面向对象的数据访问接口,它同易于使用的DAO style组合在一起,提供了一个接口,形式上展示出所有ODBC 的底层功能和灵活性。

尽管RDO在很好地访问Jet或ISAM数据库方面受到限制,而且它只能通过现存的ODBC驱动程序来访问关系数据库。

但是,RDO已被证明是许多SQL Server、Oracle 以及其他大型关系数据库开发者经常选用的最佳接口。

RDO提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。

使用VB数据控件访问数据库

使用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中使用FoxPro数据库-文档

如何在VB中使用FoxPro数据库-文档

如何在VB中使用FoxPro数据库-文档如何在VB中使用FoxPro数据库Visual Basic是微软公司开发的一种面向对象的编程语言,功能强大,简单易学。

即便是初学者也可以在较短的时间内开发出质量高,界面友好的应用程序。

FoxPro也是微软公司的产品,它是一款小型关系型数据库编程语言,在学校机关等的日常应用管理中,使用非常多,本文阐述如何在VB中使用FoxPro数据库。

1、VB的数据访问技术在 Visual Basic 中,可用的数据访问接口有三种:ActiveX 数据对象(ADO)、远程数据对象(RDO) 和数据访问对象(DAO)。

数据访问接口是一个对象模型,它代表了访问数据的各个方面。

(2)远程数据对象RDO(Remote Data Object)是一个到ODBC 的、面向对象的数据访问接口,它是指在Client(客户端)与Server(服务器端)建立的数据访问模式,与DAO不同的是,DAO 是访问Access的Jet引擎的接口,而RDO则是访问ODBC的接口,它可以通过ODBC驱动程序来访问关系数据库。

RDO 提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。

(3)ActiveX数据对象ADO(ActiveXData Object)是DAO/RDO 的后继产物。

ADO在功能上与RDO 更相似,它是为Microsoft新的数据访问接口OLE DB而设计的。

OLE DB 是新的低层接口,它并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法,通过OLE DB所提供的高性能的数据访问方法,可以方便快速地对各种数据源进行访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形等等。

ADO与DAO和RDO相比,ADO具有对象模型简单、使用方便的特点,ADO不但使Visual Basic对数据的访问更加简单和灵活,而且能访问的数据类型也更加丰富,特别在网络方面的应用极大地提高了系统的性能。

使用VB访问数据库

使用VB访问数据库
使用DAO的程序编码非常简单,DAO提供丰富 的游标(Cursor)类型的结果集和非游标 (Cursor Less)类型的结果集,同DDL(数 据描述语言)的功能很类似。
DAO模型是设计关系数据库系统结构的对象类的 集合。
➢它们提供了完成管理这样一个系统所需的全部操作的 属性和方法,包括创建数据库,定义表、字段和索引, 建立表间的关系,定位和查询数据库等工具。
OLE DB与ADO
OLE DB(Object Linking and Embedding for DataBase)数据库对象链接和嵌入
MS采用通用数据访问的方法,“你自己保存数 据,我们给你提供一种方法来访问这些数据。”
实际上就是一种进行关系型数据和非关系型数据 一样的技术。
OLE DB定义:
?使用daoodbcdirect功能可以实现远程rdo功能关系数据库sqlsever200oracleaccess等通过odbc应用程序使用rdo访问数据库daojetrdoodbcjet通知odbc访问服务器数据库数据库databaseodbc允许jet或rdo访问服务器数据库jet不能直接访问服务器accessjet可以直接访问access数据库缺点?dao与rdo只能处理后台为关系数据库的dbms不能解决通用数据存储及通用数据访问
Recordset对象
Recordset对象(记录集对象)
用来管理某个查询返回的记录集以及记录集中的 游标。
声明:对每一个需要操作的查询结构可以声 明一个Recordset对象
Dim cn As New ADODB. Recordset
Recordset属性
1、CursorType 属性 (游标类型)
ODBC允许JET或 RDO访问服务器数 据库

vb与数据库的几种连接方法

vb与数据库的几种连接方法

-、用DAO控件连接数据库1.与Access2000数据库连接Private Sub Command1_Click()'也可直接在控件属性中设置以下各项但在控件属性中不能写入密码'只有在数据数没有密码的情况下可以省略Data1.RefreshData1.Connect = "Access 2000;"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 = "Excel 8.0;"Data1.DatabaseName = App.Path & "/EXcel.xls"Data1.RecordSource = "select * from [EXcel.xls]"Data1.Refresh’move后才能正确显示记录个End Sub二、用DAO代码连接数据库'在使用DAO对象前应选定Visual Basic菜单下的[工程]中的引用了菜单中的[Microsoft DAO 3.6 Object Library]选项,或其它版本1.DAO代码与Access数据库连接Private Sub Command1_Click()Dim Db As DatabaseDim Rs As Recordset'以共享、读写方式打开'如果无密码最后一个参数可以不要Set Db= 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 > 0 ThenRs.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 > 0 ThenRs.MoveLastRs.MoveFirstEnd IfEnd sub3. 'DAO代码与没有密码的Excel文件数据库连接Private Sub Command3_Click()Dim Db As DatabaseDim Rs As Recordset'以共享、读写方式打开'如果无密码最后一个参数可以不要Set Db = 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 > 0 ThenRs.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;ExtendedProperties=DSN=Visual FoxPro Tables;UID=;SourceDB=”& app.path&”;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"'Adodc1.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;ExtendedProperties=DSN=dBASE Files;DBQ=”& app.path &”;;DefaultDir=”& app.path&”;DriverId=533;MaxBufferSize=2048;PageTimeout=5;"'能使表名长度不受限制Adodc1.ConnectionString = "Provider=MSDASQL.1;Driver=Microsoft 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 = "Data Provider=MSDASQL.1;driver=Microsoft Excel Driver *.xls);DBQ=" & App.Path & "/EXcel.xls"'Adodc1.ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;ExtendedProperties=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;User ID=chncmadb;Data Source=towebserver;Persist Security Info=True"Adodc1.ConnectionString="Provider=OraOLEDB.Oracle.1;Password=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 Object 2.5 Library]选项,或其它版本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, adCmdTextSet 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;Extended Properties='Excel 8.0;HDR=Yes'"AdoRs.Open "select * from [EXcel.xls]", AdoCnn, adOpenDynamic, 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=chncmadb;Persist Security Info=True;User ID=chncmadb;Data Source=towebserver"AdoRs.Open "select * from T320481TR012004", 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 Security Info=True;User ID=111;Initial Catalog=111;Data Source=111"AdoRs.Open "select * from T320481TR012004", AdoCnn, adOpenDynamic, adLockPessimistic, adCmdTextSet DataGrid1.DataSource = AdoRsSet AdoRs = NothingSet AdoCnn = NothingEnd Sub。

VB用od控件连接qerver数据库的方法完整版

VB用od控件连接qerver数据库的方法完整版

V B用o d控件连接q e r v e r数据库的方法 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】VB用Adodc控件连接sql server 2000数据库的方法配有插图的详细用法请看邮箱里的邮箱。

下面是文字介绍VB用Adodc控件连接sql server 2000数据库的方法:1、打开vb新建“标准EXE”;2、在菜单栏点击“工程”,弹出下拉菜单,鼠标单击“部件”;3、在控件选项卡下面选择"Microsoft ADO Data Control (SP6)"和"Microsoft DataGrid Control (SP6)",单击“确定”按钮;4、在左侧工具中双击Adodc控件和DataGrid控件;5、挪动Form1上Adodc1和DataGrid1到合适的位置,把DataGrid1调节成合适大小;6、右击Adodc1,在弹出的下拉菜单中选择“ADODC属性”;出现属性页;单击“生成”按钮,弹出“数据链接属性”;选择"Microsoft OLE DB Provider for SQL Server",单击“下一步”,出现"数据库链接属性";下面以连接"pubs"数据库为例:(1)在“选择或输入服务器名称”下面输入"localhost";(2)在“输入登录服务器名称”下面,选择“使用Windows NT 集成的安全设置”,当然如果你的服务器指定的用户名和密码,你可以选择第二项,并输入用户名和密码;(3)在“在服务器上选择数据库”下面的下拉菜单中选择"pubs";单击“测试连接”,弹出连接成功的信息;单击“确定”;7、在Form1空白处双击鼠标左键,弹出代码编辑窗口;在“Private Sub Form_load()”和“End Sub”之间输入下面程序段;= False= "select * from sales"Set =8、单击“启动”按钮;运行成功。

VB中打开常用数据库

VB中打开常用数据库

VB中打开常用数据库作者:未知时间:2005-08-07 20:53 出处:编程爱好者网站责编:chinaitpower摘要:VB中打开常用数据库'数据库类型.Public Enum SmDbTypeAccess = 1 'AccessExcel = 2 'ExcelText = 3 '文本FoxPro = 4 'FoxProdBase = 5 'dBaseEnd Enum''创建一个连接(连接到其它数据库类型)'函数名:CreateOtherConn'参数: DbConnection 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 = RsPublic Function CreateOtherConn(ByRef DbConnection As ADODB.Connection, _FilePath As String, _Optional UserName As String = "admin", _Optional PassWord As String = "", _Optional DbType As SmDbType = Access) As Boolean Dim ConnStr As StringDim DriveName(5) As StringDim tDbType(5) As StringDim UserPwd(5) As String'驱动程序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 DbConnection.State = adStateOpen And Not IsEmpty(adStateOpen) ThenDbConnection.CloseEnd IfConnStr = "Provider=MSDASQL.1;Persist Security Info=False;DRIVER=" & DriveName(DbType) & ";" & UserPwd(DbType) & "DBQ=" & FilePathDbConnection.ConnectionString = ConnStrDbConnection.OpenDoEventsIf Err.Number = 0 ThenDbStyle = tDbType(DbType)CreateOtherConn = TrueElseErr.ClearDbStyle = ""CreateOtherConn = FalseEnd IfEnd Function上面的只是常见的数据库类型。

在VISUAL BASIC中使用FOXPRO数据库

在VISUAL BASIC中使用FOXPRO数据库

在VISUAL BASIC中使用FOXPRO数据库
刘琳
【期刊名称】《电脑》
【年(卷),期】1996(000)010
【摘要】一、目的和方法VB作为第四代编程语言,以它方便强大的界面编程工具吸引了广大开发者.而FoxPro作为一种老牌的ISAM(索引顺序存取方式,Indexed SequentialAccess Method)数据库管理软件,正占有着当前中国数据库用户市场的极大份额.如何实现在VB中使用现有的FoxPro数据库已成了一些数据管理应用软件升级换代的当务之急.在VB中使用FoxPro数据库,首先要连接数据源,即打开*.DBF文件所在的目录路径.
【总页数】2页(P50-51)
【作者】刘琳
【作者单位】无
【正文语种】中文
【中图分类】TP312
【相关文献】
1.Visual Basic环境中如何使用DAO访问远程数据库 [J], 张捷
2.Visual Basic环境中如何使用DAO访问远程数据库 [J], 张捷
3.使用Visual Basic实现对数据库FoxPro访问的一个实例 [J], 张坤
4.在FoxPro环境下使用Visual FoxPro数据库文件的探讨 [J], 马永坚;
5.Visual Basic环境中如何使用DAO访问远程数据库 [J], 张捷
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档