Avatar billede longgaard Novice
16. april 2004 - 02:06 Der er 5 kommentarer og
2 løsninger

Access 2000: DoCmd.RunSQL og SELECT i moduler.

Jeg har fået den skøre ide, at jeg vil lave mine forespørgsler i moduler, og holde brugerfladen så fri for kode som muligt, men hvis jeg bruger SELECT - sætninger til at tildele en variabel en værdi, får jeg: "Compile error: Expected: end of statement" under kodningen.

Kan Access kun lave databasemanipulation fra moduler eller kan man snyde sig til f.eks. dette eksempel?

Bruger = DoCmd.RunSQL "SELECT MedarbejderNavn " & _
"FROM Medarbejder " & _
"WHERE (((Medarbejder.BrugerLogin) = LCase(Environ('UserName'))));"

Hvis jeg unlader "Bruger = " siger Access ved kørsel: "Handlingen KørSQL kræver et argument, der består af en SQL-sætning"
Jeg syntes nu ellers det er en fin SQL-sætning :)
Avatar billede hmortensen Nybegynder
16. april 2004 - 02:22 #1
db.execute skulle være hurtigere end RunSQL. Op mod 200% læste jeg et eller andet sted.

Bruger = "SELECT MedarbejderNavn " & _
"FROM Medarbejder " & _
"WHERE (((Medarbejder.BrugerLogin) = LCase(Environ('UserName'))));"

db.execute Bruger
16. april 2004 - 06:48 #2
Jeg ved ikke om db.execute er hurtigere, men den giver nogle andre fordele, som måske ikke er relevante her.

Men hvis du bruger db.execute kræver det at du laver en reference til "Microsoft DAO 3.x object library"

Men jeg forstår ikke hvorfor du vil bruge en Select-forespørgsel i VBA? Select-forespørgsler bruges som basis for formularer, rapporter, kontrolelementer, opslag m.m. Og dertil er gemte forespørgsler langt det smarteste.

Hvis du vil arbejde med tabellen i ren kode, skal du hellere kigge på recordsets. Men det er en helt anden historie.
Avatar billede terry Ekspert
16. april 2004 - 09:10 #3
a SELECT in a DoCmd.RunSQL is NOT possible!
If you just want to get hold of the user name then I would suggest you use DLookup
It isnt as fast as a recordset but in this case I can imagine that it is only used when the program gets opend and thats it, so the speed is just fine.

Bruger = Dlookup("MedarbejderNavn","Medarbejder","BrugerLogin = '" & LCase(Environ("UserName") & "'")
Avatar billede terry Ekspert
16. april 2004 - 09:18 #4
Taken from Access Help

>SQLStatement  Required Variant. A string expression that's a valid SQL statement for an action query or a data-definition query. It uses an INSERT INTO, DELETE, SELECT...INTO, UPDATE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, or DROP INDEX statement. Include an IN clause if you want to access another database.
Avatar billede longgaard Novice
16. april 2004 - 21:45 #5
Tak for jeres svar!

-> thomasjepsen: Du siger indirekte at det ikke kan lade sig gøre, men at jeg kan bruge recordset. Jeg ved ikke hvad du mener, men må lade det ligge, da jeg er under tidspres lige nu. Måske en anden gang...

->terry: Klart svar. Jeg kan se din pointe i Dlookup til denne SELECT, men da det blot var en af mange bliver den foretrukne løsning almindelige forespørgsler.
Avatar billede terry Ekspert
19. april 2004 - 09:00 #6
tak
19. april 2004 - 09:17 #7
ok, Recordset er også en større omgang, at gennemgå her.
Men thnx for points :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
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