PDA

Vollständige Version anzeigen : tabelle vorhanden??


dust
08.08.2001, 06:48
hallo!

ich möchte überprüfen, ob eine tabelle schon vorhanden ist.
wenn dies der fall ist, soll sie geöffnet werden.
wenn nicht, soll diese tabelle automatisch erstellt werden und dann geöffnet werden.

danke

Dan
08.08.2001, 08:04
Hai Staub,

ich hatte gerade mal Bock ein paar Zeilen zu schreiben

:)


Function TabelleVorhanden(TabellenName As String) As Boolean
Dim dbs As Database
Dim Tabelle As TableDef
Dim Tabellen As TableDefs

Set dbs = CurrentDb 'Aktuelle Datebank öffnen
Set Tabellen = dbs.TableDefs 'Tabellenauflistung öffen

For Each Tabelle In Tabellen 'Alle Tabellen in der Auflistung durchlaufen
If Tabelle.Name = TabellenName Then 'Nach übereinstimmendem Name suchen
TabelleVorhanden = True 'Bei Treffer Übergabewert = True setzen
Exit For 'Durchlauf abbrechen
End If
Next Tabelle 'Nächste Tabelle

Set Tabellen = Nothing 'Object-Variable löschen
Set dbs = Nothing 'Object-Variable löschen
End Function

Sub TabelleOeffnenOderHinzufuegen(Tabelle As String)
Dim dbs As Database

Set dbs = CurrentDb

If TabelleVorhanden(Tabelle) = True Then
'Tabelle ist vorhanden

DoCmd.OpenTable Tabelle, acViewNormal

Else
'Tabelle ist nicht vorhanden

DoCmd.OpenTable Tabelle, acViewDesign

End If

Set dbs = Nothing

End Sub


Ich denke das hilft, falls Du die Tabellen zur weiteren Behandlung per Code öffnen willst, musst Du sie als Objektvariable öffnen:


Dim rst as Recordset 'Recordset-Object deklarieren

'öffnen...

Set rst = dbs.OpenRecordset(Tabelle,dbOpenRecordset)

'bzw erzeugen...
Set rest = dbs.CreateTableDef(Tabelle)

'hier fehlt warscheinlich noch was, musst Du mal in der hilfe oder MSDN nachschauen




CU Daniel

BTW: Bitte auch meine HILFESUCHE in dem Excel-Forum beachten!!!

marmic55
08.08.2001, 08:06
Hallo,

hier die Tabellenauflistung:


Function TabelleVorhanden(strName As String)
' Aufruf: IfTabelleVorhanden("tblPersonal") then .....
TabelleVorhanden = False
Dim DB As Database, Tbl As TableDef
Set DB = CurrentDb
For Each Tbl In DB.TableDefs
If Tbl.NAME = strName Then
TabelleVorhanden = True
Exit For
End If
Next

End Function


Obige Funktion wäre für eine DB ausbaubar, indem die Art des Objekts mit übergeben wird (z.B. acTable usw.).
Ansonsten s. Online-Hilfe zu "TableDefs". Dort wird die Erstellung einer Tabelle erläutert.
Eine weitere Möglichkeit wäre, über eine Tabellenerstellungsabfrage eine Tabelle zu erstellen (ggf. auch per VBA).


Michael

Dan
08.08.2001, 11:46
Hi Michael,
diesmal war ich schneller :)

rawa
08.08.2001, 13:41
Ich habe dasselbe Problem, habe auch beides ausprobiert... wobei beim 2ten mir der Durchblick fehlt. :)

Beide gehen nicht.

Was mache ich falsch? Hier mein ganzer Code:

Function TabelleVorhanden(TabellenName As String) As Boolean

Dim dbs2 As Database
Dim Tabelle As String
Dim Tabellen As String

Set dbs = CurrentDb 'Aktuelle Datebank öffnen
Set Tabellen = dbs.TableDefs 'Tabellenauflistung öffen

For Each Tabelle In Tabellen 'Alle Tabellen in der Auflistung durchlaufen

If Tabelle.Name = TabellenName Then 'Nach übereinstimmendem Name suchen
TabelleVorhanden = True 'Bei Treffer Übergabewert = True setzen
Exit For 'Durchlauf abbrechen

End If

Next Tabelle 'Nächste Tabelle

Set Tabellen = Nothing 'Object-Variable löschen
Set dbs = Nothing 'Object-Variable löschen

