19. februar 2019 - 01:09Der 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; ---
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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
Alle = Like * Lukkede = Like *+2 Åbne = NOT like *2
Kan du vel ændre sætningen til: HAVING (((tbl_cars_imported.Delebilsplads) " & [Formularer]![Formular1]![SelectPoolType]) & "...
Synes godt om
1 synes godt om dette
Slettet bruger
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
Synes godt om
1 synes godt om dette
Slettet bruger
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
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)
Synes godt om
Ny brugerNybegynder
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.