Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank zur Laufzeit erstellen? (https://www.delphipraxis.net/16809-datenbank-zur-laufzeit-erstellen.html)

Snooze 23. Feb 2004 21:19


Datenbank zur Laufzeit erstellen?
 
Hallo,

habe eine Frage:

kann ich eine Datenbank (Paradox 7) zur Laufzeit erstellen? Also so, dass ich alle Spalten erst beim Start meines Programmes erstelle mit Eigenschaft (Status, Größe etc.)


und braucht der Anwender dann auch noch das BDE...dings oder braucht man das zum "Blinden" Arbeiten mit der Datenbank gar nicht?

Danke für Hilfe


Stefan :dp:

DP-Maintenance 23. Feb 2004 21:48

DP-Maintenance
 
Dieses Thema wurde von "MrSpock" von "Object-Pascal / Delphi-Language" nach "Datenbanken" verschoben.
Thema ist unter Datenbanken besser aufgehoben.

MrSpock 23. Feb 2004 21:50

Re: Datenbank zur Laufzeit erstellen?
 
Hallo Snooze,
in Paradox ist eine Datenbank letztlich einfach ein Verzeichnis, in dem sich verschiedene Tabellen befinden. Diese kannst du auch zur Laufzeit erstellen. Dazu gibt es auch schon einige Threads.

Wenn du mit Paradox arbeiten möchtest, benötigt der Benutzer auf seinem Rechner auch die BDE.

Snooze 24. Feb 2004 15:08

Re: Datenbank zur Laufzeit erstellen?
 
hm das sieht nicht so einfach aus mit der Suche, denn da findet man absolut nichts...

in der Code-Library fand ich etwas

http://www.delphipraxis.net/internal...ct.php?t=16646

nur finde ich, ist dies nicht gut genug beschrieben, denn das funktioniert bei einem Newbie wie mir nicht :cry:

Cuchulainn 24. Feb 2004 15:13

Re: Datenbank zur Laufzeit erstellen?
 
Was funktioniert bei dir denn nicht? Ich kann es dir auch genauer erklären.

Snooze 24. Feb 2004 15:18

Re: Datenbank zur Laufzeit erstellen?
 
Zitat:

Zitat von Cuchulainn
Was funktioniert bei dir denn nicht? Ich kann es dir auch genauer erklären.


also den code von dieser genannten seite habe ich einem Button als Ereignis gegeben.

wenn ich jetz das Prog starten möchte, schreibt er:

dass er das TblErgebnis nicht kennt.

Cuchulainn 24. Feb 2004 15:22

Re: Datenbank zur Laufzeit erstellen?
 
TblErgebnis ist ein Objekt vom Typ TTable. Das musst du vorher erstellen. Entweder ziehst du eine TTable-Komponente auf dein Formular. Die findest du unter "Dateizugriff".
Oder du erstellst sie während der Laufzeit. So mache ich das immer:
Delphi-Quellcode:
var TblErgebnis: TTable;

(...)

procedure TForm1.FormCreate(Sender: TObject);
begin
  TblErgebnis := TTable.Create(Form1);
end;
Du kannst TblErgebnis natürlich auch einen anderen Namen geben.
Aber du hast recht, ich hätte das ausdrücklich hinschreiben müssen, dass es sich um eine Variable handelt. Das nächste Mal stelle ich das ganze Programm in die Code-Library.

Versuch es jetzt mal wieder. Dann sollte es funktionieren.

Cuchulainn 24. Feb 2004 15:23

Re: Datenbank zur Laufzeit erstellen?
 
Ach so, ich benutze noch die Variable StrPfad. Das ist eine Stringvariable, in der der Pfad der zu erstellenden Tabelle steht.

Snooze 24. Feb 2004 15:28

Re: Datenbank zur Laufzeit erstellen?
 
sehr gut, das scheint jetzt zu klappen :-D

Danke vielmals

das mit Tabellen einfügen werde ich über die Suche finden, wurde mehrmals behandelt


:dp:

Snooze 24. Feb 2004 15:34

Re: Datenbank zur Laufzeit erstellen?
 
eine Frage doch noch:

kann ich irgendwie überprüfen, ob die Datei bereits vorhanden ist?

denn sonst erstellt er sie ja jedes Mal und das bringt einen Busy-Error

am liebsten wäre mir, wenn ich gleich auf eine Zeile in der Datenbank zugreifen könnte, um zu wissen, ob bereits registriert oder Neu-Anmeldung

Danke

Stefan

Cuchulainn 24. Feb 2004 15:37

Re: Datenbank zur Laufzeit erstellen?
 
Du kannst mit FindFirst und FindNext überprüfen, ob eine Datei bereits existiert. Die Funktionen sind in der Hilfe gut erklärt.
Den zweiten Teil deiner Frage verstehe ich nicht ganz.

Snooze 24. Feb 2004 15:46

Re: Datenbank zur Laufzeit erstellen?
 
Zitat:

Zitat von Cuchulainn
Du kannst mit FindFirst und FindNext überprüfen, ob eine Datei bereits existiert. Die Funktionen sind in der Hilfe gut erklärt.
Den zweiten Teil deiner Frage verstehe ich nicht ganz.


also ich schreibe in die ersten 10 Felder nur Daten über den Besitzer rein.

im 1. Feld steht der Name

deshalb möchte ich gern beim Start direkt auf dieses Feld zugreifen, und wenn dann die DATEI gar nicht da ist, oder leer ist, sollte ich dementsprechend reagieren können. Also geht es mir eigentlich nur darum, den herbeigeführten Error (wie Table is too busy...) abzufangen


Danke

eddy 24. Feb 2004 16:34

Re: Datenbank zur Laufzeit erstellen?
 
Hallo Snooze,

ich bin erst jetzt auf Deine Frage gestoßen, vielleicht nützt Dir folgendes ja noch etwas:

Code:
procedure TFDaSi.GenSVAuftragsdatei1Click(Sender: TObject);
begin
  Tab1.Active := false;
  Tab1.DatabaseName := DataPath; //d:\myprog\daten
  Tab1.TableName := fnSVOrder;  //d:\myprog
  Tab1.TableType := ttParadox;
  Tab1.FieldDefs.Clear;
  with Tab1.FieldDefs do begin
    Add('ID', ftAutoInc, 0, false);     // für den Primärindex
    Add('Gruppe', ftString, 20, false);
    Add('QLW', ftString, 80, false);
    Add('CopySubDir', ftBoolean, 0, false);
    Add('AktRotation', ftInteger, 0, false);
    Add('InklFilter', ftMemo, 0, false);
    Add('Datum', ftDate, 0, false);
    Add('Zeit', ftTime, 0, false);
  end;    { of FieldDefs }
  try
    Tab1.CreateTable;
  except
  end;
  // Index erzeugen
  Tab1.IndexDefs.Clear;
  Tab1.IndexDefs.Update;
  Tab1.AddIndex('','ID', [ixPrimary]);
  Tab1.AddIndex('Gruppe','Gruppe',[ixCaseInsensitive]);
end;
mfg
eddy

Snooze 24. Feb 2004 17:38

Re: Datenbank zur Laufzeit erstellen?
 
Table1.Active := false;
Table1.DatabaseName := APath; //d:\myprog\daten
Table1.TableName := 'Test'; //d:\myprog
Table1.TableType := ttParadox;
Table1.FieldDefs.Clear;
with Table1.FieldDefs do begin
Add('ID', ftAutoInc, 0, false); // für den Primärindex
Add('Gruppe', ftString, 20, false);
Add('QLW', ftString, 80, false);
Add('CopySubDir', ftBoolean, 0, false);
Add('AktRotation', ftInteger, 0, false);
Add('InklFilter', ftMemo, 0, false);
Add('Datum', ftDate, 0, false);
Add('Zeit', ftTime, 0, false);
end; { of FieldDefs }
try
Table1.CreateTable;
except
end;
// Index erzeugen
Table1.IndexDefs.Clear;
Table1.IndexDefs.Update;
Table1.AddIndex('','ID', [ixPrimary]);
Table1.AddIndex('Gruppe','Gruppe',[ixCaseInsensitive]);


so sieht mein Code jetzt nach Anpassung aus,

nur schreibt er dann, dass die tabelle gar nicht existiert, und das will ich ja so haben, dass er mir das sagt, aber ein wenig anders *Ggg*


Edit: erst schreibt er, dass Datensatzanzahl nicht angegeben ist und beim weitergehen kommt obige Meldung erst

Cuchulainn 24. Feb 2004 17:55

Re: Datenbank zur Laufzeit erstellen?
 
Tut mir leid, dass ich nicht ehr geantwortet habe. Ich hatte eben keine Zeit mehr für DP. Arbeit ;)
Du kannst in den Except-Zweig eine Showmessage-Anweisung schreiben. Dann führt er diese Anweisung aus, wenn ein Fehler auftritt. Etwa so:

