06. marts 2013 - 11:22Der er
9 kommentarer og 1 løsning
QueryDefs syntaksfejl ved brug af kommatalsvariabel i WHERE klausulen
I WHERE klausulen, skal jeg bruge variabel (Type: single; Navn: UdskriftsIndikator) indeholdende et kommatal. Det giver mig lidt problemer med syntaksen i min QueryDefs. Hvis jeg i testøjemed undlader variablen, kører QueryDefs fint.
Følgende fejl opstår. Run-time error '3075':
Der er en syntaksfejl, fordi der mangler et komma. i forespørgselsudtrykket "(((T_Attester.Udskrevet) = False) AND ((T_Attester.UdskriftsInstans) = 0,4102136))".
Min kode ser således ud:
Dim UdskriftsIndikator As Single UdskriftsIndikator = UdskriftsIndikator = Rnd(Now())
Jeg kan se at det bliver nødvendigt til at gentænke mit forsøg på at give "UdskriftsIndikator" en randomizeret unik værdi, idet værdien skal bruges flere gange i koden til knappen.
Som jeg ser det kan jeg ikke opsamle værdien fra funktionsafviklingen, indlejret i QueryDefs på nogen måde.
Hvis jeg forstår dig ret så vil du danne en random værdi på en knap som du så vil bruge flere gange indtil du næste gang trykker på knappen.
Det er ret nemt: Lav en global variabel som du tildeler en værdi når du trykker på knappen. Sæt din funktion UdskriftIndikator til at returnere denne værdi
Hvad er det helt specifikt du skal bruge din SQL til? Er det en recordsource til en rapport eller hvad.
Hvis du har et flerbruger system så har du forhåbentligt lavet det så der er en frontend til hver bruger. Ellers kan du meget nemt komme i problemer. Jeg lavede engang noget der kørte på Citrix, men hver bruger havde sin egen frontend og det spillede helt fint.
Systemet er pt. under udvikling, men der bliver en frontend til lokal afvikling for hver bruger, og fælles tabeller på et netværksdrev.
Frontend havde jeg tænkt mig skulle være ens kopier til alle brugere. Problem?
Ideen med QueryDefs er at brugerene skal kunne køre nogle rapporter til print. Hver post skal udskrives, men kun een gang. Selv om to eller flere bruger kører rapport til print samtidig, må der ikke forekomme duplikerede poster på tryk.
For at imødegå problemer med paper jam mv. i printeren skal brugeren manuelt verificerer at print er OK.
Til det bruger jeg to felter i tabellen. Et Ja/Nej felt til at indikerer om print tidligere et gået godt. Et Tal felt (Single) til at angive at posten er under udskrivning. Det er single feltet jeg gerne vil give en unik randomizeret værdi, som jeg kan knytte til brugeren og dennes udskriftsession.
Lidt mere info: Ja/Nej og UdskriftsIndikator felterne bliver initialiseret med kendte værdier ved postens oprettelse.
UdskriftsIndikator bliver opdateret til en unik random værdi lige inden rapporten trækkes. Poster til rapporten bliver udvalgt på baggrund af begge disse felter.
Når brugeren verificerer at posterne er udskrevet korrekt toggles Ja/Nej feltet, og UdskriftsIndikator feltet bliver sat til en ny kendt værdi.
Giver mit skriv mening, eller har jeg hovedet for langt inde i databasen?
Du skal i hvert fald sørge for at hver bruger har sin egen kopi af frontend - det siges at man godt kan have flere brugere til at køre på den samme, men det har jeg prøvet og det er ikke smart. Øvelsen bliver så at sørge for at alle har den sidste nye version af frontend. Det lavede jeg på Citrix serverne ved at der kørte et script hver nat som kopierede en ny version rundt til alle brugere. Så smed jeg bare en ny version op hvor den kopierede fra nåe jeg lavede ændringer. Når alle har deres egen kopi, så behøver du heller ikke spekulere på om variable ændres. Det vil de nu nok heller ikke gøre hvis den samme fil køres af flere hvis den ligger på en server og afvikles fra lokal maskine. Problemt vil være hvis du som jeg gjorde havde det på en Citrix hvor flere brugere så ville køre den samme fil fra samme maskine.
Jeg kan ikke lige gennemskue meningen med at en post ikke må skrives ud af mere end en bruger ad gangen. Men det skal jeg nok heller ikke :-)
I dag roder jeg ikke så meget med Access mere. Jeg bruger den mest til når jeg udvikler Delphi applikationer. Da bruger jeg næsten kun MySQL som database (få gange MS SQL)
Du kan altid prøve at kalde mig på Messenger via oz8hp@hotmail.com hvis du har nogle spørgsmål som jeg måske kan hjælpe med.
Årsagen til at en post kun må printes een gang er at udskriften skal sendes ud af huset, og vi ønsker ikke at samme post sendes mere end een gang.
Jeg har nu fået testet metoden med en global variabel og funktionskald, det giver samme problem med komma.
Tilgengæld kan jeg godt bruge en variabel i min QueryDefs, blot det er et heltal.
Jeg laver derfor en typecast til Long og ganger med 10 mill. UdskriftsIndikator = CLng(Rnd(Now()) * 10000000)
og i QueryDefs typecaster jeg tilbage til Single (som passer til feltet i databasen "WHERE (((T_Attester.Udskrevet) = False) AND ((T_Attester.UdskriftsInstans) = " & CSng(UdskriftsIndikator) & "))" & _
Alt i alt er jeg stadig lidt overbevist om at det er et spørgsmål om korrekt tegnsætning omkring variablen som gør at Access ikke forstår variablen i første omgang...
I SQL sætninger SKAL kommatal skrives på det amerikanske format, altså med "." som decimal separator. Når vi nu engang har "," som decimalseparator, så kan vi få decimaltal ind i SQL vha. Str-funktionen, som altid anvender "." som decimalseparator.
Fx Str(1,5)= "1.5" hvilket jo er det du skal bruge.
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.