O
O Love
Bekanntes Mitglied
- Dabei seit
- 08.04.1999
- Beiträge
- 2.286
- Reaktionspunkte
- 0
Sorry, aber Randy war kurz offline, und da ist hier Mist passiert. Ich konnte allerdings den Thread noch aus dem Cache retten, hier ist meine Antwort daraus:
TableScanner
So heißt erstmal das Tool, das ich meinte. Dieses habe ich aber nur auf Arbeit, und da komme ich erst am Montag ran. Im Netz konnte ich es heute nicht finden.
Was macht es? Man erstellt zuerst eine Tabelle mit dem Datenbank-Tool incl. aller Felder und Indezes. Danach scannt man mit dem Programm diese Tabelle(n) und erzeugt eine Unit, welche man in sein Projekt mit einbindet. Dann kann man mittels MakeAllTables die Tabellen erzeugen (oder reparieren).
Obiger Quelltext
Ja, wenn man das so macht, kann man tatsächlich die Tabelle nicht öffnen.
Abhilfe schafft Folgendes: Wirf (fast) alles weg, weise TableName (files.dbf) direkt an der Komponente zu, klicke auf die Ellipse bei FieldDefs der TTable im Objektinspektor und erzeuge dort zur Designzeit Deine 3 gewünschten Felder. Wenn Du nun den Quelltext ausführst, dann klappt es.
Ach ja, den Index kannst Du erst nach der erstellten Tabelle zuweisen.
Zugriff auf Felder
Er brachte mir eine Fehlermeldung, als ich zusätzlich zu den FieldDefs auch noch die Fields (Doppelklick, wie beschrieben) anlegen wollte. Ich weiß im Moment nicht, wieso.
Aber Du solltest mittels
trotzdem an die Felder rankommen. Dies ist nämlich die Variante, die man verwendet, wenn die Felder noch nicht zur Designzeit da sind.
Man sollte evtl. vorher testen, ob das Feld (ohne das .AsString) auch tatsächlich da ist, mache dies mittels
DatabaseName bei TTable
Normalerweise gibt man dort einen sogenannten BDE-Alias an. Mit Hilfe des BDE-Admins (Systemsteuerung) kann man einen Aliasnamen mit einem Verzeichnis zur Datenbank verbinden. Jetzt kann die Applikation über den Alias auf die Datenbank zugreifen, die sich immer woanders befinden kann. Man muß nur das Verzeichnis beim Alias ändern...
Tip: Wenn Du eine kleine Anwendung schreibst, dann erzeuge (wie in Deinem Beispiel) die Datenbank mit im gleichen Verzeichnis wie die EXE. Dann hast Du kein Problem beim Weitergeben des Programms, weil der Anwender keinen Alias anlegen muß.
Eine weitere Verwendung von DatabaseName liegt bei der Komponente TDatabase: Diese ist eine übergeordnete Komponente, mit welcher man die Verbindung zu Paradox, SQL o.ä. herstellen kann, und dort Nutzereinwahl etc. erforderlich wird. Diese Komponente bekommt einen Namen, welcher dann bei DatabaseName der TTable angegeben werden kann. Das kannst Du dann bei vielen Tabellen machen, damit ist über die TDatabase-Komponente der Zugriff auf alle diese Tabellen freigegeben.
Links
Es gibt im Netz zwei wichtige Adressen, wo man viele Komponenten und Links und ... findet.
Delphi Super Page (siehe auch Links, Links Database)
Torry's Delphi Pages
OnShow
Hmm, es ist ungewöhnlich, den obigen Beispiel-Code bei OnShow auszuführen. Dies würde jedesmal (!), wenn die Applikation nach dem Minimieren o.ä. angezeigt wird, ausgeführt. Besser ist es, das beim FormCreate auszuführen.
O Love
------------------
"I will not abide disobedience!"
TableScanner
So heißt erstmal das Tool, das ich meinte. Dieses habe ich aber nur auf Arbeit, und da komme ich erst am Montag ran. Im Netz konnte ich es heute nicht finden.
Was macht es? Man erstellt zuerst eine Tabelle mit dem Datenbank-Tool incl. aller Felder und Indezes. Danach scannt man mit dem Programm diese Tabelle(n) und erzeugt eine Unit, welche man in sein Projekt mit einbindet. Dann kann man mittels MakeAllTables die Tabellen erzeugen (oder reparieren).
Obiger Quelltext
Ja, wenn man das so macht, kann man tatsächlich die Tabelle nicht öffnen.
Abhilfe schafft Folgendes: Wirf (fast) alles weg, weise TableName (files.dbf) direkt an der Komponente zu, klicke auf die Ellipse bei FieldDefs der TTable im Objektinspektor und erzeuge dort zur Designzeit Deine 3 gewünschten Felder. Wenn Du nun den Quelltext ausführst, dann klappt es.
Ach ja, den Index kannst Du erst nach der erstellten Tabelle zuweisen.
Zugriff auf Felder
Er brachte mir eine Fehlermeldung, als ich zusätzlich zu den FieldDefs auch noch die Fields (Doppelklick, wie beschrieben) anlegen wollte. Ich weiß im Moment nicht, wieso.
Aber Du solltest mittels
Code:
tblMeineTabelle.FieldByName ('NAME').AsString := 'test';
Man sollte evtl. vorher testen, ob das Feld (ohne das .AsString) auch tatsächlich da ist, mache dies mittels
Code:
AField := tblMeineTabelle.FieldByName ('NAME');
if (Assigned (AField)) then
AField.AsString := 'test';
DatabaseName bei TTable
Normalerweise gibt man dort einen sogenannten BDE-Alias an. Mit Hilfe des BDE-Admins (Systemsteuerung) kann man einen Aliasnamen mit einem Verzeichnis zur Datenbank verbinden. Jetzt kann die Applikation über den Alias auf die Datenbank zugreifen, die sich immer woanders befinden kann. Man muß nur das Verzeichnis beim Alias ändern...
Tip: Wenn Du eine kleine Anwendung schreibst, dann erzeuge (wie in Deinem Beispiel) die Datenbank mit im gleichen Verzeichnis wie die EXE. Dann hast Du kein Problem beim Weitergeben des Programms, weil der Anwender keinen Alias anlegen muß.
Eine weitere Verwendung von DatabaseName liegt bei der Komponente TDatabase: Diese ist eine übergeordnete Komponente, mit welcher man die Verbindung zu Paradox, SQL o.ä. herstellen kann, und dort Nutzereinwahl etc. erforderlich wird. Diese Komponente bekommt einen Namen, welcher dann bei DatabaseName der TTable angegeben werden kann. Das kannst Du dann bei vielen Tabellen machen, damit ist über die TDatabase-Komponente der Zugriff auf alle diese Tabellen freigegeben.
Links
Es gibt im Netz zwei wichtige Adressen, wo man viele Komponenten und Links und ... findet.
Delphi Super Page (siehe auch Links, Links Database)
Torry's Delphi Pages
OnShow
Hmm, es ist ungewöhnlich, den obigen Beispiel-Code bei OnShow auszuführen. Dies würde jedesmal (!), wenn die Applikation nach dem Minimieren o.ä. angezeigt wird, ausgeführt. Besser ist es, das beim FormCreate auszuführen.
O Love
------------------
"I will not abide disobedience!"