Query met verschillende id's

Status
Niet open voor verdere reacties.

weswillem

Gebruiker
Lid geworden
8 nov 2011
Berichten
310
Ben bezig een overzichtenlijst te maken.
Via een listview kies ik een aantal personen
Veronderstel dat ik 3 personen kies,heb ik dus
3 ID's.
Op welke wijze kan ik dan mijn dataset in keer vullen
met gegevens van de 3 personen.

Code:
For k = 1 To iAantalPersID  'aantal geselecteerde Persid's van Personen
      mySQL = ""
      iPersID = iPersID.Remove(0, 1) 'iPersID = ",17,1", dus eerst 1e komma weghalen
      iPos = InStr(iPersID, ",") 'aantal  posities tot en met komma
      If iPos > 0 Then
            PersID = Microsoft.VisualBasic.Left(iPersID, iPos - 1) 'hou dus 17 over
      End If
      mySQL = "SELECT u.*, g.Voorl,g.Voorv, g.Naam, g.Persid FROM UrenPersoneel as u INNER JOIN Gegevens AS g  ON g.PersID= u.PersId Where g.PersID =" 
                       & PersID & " ORDER BY u.Weeknr DESC"

next k
 
Je kunt de persid's eerst een string plaatsen die je samenvoegt met OR en dan 1 keer de query uitvoeren.

De string moet worden: (17 OR 18 OR 19)
 
Tjemig, Wampier

Help je hier ook al?
Dit is eigenlijk een vervolg op de vraag Array maken in vb.net
Maar ga het ff proberen. Moet ik zoiets denken

Code:
For x=0 to iaantalPersID
            iPersID = iPersID.Remove(0, 1) 'iPersID = ",17,1", dus eerst 1e komma weghalen
                    iPos = InStr(iPersID, ",") 'aantal  posities tot en met komma
                    If iPos > 0 Then
                        PersID = Microsoft.VisualBasic.Left(iPersID, iPos - 1) 'hou dus 17 over
                    End If 
                    if iaantalpersid > 1 then
                          PersIDs = PersID & " OR  "
                    else
                         PersIDs=PersID
                    end if
Next x
mySQL="SELECT u.*, g.Voorl,g.Voorv, g.Naam, g.Persid FROM UrenPersoneel as u INNER JOIN Gegevens AS g  ON g.PersID= u.PersId Where g.PersID =" 
MyQuery= MySQL & PersIDs

  'mySQL = "SELECT u.*, g.Voorl,g.Voorv, g.Naam, g.Persid FROM UrenPersoneel as u INNER JOIN Gegevens AS g  ON g.PersID= u.PersId Where 
  'g.PersID =" & PersID & " ORDER BY u.Weeknr DESC"
 
Laatst bewerkt:
Heb hem nu werkend, met enig gestoei.
Rood is de toevoeging.
Bij onderstaande code krijg ik nog alles te zien
Mijn mysql wordt dan:
Code:
SELECT u.*, g.Voorl,g.Voorv, g.Naam, g.Persid FROM UrenPersoneel as u INNER JOIN Gegevens AS g  ON g.PersID= u.PersId Where g.PersID = 17 OR  1 ORDER BY u.Weeknr DESC

Code:
For k = 1 To iAantalPersID  'aantal geselecteerde Persid's van Personen
            If WerkId = 1 Or WerkId = 2 Then 'hebben dezelfde aantal velden met waardes
                mySQL = ""
                If k = 1 Then
                    iPersID = iPersID.Remove(0, 1) 'iPersID = ",17,1", dus eerst 1e komma weghalen
                End If
                iPos = InStr(iPersID, ",") 'aantal  posities tot en met komma
                If iPos > 0 Then
                    If k = 1 Then
                        PersID = Microsoft.VisualBasic.Left(iPersID, iPos - 1) 'hou dus 17 over
                    Else
                        PersID = Microsoft.VisualBasic.Right(iPersID, Len(iPersID) - iPos)
                    End If
                End If

                PersIDx = PersIDx & " " & PersID & " OR [COLOR="#FF0000"]g.PersID=[/COLOR]"
            End If
        Next k
        PersIDx = Microsoft.VisualBasic.Left(PersIDx, Len(PersIDx) - 13) 'laatste 13 tekens weghalen [COLOR="#FF0000"]OR g.persID[/COLOR]
               
        Dim mySQLstr As String = "SELECT u.*, g.Voorl,g.Voorv, g.Naam, g.Persid FROM UrenPersoneel as u INNER JOIN Gegevens AS g  ON g.PersID= u.PersId Where g.PersID ="
        Dim mySQLstr1 As String = " ORDER BY u.Weeknr DESC"

        mySQL = mySQLstr & PersIDx & mySQLstr1
 
