Avatar billede hnto Nybegynder
05. januar 2011 - 09:31 Der er 17 kommentarer og
1 løsning

kriterie i query haster

jeg har en  combo i en form1, hvor der er 2 kolonner.
kolonne 1 er SAGSNAVN og kolonne 2 er CASEID. comboen har til formål at selectere en query på den bundne kolonne SAGSNAVN, men jeg har en ny query2 hvor jeg ønsker at denne skal udvælge poster på baggrund af comboens kolonne 2 CASEID.

hvordan ser et sådan script ud ?
Avatar billede hnteknik Novice
05. januar 2011 - 09:41 #1
Du skal bruge noget i retning - taget hurtigt fra mit program

Me.LkUPBeloebtype.Column(1, Me.LkUPBeloebtype.ListIndex)
Avatar billede hnteknik Novice
05. januar 2011 - 09:47 #2
Du kan lige så godt få en af mine parsere til sådan et søgekriterie - nu bruger jeg en typisk en multi select liste:

Sub LkUpListeParsX(Liste As ListBox, Clmn As Integer, FieldName As String, mycriteria As String, ArgCount As Integer, Istxt As Boolean)
   
' Copyrights Henrik Nielsen 2008
' Multiselect box parser for alle typer liste  - med valg af column -  dette er noget , der rykker
' Create critera for WHERE clause
   
    Dim varItem As Variant
    Dim strList As String, txtValg As String, LstStart As String, LstSlut As String
   
   
 
    With Liste
        If .MultiSelect = 0 Then ' du kan kun vælge en ad gangen
            If Not IsNull(.Value) Then
            '  Append criterion to existing criteria.
                If ArgCount > 0 Then
                        mycriteria = mycriteria & " and "
                End If
                If Istxt Then 'dette er en txt liste
                    '  Enclose FieldValue and asterisk in quotation marks.
                    mycriteria = (mycriteria & FieldName & " Like " & Chr(39) & Chr(42) & .Column(Clmn, .ListIndex) & Chr(42) & Chr(39))
                Else ' dette er en tal liste
                    '  lige ud af landevejen
                    mycriteria = (mycriteria & FieldName & " = " & .Column(Clmn, .ListIndex))
                End If
                '  Increase argument count.
                ArgCount = ArgCount + 1
            End If
           
        Else ' du kan vælge flere ad gangen
            '  Append criterion to existing criteria.
            If (ArgCount > 0 And Liste.[ItemsSelected].[Count] > 0) Then
                mycriteria = mycriteria & " and "
            End If
           
            If Liste.[ItemsSelected].[Count] > 1 Then  ' er der valgt mere end en i listen
                txtValg = " OR "
                LstStart = "( "
                LstSlut = ") "
            Else
                txtValg = ""
                LstStart = ""
                LstSlut = ""
            End If
            mycriteria = mycriteria & LstStart
            For Each varItem In .ItemsSelected
                If Istxt Then 'dette er en txt liste
                    mycriteria = mycriteria & FieldName & " Like " & Chr(39) & Chr(42) & .Column(Clmn, varItem) & Chr(42) & Chr(39) & txtValg
               
                Else ' dette er en tal lite
                    mycriteria = mycriteria & FieldName & " = " & .Column(Clmn, varItem) & txtValg
                    'husk at kolonne (0) repræsenterer, den første kolonne, skal du vise noget
                    'andet end kolonne 0 - skjul kolonne 0 og vis f.eks. kolonne 1
                End If
                '  Increase argument count.
                ArgCount = ArgCount + 1
            Next varItem
            ' hov - hvis der er flere - skal vi lige fjerne det sidste or
            If Right(mycriteria, Len(txtValg)) = txtValg Then
                mycriteria = Left(mycriteria, Len(mycriteria) - Len(txtValg))
            End If
            mycriteria = mycriteria & LstSlut ' ja - og så lige en afslutte parentes
        End If
    End With
End Sub
Avatar billede hnto Nybegynder
05. januar 2011 - 10:02 #3
Hej Henrik,
du må være meget mere konkret da jeg ikke er udvikler :-)

normalt ville jeg blot lave en qyery hvor følgende var indsat:

WHERE (((ProductIdNumber.CaseID)=[Forms]![FrmCreateCaseStep1]![Combo0]));

men her refererer den jo til den bundne kolonne som er kolonne 1 på min combo. Jeg vil blot gerne at den istedet selecterer på kolonne 2 uden at denne bliver ændret til at være den bundne kolonne.
Avatar billede hnto Nybegynder
05. januar 2011 - 10:04 #4
feks ser comboen sådan ud i dag


