[VBA] SQL statement moet komma ook uit tabel lezen

Pagina: 1
Acties:

  • jobo
  • Registratie: Februari 2001
  • Laatst online: 29-01 16:32
Ik heb een heel vaag probleem en ik weet niet goed hoe ik dit op moet lossen. Ik zal proberen het zo duidelijk mogelijk te omschrijven.

Ik heb een Acces XP database. Daarin heb ik een VBA programma geschreven. In dit programma komen meerdere keuzelijsten voor. Waar ik het probleem nu geconstatteerd heb, zie ik een lijst met artikelen. Wanneer ik nu een nieuw artikel invoer waar een komma in de omschrijving voorkomt, dan wordt het laatste artikel in de lijst bovenaan de keuzelijst weergegeven (ik sorteer op omschrijving, dus alfabetische volgorde is logisch toch?) Als ik nu het eerste artikel in de lijst aanklik wordt het tweede artikel weergegeven in de details. Ik zal ter verduidelijking een stuk van de code voor het vullen van de lijst en een schermafdruk van mijn formulier in access toevoegen.

'--------------------------------------------------------------------------------------------------------
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 Private Sub Zoeken()
    '------ Maak de query aan en vul de recordset met de gevraagde gegevens ------
    Dim stFilter As String
    
    '------ Als hardware en software geselecteerd zijn, of er geen selectie is gemaakt ------
    ZoekCriteria1.SetFocus
    If IsNull(Groepsvak_Filter.Value) Or Groepsvak_Filter.Value = 3 Then
        stSQL = "SELECT artikelid, omschrijving, soortartikel FROM artikelen WHERE omschrijving LIKE '" & ZoekCriteria1.Text & "%' ORDER BY omschrijving"
    Else
        '------ Als hardware geselecteerd is ------
        If Groepsvak_Filter.Value = 1 Then
            stFilter = 1
            stSQL = "SELECT artikelid, omschrijving, soortartikel FROM artikelen WHERE omschrijving LIKE '" & ZoekCriteria1.Text & "%' AND soortartikel = " & stFilter & " ORDER BY omschrijving"
        Else
            '------ Als software geselecteerd is ------
            If Groepsvak_Filter.Value = 2 Then
                stFilter = 2
                stSQL = "SELECT artikelid, omschrijving, soortartikel FROM artikelen WHERE omschrijving LIKE '" & ZoekCriteria1.Text & "%' AND soortartikel = " & stFilter & " ORDER BY omschrijving"
            End If
        End If
    End If
    rsArtikelen.Open stSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    
    '------ Maak de lijst met gevonden artikelen leeg ------
    GevondenArtikelenLeegMaken
    
    '------ Bekijk het resultaat van de query------
    If rsArtikelen.RecordCount <> 0 Then
        '------ Vul de matrix met gegevens uit de database ------
        vRecordTotaal = rsArtikelen.RecordCount
        vData = rsArtikelen.GetRows(vRecordTotaal)
        
        '------ Ga naar het eerste record in de query ------
        rsArtikelen.MoveFirst
        
        '------ Vul de lijst met gevonden artikelen ------
        VulLijstMetGevondenArtikelen
    Else
        stMsg = "Er zijn geen artikelen gevonden die voldoen aan de door u opgegeven zoekcriteria. Probeer het opnieuw."
        iKnoppen = vbOKOnly
        stMsgTitel = "Zoekresultaten"
        iResultaat = MsgBox(stMsg, iKnoppen, stMsgTitel)
    End If
    
    '------ Sluit de geopende recordset af (geeft geheugen vrij)------
    rsArtikelen.Close
End Sub

Private Sub VulLijstMetGevondenArtikelen()
    Dim rsSerienummer As New ADODB.Recordset
    Dim stTabel As String

    While Not rsArtikelen.EOF
        If rsArtikelen.Fields("soortartikel") = 1 Then
            stTabel = "Hardware"
        Else
            stTabel = "Software"
        End If
        
        stSQL = "SELECT serienummer FROM " & stTabel & " WHERE artikelid = " & rsArtikelen.Fields("Artikelid")
        rsSerienummer.Open stSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

        If rsSerienummer.RecordCount = 1 Then
            Keuzelijst_GevondenArtikelen.AddItem rsArtikelen.Fields("omschrijving").Value & " - " & rsSerienummer.Fields("serienummer").Value
        Else
            Keuzelijst_GevondenArtikelen.AddItem rsArtikelen.Fields("Omschrijving").Value
        End If
        rsSerienummer.Close
        rsArtikelen.MoveNext
    Wend
End Sub

'---------------------------------------------------------------------------------------------------------

Afbeeldingslocatie: http://members.chello.nl/~f.boerboom1/afb1.jpg

Weet iemand wat ik hier fout doe?

alvast bedankt

[ Voor 7% gewijzigd door jobo op 04-11-2003 16:49 . Reden: aanpassing code blok en toevoeging screenshot ]

need more coffee!!!


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 16:52

Tukk

De α-man met het ẞ-brein