Laatst bewerkt:
Ik heb een hoop handige code gezien, maar deze hoort daar toch niet helemaal bij. Als je tenminste met
Via een listview kies ik een aantal personen
een Keuzelijst bedoeld die is ingesteld op meerdere waarden. Dan kun je hem veel handiger uitlezen.

Code:
    If Me.lstFilter1.ItemsSelected.Count >= 1 Then
        For Each itm In Me.lstFilter1.ItemsSelected
            If sKeuze <> "" Then sKeuze = sKeuze & ","
            sKeuze = sKeuze & Me.lstFilter1.ItemData(itm)
        Next itm
    End If
    sKeuze = "WHERE PersID In(" & sKeuze & ")"
Maar goed, wampier is dan ook geen Access specialist :)
 
Je hebt wel gedeeltelijk gelijk, maar het punt is dat hij de tekst uit de keuzelijst eerst moet bewerken (grootste deel van bovenstaande code). Rest is ook een beetje ervaring

Qua SQL is

[SQL]
WHERE a =(1 or 2 or 3)
[/SQL]
equivalent aan
[SQL]
WHERE a in (1 ,2, 3)
[/SQL]

En de OR variant past precies in zijn bovenstaande code zonder verdere aanpassing. Maar ik geef je gelijk dat bij veel waarden 'IN' waarschijnlijk de betere en nettere code is. Een afweging tussen iemand een manier van denken aangeven en een volledige oplossing geven.

Veranderd overigens niets aan het feit dat ik geen access specialist ben :P
 
... maar het punt is dat hij de tekst uit de keuzelijst eerst moet bewerken (grootste deel van bovenstaande code).
Dat bewerken (komma weghalen) komt omdat de keuzelijst niet goed wordt uitgelezen. En ja, dan heb je extra handelingen nodig :)
 
Mannen, ben net thuis gekomen.
Morgen ga ik het even bekijken.
Maar ben blij met uw beider uitleg.
Men is nooit te oud om te leren en om
de code korter te verwoorden leren we toch van.
Voor zover een ieder bedankt voor de uitleg
 
Uit eindelijk is het zo geworden.
Met dank voor de ondersteuning, scheelt een hoop code.

Code:
iAantalPersID = lvwPersonen2.Items.Count
        For iItems = 0 To iAantalPersID - 1
            Dim LstItem As New ListViewItem
            iPersID1 = lvwPersonen2.Items.Item(iItems).Tag
            If iPersID1 <> 0 Then iPersID1 = iPersID1 & ","
            iPersID = iPersID & iPersID1
        Next iItems
        iPersID = " WHERE g.PersID IN (" & iPersID & ")"

Code:
Dim mySQLstr As String = "SELECT u.*, g.Voorl,g.Voorv, g.Naam, g.Persid FROM UrenPersoneel as u INNER JOIN Gegevens AS g  ON g.PersID= u.PersId"
        Dim mySQLstr1 As String = " ORDER BY u.PersID  DESC"
        mySQL = mySQLstr & iPersID & mySQLstr1
 
Bestaat de mogelijkheid binnen bovenstaande SQL
om de Maand mee te geven waar hij kijkt naar de
weeknummers behorende bij die maand die in de tabel *.u staan?
 
Ik snap je vraag niet. Je hebt in [UrenPersoneel] blijkbaar een datumveld staan. Daar kun je simpel de maand uitvissen met Month([Datumveld]). Wat moet je dan nog met een weeknummer?
 
Nee, dat heb ik niet. Ik heb dus
ID|PersID|Weeknr|Jaar| MaIn|MaUit| tot en met zondag.
De MaIn tot en met MaUit worden gevuld Date/time als volgt 00:00
Bij de query krijg ik nu alle weken van de geselecteerde personen.
Maar als ik nu kies voor bv Augustus, wil ik weten welke weken er in vallen,
selecteren binnen die query
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan