Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Nachschlagetabelle (in Resource?) mitliefern (https://www.delphipraxis.net/196741-nachschlagetabelle-resource-mitliefern.html)

berens 14. Jun 2018 19:40

Datenbank: - • Version: - • Zugriff über: -

Nachschlagetabelle (in Resource?) mitliefern
 
Hallo!
Da mein Programm eigentlich keinen Internetzugriff erfordert, und es je nach Kunde unterschiedlich kompliziert ist ins Internet zu kommen, würde ich auch gerne weiterhin darauf verzichten.

Für ein Feature muss ich die Längen-/Breitegrade einer beliebigen Stadt in Deutschland nachschlagen, kann das aber deshalb nicht über einen "Webservice" online tun. Ich habe hier auf meinem PC eine Excel-Tabelle, in der alle notwendigen Informationen sind (Stadtname, Längengrad, Breitengrad, ...). Das Dateiformat kann ich ja beliebig ändern (exportieren).

Frage:
Gibt es in Delphi (2010) eine Möglichkeit, die Tabelle direkt mit/in der .exe auszuliefern?

Ich denke da (grafisch gesprochen) an sowas wie das DB-Grid, in das ich einfach zur Entwicklungszeit diese komplette Tabelle hineinlade. Geht so natürlich nicht in Wirklichkeit. Oder doch irgendwie? Kann man z.B. notfalls den Inhalt von einem TAdoDataset oder so aus einer Resource laden (z.B. die Tabelle als .csv-Datei aus einer Resource?).

Was wäre eine professionelle Alternative?
Wahrscheinlich die Tabelle als eigenständige (dateibasierte) Datenbank mitliefern? Welches Format/System, das keinen großen Overhead hat? Wie über Delphi einbinden?

Vorab vielen Dank!


P.S.: Es sollte unnötig sein zu erwähnen, dass die Daten nur gelesen, aber niemals geschrieben werden sollen...

KodeZwerg 14. Jun 2018 19:58

AW: Nachschlagetabelle (in Resource?) mitliefern
 
Du kannst Daten jeglicher Art als Resource einbinden.
Beim Starten diese Resource in ein Temp Ordner schreiben.
Von da wie gewohnt drauf zugreifen.
Beim beenden die temp Datei löschen.
Voila.


Habe Dein PS überlesen, sorry!

TigerLilly 14. Jun 2018 20:20

AW: Nachschlagetabelle (in Resource?) mitliefern
 
Warum lieferst du die Tabelle nicht gemeinsam mit deinem Programm aus? Verschlüsselt, wenn das notwendig notwendig ist.


Aber natürlich kannst du die Daten auch ins Programm einbinden. Nimm zB ein TMemo, kopiere deine XLS als CSV da hinein. Wobei ich das jetzt nicht sooo elegant fände.

Schokohase 14. Jun 2018 20:37

AW: Nachschlagetabelle (in Resource?) mitliefern
 
Daten in ein ClientDataSet schreiben, als Datei speichern, diese Datei als Resource aufnehmen.

Im Programm selber die Daten als Stream aus der Resource und per Delphi-Referenz durchsuchenTClientDataSet.LoadFromStream hat man die wieder zur Verfügung.

berens 14. Jun 2018 20:41

AW: Nachschlagetabelle (in Resource?) mitliefern
 
Ich habe gerade festgestellt, dass die Tabelle Original im TSV-Format (Tab-Separiert) vorliegt.

Bevor ich jetzt mit irgendwelchen Komponenten und Datenbankformaten anfange zu handtieren:

Durch das TSV-Format kann ich die Tabelle Zeilenweise super parsen. Da die Benutzer ja nach einem Stadtnamen oder PLZ suchen, kann ich mit "for i" und "Pos()" mit schnell die notwendigen Zeilen suchen, und die verbliebenen, wenigen Kandidaten dann im Detail parsen (d.h. jeden -durch "Tab" getrennten- Wert in das passende Feld eines Records schreiben) und dann auswerten, bzw. dem Benutzer aufbereitet auflisten.

Die ~250kb Textdatei kann ich nun tatsächlich entweder direkt (z.B. in einem unsichtbaren Memo) im Formular speicher, in einer Resource, oder -wahrscheinlicher- liefere ich sie als Textdatei direkt mit dem nächsten Update aus, dann bleiben die .exen etwas schmaler, falls ich die Funktion doch später in mehreren Programmteilen benötige.

Allen Antwortern vielen Dank, Thema erfolgreich beendet. :thumb:


@Schokohase: leider erst nach Schreiben meiner Antwort eben eingetroffen. Das wäre tatsächlich die wahrscheinliche Lösung, wenn die Daten ein wenig größer/komplizierter wären. Danke!

himitsu 15. Jun 2018 09:52

AW: Nachschlagetabelle (in Resource?) mitliefern
 
Direkt in die EXE/Ressource?

Du kannst praktische alles als Ressource in deine Anwendung einfügen, entweder über die IDE oder über eine *.RC (in die DPR eingebunden, kann Delphi daraus automatisch eine RES machen), bzw. eine selbstkompilierte *.RES

Und dann hast du entweder sowas wie LoadFromRessource zu Verfügung, oder LoadFromStream mit TRessourceStream dazwischen.



DFM ist zwar auch nur eine Ressource, aber sowas macht man doch nicht ... wenn schon, dann richtig.
Die DFM/Form im Formdesigner und in der laufenden Anwendung unnötig aufzublähen ist selten eine gute Idee.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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