Avatar billede bennybangkarl Nybegynder
13. februar 2006 - 21:09 Der er 13 kommentarer

Ja/nej-problem

Hejsa!

Jeg sidder med et lidt dumt problem.

Jeg har en db, hvor jeg har en del forskellige ja/nej-muligheder. I den forbindelse skal jeg så lave en forespørgsel, der går ind og - på baggrund af indtastninger i en formular - laver en rapport. Det med rapporten er ikke det store problem.
Mit problem består mere i, hvordan jeg kan gøre sådan, at forespørgsel ikke har noget kriterium, hvis man vil have alle poster - uanset om de erja eller nej. Altså - hvis det kun er én række, der f.eks. er ja, styrer alle de andre, uanset om de er ja eller nej - hvordan gør jeg så det??

Og by the way - hvordan er det helt præcist, man henviser til en formularindtastning?? - det er noget med firkantede paranteser.
Damn det her ligger langt tilbage - der har været lidt for meget sql ind over kan jeg mærke på det hele :)

I håb om snarlig hjælp.

Mvh. Blomst
flere point er helt sikkert muligt, hvis det ønskes.
Avatar billede mugs Novice
13. februar 2006 - 21:12 #1
Du henviser til en formular således:

=[FORMS]![FORMULARNAVN]![FELTNAVN]
Avatar billede mugs Novice
13. februar 2006 - 21:14 #2
Når du indtaster ovennævnte kriterie, forlanger din forespørgsel en værdi i formularens felt. Hvis du vil ghave alle poster, vil jeg råde dig til at lave en ny forespørgsel med tilhørende rapport uden kriterier. Husk, at forespørgsler og rapporter fylder meget lidt i din db, idet de jo ikke indeholder data før de bliver åbnet.
Avatar billede mugs Novice
13. februar 2006 - 21:16 #3
200 point er max for et spørgsmål :o)
Avatar billede bennybangkarl Nybegynder
13. februar 2006 - 21:40 #4
Mange tak - men min mening er at kombinere 23 forskellige ja/nej-muligheder, så det bliver hurtigt til mange forskellige forespørgsler, hvis der skal være én til hvis kombination af disse ja/nej-muligheder. Men leger lidt videre med det - tror måske, jeg har en ide, hvor jeg bruger nogle jokertegn, eller et eller andet.
Avatar billede mugs Novice
13. februar 2006 - 21:43 #5
Hvis du har alle dine Ja/nej felter i forespørgslen kan du jo blot indsætte et kriterie for hvert felt i formularen.
Avatar billede bennybangkarl Nybegynder
13. februar 2006 - 21:44 #6
Hej igen.

Altså - for at tage et lidt mere lay low-eksempel har jeg følgende:
SELECT [tryout].[id], [tryout].[tekst]
FROM tryout
WHERE [tryout].[id]=[forms]![frm_tryout]![id] And [tryout].[tekst] Like "*=[forms]![frm_tryout]![tekst]*";

Det er min sql-sætning i min query. Har naturligvis en tabel bag med nogle eks-data.
Min formular hedder self frm_tryout og de to felter, jeg bruger hedder hhv. id og tekst. Jeg har i formen en knap der åbner queryen med denne sætning - men den finder ingenting overhovedet, når jeg trykker på knappen.
Er der én, der har en anelse om, hvorfor???
Avatar billede bennybangkarl Nybegynder
13. februar 2006 - 21:46 #7
Jo - men det skal være sådan, at nogle kan være "tomme" så den ikke tager sig af, om det er ja eller nej i tabellen, da det er en anden ja/nej-mulighed, der er den vigtige
Avatar billede Slettet bruger
14. februar 2006 - 08:59 #8
Jeg har ikke selv brugt det men kan man ikke sætte ja/nej felterne til at have 3 tilstande og så sætte dem alle ind i forespørgslen. Det kræver nok at dit datamateriale også har 3 værdier... Det er bare lidt strøtanker fordi jeg kan ikke helt overskue dit problem, jeg har nok brug for et lidt mere specifikt eksempel før jeg kan hjælpe!~)

