Avatar billede schoesler Nybegynder
21. oktober 2003 - 20:41 Der er 14 kommentarer og
1 løsning

Orette en tabel i en extern db via VBA code.

Er det muligt at oprette en tabel i en ekstern db med VBA code og samtidig tjekke om den allerede eksisterer. Eksisterer den hoppes vidre til oprettelse af næste tabel.
Avatar billede henrik13 Nybegynder
21. oktober 2003 - 20:45 #1
Sådan oprettes en tabel:
Create Table Test (ID Autoincrement, Fornavn Text(20), Efternavn Text (20), Kommentar Memo)
Avatar billede henrik13 Nybegynder
21. oktober 2003 - 20:51 #2
Rettelse:
dim dbs as database
dim tdf as TableDef, fld as Field

Set dbs = OpenDatabase("C:\TESTdb.mdb")

set tdf = dbs.TableDefs!TABLE1

set fld = tdf.CreateField("JaNej",dbBoolean)

tdf.Fields.Append fld
Der skal refarance til DAO
Avatar billede henrik13 Nybegynder
21. oktober 2003 - 21:07 #3
Her er den med advarselsbox også:
Dim dbs as database
Dim tdf as TableDef, fld as Field
Set dbs = OpenDatabase("C:\TESTdb.mdb")
If Tabel1 Then
Msgbox "Tabel findes oprettes Tabel2"
set tdf = dbs.TableDefs!TABLE2
set fld = tdf.CreateField("JaNej",dbBoolean)
tdf.Fields.Append fld
Else
set tdf = dbs.TableDefs!TABLE1
set fld = tdf.CreateField("JaNej",dbBoolean)
tdf.Fields.Append fld
End if
21. oktober 2003 - 22:31 #4
Du kan bruge denne kode:
Public Function OpretTabel()
    On Error Resume Next
    Dim db As Database
    Dim tdef As TableDef
    Dim fld As Field
    Set db = OpenDatabase("C:\MinTestdb.mdb")
    Set tdef = db.TableDefs("Test")
    If Err Then
        Set tdef = db.CreateTableDef("Test")
        With tdef
            .Fields.Append .CreateField("NytFelt1", dbText)
            .Fields.Append .CreateField("NytFelt2", dbText)
            .Fields.Append .CreateField("NytFelt3", dbText)
        End With
        db.TableDefs.Append tdef
    End If
End Function

Funktionen kræver at du har en reference til "microsoft DAO 3.x Object Library" (sættes VBA-editoren via menuen Tools->References)

Henrik->Jeg synes ikke, at jeg kan finde en CreateTableDef i din kode! Hvordan får du oprettet tabellen???
Avatar billede henrik13 Nybegynder
21. oktober 2003 - 22:46 #5
Surt tjomas, de var desværre opretted, derfor fik jeg ikke fejl. Men jeg syntes ikke din opretter en anden tabel som min gør. Eller skulle havde gjort. ;o)
21. oktober 2003 - 22:49 #6
Henrik->Sætning: Set tdef = db.CreateTableDef("Test") opretter tabellen, hvis den ikke findes i forvejen...
Avatar billede schoesler Nybegynder
21. oktober 2003 - 22:52 #7
'thomasjepsen' din kode virker fint, jeg sider bare og tænker over hvordan jeg får lagt koden sammen. Har nemlig 20 tabeller som jeg skal have oprettet, hvis de ikke findes i forvejen!. I 18 ens back-ends
Avatar billede schoesler Nybegynder
21. oktober 2003 - 22:54 #8
'thomasjepsen' Mon ikke det er bedst at lave en funktion til hver tabel, for at adskilde dem fra hinanden?
21. oktober 2003 - 22:56 #9
Lav funktionen med parameteroverførsel:

Public Function OpretTabel(Backend as String, Tabel as String)
    On Error Resume Next
    Dim db As Database
    Dim tdef As TableDef
    Dim fld As Field
    Set db = OpenDatabase(Backend)
    Set tdef = db.TableDefs(Tabel)
    If Err Then
        Set tdef = db.CreateTableDef(Tabel)
        With tdef
            .Fields.Append .CreateField("NytFelt1", dbText)
            .Fields.Append .CreateField("NytFelt2", dbText)
            .Fields.Append .CreateField("NytFelt3", dbText)
        End With
        db.TableDefs.Append tdef
    End If
End Function


Derved kan du bare kalde funktioen 18 gange således:
Call OpretTabel("C:\MinTestdb.mdb", "MinTabel")

Hvis felterne også er forskellige, så må du lige sige til....
Avatar billede schoesler Nybegynder
21. oktober 2003 - 23:02 #10
'thomasjepsen' Har alle typer felter. text, memo, date, yesno osv.

ser de sådan ud

dbYesNo
dbDate
dbMemo
dbText(255)
21. oktober 2003 - 23:03 #11
Næsten rigtigt. Text(255) ser således ud:
.Fields.Append .CreateField("NytFelt1", dbText, 255)


Men er det de samme felter som går igen i hver af de 18 felter?
Avatar billede schoesler Nybegynder
21. oktober 2003 - 23:13 #12
'henrik13' Er imponeret over din hurtighed og din aktivitet på eksperten. Der er mange som nyder godt af det. Meeeeeen 'thomasjepsen' kom med det rigtige svar. TAK FOR HJÆLPEN
21. oktober 2003 - 23:14 #13
thnx for point :o)
Avatar billede henrik13 Nybegynder
22. oktober 2003 - 12:12 #14
schoesler. Tak for de rare ord. Dem er der ikke mange af på experten. ;o))
Avatar billede schoesler Nybegynder
22. oktober 2003 - 15:29 #15
'thomasjepsen' Ved godt at spørgsmålet er lukket, men hvis jeg har en "tabel". Hvordan ser VBA koden ud hvis jeg skal overføre denne "tabel" til en ekstern db TEST , men kun hvis den ikke eksisterer i forvejen.
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