Einzelnen Beitrag anzeigen

plautzer

Registriert seit: 23. Aug 2003
172 Beiträge
 
#1

Existenzprüfung von Tabellen.. bizzl komplizierter.

  Alt 3. Sep 2004, 15:31
Hi,

ich habe 4 tabelle(Datenbanken). Tabelle1 hängt mit allen andern tabellen zusammen, also wenn die nicht existiert, dann müssen die anderen auch neu erstellt werden, egal ob sie schon existieren.

Das abfragen ist ja kein problem, ich habe nur ein problem bei wenn die anderen existieren und ich die löschen und dann wieder erstellen muss.
Ich habe auch ziehmlich viel Code für die ganze sache, darum wäre es auch gut wenn ihr tipps geben könntet wie ich eine geeignete funktion dazu aufbauen könnte(hab das sowieso meine probleme.. weiß nicht sorecht wie/warum ich funktioen machen sollte).

Ich habe zur jeden tabelle eine procedure erstellen, die die Existenzprüfung macht und falls nicht gegeben, die tabelle erstellt:

Delphi-Quellcode:
procedure TFmain.Gruppe_proof;
var
  i, error_no: integer;
  query: TQuery;
  pfad,tabellen, name, ext: string;
begin

  pfad := ExtractFilePath(Application.ExeName);
  name := ExtractFileName(Application.ExeName);
  ext := ExtractFileExt(Application.ExeName);
  tabellen:=pfad + 'tabellen';

IF NOT FileExists(tabellen + '\table1.DB') THEN
        BEGIn
        if not ForceDirectories(tabellen) then
        ShowMessage('Beim Anlegen von '+Tabellen+' ist ein Fehler aufgetreten!');

  query := TQuery.Create(nil);

with query do
    begin
    DatabaseName := tabellen;
    SQL.Clear;
    SQL.Add('create table "table1.db"');
    SQL.Add('(');
    SQL.Add(' ID autoinc,');
    SQL.Add(' Gruppe char(20),');
    SQL.Add(' Name char(30),');
    SQL.Add(' Vorname char(30),');
    SQL.Add(' Strasse char(30),');
    SQL.Add(' Hausnr char(10),');
    SQL.Add(' PLZ Char(10),');
    SQL.Add(' Ort char(20),');
    SQL.Add(' Telefon char(30),');
    SQL.Add(' primary key(ID)');
    SQL.Add(')');
    SQL.Add('Drop table "table2.db"') ->> Wo sollte das stehen?
  end;
  try
    query.ExecSQL;
except
    on e: EDBEngineError do
    for i := 0 to e.ErrorCount - 1 do
    begin
      error_no := e.Errors[i].ErrorCode;
      if error_no <> 13057
      then
      begin
        MessageDlg(e.Message + #13 + 'Error no: ' + IntToStr(error_no), mtError, [mbOK], 0);
      end;
    end;
  end;
  query.Destroy;
end;
end;
Die Proceduren habe ich dann alle in das oncreate des progs gepackt. Die table2 wird aber nicht gelöscht und dann wieder erstellt.


THx,

Plautzer
  Mit Zitat antworten Zitat