Autor Beitrag
schueppenstiel
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 13.12.07 19:47 
Hallo zusammen!

Ich habe ein Problem, daß ich trotz langem Nachsinnens nicht lösen kann.
Mein Programm soll ZUR LAUFZEIT - nicht beim Compilieren - aus den in einer .pas-Datei definierten records
(stellvertretend für die Struktur der jeweiligen Datenbanktabelle) Typen generieren. Das bedeutet, daß ich die Datei, die zu diesem Zeitpunkt ja nur als 'simple' Textdatei interpretiert werden kann, nach bestimmten Strukturen durchsuche und mittels der dort vorgefundenen Definitionen, meine echten records kreiere. Den vorgefundenen Text will ich also auf Knopfdruck in dann im Speicher vorhandene Typen codieren.

Ich will damit vermeiden, daß ich das Programm, mit dem ich Recover-Operationen auf verschiedenen Datenbanken durchführe, jedes Mal neu compilieren muss, um die unterschiedlichen Strukturen der jeweiligen Tabellen bekannt zu machen.

Hat jemand eine Idee ?

Danke und Gruß
Robert
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 13.12.07 21:58 
Hi und :welcome: in der EE,

ich würde an das Problem anders herangehen. Um herauszubekommen was eine Tabelle für Felder hat und was für Typen die Felder haben brauchst du doch nur den Tabellenname, alles andere kannst du doch von der Tabelle abfragen.
Zudem ist es, ja auch nur nötig diese Informationen zu Wissen um Tabellen wieder anlegen zu können. Zum Füllen mit Daten die du aus der Tabelle gezogen hast sind diese nicht nötig.
Denn, solange du TDataset basierte Tabellen verwendest (in Delphi der Normalfall) hast du für jedes Feld das Property AsString als Möglichkeit jeden erdenklichen Wert als String auszulesen oder zu schreiben.
Also kannst du das ganze einfach in eine Textdatei schreiben und auch daraus wieder lesen.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
schueppenstiel Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 13.12.07 23:43 
Hallo und vielen Dank für Deine rasche Antwort!

Ich arbeite nicht mit den Zugriffskomponenten der VCL, sondern mit dynamisch generierten records, welche die Tabellenstruktur zugrunde legen. Die Schreib/-Leseoperationen realisiere ich nativ über die API der
Pervasive-Datenbank (früher Btrieve unter Novell).
Zur Verdeutlichung:
Das .pas.-file, daß die records enthält, wird nicht kompiliert, sondern zur Laufzeit als text-file verstanden, aus dem ich generisch die Typen aufbauen will.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Fr 14.12.07 10:53 
Interessant.
Aber die Datenbankschnittstelle muss doch auch die Möglichkeit bieten Informationen über die Felder der Tabellen abzufragen? Und Normalerweise gibt es auch immer eine Möglichkeit zum Lesen und Schreiben über Strings.
Falls du unbedingt Record definitionen verarbeiten willst, muss es unbedingt Pascal Quelltext sein? Tut es nicht auch eine wesentlich vereinfachte Texttuelle Definition die den aufbau eines Record beschreibt?
Das ganze Gebilde dann im Speicher anzulegen ist nicht das Problem. Sowas habe ich schon für meine eigene Programmiersprache realisiert.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
schueppenstiel Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 16.12.07 13:46 
Die .pas-Datei wird von meinem framework generiert. Daß das eine pas-Datei ist, spielt im Grunde allerdings keine Rolle, denn ich compiliere den darin befindlichen Code ja nicht.
Du schreibst, daß du schon interpretierenden Code geschrieben geschrieben hast. Das würde mich natürlich enorm interessieren.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: So 16.12.07 14:21 
Ja, wenn man es so sehen will habe mir selber eine Programmiersprache ausgedacht und einen Compiler dafür geschrieben.
Ausgeführt werden die Programme allerdings über einen Interpreter. Das ist nicht sehr schnell, aber für die einfachen Sachen die ich damit mal probieren wollte reicht es aus.

Dich würde an dem ganzen ja sicher nur interessieren wie man Typ oder Variablen Deklarationen vernünftig parsen kann.
Das ist wirklich ganz einfach.
Ich gehe mal davon aus das es eine bestimmte Menge von vordefinierten Typen gibt die ein Feld haben kann.
Ein Record ergibt sich dann ja nur aus einer Liste von Feldern, wobei jedes Feld einen bestimmten Typ hat.
Am besten ist, du bindest hier mal so einen generierten Quelltext ein. Und dann sehen wir weiter.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?