Office中国论坛/Access中国论坛

标题: 怎么用TABELDEF老是出錯. [打印本页]

作者: ADAM    时间: 2003-10-17 03:09
标题: 怎么用TABELDEF老是出錯.
當運行此段代碼時:
出現錯誤
"執行階段錯誤'3420'"
物件無效或已不再設定..

Dim rst As TableDef
Dim prpLoop As Property
Set rst = CurrentDb.TableDefs("BB")
For Each prpLoop In rst.Properties
If prpLoop <> "" Then Debug.Print "  " & prpLoop.Name & " = " & prpLoop
Next prpLoop

各們老大們看看是怎么回事....

作者: esmile    时间: 2003-10-17 16:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: ADAM    时间: 2003-10-17 17:04
以下是引用esmile在2003-10-17 8:57:03的发言:
对,这种现象我也出现过,关健是有些字段中的属性原本没有填值,所以易造成没有定义、物件无效等错误。
你可以在代码前加一句
on error resume next
来忽略错误。

"字段中的属性原本没有填值"===>有點不明白....
另外,如果忽略錯誤,那程式碼就不能完成預定任務啊....
55555
作者: 唐小小    时间: 2003-10-17 17:18
看看这个吧,也许可以帮上你哦
http://www.accfans.net/show.asp?id=456
作者: ADAM    时间: 2003-10-17 18:09
小小,那個不是我要的...
55555
作者: zhuyiwen    时间: 2003-10-17 18:30
请检查,
一、是否引用了DAO3.6
二、是否有BB表
三、Set rst = CurrentDb.TableDefs("BB") 改为 Set rst = CurrentDb().TableDefs("BB")

作者: ADAM    时间: 2003-10-17 21:09
斑竹:
1.有引用DAO3.6
2.存在BB表
3.用了Currentdb()也不是,錯誤同上...
4.另外,我用
Dim rst As TableDef
Dim prpLoop As Property
Set rst = CurrentDb.TableDefs("BB")
MsgBox CurrentDb.TableDefs("bom1").Name   '===>這句不會出錯...,正確

5.我把tabledef 改為 dao.tabledef 也不行

這到的是為什么呢....
蒼天啦.....5555555555555555555555

作者: zhuyiwen    时间: 2003-10-17 21:13
把你的MDB裤挂上来 [em24]
[此贴子已经被作者于2003-10-17 13:16:51编辑过]


作者: ADAM    时间: 2003-10-17 21:47
我把庫傳上來了,你老幫忙看看吧..
不知是俺DAO有問題還是咋的..

[attach]2087[/attach]

[em00]
作者: zhuyiwen    时间: 2003-10-17 22:14
Sub test()
    Dim db As DAO.Database
    Dim rst As DAO.TableDef
    Dim prpLoop As DAO.Property
   
    Set db = CurrentDb
    Set rst = db.TableDefs("bb")
   
    Debug.Print rst.Name
    Debug.Print rst.Properties.Count
   
    For Each prpLoop In rst.Properties
        Debug.Print "  " & prpLoop.Name & " = " & prpLoop.Value
    Next prpLoop
End Sub

' PASS PASS PASS
作者: ADAM    时间: 2003-10-17 22:58
zhuyiwen,你好歷害,為什么這樣一做,就可以了呢
我也這樣試過
太感謝你了.....

作者: 唐小小    时间: 2003-10-17 23:08
学了一招,:)
作者: ADAM    时间: 2003-10-17 23:10
其實這個貼子主要是想解決表的CAPTION屬性的問題,
再羅嗦一下,我現在還是出錯:

在CREATPROPERTY中出現型態不符,我查過這個方法的用法
可是還是沒頭緒...
而且,我如果不把
FIEL1.Caption = "BBTEST2"這名取消,它執行起來
首先這會報告這句有問題...

斑竹,再幫幫忙............