blå bil
rød bil
grøn bil

nu er det så jeg vil tilføje et felt mere på formen så dennes ID også kommer med. ser efterfølgende sådan ud

blå bil | ID1
rød bil | ID2
grøn bil | ID3

det er nu på en ny query jeg vil filtrere poster i queryen ud fra comboens ID værdier og ikke txt værdier.
Avatar billede hnteknik Novice
05. januar 2011 - 10:26 #5
Det er netop derfor du skal bruge column funktionen, hvor column 0 er default column. Du skal have fat i 1 også

Hvis du er bag den aktuelle form er

[Forms]![FrmCreateCaseStep1] = me og brug punktum, altså

NYT CRITERIE = "WHERE (((ProductIdNumber.CaseID)= " & me.Combo0.Column(1, Me.Combo0.ListIndex)
Avatar billede hnteknik Novice
05. januar 2011 - 10:32 #6
Ahh - du laver ikke programmering i vba men blot en forespørgelse bag i generatoren, så skal du have fat i hele navnet:

WHERE (((ProductIdNumber.CaseID)=[Forms]![FrmCreateCaseStep1]!Combo0.Column(1, [Forms]![FrmCreateCaseStep1]!Combo0.ListIndex)));

Ved så ikke lige om syntakten er på plads og om generatoren tillader denne opbygning.
Avatar billede hnto Nybegynder
05. januar 2011 - 11:13 #7
jow jeg arbejder da helst med VBA men er ikke haj i dette :-)

jeg tester lige denne :
NYT CRITERIE = "WHERE (((ProductIdNumber.CaseID)= " & me.Combo0.Column(1, Me.Combo0.ListIndex)

men skal 1-tallet ikke rettes til 2, da det jo er denne er den relevante (eller hedder kolonne 1 default 0 i VBA scriptet)
Avatar billede hnto Nybegynder
05. januar 2011 - 11:23 #8
for at tjekke det ville jeg gerne have den rette syntax i forespørgslen alligevel :-)

kan du klare den er vi i mål...
Avatar billede hnteknik Novice
05. januar 2011 - 11:30 #9
1 er 0 i denne verden,

Er din kode bagved formen eller er den knyttet til forespørgsel som du kører direkte ?

me. henviser til formen/objektet selv og vil ikke virke indsat via query generatoren.
Avatar billede hnto Nybegynder
05. januar 2011 - 11:46 #10
Hejsa,
jeg vil blot sætte kriteriet ind i en ny forespørgsel

jeg ved at me. hendviser til den aktuelle form, men det kan bare skiftes ud med formens fulde navn som du skrev.
kunne godt tænke mig syntaksen på dette så det kunne testets i en lille form, evt. en ny ren database da det kunne være en stor hjælp fremadrettet. :-)
Avatar billede hnteknik Novice
05. januar 2011 - 12:14 #11
Det kan vist ikke gøres simplere efter dit eks.

Private Sub Kombinationsboks0_AfterUpdate()
MsgBox "Du valgte " & Me.Kombinationsboks0.Column(1, Me.Kombinationsboks0.ListIndex)
End Sub

viser indholdet af 2. kolonne.
Avatar billede hnteknik Novice
05. januar 2011 - 12:15 #12
Je har da en lille db som viser eks. hvis du har en mail?
Avatar billede hnto Nybegynder
05. januar 2011 - 12:17 #13
sidste indlæg fra dig er stadig vba og nu med en msgbox.

jeg ville blot gerne have syntaksen for metoden baseret på at dette kriterie indsættes i en forespørgsel
Avatar billede hnto Nybegynder
05. januar 2011 - 12:18 #14
nto
snabel a
solar
punktum
dk
Avatar billede hnteknik Novice
05. januar 2011 - 12:42 #15
Ja der kommer vi nok til kort. Der er ikke adgang til .column men blot boundcolumn inde fra queryeditoren, så du må stikke til at eksekvere din SQL inde fra VBA.
Avatar billede hnto Nybegynder
06. januar 2011 - 08:21 #16
Hej Henrik,
har lige fået mailen og tjekker op på det.
Avatar billede hnto Nybegynder
06. januar 2011 - 08:42 #17
jeg kan godt se princippet og må prøvet at få dette forenet i en query evt. via vba.

man kunne måske lave en sql i vba oden der åbner recordsettet ud fra kolonne 2 og efterfølgende appender dette til en temp tabel
Avatar billede hnto Nybegynder
06. januar 2011 - 08:43 #18
smid lige et svar...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester