![]() |
Textdatei als Datenbank nutzen
Hallo,
ich bin gerade dabei, ein kleines Abfragetool zu erstellen, in dem Auswahlkriterien in einer Datenbank abgelegt werden müssen. Das Endprodukt soll weitergegeben werden, und ich möchte auf die BDE verzichten. Da das Produkt kostenlos sein wird, möchte ich natürlich auf die Lizenzierung einer DB verzichten. Nun stellt sich natürlich die Frage, auf welcher Basis ich die Datenbank anlegen kann. Bislang habe ich nur XML ausfindig machen können, aber ich habe noch keine "seniorentaugliche" Möglichkeit gefunden, mein Vorhaben mit XML umzusetzen. Kennt jemand eine wirklich deppensichere Anleitung dazu, die möglichst schnell umsetzbar wäre (oder eine Komponente, die ich einsetzen könnte)? Oder: Kann mir jemand einen Tipp geben, wie ich die Datenbank sonst noch anlegen könnte? Ich habe bisher viel in PHP programmiert, und da habe ich mal ein Script gesehen, welches es ermöglichte, eine CSV-Datei mit SQL-Anweisungen anzusprechen. Gibt es sowas auch für Delphi (ich habe bislang nichts finden können)? Danke Opa |
Re: Textdatei als Datenbank nutzen
Hallo Opa Knack,
trage doch einmal deine Delphi Version in dein Profil ein. Ich nehme an, dass du Datenbank Support in Delphi hast (Professional Version oder höher). In diesem Fall könnte myBase etwas für dich sein. Basiert wahlweise auf XML oder einem internen Binärformat. Ein ![]() |
Re: Textdatei als Datenbank nutzen
Zitat:
Die BDE darf übrigens kostenlos mit Deiner Anwendung weitergegeben werden (nur wegen der Lizensieung). Hier ist eine Seite mit Infos über Alternativen zur BDE (einige davon sind auch kostenlos). ![]() Klicke auf "the List" um eine Liste aller auf dieser Seite besprochenen Alternativen zu bekommen. Die Liste ist leider nicht sehr aktuell und selbstverständlich NICHT vollständig. Von Textdateien würde ich Dir abraten. (Ich habe damit schlechte Erfahrungen gemacht.) Ich würde Dir zu kbMemTable raten. Das ist ein TDataset Abkömmling, der die Daten nur im Speicher vorhällt. Es gibt aber die Möglichkeit die Daten abzuspeichern. (mehrere Formate und eigene Schnittstelle den Stream z.B. zu komprimieren) [equote=" ![]() Simply the best Open Source, InfoWare in memory table for Delphi and BCB. The software is free and includes full source.[/equote] |
Re: Textdatei als Datenbank nutzen
Also ich habe einfach mit einer Textdatei gearbeitet,
Schau dir doch mal die DVD Datenbank auf meiner Homepage an, da habe ich als DB Datei eine TXT gewählt, war nur ein Text also nicht ernstnehmen das Programm. ![]() |
Re: Textdatei als Datenbank nutzen
Zitat:
Das Format der Textdatei kann übrigens über eine Schema-Datei (*.sch) Datei vorgegeben werden. Es sind unter anderem Fixed Format, Variable Format, verschiedene Feldtypen, ... möglich Aber es kann kein Index verwendet werden und es ist nur ein Anhängen von Daten möglich. (Neue Daten werden also nur hinten an geschrieben) In Delphi 1 und Delphi 2 war noch eine sehr ausführliche Beschreibung dieser Funktionalität in Form einer Text Datei beigelegt. In den neueren Versionen funktioniert das zwar immer noch, aber ich habe die Beschreibung noch nicht gefunden. |
Re: Textdatei als Datenbank nutzen
Hallo,
Danke schon mal für die Antworten. Ich habe mir jetzt erst einmal die typisierten Dateien angeschaut, die mich irgendwie an meine C64-Zeiten (sequentielle Dateien) erinnern. Damit kann man schon etwas umsetzen. Nur frage ich mich, ob das wirklich effektiv genug ist und wie "sicher" der Datenbestand ist. Das Problem ist, dass zwar nicht viele Daten abgelegt werden müssen, dass diese aber mehr oder weniger geschäftskritisch sind und somit ein Grundmaß an Sicherheit gegeben sein sollte (in Bezug auf fehlerhaften Umgang mit der DB-Datei, ...). Somit komme ich auf XML und zu meiner nächsten Frage: Gibt es eine relativ einfache Möglichkeit oder ein verständliches Tutorial, mit dem selbst prähistorische Tastenquäler wie ich klar kommen könnten? Oder eine vorgefertigte Komponente, die auf diesen Zweck abzielt? Und gehe ich recht in der Annahme, dass die XML-Variante durch ihren systematischen Aufbau sicherer und einfacher zu handeln ist als typisierte Dateien? Danke Opa |
Re: Textdatei als Datenbank nutzen
Zitat:
Mr. Spock gab Dir ja schon den Link auf das Tutorial. Zitat:
Delphi-Quellcode:
ClientDataSet1.SaveToFile('c:\temp\opa.xml', dfXML);
|
Re: Textdatei als Datenbank nutzen
Damit man sich das Mapping zwischen Objeken und der Datei sparen kann werfe ich mal
![]() |
Re: Textdatei als Datenbank nutzen
Hallo Opa Knack,
typisierte Dateien sind auch eine gute Lösung. Ich habe über Jahre hinweg mit typisierten Dateien gearbeitet und nie Probleme mit Datenverlusten gehabt. Natürlich ist eine tägliche Datensicherung Pflicht bei geschäftskritischen Daten! |
Re: Textdatei als Datenbank nutzen
Zitat:
Außerdem kannst du keine alten Daten laden, wenn du den Record zwischendurch erweitert hast. File of [Datentyp] halte ich generell für die schlechteste Persistenzlösung. ;) |
Re: Textdatei als Datenbank nutzen
Hallo Robert,
es spricht absolut nicht dagegen mit Records zu arbeiten. Man kann ja eine Klasse schreiben, die einige nützliche Funktionen auf diesen Records kapselt. Wenn du mit Datenbanken arbeitest, bekommst du ja die Daten auch in einer Datenmenge, die keine Klasse ist, sondern du musst die Daten erst noch verarbeiten, bis du sie weiterverwenden kannst. Eine Erweiterung ist auch kein großes Problem. Ein Konvertieren der Daten sollte bei kleinen Änderungen in wenigen Minuten programmiert sein. Natürlich halte ich Datenbanken für besser geeignet, aber typisierte Dateien sind aus meiner Sicht keine schlechte Lösung, wenn man keine DBs will. |
AW: Textdatei als Datenbank nutzen
Hallo,
ich hänge mich einfach mal an diesen alten Post ran, da es bei mir um was ähnliches geht. Ich bin ein Delphi Anfänger. Nun wollte ich ein Programm schreiben, in welchem eine Art Rezept erstellt wird. Es gibt bestimmte Zutaten mit verschiedenen eigenschaften. zB.: Eier : 100% Protein, xx% Fett usw... Diese Daten würde ich gerne in einer .txt Datei oder so ähnlich gespeichert haben. In dem Programm stehen die verschiedenen möglichen Zutaten und man muss dort die Menge eingeben. Wenn man das für alle Zutaten gemacht hat klickt man auf einen button und bekommt eine Ausgabe mit dem gesamt Proteingehalt, gesamt Fettgehalt usw. das ist der Grundgedanke. Nunweiß ich jedoch nicht, wie ich diese txt Datei (oder ähnliches) in das programm einbinde etc. Kann mir da evtl jemand behilflich sein? Grüße Ulf |
AW: Textdatei als Datenbank nutzen
Das Dateiformat wird in der Regel CSV sein. Entgegen des Namens benutzt man meistens Semikolons zur Trennung. Auch Excel tut das.
Hier ein paar sehr einfache Funktionen aus meinen Projekten, mit Sicherheit verbesserungsfähig aber sie sollten dir helfen. Einen Typ für ein dynamisches zweidimensionales Array erstellen, macht Zuweisungen einfach:
Delphi-Quellcode:
Eine Funktion zum Auslesen der CSV-Daten einer TStringList (Fields = Anzahl der Spalten).
type TString2D = array of array of string;
Database: TStrings2D;
Delphi-Quellcode:
Anschließend kann man auf die Strings zugreifen:
procedure InitDatabase();
function CSVToArray(Input: TStrings; Fields: Integer): TString2D; var i, j, k, l: Integer; s: string; begin i := Input.Count; SetLength(Result, i); j := 0; repeat s := Input.Strings[0]; l := 0; SetLength(Result[j], Fields); for k := 1 to Length(s) do if s[k] = ';' then inc(l) else Result[j][l] := Result[j][l] + s[k]; inc(j); Input.Delete(0); dec(i); if i = 1 then s := ''; until i = 0; end; var sl: TStringList; begin sl := TStringList.Create; try sl.LoadFromFile('database.csv'); Database := CSVToArray(sl, 42); // 42 ändern zur Anzahl der maximal genutzten Spalten finally sl.Free; end; end;
Delphi-Quellcode:
(erste Spalte des zweiten Datensatzes)
Database[1][0]
Wichtig ist, dass es zunächst mal alles Strings sind, man sie also ggf. in Zahlen umwandeln muss, um damit zu rechnen. Die Funktion unterstützt keine Quantifiers, sprich du solltest keine Semikolons in deinen Einträgen verwenden. |
AW: Textdatei als Datenbank nutzen
Man könnte auch ein CSVDataSet verwenden oder noch besser ein (embedded) DBMS.
|
AW: Textdatei als Datenbank nutzen
FdMemTable ?
|
AW: Textdatei als Datenbank nutzen
Zitat:
Soll direkt auf die Textdatei zugegriffen werden, wären Datensätze mit fixer Satzlänge meine erste Wahl. Willst Du eine interne Struktur (z.B. TList) mit Daten füllen, ist CSV keine schlechte Wahl. Was das Einbinden angeht, kommt es auf die konkreten Anforderungen an. Gruß K-H |
AW: Textdatei als Datenbank nutzen
Zitat:
Zitat:
Für komplexere Anwendungsfälle zum Speichern gerne ein DBMS. CSV wird aber auch extrem gerne als Datenaustauschformat verwendet, z.B. für Schnittstellen oder Migrationen. |
AW: Textdatei als Datenbank nutzen
Moin...:P
Zitat:
Zitat:
Meine Daumenregel: TXT/CSV/XML als Datenaustauschformat ist in Ordnung wenn die Daten nur readonly sind. Alles Andere gehört in ein DBMS. :thumb: Wie es die Andreren schon bemerkten: Zitat:
Zitat:
Empfehlung für ein DBMS: Firebird: ![]() ![]() Firebird Vorteile: * minimaler Installationsaufwand (ca. 10 Minuten) * Ein Datenbankfile. * Das Datenbankfile kann man z.b. auf einen USB Stick kopieren und wieder zurück. * Wechsel zwischen Multiuser und Einzelplatz ohne Aufwand möglich. Datenzugriff * Zeos: ![]() * Tutorial: ![]() Admin Tool * IBExpert Personal: ![]() Datenbank Tutorial * ! es geht nur ums Prinzip. :wink: ![]() Zitat:
Stichworte: ![]() ![]() ..jetzt hast du mal Brot. :thumb: |
AW: Textdatei als Datenbank nutzen
@haentschman
Ich vermute, er scheut den "Aufwand" für eine DB, und leider hast Du die notwendigen Komponenten für den DB-Zugriff erst ab Prof. an Bord. Da schreckt man schon mal gerne zurück. Gruß K-H P.S. Gerade gesehen, er hat ja die prof Version, da sollte es ja gut gehen. |
AW: Textdatei als Datenbank nutzen
Danke FAlter für den Hinweis mit CommaText und DelimitedText.
|
AW: Textdatei als Datenbank nutzen
Zitat:
![]() Das ist ein einfacher Classhelper um CSV Dateien mit einem TClientDataset Lesen / Schreiben zu können. Das habe ich dort auch mit 2 TStringList gemacht. ;-)
Delphi-Quellcode:
Das habe ich vor über 6 Jahren gemacht um leicht auf meine Logfiles zugreifen zu können.
...
// folgender Quelltext ist nur im Editor der DP geschrieben, nicht getestet ;) slFile := TStringList.Create; slRow := TStringList.Create; try slRow.Delimiter := ';'; slRow.QuoteChar := '"'; slRow.StrictDelimiter := True; slFile.LoadFromFile('C:\TEMP\TEST.CSV'); for i := 0 to slFile.Count - 1 do begin slRow.DelimitedText := slFile[i]; for j := 0 to slRow.Count - 1 do begin myArray[i,j] := slRow[j]; end; end; finally slFile.Free; slRow.Free; end; ... Für die CodeLib hab ich dann noch das Schreiben implementiert. Das Ganze dient aber auch als nettes Beispiel für einen ClassHelper :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 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-2025 by Thomas Breitkreuz