Avatar billede martens Guru
19. februar 2019 - 01:09 Der er 4 kommentarer og
1 løsning

Hvorfor kan jeg ikke hente værdi til forespørgsel fra den formular, hvor den er indlejret

Jeg har en formular med 3 tekstbokse, der baserer deres værdier på det valgte i hhv 1. ( der er bynavne ) boks 2 (  er områder i den valgte by ) boks 3 ( er biler i området i den valgte by)

men jeg har sat nogle kriterier op for visningen i boks 2, der skal kunne vise ALLE  eller KUN "LUKKEDE" eller KUN "ÅBNE"

Alle = *
Lukkede = *+2
Åbne = NOT like *2

Men hvis jeg angiver værdien i et tekstfelt på formularen og refererer til det i min forespøgsel virker det ikke, men skriver jeg det direkte i forspørgslen virker det...  giver det mening ?`

lidt kode her ( denne virker IKKE efter hensigten)¨

SELECT tbl_cars_imported.Delebilsplads, Last(tbl_cars_imported.ByNavn) AS SidsteOfByNavn, Right([Delebilsplads],1) AS LastCharacter
FROM tbl_cars_imported
GROUP BY tbl_cars_imported.Delebilsplads, Right([Delebilsplads],1)
HAVING (((tbl_cars_imported.Delebilsplads)=[Formularer]![Formular1]![SelectPoolType]) AND ((Last(tbl_cars_imported.ByNavn))=[formularer].[Formular1]![bynavn_001]))
ORDER BY Right([Delebilsplads],1) DESC;

-----
Denne viser de ÅBNE : ( Virker  - men skrevet direkte i forespørgslen )

SELECT tbl_cars_imported.Delebilsplads, Last(tbl_cars_imported.ByNavn) AS SidsteOfByNavn, Right([Delebilsplads],1) AS LastCharacter
FROM tbl_cars_imported
GROUP BY tbl_cars_imported.Delebilsplads, Right([Delebilsplads],1)
HAVING (((tbl_cars_imported.Delebilsplads) Not Like "*2") AND ((Last(tbl_cars_imported.ByNavn))=[formularer].[Formular1]![bynavn_001]))
ORDER BY Right([Delebilsplads],1) DESC;
---

Any clues anybody ?


mvh martens
Avatar billede Slettet bruger
19. februar 2019 - 04:12 #1
fordi den værdi du henter fra formular, ikke er en del databasen.
du kan kun hente værdier fra tabeller
Avatar billede fdata Forsker
19. februar 2019 - 12:23 #2
Hvis du ændrer dine dropdown-værdier til:

Alle = Like *
Lukkede = Like *+2
Åbne = NOT like *2

Kan du vel ændre sætningen til:
HAVING (((tbl_cars_imported.Delebilsplads) " & [Formularer]![Formular1]![SelectPoolType])  & "...
Avatar billede bvirk Guru
19. februar 2019 - 12:40 #3
Der sker ikke nogen genparsning af sql udtryk ved vba udtryk referering  - det betyder med andre ord  at "sql maskinen" ikke begynder at grave efter sammenligningsoperatorer i
[Formularer]![Formular1]![SelectPoolType])

Lad as tage et simplere eksempel:
--------------------------------------------
En tabel Vare indeholder feltet navn

følgende forespørsel giver 1 post

select * from Vare where navn="popcorn"

Vi laver en vba function

function vbaExp()
    vbaExp="popcorn"
end function

Denne anvendt således giver stadig samme ene post

    select * from Vare where navn=vbaExp()

Vi ændre nu vbaExp til

function vbaExp()
    vbaExp="navn =""popcorn"""
end function

når forespørgslen ændres til

    select * from vare where vbaExp()


Vises ALLE poster!

Det eneste  sql-engine kigger på er hvorvist vbaEXp() er sand eller falsk.

Alle poster
    function vbaExp()
        vbaExp=true
  end function
Ingen poster
  function vbaExp()
        vbaExp=false
  end function
------------------------------------------

Man kan godt det du vil, martens, men så skal forespørgslen textuelt opbygges som streng før den gives til sql-engine

sub redefineQuery(qName,sqlText)
  on error resume next
  currentdb.querydefs.delete qName
  currentdb.createQueryDef qName,sqlTexr
end sub
(stavefejl kan forekomme)

og der skal noget requery event styring ind over fra formularen
Avatar billede bvirk Guru
19. februar 2019 - 14:21 #4
Måske er det lettere at ændre (hvis det virker ;)

Fra:
HAVING (((tbl_cars_imported.Delebilsplads)=[Formularer]![Formular1]![SelectPoolType])

Til:
HAVING instr([Formularer]![Formular1]!SelectPoolType],tbl_cars_imported.Delebilsplads) > tal

hvor tal skal være et ciffer og textboks 2 nogle andre strengvalg
Avatar billede martens Guru
19. februar 2019 - 22:22 #5
fdata.. det med dropdown-værdierne fik mig i den rigtige retning ... Jeg prøvede at sætte værdierne ind en TEMP-tabel og lavede en DLOOKUP .. og vupti så kunne jeg se, hvor jeg "fejlede" ...

Jeg ændrede fluks værdierne til  * (Alle) *2 (LUKKEDE) *MFM ( én type ÅBEN ) *LUP ( en anden type åben.. NU spiller det !!!

Endelig og fuldt ud funktionsdygtig kode :

SELECT tbl_cars_imported.Delebilsplads, Last(tbl_cars_imported.ByNavn) AS SidsteOfByNavn, Right([Delebilsplads],1) AS LastCharacter, Count(tbl_cars_imported.Delebilsplads) AS AntalOfDelebilsplads
FROM tbl_cars_imported
GROUP BY tbl_cars_imported.Delebilsplads, Right([Delebilsplads],1)
HAVING (((tbl_cars_imported.Delebilsplads) Like [Formularer]![Formular1]![SelectPoolType]) AND ((Last(tbl_cars_imported.ByNavn))=[formularer].[Formular1]![bynavn_001])) OR (((tbl_cars_imported.Delebilsplads) Like [Formularer]![Formular1]![SelectPoolType_2]) AND ((Last(tbl_cars_imported.ByNavn))=[formularer].[Formular1]![bynavn_001]))
ORDER BY Right([Delebilsplads],1) DESC;

Tak for hjælpen til alle bidragydere  !
-----

Sidwave : ikke korrekt... jeg har siden min spæde start med MS Access engang midt i 90´erne benyttet mig af at kunne hente værdier fra formularer ... Det var her jeg opdagede det smarte med input i formularer, der kunne smides i queries ;o)
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

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