Als je je code tussen '['code']' en '['/code']' tags zet (zonder de apostrof) is het zeker beter te lezen, nu lees het erg lastig.

_/-\o_ , nu nog een paar enters en je bent weer het mannetje :)


Mischien zit de fout niet in je query, debug dat maar eens.
Mischien zit de fout in de control waarin je de data laat zien, die
zou ook nog een filer/sortering toe kunnnen passen als je de addItem functie gebruikt.

Probeer eens in de code een item met een ',' erin toe te voegen.

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
Private Sub VulLijstMetGevondenArtikelen()
    Dim rsSerienummer As New ADODB.Recordset
    Dim stTabel As String

    While Not rsArtikelen.EOF
        If rsArtikelen.Fields("soortartikel") = 1 Then
            stTabel = "Hardware"
        Else
            stTabel = "Software"
        End If
        
        stSQL = "SELECT serienummer FROM " & stTabel & " WHERE artikelid = " & rsArtikelen.Fields("Artikelid")
        rsSerienummer.Open stSQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

        If rsSerienummer.RecordCount = 1 Then
            Keuzelijst_GevondenArtikelen.AddItem rsArtikelen.Fields("omschrijving").Value & " - " & rsSerienummer.Fields("serienummer").Value
        Else
            Keuzelijst_GevondenArtikelen.AddItem rsArtikelen.Fields("Omschrijving").Value
        End If
        rsSerienummer.Close
        rsArtikelen.MoveNext
    Wend
' als laatste,voeg iets met een komma toe en kijk waar dit terecht komt in de lijst
Keuzelijst_GevondenArtikelen.AddItem "Blabla, met een komma"
End Sub

[ Voor 122% gewijzigd door Tukk op 04-11-2003 17:00 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


Verwijderd

Probeer eens op de plaatsten waar je de waarde van de combobox gebruikt in eenquery, dit in te voegen: Replace(combobox.Text, "'", "''") query's kunnen niet overweg met het ' teken. Maybe geld dat ook voor een aantal andere plaatsen in je code.

  • jobo
  • Registratie: Februari 2001
  • Laatst online: 29-01 16:32
Volgens mij is het ' teken niet het probleem. SQL moet hier mee werken als het een string betreft. Wanneer ik in een veld in de gebruikte tabel (bij omschrijving in mijn geval) een komma (,) in de tekst gebruik, dan wordt er in de keuzelijst een verkeerde invoer gelezen. het lijkt alsof er dan naar een volgend veld ofzo gegaan wordt. De keuzelijst is in ieder geval van slag als dit gebeurd...

need more coffee!!!


  • jobo
  • Registratie: Februari 2001
  • Laatst online: 29-01 16:32
Als ik onderaan de code handmatig een artikel toevoeg, dan wordt deze onderaan op de juiste manier toegevoegd, maar komt er bovenaan nog een artikel met daarin alle tekens vanaf de komma (,) nu snap ik het helemaal niet meer!!!

is dit iets wat de keuzelijst niet aan kan???

de lijst met artikelen ziet er nu zo uit:
Afbeeldingslocatie: http://members.chello.nl/~f.boerboom1/afb3.jpg

need more coffee!!!


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 16:52

Tukk

De α-man met het ẞ-brein

Ahh, volgens heb ik je probleem te pakken.
Die control kun je meerdere items tegelijk geven, die dien je dan komma sperated op te geven. Ik denk dat je gewoon geen komma's kan tonen in die ocx die je gebruikt.

probeer de volgende stuk code eens:
Replace(combobox.Text, ","Komma")

wedden dat de teksten dan wel goed aankomen, maar dan met de tekst komma er tussen in plaats van echt een komma.. Je zal iets anders moeten verzinnen dan een komma in je tekst als blijkt dat het wertk zoals hierboven. (of natuurlijk een andere control gebruiken)

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • jobo
  • Registratie: Februari 2001
  • Laatst online: 29-01 16:32
Als ik replace(string, ",", " komma") gebruik, dan werkt het inderdaad wel. Dit betekend dus dat een keuzelijst zonder invoervak niet echt lekker werkt in mijn programma. ;(

oké...

dan het volgende probleem... wat moet ik dan wel gebruiken om toch lijsten als deze weer te geven :? Ik moet wel bijvoorbeeld een computer als artikel kunnen invoeren. De omschrijving zou dan worden "P4 2,6GHz 512Mb intern 80Gb HDD". Hier komt dus een "," in voor. hoe moet ik dit nu gaan aanpakken? is er geen manier om de tekst letterlijk in de keuzelijst te plakken? |:(

[ Voor 35% gewijzigd door jobo op 05-11-2003 15:40 ]

need more coffee!!!


  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 16:52

Tukk

De α-man met het ẞ-brein

- Of een helpfile vinden bij je huidige control en kijken wat die zegt.
- Of geen komma gebruiken
- Of ergens een andere control vandaan halen die wel doet wat je kan.

veel succes.

[ Voor 25% gewijzigd door Tukk op 05-11-2003 16:48 ]

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.

Pagina: 1