Er der en forespørgsel til hver ja/nej kombination, så kunne du vel lave det i sql. Måske med nogle if sætninger...
Avatar billede mugs Novice
14. februar 2006 - 09:15 #9
Tomme Ja/Nej felter?
Jeg mener ikke det er muligt, idet et Ja/Nej felt jo i sagens natur kun kan have 2 tilstande: Ja eller Nej, True eller False, 0 eller -1.

Men lad os høre nogle bud.
Avatar billede soren_o Nybegynder
14. februar 2006 - 10:15 #10
Lad være med at bruge mere krudt på ham, han vil alligevel ikke dele point ud.
Avatar billede mugs Novice
14. februar 2006 - 13:24 #11
Ja - Ude
Avatar billede fdata Forsker
14. februar 2006 - 22:26 #12
Hvis dine Ja/Nej felter er oprettet som Afkrydsningsfelter i din formular, kan du på egenskaberne/fanen Data i nederste række markere, om afkrydsningsfelterne skal have 3 tilstande. Er det den, du efterlyser?
Avatar billede supertekst Ekspert
16. februar 2006 - 08:50 #13
Eksempel til illustration af mulig løsning:

Tabel: Tabel1
Id    Autonummerering
Cb1    Ja/nej
Cb2    Ja/nej
Cb3    Ja/nej
Et antal poster oprettet m/variabelmønster af værdier i Cb’er

Forespørgsel: Forespørgsel1
-    Tabel1
-    Alle felter – MED ET KRITERIUM – felt/værdi underordnet (af hensyn til ”WHERE”)

Formular: Resultat
-    Forespørgsel1

Formular: Søgeformular
-    Ubundet
-    3 checkbokse – benævnt Cb1 – Cb3
-    1 Knap m/navnet ”Go”

VBA - kode – der aktiveret v/klik på Go
Aflæser den ønskede indstilling af checkbokse – og modificere SQL-sætning i Forespørgse1.

Option Compare Database
Const fsp = "Forespørgsel1"                        '*** Tilrettes ***

Private Sub cb1_DblClick(Cancel As Integer)        'DobbelKlik
    [cb1].Value = Null                              'værdi sættes til Null
End Sub

Private Sub cb2_DblClick(Cancel As Integer)
    [cb2].Value = Null
End Sub

Private Sub cb3_DblClick(Cancel As Integer)
    [cb3].Value = Null
End Sub

Private Sub Form_Open(Cancel As Integer)
Rem Sæt alle checkbox = null
    [cb1].Value = Null
    [cb2].Value = Null
    [cb3].Value = Null
End Sub

Private Sub Go_Click()
Dim db As Database, fs As QueryDef, sqS As String, wP, sq1 As String, sq2 As String, sq3 As String
    Set db = CurrentDb
    Set fs = db.QueryDefs(fsp)
    sqS = fs.sql
   
    wP = InStr(sqS, "Where")
    If wP > 0 Then
        sq1 = Left(sqS, wP - 1)
        sq2 = Mid(sqS, wP + 6)
        sq3 = modificerSQL(LCase(sq2))
       
        fs.sql = sq1 + "WHERE " + sq3
        DoCmd.OpenQuery fsp
    End If
End Sub

Private Function modificerSQL(str As String)
Dim del, ff As Control, rSQL, svar As String, fNavn As String, antalCB As Integer, count As Integer
    rSQL = ""
    antalCB = 0
   
    For Each ff In Controls
        If InStr(LCase(ff.Name), "cb") > 0 Then
            antalCB = antalCB + 1
        End If
    Next ff
   
    count = 0
    For Each ff In Controls
        If InStr(LCase(ff.Name), "cb") > 0 Then
            fNavn = "((Tabel1." + ff.Name + ")"
           
            If ff.Value = True Then
                svar = fNavn + "=Yes)"
            Else
                If ff.Value = "False" Then
                    svar = fNavn + "=No)"
                Else
                    svar = fNavn + "is not null)"
                End If
            End If
            count = count + 1
           
            If count < antalCB Then
                rSQL = rSQL + svar + " AND "
            Else
                rSQL = rSQL + svar
            End If
        End If
    Next
    modificerSQL = "((" + rSQL + "))"
End Function

Mvh

Ønskes DB tilsendt – kontakt pb@supertekst-it.dk
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