Private Sub Command18_Click()
Dim db As DAO.Database
    Dim rst As DAO.TableDef
    Dim FIEL1 As DAO.Field
    Dim prpLoop As Property
   
    Set db = CurrentDb
    Set rst = db.TableDefs("bb")
    Set FIEL1 = rst.Fields("bb1")
    SetProperty FIEL1, "CAPTION", True
   'FIEL1.Caption = "BBTEST2"
   
    For Each prpLoop In rst.Properties
        Debug.Print "  " & prpLoop.Name & " = " & prpLoop.Value
    Next prpLoop

End Sub

Sub SetProperty(dbsTemp As Object, strName As String, booTemp As Variant)
Dim prpNew As Property
Dim errLoop As Error
' Attempt to set the specified property.
On Error GoTo Err_property
MsgBox 1
dbsTemp.Properties("strName") = booTemp
On Error GoTo 0
Exit Sub
Err_property:
'Error 3270 means that the property was not found.
If DBEngine.Errors(0).Number = 3270 Then
' Create property, set its value, and append it to the' Properties collection
Set prpNew = dbsTemp.CreateProperty(strName, dbBoolean, booTemp)
dbsTemp.Properties.Append prpNew
Resume Next
Else
' If different error has occurred, display message.
For Each errLoop In DBEngine.Errors
MsgBox "Error number: " & errLoop.Number & vbCr & errLoop.Description
Next errLoop
End
End If

End Sub
作者: zhuyiwen    时间: 2003-10-17 23:10
CurrentDB只是一个ACCESS的方法,它返回一个DAO的Database对象
作者: ADAM    时间: 2003-10-17 23:45
斑竹,我還有一點不明....
作者: zhuyiwen    时间: 2003-10-17 23:47
Sub test()
    Dim db As DAO.Database
    Dim rst As DAO.TableDef
    Dim FIEL1 As DAO.Field
    Dim prpLoop As Property
   
    Set db = CurrentDb
    Set rst = db.TableDefs("BB")
    Set FIEL1 = rst.Fields("BB1")
    SetProperty FIEL1, "CAPTION", "BB1的标题"
   
    For Each prpLoop In FIEL1.Properties
        Debug.Print "  " & prpLoop.Name
    Next prpLoop

End Sub

Sub SetProperty(dbsTemp As Object, strName As String, strValue As String)

    Dim prpNew As Property
    Dim errLoop As Error

    On Error GoTo Err_Property
    ' 这是帮助中的写法 : dbsTemp.Properties("strName") = strValue,错误的
    dbsTemp.Properties(strName) = strValue
    On Error GoTo 0

    Exit Sub

Err_Property:

    If DBEngine.Errors(0).Number = 3270 Then
        Set prpNew = dbsTemp.CreateProperty(strName, dbText, strValue)
        dbsTemp.Properties.Append prpNew
        Resume Next
    Else
        For Each errLoop In DBEngine.Errors
            MsgBox "Error number: " & errLoop.Number & vbCr & _
                errLoop.Description
        Next errLoop
        End
    End If

End Sub

' PASS PASS PASS
[此贴子已经被作者于2003-10-17 16:09:32编辑过]


作者: ADAM    时间: 2003-10-18 00:14
斑竹老大,這一句在我這里出錯了:

For Each prpLoop In FIEL1.Properties

提示:型態不符..


作者: zhuyiwen    时间: 2003-10-18 00:34
以下是引用ADAM在2003-10-17 16:14:10的发言:
斑竹老大,這一句在我這里出錯了:

For Each prpLoop In FIEL1.Properties

提示:型態不符..


请仔细检查你的代码。
作者: ADAM    时间: 2003-10-18 01:18
我查了,真的不知錯在哪里....
指點指點...
謝謝了...
但是
把 Dim prpLoop As Property 改成 Dim prpLoop As object
就可以了...

??????

作者: ygcswl    时间: 2003-11-22 18:52
究竟是如何给字段标题赋值,最终的代码是什么?我还是不明白。
作者: ADAM    时间: 2003-11-22 21:49
請看13樓
代碼不是寫了嗎......




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3