Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Paradox-tabellen im Ordner der .exe erstellen (https://www.delphipraxis.net/24360-paradox-tabellen-im-ordner-der-exe-erstellen.html)

plautzer 19. Jun 2004 21:00


Paradox-tabellen im Ordner der .exe erstellen
 
Abend,

beim öffen meines programm prüfe ich ob die paradox tabellen da sind oda nicht.
Falls nicht das sollen sie erstellt werden.
Hier meine 2 Fragen dazu:

Wie frage ich ab ob die 2 tabellen im ordner der *.exe sind.
Und wenn die nicht da sind, wie erstelle ich sie genau da?


Delphi-Quellcode:
IF NOT FileExists('C:\***\daten.DB') THEN ...
Thx,

plautzer

MarkusB 20. Jun 2004 10:08

Re: Paradox-tabellen im Ordner der .exe erstellen
 
Hi Plautzer!

Ich würde keine Prüfungen auf Existenz der Tabelle vornehmen, sondern gleich versuchen die Tabelle zu erstellen. Wenn die Tabelle schon existiert, dann bekommst Du einen Fehler (13075), den Du mit „try .. except ..end“ abfangen kannst. Wenn die Tabelle nicht existiert, dann wird sie erstellt.

Der code sollte etwa so aussehen:
Delphi-Quellcode:
function myCreateTable: boolean;
var
  i, error_no: integer;
  query: TQuery;
begin
  // Rückgabe auf true setzen (= alles OK)
  myCreateTable := true;

  // Query aufbauen
  query := TQuery.Create(nil);

  with query do
  begin
    SQL.Clear;
    SQL.Add('create table "Tabelle.db"');
    SQL.Add('(');
    SQL.Add('  ID smallint,');
    SQL.Add('  Feld1 char(40),');
    SQL.Add('  Feld1 char(40),');
    SQL.Add('  primary key(ID)');
    SQL.Add(')');
  end;

  // Query ausführen, dabei Fehler abfangen
  // “13057 File already exists" -> Tabelle existiert
  try
    query.ExecSQL;
  except
    on e: EDBEngineError do
    for i := 0 to e.ErrorCount - 1 do
    begin
      error_no := e.Errors[i].ErrorCode;

      // falls Fehler-ID nicht gleich 13057, dann Rückgabe auf false setzen und
      // Message anzeigen
      if error_no <> 13057
      then
      begin
        MessageDlg(e.Message + #13 + 'Error no: ' + IntToStr(error_no), mtError, [mbOK], 0);
        myCreateTable := false;
      end;
    end;
  end;

  // Query nicht mehr nötig, also weghauen
  query.Destroy;
end;
viele Grüße
Markus
:gruebel:

plautzer 20. Jun 2004 10:41

Re: Paradox-tabellen im Ordner der .exe erstellen
 
Danke,

ich habe mir mittlerweile auf dieser Weise geholfen:

Delphi-Quellcode:
pfad := ExtractFilePath(Application.ExeName);
  name := ExtractFileName(Application.ExeName);
  ext := ExtractFileExt(Application.ExeName);
  tabellen:=pfad + 'tabellen';
  with Table1 do DatabaseName := tabellen;
  with Table2 do DatabaseName := tabellen;
IF NOT FileExists(tabellen + '\daten.DB') THEN
        BEGIn
        if not ForceDirectories(tabellen) then
        ShowMessage('Beim Anlegen von '+Tabellen+' ist ein Fehler aufgetreten! Bitte überprüfen Sie ob Schreibzugriff auf den Datenträger der *.exe haben.');

        with Table1 do
                begin
                active := false;
                DatabaseName := tabellen;
                tabletype := TTParadox;
                tablename := 'daten';
                Name := 'Table1';

        with FieldDefs do
                begin
                 clear;
                     Add('Whg', ftinteger, 0, false);
                     Add('Name', ftString, 50, false);
                     Add('Vorname', ftstring, 50, false);
                     Add('Mietbegin', ftDate, 0, false);
                     Add('Bemerkung', ftString, 100, false);
                     Add('telefon', ftinteger, 0, false);
                     Add('Bruttomiete', ftcurrency, 0, false);
Das sollte auch funzen, oder sollte ich das doch lieber in eine funktion bauen?

Plautzer

MarkusB 20. Jun 2004 11:16

Re: Paradox-tabellen im Ordner der .exe erstellen
 
Hi Plautzer!

Das Implementieren der Funktionen finde ich immer empfehlenswert, weil Funktionen:
- vermeiden der Entstehung s.g. „spaghetti code“,
- machen Programmcode übersichtlicher und eleganter,
- machen Programme strukturiert und pflegeleichter,
- und, und, und ...

Aber, alles hängt vor allem von Dir und deiner Entwickler-Philosophie ... :)

Viele Grüße
Markus
:gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz