Avatar billede Slettet bruger
17. marts 2001 - 11:48 Der er 21 kommentarer og
2 løsninger

Stort dump-in til Access

Hej,

Hvordan dumper jeg en lang SQL streng ind i
Access?
Avatar billede ds-zim Nybegynder
17. marts 2001 - 16:05 #1
Huh? Vha. af en query til ODBC ?
Avatar billede Slettet bruger
17. marts 2001 - 16:19 #2
jep
Avatar billede Slettet bruger
18. marts 2001 - 11:34 #3
ved du hvordan man gør?
Avatar billede ds-zim Nybegynder
18. marts 2001 - 13:58 #4
Eh, næ. egentlig ikke, men har set andre spm. på eksperten om det samme. start evt. med en søgning efter ODBC
18. marts 2001 - 19:45 #5
Christian, hvad snakker du om her? Vil du køre en SQL-sætning fra et andet program? Eller vil du bare køre en SQL-sætning i Access på nogle Access-tabeller?
Jeg er ikke helt med på hvad du spørger om!?

/Thomas
Avatar billede Slettet bruger
19. marts 2001 - 08:52 #6
Jeg har en masse SQL sætninger der skal ind i
en Access database.

F.eks:

INSERT INTO tabel (fnavn, enavn) VALUES (\'Christian\',\'Thuner\');
INSERT INTO tabel (fnavn, enavn) VALUES (\'Thomas\',\'Jepsen\');

De skal begge sættes ind i tabellen,
så jeg kan se dataene når jeg åbner databasen.
19. marts 2001 - 08:57 #7
Så skal du jo bare lave en ny forespørgsel i designvisning.
Derefter lukker du dialogboksen, som hedder \"Vis Tabel\".
Herefter vælger du menuen Vis->SQL-Visning (eller trykker på knappen [SQL] øverst til venstre).
Nu kan du bare indsætte SQL-sætningerne og køre dem ved at klikke på udråbstegnet på værktøjslinien (!).

/Thomas
Avatar billede Slettet bruger
19. marts 2001 - 09:29 #8
Jaja, men jeg har 83 insert into sætninger,
og det er ikke så nemt at indsætte dem enkelvis!

Access kan nemlig kun klare en sætning ad gangen!
19. marts 2001 - 09:59 #9
Hvordan har du de 83 sætninger liggende?
Skal de kun køre én gang eller skal de gemmes, så de kan køres igen på et senere tidspunkt?

Man kunne godt bygge en funktion op, som satte SQL\'en ind i en forespørgsel, én efter én, og eksekverede dem løbende. Men det er (næsten) lige så hurtigt at åbne forespørgslen i SQL-visning og derefter copy/paste/kør én ad gangen. 83 burde kun tage ca 5 min (hvis det er den type forespørgsler, som du antydedet før).

Til sammenligning vil det tage lidt længere at konstruere en funktion som kan gøre det samme. Dertil kommer så at man skal finde en måde at gemme SQL-sætningerne på, som Access kan læse og adskille.

Men hvis de skal gemmes og køres igen på et senere tidspunkt, kan det selvfølgelig være nødvendigt.

/Thomas
Avatar billede Slettet bruger
19. marts 2001 - 10:02 #10
Jeg har dem fra et dump-out i en mySQL database.
Du kan se dem på:
http://www.wizee.f2s.com/efaq.txt
19. marts 2001 - 10:39 #11
Okay, hvis du paster alle disse ind i en tabel \"SQL-sætninger\" og lader Access oprette et nøglefelt (autonummreringsfelt som skal hedde ID) kan du bruge følgende kode:

Public Function OpretSQL()
    Dim db As Database
    Dim qdef As QueryDef
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset(\"SQL\", dbOpenSnapshot)
    \'opret forespørgslerne
    Do Until rs.EOF
        Set qdef = db.CreateQueryDef(\"Qry-\" & rs!ID, rs!SQL)
        rs.MoveNext
    Loop
   
    \'kør forespørgslerne
    rs.MoveFirst
    Do Until rs.EOF
        db.Execute \"Qry-\" & rs!ID
        rs.MoveNext
    Loop
    rs.close
    db.close
End Function
Avatar billede Slettet bruger
19. marts 2001 - 10:47 #12
hvad skal jeg gøre med koden?
19. marts 2001 - 11:01 #13
Oprette et modul og indsætte den der.

Derefter kan du lave en makro med handlingen \"AfspilKode\" og argumentet \"OpretSQL\".

Der er dog mange fejlmuligheder, så jeg vil egentlig stadig tro, at det vil være hurtigere for dig at gøre det manuelt. Især, hvis du ikke kender noget til VBA.
Der vil nemlig opstå forskellige fejl. F.eks. hvis der er ulovlige tegn i SQL\'en (hvilket der er). Ligeledes vil der opstå fejl hvis du forsøger at køre funktionen mere end én gang.

Public Function OpretSQL()
    On Error resume next
    Dim db As Database
    Dim qdef As QueryDef
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset(\"SQL\", dbOpenSnapshot)
    \'opret forespørgslerne
    Do Until rs.EOF
        Set qdef = db.CreateQueryDef(\"Qry-\" & rs!ID, rs!SQL)
        rs.MoveNext
    Loop
   
    \'kør forespørgslerne
    rs.MoveFirst
    Do Until rs.EOF
        db.Execute \"Qry-\" & rs!ID
        rs.MoveNext
    Loop
    rs.close
    db.close
End Function
Avatar billede Slettet bruger
19. marts 2001 - 11:04 #14
jeg er netop lige begyndt at gøre det manuelt, men tak for hjælpen!
19. marts 2001 - 11:14 #15
Christian, du skal lige aflutte dette spørgsmål, så det ikke ligger og \'flyder\'.
Om du vil give mig point for den tid, jeg har brugt på at hjælpe dig, må du selv om. Men fjern i hvert fald spørgsmålet hvis det ikke længere er aktuelt.

/Thomas
Avatar billede Slettet bruger
19. marts 2001 - 11:38 #16
jaja, en ting ad gangen!
I får 50/50!
19. marts 2001 - 12:05 #17
Det var ikke sådan ment :-)
Avatar billede Slettet bruger
19. marts 2001 - 12:06 #18
:-)
Avatar billede ds-zim Nybegynder
19. marts 2001 - 15:16 #19
Øh, en smule ufortjent ? Det synes jeg ihvertfald, giv lyd hvis I er enige
Avatar billede Slettet bruger
19. marts 2001 - 15:32 #20
enig, OG??
somme tider skal man være lidt venlig :-)
Avatar billede ds-zim Nybegynder
19. marts 2001 - 15:44 #21
ok, kewl :)
Avatar billede Slettet bruger
19. marts 2001 - 17:22 #22
kewl?
Avatar billede ds-zim Nybegynder
20. marts 2001 - 12:12 #23
cool
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