End Function
-----------------------

Sub TabelleOeffnenOderHinzufuegen(Tabelle As String)

Dim dbs

Set dbs = CurrentDb

If TabelleVorhanden(Tabelle) = True Then 'Tabelle ist vorhanden
DoCmd.OpenTable Tabelle, acViewNormal

Else 'Tabelle ist nicht vorhanden
DoCmd.OpenTable Tabelle, acViewDesign

End If

Set dbs = Nothing

End Sub
-----------------

Private Sub Befehl36_Click()
On Error GoTo Err_Befehl36_Click

TabelleOeffnenOderHinzufuegen

Exit_Befehl36_Click:
Exit Sub

Err_Befehl36_Click:
MsgBox Err.Description
Resume Exit_Befehl36_Click

End Sub

Auf jeden Fall zeigt er mir folgendes an: "Benutzerdefinierter Typ nicht definiert"

Ich bin (als VB-Neuling) etwas ratlos...

Hilfe. Rafael.

- Wie ruft man eigentlich Funktionen auf?

thk
08.08.2001, 13:54
Hallo,

Du musst Tabelle als TableDef deklarieren nicht als String.

Gruß

Thomas

rawa
08.08.2001, 13:59
Upps... kleiner Tippfehler... Das waren bereits meine Versuche beim Problembeheben.


Function TabelleVorhanden(TabellenName As String) As Boolean

Dim dbs As Database
Dim Tabelle As TableDef
Dim Tabellen As TableDefs

Set dbs = CurrentDb 'Aktuelle Datebank öffnen
Set Tabellen = dbs.TableDefs 'Tabellenauflistung öffen

For Each Tabelle In Tabellen 'Alle Tabellen in der Auflistung durchlaufen

If Tabelle.Name = TabellenName Then 'Nach übereinstimmendem Name suchen
TabelleVorhanden = True 'Bei Treffer Übergabewert = True setzen
Exit For 'Durchlauf abbrechen

End If

Next Tabelle 'Nächste Tabelle

Set Tabellen = Nothing 'Object-Variable löschen
Set dbs = Nothing 'Object-Variable löschen

End Function
---------------------------------------------

Sub TabelleOeffnenOderHinzufuegen(Tabelle As String)

Dim dbs As Database

Set dbs = CurrentDb

If TabelleVorhanden(Tabelle) = True Then 'Tabelle ist vorhanden
DoCmd.OpenTable Tabelle, acViewNormal

Else 'Tabelle ist nicht vorhanden
DoCmd.OpenTable Tabelle, acViewDesign

End If

Set dbs = Nothing

End Sub

Hier nun die richtige Version.

Problem immer noch da. Beim Komplilieren spuckt er diese Meldung aus. Jaja. Zeigt dabei auf:

"Dim dbs As Database"

thk
08.08.2001, 14:09
Deklarier das mal so:
Dim dbs As DAO.Database
Dim Tabelle As DAO.TableDef
Dim Tabellen As DAO.TableDefs

wenn das dann immer noch Fehler gibt, schau mal im VB-Editor unter Extras>Verweise nach ob die DAO Objekt-Library aktiviert ist.

Gruß
Thomas

rawa
08.08.2001, 14:21
Es lag wirklich an dem Verweis.

So, jetzt läufts, nur passiert nix, obwohl die Datei nicht vorhanden ist.

Oder habe ich die Fkt. falsch aufgerufen?

Zusätzlicher Code:

Sub Befehl36_Click()
On Error GoTo Err_Befehl36_Click

Dim Tabl
Tabl = "Kunden_Datei_Intern"

TabelleOeffnenOderHinzufuegen (Tabl)

Exit_Befehl36_Click:
Exit Sub

Err_Befehl36_Click:
MsgBox Err.Description
Resume Exit_Befehl36_Click

End Sub

Oder hast du eine andere Idee?

rawa
08.08.2001, 14:26
AHHHHHHHHHHH! Ich hab's!

Es lag am fehlenden "Private Sub"!

Knieend und ehrfürchtig bedanke ich mich! ;)

thk
08.08.2001, 14:34
Sieht doch alLes ganz ok aus.
Setz doch mal einen Haltepunkt (z.B. hier: Sub Befehl36_Click()) und geh dann mal im Einzelschritt durch Deinen Code.

Gruß
Thomas

rawa
08.08.2001, 14:54
Jupp, noch mal Danke. :)