总感觉如下代码太过繁琐:Public Function FieldIsInTableOfDatabase(ByVal sFieldName As String, ByVal sTableName As String, ByRef db As Database) As Boolean
Dim bExists As Boolean
bExists = False
' 用DAO对象,逐个读取数据库db的表名,查找数据表sTableName的字段sFieldName是否存在
Dim objTable As TableDef
For Each objTable In db.TableDefs
Debug.Print objTable.Name
If LCase(objTable.Name) = LCase(sTableName) Then
bExists = True
Exit For
End If
Next
If bExists Then
bExists = False
Dim i As Integer
For i = 0 To objTable.Fields.Count - 1
If LCase(objTable.Fields(i).Name) = LCase(sFieldName) Then
bExists = True
Exit For
End If
Next i
End If
Set objTable = Nothing
FieldIsInTableOfDatabase = bExistsEnd Function
Dim bExists As Boolean
bExists = False
' 用DAO对象,逐个读取数据库db的表名,查找数据表sTableName的字段sFieldName是否存在
Dim objTable As TableDef
For Each objTable In db.TableDefs
Debug.Print objTable.Name
If LCase(objTable.Name) = LCase(sTableName) Then
bExists = True
Exit For
End If
Next
If bExists Then
bExists = False
Dim i As Integer
For i = 0 To objTable.Fields.Count - 1
If LCase(objTable.Fields(i).Name) = LCase(sFieldName) Then
bExists = True
Exit For
End If
Next i
End If
Set objTable = Nothing
FieldIsInTableOfDatabase = bExistsEnd Function
解决方案 »
- [请教] VBA shape用颜色填充部分图形
- 感谢cbm666,现在有一个还是关于VBCrlf的问题(在线等)
- 在利用CommonDialog打开文件时,并时进行复制,有没有好的方法取得文件后缀名???
- 如何模拟点击另一个程序的菜单?急
- 拜求,关于水晶报表与虚拟表的问题。
- 怎样填充一个矩形?????????
- 怎么在 access表中插入记录
- 如何编写抽考软件
- ADO 数据访问对象能否将DOS系统下的 *.DBF 打开并作为一个表来进行数据存取吗?
- 高手们,请帮帮忙啊!(一个关于VB延迟的问题?)
- 请教一下 圆周上的点集合公式是怎么的
- 用VB6的ActiveX DLL创建的DLL,在其他程序中使用这个DLL中的函数时还要先创建对象,真麻烦。如何才能象调用WINDOWS API一样直接调用这个D
Public Function FieldIsInTableOfDatabase(ByVal sFieldName As String, ByVal sTableName As String, ByRef db As Database) As Boolean
Dim bExists As Boolean
bExists = False
Dim cn As New ADODB.Connection, rs As New ADODB.Recordset
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Test.mdb;User Id=admin;Password=;"
rs.Open "SELECT [Name] FROM MsysObjects WHERE [name]= " & sTableName, cn, adOpenDynamic, adLockOptimistic
If Not (rs.BOF And rs.EOF) Then
bExists = False
Dim i As Integer
For i = 0 To rs.RecordCount - 1
If LCase(rs(i).Name) = LCase(sFieldName) Then
bExists = True
Exit For
End If
Next i
End If
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
FieldIsInTableOfDatabase = bExistsEnd Function
Public Conn As New ADODB.ConnectionPrivate Sub Command1_Click()
On Error Resume Next
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=C:\test.mdb"
Set Rs = Conn.Execute("Student") '2
If Err.Number <> 0 Then
Debug.Print "Table 不存在"
Exit Sub
End If
End Sub
For Each objTable In db.TableDefs
Debug.Print objTable.Name
If LCase(objTable.Name) = LCase(sTableName) Then
bExists = True
Exit For
End If
Next这段代码,能不能简化一下,让objTable直接打开以sTableName命名的表,而不用通过循环列举表名?我记得VC当中的CDaoTableDef类倒是可以。