Avatar billede runeklausen2 Nybegynder
20. september 2005 - 00:38 Der er 9 kommentarer og
2 løsninger

Brug af fordefineret query i VBA

Jeg har lavet en query under queries, nu går jeg ind i en form og gerne vil kalde den her query, og brug en værdi som kommer ud af query'en, jeg har prøvet med følgende kode, men den kommer med en fejl når jeg køre det, på den her linie: Set qry = db.OpenQueryDef("NyesteFaktura")


Kode:

  Dim qry As DAO.QueryDef
 
  Set qry = db.OpenQueryDef("NyesteFaktura")
  Set rs = qry.OpenRecordset() ' Open recordset on the query
  Do While Not rs.EOF
    If rs!nyeste Like -1 Then
        test = rs!fakturanr
    End If
    rs.MoveNext
  Loop
  rs.Close
  qry.Close
Avatar billede 2dbornot2db Nybegynder
20. september 2005 - 01:05 #1
Jeg plejer at bruge:

dim RS as DAO.Recordset

Set RS = CurrentDb.Openrecordset("NyesteFaktura", dbOpenSnapshot)

Do While Not...

Og det virker fint.
Avatar billede claesdamlund Nybegynder
20. september 2005 - 10:38 #2
Du mangler at definere din variabel db. Skriv følgende:

Dim qry As DAO.QueryDef, db as DAO.Database
 
  Set db = CurrentDb
  Set qry = db.OpenQueryDef("NyesteFaktura")
  Set rs = qry.OpenRecordset() ' Open recordset on the query
  Do While Not rs.EOF
    If rs!nyeste Like -1 Then
        test = rs!fakturanr
    End If
    rs.MoveNext
  Loop
  rs.Close
  qry.Close
Avatar billede runeklausen2 Nybegynder
20. september 2005 - 12:15 #3
når den kommer til linien:
Set RS = CurrentDb.Openrecordset("NyesteFaktura", dbOpenSnapshot)

får jeg beskeden: To few parameters 1
Nogen ide?
I nogle tilfælde at qurey'en godt risikere at returnere ingen ting, men lige den jeg tester med, returnere den 1 række

Claes, desværre, det har jeg gjort tidligere i min kode, uden succes :/
Avatar billede claesdamlund Nybegynder
20. september 2005 - 13:03 #4
Du mangler også at erklære din rs variabel, men i dit tilfælde behøver du ikke at erklære en QueryDef variabel. I øvrigt er Like operatoren ikke god i din kode, idet jeg går ud fra Nyhed feltet er en Boolean (sand/falsk datatype)? Hvad er i øvrigt "test"? Hvis det er en variabel, skal den erklæres først (som string?). Prøv følgende som en test:

Dim qry As DAO.RecordSet, db as DAO.Database
 
  Set db = CurrentDb
  Set rs = db.OpenRecordset("NyesteFaktura", dbOpenSnapshot, dbText)
  Do While Not rs.EOF
    If rs!nyeste = True Then
        MsgBox rs!fakturanr
    End If
    rs.MoveNext
  Loop
  rs.Close
Avatar billede claesdamlund Nybegynder
20. september 2005 - 13:04 #5
Nyhed feltet burde være Nyeste feltet...
Avatar billede runeklausen2 Nybegynder
20. september 2005 - 13:45 #6
tjaa, det kunne være min forspøgsel som den ikke kan lide, for skifter jeg den til en anden ser det ud til at fungere.

så hvad er der galt?

SELECT brands.kundenummer, faktura.fakturanr, faktura.nyeste, eksponeringer.brandid
FROM brands INNER JOIN (faktura INNER JOIN eksponeringer ON faktura.fakturanr = eksponeringer.fakturanr) ON brands.id = eksponeringer.brandid
WHERE (((eksponeringer.brandid)=[FORMS]![eksponeringer]![brandid]));


er det fordi den ikke må tage noget med fra forms?
Avatar billede claesdamlund Nybegynder
20. september 2005 - 14:38 #7
Det er muligt. Forms er en Samling eller Collection, som refererer til samlingen af åbne formularer i din applikation. Det kræver at din formular Eksponeringer er åben, når forespørgslen (og koden) køres.
Avatar billede runeklausen2 Nybegynder
20. september 2005 - 15:07 #8
det er den skam også, lidt derfor det undre mig at det ikke fungere
Avatar billede claesdamlund Nybegynder
20. september 2005 - 15:15 #9
Jeg havde også lavet en mindre fejl. Første linie burde være:

Dim rs As DAO.RecordSet, db as DAO.Database

Hvis dét ikke virker, så prøv om følgende virker (forudsat at brandid er en tal-datatype):

Dim rs As DAO.RecordSet, db as DAO.Database, strSQL as String
 
  Set db = CurrentDb
  strSQL = "SELECT brands.kundenummer, faktura.fakturanr, faktura.nyeste, eksponeringer.brandid
FROM brands INNER JOIN (faktura INNER JOIN eksponeringer ON faktura.fakturanr = eksponeringer.fakturanr) ON brands.id = eksponeringer.brandid
WHERE (((eksponeringer.brandid) = " & [FORMS]![eksponeringer]![brandid] & "))"
  Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot, dbText)
  Do While Not rs.EOF
    If rs!nyeste = True Then
        MsgBox rs!fakturanr
    End If
    rs.MoveNext
  Loop
  rs.Close
Avatar billede runeklausen2 Nybegynder
20. september 2005 - 15:58 #10
ja, det virker så fint, men sku da underligt at det ikke gøre når jeg bruger en query som ligger i db'en...

smid et svar hvis du også vil ha' lidt point
Avatar billede claesdamlund Nybegynder
20. september 2005 - 16:12 #11
Tak
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