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
Synes godt om
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.
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
Synes godt om
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!
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.
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
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
Synes godt om
Slettet bruger
19. marts 2001 - 11:04#14
jeg er netop lige begyndt at gøre det manuelt, men tak for hjælpen!
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.
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.