[vba] [access] error 3265

Pagina: 1
Acties:
  • 348 views sinds 30-01-2008
  • Reageer

  • Rusky
  • Registratie: December 2000
  • Laatst online: 17-12 11:22
ik heb in vba autocad een connectie naar een access databasegemaakt zoals hieronder:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Sub attext()

    Dim Attributen As Variant
    Dim element As AcadEntity
    Dim attribuut As AcadAttributeReference
    Dim Symbool As AcadBlockReference
    
    Set Tabel = OpenTabel("c:\dirco\database.mdb", "onderhoek")
   
    For Each element In ThisDrawing.PaperSpace
    
        If element.ObjectName = "AcDbBlockReference" Then
            Set Symbool = element
            If Symbool.HasAttributes Then
                Attributen = Symbool.GetAttributes
                
                Call Toevoegen(Tabel, Attributen)
                
            End If
        End If
    Next element

End Sub

Function OpenTabel(Bestand, tabelNaam) As DAO.Recordset

    Dim db As DAO.Database
    Set db = DAO.DBEngine.Workspaces(0).OpenDatabase(Bestand)
    Set OpenTabel = db.OpenRecordset(tabelNaam)


End Function


Sub Toevoegen(Tabel, Attributen)

    If Not Tabel.EOF Then
        Table.Edit
        End If
    Tabel.AddNew
    
For i = LBound(Attributen) To UBound(Attributen)
    Tabel.Fields(Attributen(i).TagString) = (Attributen(i).TextString)
Next i
Tabel.Update

End Sub


mijn access database heeft precies dezelfde namen als Tagstring ( = de PROJECT1 / PROJECT2 enzo) terug geeft, maar toch blijft hij deze error geven ...

error =
Run-time error '3265':
Kan het element niet vinden in deze collectie

database =
code:
1
2
3
4
ID - primair / autonummering
PROJECT1 - Tekst
PROJECT2 - Tekst
enzo ...

mijn pc


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je moet toch een beetje debuggen, in het stukje
code:
1
2
3
For i = LBound(Attributen) To UBound(Attributen)
    Tabel.Fields(Attributen(i).TagString) = (Attributen(i).TextString)
Next i


gebruik je een veldnaam die niet in de tabel voorkomt volgens de errormelding. Loop er eens doorheen in debugmode en kijk welke waarden de tagstrings hebben.


Je gebruikt trouwens DAO om met de database te communiceren, dit is een oude en depreciated methode. Je kunt beter ADO gebruiken.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17-12 19:54

Creepy

Tactical Espionage Splatterer

En wat heb je nu zelf al geprobeerd om het op te lossen? Stap voor stap door je code heen gelopen? Op welke regel krijg je deze melding? Zie ook P&W FAQ - Leer **** debuggen!!. We verwachten hier dat je zelf eerst aan het debuggen gaat en dat je aangeeft wat je nu precies hebt geprobeerd.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Rusky
  • Registratie: December 2000
  • Laatst online: 17-12 11:22
ik heb zelf al gegoogeld wat de fout precies is : De naam van de "TagString" komt niet overeen met de database veldnaam. Deze heb ik helemaal doorgelopen maarkon daar geen fout in vinden. Daarom dat ik het zo raar vind

mijn pc


Verwijderd

[b]P_de_B schreef op dinsdag 05 april 2005 @ 11:02Je gebruikt trouwens DAO om met de database te communiceren, dit is een oude en depreciated methode. Je kunt beter ADO gebruiken.
dao mag mss wel deprecated zijn, het is nog altijd de snelste manier om native met access databases te praten.

wat betreft de foutmelding, kan het zijn dat je attributencollectie groter is dan het aantal velden, waardoor ie op het einde eruitknalt?

Verwijderd

Volgens mij moet je eens kijken in het stukje

For i = LBound(Attributen) To UBound(Attributen)
Tabel.Fields(Attributen(i).TagString) = (Attributen(i).TextString)
Next i

Je begint in de array te tellen van 0 tot maxitems en je kopieert ze naar fields(0) t/m fields (maxitems). Ik weet niet meer precies hoe het zit, maar de fout kan er in zitten dat
1. als je begint bij 0, je moet doortellen tot (maxitems - 1) of
2. je moet kopieren naar fields(attributen(i + 1)) omdat fields begint bij 1.

Groeten,

Martin
Pagina: 1