[vb] query opbouw verkeerd?

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

  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
ik ben bezig om data in een access database te editten / adden (vanuit autocad)
nu heb ik een query met daarin een variabele, maar deze wil maar niet lukken ik heb verschillende dingen geprobeerd. Als ik de query zoals onder gaat alles goed.

code:
1
Set rs = db.OpenRecordset("SELECT * FROM onderhoek WHERE ID=54)


maar als ik van de query deze maak, dan gaat het verkeerd (eeror = 13 Type mismatch)

code:
1
Set rs = db.OpenRecordset("SELECT * FROM onderhoek WHERE TEKENINGNAAM= '" & naam & "' ")


en waarom???
als ik "MsgBox naam" doe komt de goede naam tevoorschijn

gehele code :

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
48
49
50
51
52
53
54
55
56
Sub Onderhoek()

    Dim Attributen As Variant
    Dim element As AcadEntity
    Dim attribuut As AcadAttributeReference
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    
    Set db = DBEngine.Workspaces(0).OpenDatabase("C:\Documents and Settings\dirco\Desktop\tekeningen beheer systeem\database.mdb")
       
    For Each element In ThisDrawing.PaperSpace
        If element.ObjectName = "AcDbBlockReference" Then
            Set Symbool = element
            If Symbool.HasAttributes Then
                Attributen = Symbool.GetAttributes
                
                
                         For i = LBound(Attributen) To UBound(Attributen)
                            Set attribuut = Attributen(i)
                            If attribuut.TextString = "" Then
                                attribuut.TextString = " "
                            End If
                            If attribuut.TagString = "TEKENINGNAAM" Then
                                naam = attribuut.TextString
                            End If
                            If attribuut.TagString = "TEKNR" Then
                                nr = attribuut.TextString
                            End If
                            If attribuut.TagString = "VERSIE" Then
                                versie = attribuut.TextString
                            End If
                         Next i
                                                
                            Set rs = db.OpenRecordset("SELECT * FROM onderhoek WHERE TEKENINGNAAM= '" & naam & "' ")
                            
                            
                            MsgBox rs
                            
                            If rs.EOF Then
                                rs.AddNew
                            Else
                                rs.Edit
                            End If
                            
                          For i = LBound(Attributen) To UBound(Attributen)
                            rs.Fields(Attributen(i).TagString) = (Attributen(i).TextString)
                          Next i
                          rs.Update
                        
                            
                 
            End If
        End If
    Next element
     
End Sub

mijn pc


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Hoe is de variabele naam gedeclareerd?
Verder zou je op basis van de foutmelding verwachten dat tekeningnaam geen string is.
Of misschien zitten er quotes o.i.d. in de naam? Zet de waarde van die variabele eens op het scherm en debug eens wat. Misschien heb je waardes die je niet verwacht, of waardes die je verwacht niet...

offtopic:
- Denk ook aan SQL injection en hoe je dat kunt voorkomen
- Set db = CurrentDb zet de variabele db automatisch op de huidige database...

[ Voor 47% gewijzigd door OZ-Gump op 08-04-2005 16:44 . Reden: uitbreiding ]

My personal website


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Haal die enkele quotes eens weg. ;) Oeps, ik kijk verkeerd. 8)7

[ Voor 33% gewijzigd door NMe op 08-04-2005 16:44 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
-NMe- schreef op vrijdag 08 april 2005 @ 16:33:
Haal die enkele quotes eens weg. ;)
Daarmee ben ik al heel lang aan het stoeien geweest...
error word dan :

Run-time error 3061
er zijn te weinig parameters. Het verwachte aantal is: 1.

mijn pc


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 08-05 11:55

mulder

ik spuug op het trottoir

dan is naam toch echt leeg of NULL, of uberhaupt niet gedeclareerd

oogjes open, snaveltjes dicht


  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
Don Facundo schreef op vrijdag 08 april 2005 @ 16:38:
dan is naam toch echt leeg of NULL, of uberhaupt niet gedeclareerd
staat toch echt wat in ... als ik net voor de query "MsgBox naam" neer zet da geeft hij heel netjes de naam die erin hoort te staan

het stukje :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
For i = LBound(Attributen) To UBound(Attributen)
                            Set attribuut = Attributen(i)
                            If attribuut.TextString = "" Then
                                attribuut.TextString = " "
                            End If
                            If attribuut.TagString = "TEKENINGNAAM" Then
                                naam = attribuut.TextString
                            End If
                            If attribuut.TagString = "TEKNR" Then
                                nr = attribuut.TextString
                            End If
                            If attribuut.TagString = "VERSIE" Then
                                versie = attribuut.TextString
                            End If
                         Next i
                                  MsgBox naam
                                                
                            Set rs = db.OpenRecordset("SELECT * FROM onderhoek WHERE TEKENINGNAAM= '" & naam & "' ")


dan krijg ik een msgbox met daarin : TEST123

[ Voor 65% gewijzigd door Rusky op 08-04-2005 16:42 ]

mijn pc


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10:18

Dido

heforshe

offtopic:
Nuttige link, OZ-Gump (althans, na de edit ;) )

[ Voor 29% gewijzigd door Dido op 08-04-2005 16:46 ]

Wat betekent mijn avatar?


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Ik denk dat dit het probleem is: naam wordt in een IF toegewezen. Als de code niet in die IF komt, dan wordt toch naam gebruikt als waarde waarop gezocht moet worden. En dan gaat dat foutgaan.....

Oftewel: naam netjes DIMmen als string (en eventueel een standaardwaarde aan toekennen). Dan zou de query ook goed moeten gaan.

Ook is je IF-voorwaarde nogal in hoofdletters. En die controle is bij bepaalde instellingen ook echt hoofdletter gevoelig. Oftewel: zet dat breakpoint eens om te controleren of alles wel de waarde heeft die je verwacht dat het heeft.

offtopic:
Dido: parameterized queries lijken me qua link inderdaad redelijk nuttig... ;)
ja ik was vergeten te plakken.....

[ Voor 13% gewijzigd door OZ-Gump op 08-04-2005 16:46 ]

My personal website


  • Rusky
  • Registratie: December 2000
  • Laatst online: 04-05 08:51
Sorry ... heel stom .... maar als ik de MsgBox rs die onder de query weghaal dan gaat het wel goed .... bedankt allemaal

mijn pc


  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 10:52

Guldan

Thee-Nerd

euh ok, zelf geen vb ervaring alleen zelfde in Java.. maar een type mismatch wil geloof ik zeggen dat hij bijv een String krijgt terwijl het veld wat hij moet vergelijken een int is. Nou moet dat men naam niet zo'n probleem zijn. Wat voor type heeft de variable naam? ik denk dat daar namelijk je probleem zit.

/me Guldan is met hetzelfde ook 3 uur bezig geweest :P

edit:
: ok toch een nutteloze reply geworden, maar misschien hebben anderen er wat aan

[ Voor 14% gewijzigd door Guldan op 08-04-2005 16:46 ]

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?

Pagina: 1