Avatar billede tville Juniormester
24. oktober 2003 - 11:07 Der er 9 kommentarer og
2 løsninger

tildele en kriterie i en forespørgsel via visual basic

Hvordan får jeg indsat et kriterie i en forespørgsel ved hjælp af visual basic?
Avatar billede terry Ekspert
24. oktober 2003 - 11:17 #1
can you give a bit more information please then it would be easier to make some suggestions.

What type of query is it we are talking about (SELECT, UPDATE .....) also where is it being used (report, form ....)
Avatar billede tville Juniormester
24. oktober 2003 - 11:36 #2
Jeg har en har taget en værdi fra et felt (ansvar) i en formular. Denne værdi vil jeg have sat ind som et kriterie i en forespørgsel (i feltet navn), således at der kun vises poster der opfylder dette kriterie.
Avatar billede jkrons Professor
24. oktober 2003 - 11:58 #3
Det behøver du ikke VBA til. Bare sæt kriteriet i forespørglsen lig med


Forms!Formularnavn!Feltnavn
Avatar billede terry Ekspert
24. oktober 2003 - 11:58 #4
Open the form and then in the query place the mouse in the criteria field for the field (navn). Now right click on the mouse to open the menu. Now from the menu choose "bUild" to open th expression builder.
Now open the forms+loaded form. Find the form and then the field you want to use in the criteria and double click on it so that you you get something like this in the top text field.
Forms![NameOfForm]![ansvar]


NameOfForm is the name of your form!
Avatar billede tville Juniormester
24. oktober 2003 - 12:12 #5
Jeg er ved at lave et lille program der skal sende en rapport til nogle brugere. Rapporten skal kun indeholde poster der vedrører dem selv. Derfor har jeg tænkt mig følgende:

Brugerne er defineret i en tabel der hedder Ansvar. Her har jeg bl.a. felterne ansvar og email
Rapporten baseres på en forespørgsel der hedder Opfølgning
Jeg har en formular baseret på tabellen Ansvar.
Programkoden består af følgende:
1. jeg åbner formularen ansvar og går til første post. Tager værdien fra feltet ansvar og gemmer i en variabel. Tager værdien fra feltet email og gemmer i en variabel.
2. jeg åbner forespørgslen Opfølgning i designvisning. Indholdet i variablen med værdien fra feltet ansvar vil jeg indsætte som et kriterie i forespørgslen og derefter gemme forespørgslen.
3. jeg åbner rapporten der nu kun viser poster til een person og sender den til den der står i variablen med indholdet fra feltet email.
4. jeg går tilbage til formularen ansvar og går til næste post og løber så igennem punkt 2 og 3 igen. Det gør jeg indtil der ikke er flere poster.

Men jeg kan ikke finde ud af at indsætte kriteriet i forespørgslen.
Avatar billede terry Ekspert
24. oktober 2003 - 12:18 #6
You have to alter the queries SOUCE as I mentioned in your previous question.

http://www.eksperten.dk/spm/416733
Avatar billede terry Ekspert
24. oktober 2003 - 12:24 #7
Try this:
You need to call the function with the actual SQL for the query and also the query name.

Function MakeQuery(strSQL As String, QueryName As String) As Integer
    Dim db  As Database
    Dim i  As Integer

    Set db = CurrentDb
   
    i = 0
    Do While db.QueryDefs(i).Name <> QueryName
        i = i + 1
    Loop

    db.QueryDefs(i).SQL = strSQL
    db.Close
   
    MakePassThru = True
       
End Function
Avatar billede terry Ekspert
24. oktober 2003 - 12:30 #8
You would call the function like this

MakeQuery "SELECT * FROM SomeTable WHERE SomeField = " & me.ansvar, "NameOfQueryGoesHere"
Avatar billede overchord Nybegynder
24. oktober 2003 - 13:34 #9
Jeg plejer at bruge denne kode til at skabe kriteriebestemte forespoergsler:
Koden saettes f.eks paa en knap i formularen

dim strsql  as string
dim dbs as database
dim qdf as querydef
dim MinVaerdi as text/integer/double - afhaengingt af hvilken type du har i din formular.
set dbs = currentdb

minvaerdi = me.DitFelt

strsql = "SELECT * FROM DinTabel WHERE Ditfelt =" & minvaerdi

set qdf = dbs.CreateQuerydef ("NavnPaaForespoergsel", strsql)

'Hermed er forspoergslen skabt - hvi du kun skal vise data midelrtidigt og ikke oensker at gemme forespoergslen hver gang (hvorefter denne kode vil give fejl da queryen allerede eksisterer) kan du slette den igen:

dbs.Querydefs.Delete qdf.Name
Avatar billede keil Nybegynder
24. oktober 2003 - 16:04 #10
Lad din formular opdatere en tabel med én record og ét felt, Som nu kommer til at indeholde "Ansvar". Join denne tabel med din forspøgsel, og join naturligvis til "Ansvar". Du kan lave det hele, så det kører i et hug.
Lav en formular, hvor du kan finde den ansvarlige. lav en knap "Søg", som dels gemmer den ansvarlige i den lille tabel og som kører den joinede forespørgsel.
Så skal man blot finde sit navn og trykke på knappen, så kommer listen ud.
Avatar billede tville Juniormester
02. december 2003 - 11:29 #11
Tak for hjælp og inspiration. Jeg har fordelt pointene mellem jer.
Den løsning jeg fandt frem til (som virker) ser således ud:
Private Sub SendOpfMed_Click()
On Error GoTo Err_SendOpfMed_Click

    Dim opfnavn As String
    Dim stDocName As String
   
    stDocName = "Opfølgning"
   
    DoCmd.OpenForm "formansvar"
       
    Do Until Forms!formansvar!ANSVAR = "" Or IsNull(Forms!formansvar!ANSVAR)
        DoCmd.GoToControl "ansvar"
        opfnavn = Forms!formansvar!ANSVAR
        DoCmd.OpenReport stDocName, acViewPreview, , "ANSVAR!ANSVARnavn = Forms!formansvar!ANSVAR", acHidden
        If Reports!opfølgning.HasData Then
            DoCmd.SendObject acReport, stDocName, "RichTextFormat(*.rtf)", Forms!formansvar!email, , , "Opfølgning på kursusaktiviteter", "Vedhæftet en oversigt over de aktiviteter du skal følge op på i henhold til registreringer i kursussystemet", False, ""
        End If
        DoCmd.Close acReport, stDocName
        opfnavn = ""
        DoCmd.OpenForm "formansvar"
        DoCmd.GoToRecord , "", acNext
    Loop
        MsgBox "meddeleser er sendt"

    DoCmd.Close acForm, "formansvar"

Exit_SendOpfMed_Click:
    Exit Sub

Err_SendOpfMed_Click:
    MsgBox Err.Description
    Resume Exit_SendOpfMed_Click
   
End Sub
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