Delphi-Quellcode:
try
(...)
except
  Showmessage('Fehler!!!'); // Nur sollte deine Meldung etwas aussagekräftiger sein ;)
end;
Und von welchen Meldungen sprichts du denn? Wann kommen die und wie lauten sie?

Snooze 24. Feb 2004 18:00

Re: Datenbank zur Laufzeit erstellen?
 
baue nun das Projekt neu auf, dann werde ich gleich als erstes dies perfekt machen.


Aber danke trotzdem für diesen Tipp, :-D

mfg Stefan :dp:

Cuchulainn 25. Feb 2004 07:42

Re: Datenbank zur Laufzeit erstellen?
 
Okay, dann viel Glück :D

Spasskeks 25. Feb 2004 15:13

Re: Datenbank zur Laufzeit erstellen?
 
Zitat:

kann ich irgendwie überprüfen, ob die Datei bereits vorhanden ist?
Geht auch ganz gut mit
Code:
Fileexists(File:string):boolean
MFG Henrik :hi:

eddy 25. Feb 2004 16:13

Re: Datenbank zur Laufzeit erstellen?
 
Hallo Snooze,

da Du den Quelltext nur leicht geändert hast könnte folgende Zeile zu dem Fehler führen:
Code:
Table1.TableName := 'Test';
Ersetz' diese mal durch:
Code:
Table1.TableName := 'Test.DB';
mfg
eddy


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 Uhr.

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