Entwickler-Ecke

Datenbanken - Prüfen ob Tabelle in einer mdb schon vorhanden ist


der Berliner - So 27.08.06 18:21
Titel: Prüfen ob Tabelle in einer mdb schon vorhanden ist
Wie der Titel schon sagt wie kann ich
Prüfen ob eine Tabelle in einer mdb schon vorhanden ist?

Gruß


UGrohne - Mo 28.08.06 08:42

Wie verbindest Du Dich zu der Datenbank, also welche Komponenten?

Meistens bietet die Datenbank-Komponente eine Prozedur namens GetTableNames, vielleicht gibt's die bei Dir ja auch ;)


oldmax - Mo 28.08.06 09:11

Hi
Bei Delphi 4 geht’s über TTable.Exists.
In dem Beitrag Adressbuch mit Datenbank hab ich einen kleinen Einstieg beschrieben, in dem auch diese Function benutzt wird. Sollte diese Function nicht gegeben sein, das ist z.B. bei Delphi 3 der Fall, kannst du ganz einfach ein Open setzen. Und mit Try und Except bekommst du die Fehlermeldung in den Griff..

Hier mal beide Beispiele:
D3:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
Procedure TMYDaten.Generate_Tabelle;
Var Tabelle: TTable;
Begin
  Tabelle:=TTable.Create(MyDaten); 
  Tabelle.DatabaseName:='MyConnect';
  Tabelle.TableName:='Adressen';
  Tabelle.TableType:=ttDefault;
  Tabelle.Name:='Adressen';
  Tabelle.FieldDefs.Clear;
  Tabelle.IndexDefs.Clear;
  Tabelle.FieldDefs.Add('Ident',ftInteger,0,True); // ich mach mir immer einen eigenen Ident
  Tabelle.FieldDefs.Add('Vorname',ftString,50,False); // Tabellenfeld Vorname 50 Zeichen
  Tabelle.FieldDefs.Add('Name',ftString,50,False); // Tabellenfeld Name 50 Zeichen
  Tabelle.FieldDefs.Add('Strasse',ftString,30,False); // Tabellenfeld Strasse 30 Zeichen
  Tabelle.FieldDefs.Add('PLZ',ftString,6,False); // usw
  Tabelle.FieldDefs.Add('Ort',ftString,30,False);
  Tabelle.FieldDefs.Add('Telefon',ftString,30,False);
  Tabelle.FieldDefs.Add('EMail',ftString,30,False);
  Tabelle.IndexDefs.Add('''Ident', [ixPrimary, ixUnique]); // und setzte ihn auch als einzigartig
   Try 
      Tabelle.Open; // öffnet eine vorhandene Tabelle
    except
       Tabelle.CreateTable; // erzeuge die Tabelle auf der Datenbank
    end;
  Tabelle.Free; // nicht vergessen, Speicher freigeben, Tabelle liegt nun im angegebenen Verzeichnis
End;

Oder für D4


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
Procedure TMyDaten.Generate_Tabelle;
Var Tabelle : TTable;
Begin
  Tabelle:=TTable.Create(MyDaten); 
  Tabelle.DatabaseName:='MyConnect';
  Tabelle.TableName:='Adressen';
  Tabelle.TableType:=ttDefault;
  Tabelle.Name:='Adressen';
  Tabelle.FieldDefs.Clear;
  Tabelle.IndexDefs.Clear;
  If not Tabelle.exists then // geht nur ab Delphi 4, sonst weglassen und später ausklammern
  begin
    Tabelle.FieldDefs.Add('Ident',ftInteger,0,True); // ich mach mir immer einen eigenen Ident
    Tabelle.FieldDefs.Add('Vorname',ftString,50,False); // Tabellenfeld Vorname 50 Zeichen
    Tabelle.FieldDefs.Add('Name',ftString,50,False); // Tabellenfeld Name 50 Zeichen
    Tabelle.FieldDefs.Add('Strasse',ftString,30,False); // Tabellenfeld Strasse 30 Zeichen
    Tabelle.FieldDefs.Add('PLZ',ftString,6,False); // usw
    Tabelle.FieldDefs.Add('Ort',ftString,30,False);
    Tabelle.FieldDefs.Add('Telefon',ftString,30,False);
    Tabelle.FieldDefs.Add('EMail',ftString,30,False);
    Tabelle.IndexDefs.Add('''Ident', [ixPrimary, ixUnique]); // und setzte ihn auch als einzigartig
    Tabelle.CreateTable;// und erzeuge die Tabelle auf der Datenbank
  end;
  Tabelle.Free; // nicht vergessen, Speicher freigeben, Tabelle liegt nun im angegebenen Verzeichnis
End;

Ich hoffe, es hilft dir
Gruß oldmax


der Berliner - Mo 28.08.06 16:19

Hi...Danke Euch
werde das mit ADOConnection1.GetTableNames(Listbox1.Items,False); lösen
Gruß