Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Speichern in Tabellenform (https://www.delphipraxis.net/183190-speichern-tabellenform.html)

Sir Rufo 19. Dez 2014 19:28

AW: Speichern in Tabellenform
 
Zitat:

Zitat von VkPenguin (Beitrag 1284109)
Danke erstmal für eure Antworten!

Datenbanken sind natürlich das offensichtliche, an das man zuerst denkt, aber die kann man im allgemeinen doch nicht außerhalb der Laufzeit des Programms einfach so öffnen wie eine Excel Datei und reinschreiben oder sehe ich das falsch?

Werde mich aber auf jeden Fall mal damit beschäftigen, dankesehr.

Du denkst darüber nach eine zweite Anwendung zu schreiben, die die Daten verwalten soll und jetzt störst du dich an was?

Du musst eine Anwendung öffnen um die Daten zu bearbeiten ... ja und bei Excel ist das anders?
Selbst bei einer Textdatei musst du eine Anwendung starten.

Oder stört dich die fehlende Automatik (Doppelklick auf die Datei)? ... Das kann man Windows beibringen.

Es gibt auch Anwendungen, die eine SQlite-Datenbank öffnen können.

BUG 19. Dez 2014 20:02

AW: Speichern in Tabellenform
 
Zitat:

Zitat von Sir Rufo (Beitrag 1284149)
Es gibt auch Anwendungen, die eine SQlite-Datenbank öffnen können.

Das ist ein wichtiger Punkt: Für Datenbanken gibt es schon mächtige Tools, mit denen man arbeiten kann.
Neben dem Ansehen und Editieren von Tabellen kannst du natürlich auch adhoc-Anfragen auswerten. Import/Export in verschiedene Formate sollte auch kein Problem sein.

Für SQLite kann man z.B. einfach ein Firefox-Addon benutzen. Oder eben eines der Bei Google suchenvielen anderen fertigen Tools.

humbuck 19. Dez 2014 20:13

AW: Speichern in Tabellenform
 
Zitat:

Zitat von VkPenguin (Beitrag 1284109)
Meine Idee ist nun, ein seperates Programm zu schreiben, dass nur eine große editierbare Stringgrid anzeigt, also quasi ein Pseudo-Excel. Dann könnte ich die Dateien normal abspeichern und hätte über das Zweitprogramm zugriff auf die Daten.

Also, ich weiß ja nicht, wie viel dir deine Zeit wert ist, aber ein solches Programm kannst du bei mir als lizensierte Version käuflich für 99 EUR erwerben.

Features u.a.
1)Zugriff und direkte Bearbeitung auf viele SQL-Server, Access, Excel
2)SQL-Basierende Datenmengen mit der Möglichkeit, diese direkt zu bearbeiten / manipulieren
3)Filter-, Such- u. Sortierfunktionen
4)Benutzerverwaltung: Sicherheit und Rechtevergabe auf Benutzerebene
5)Speicherbare unterschiedliche Datenquellen mit zugehörigen Datenmengen und wiederum zugehörigen Reports
6)Export in div. Formate: Excel, Open Office, PDF, XML, HTML u.a.
7)Direkter Mailversand auch als Serienmail (optional)
8)Generieren von eigenen Datenquellen (optional)
9)Programmierbar mit Zugriff auf alle Programmmodule (optional)

Interessiert?

humbuck 19. Dez 2014 20:17

AW: Speichern in Tabellenform
 
Ach ja, noch was:

netzwerktauglich...

pelzig 20. Dez 2014 00:25

AW: Speichern in Tabellenform
 
CSV. Alle Werte als "Wert" in Gänsefüßchen und als Seperator "|" nehmen.

Abgesehen von Excel sollte jedes in der DP "empfohlene" Datenbankprogramm diese Gänsefüßchen erkennen!

Oder erkennt kein Datenfurzimportprogramm "|" den Seperator? Außer Excel?


MfG

Sir Rufo 20. Dez 2014 06:52

AW: Speichern in Tabellenform
 
Hört sich ein wenig nach Voodoo an. Muss man vorher irgendwie noch einen Hahn opfern und nackt (bis auf die Federn vom Hahn) durchs Feuer springen?

Oder reicht es, wenn man sich an die Vereinbarung mit dem Zielsystem hält, welche Strukturzeichen-Kombinationen dort berücksichtigt werden? Teilweise zugegeben nicht offensichtlich aber doch lösbar, allerdings mit Logik und ohne Voodoo.

VkPenguin 21. Dez 2014 19:27

AW: Speichern in Tabellenform
 
Vielen Dank nochmals für Eure Tipps. Ich habe mir die verschiedenen Möglichkeiten mal angesehen und glaube, dass sich TClientDataSet ganz gut eignet. Dazu habe ich mir dann einige Tutorials und Beispiele angesehen und ein kleines Testprogramm zusammengetippt.

Noch drei Fragen dazu:
1. Der Datentyp einer Spalte ist immer gleich, oder? Er kann also nicht z.b. ab der fünften Spalte geändert werden?
2. Speichert man dann Records, indem man den Record in seine Bestandteile aufteilt? Oder sollte man da mit Blob arbeiten?
3. Ist diese Vorgehensweise richtig, um ein bestimmtes Feld zu editieren, oder ginge es (etwa DB[5,2]:='test') auch einfacher?

Delphi-Quellcode:
DB.Locate('id',2,[]);
DB.Edit;
DB['person']:= 'person2';
DB.Post;

humbuck 21. Dez 2014 19:31

AW: Speichern in Tabellenform
 
Du solltest mein Angebot annehmen...

Perlsau 21. Dez 2014 19:42

AW: Speichern in Tabellenform
 
1. Ja, der Datentyp einer Spalte (=Feld) bleibt stets erhalten.

2. Wenn du in deiner Anwendung einen Recordtyp als Array festgelegt hast, dessen Inhalte du in eine Tabelle speichern möchtest, ist es erforderlich, daß die Record-Felder in der Tabelle sozusagen gespiegelt werden:
Delphi-Quellcode:
type
  MyRecord = Record
    Name : String;
    Vorname : String;
    Strasse : String;
    PLZ : String;
    Ort : String;
    Geburtsdatum : TDate;
  End;

var
  Adressen : Array of Record;
Im Grunde benötigst du den Record aber gar nicht, wenn du direkt mit der Tabelle arbeitest.

Zitat:

Zitat von VkPenguin (Beitrag 1284312)
3. Ist diese Vorgehensweise richtig, um ein bestimmtes Feld zu editieren, oder ginge es (etwa DB[5,2]:='test') auch einfacher?
Delphi-Quellcode:
DB.Locate('id',2,[]);
DB.Edit;
DB['person']:= 'person2';
DB.Post;

Locate ist eine Funktion und liefert True zurück, wenn der gesuchte Eintrag gefunden und lokalisiert wurde. In deinem Beispiel wertest du den Rückgabewert der Funktion nicht aus und kannst daher nicht sicher sein, ob der Eintrag mit der Id=2 auch selektiert wurde, bevor du in diesem Record einen Feldwert änderst:

Delphi-Quellcode:
if DB.Locate('id',2,[]) Then
Begin
  DB.Edit;
  DB.FieldByName('person').AsString := 'person2';
  DB.Post;
End Else
Begin
  DB.Append;
  DB.FieldByName('person').AsString := 'person2';
  DB.FieldByName('id').AsInteger := 2;
  DB.Post;
End;
DB ist vermutlich dein CustomDataSet oder MemoryDataSet. Schau dir doch einmal die Hilfe zu Datasets an, das könnte sehr nützlich sein. Und laß dich nicht verwirren: In Datenbanken bezeichnet der Ausdruck Record einen Eintrag in einer Tabelle, tabellarisch gesehen wäre das dann eine Zeile. Eine Spalte in einer Tabelle ist ein Feld.

VkPenguin 21. Dez 2014 19:54

AW: Speichern in Tabellenform
 
@Humbock: vielen Dank für Dein Angebot, aber ich möchte selbst lernen, damit umzugehen.
@Perlsau: Danke Dir, 1. und 3. sind damit klar. Was ich jedoch nicht ganz verstanden habe ist 2.
Zitat:

Wenn du in deiner Anwendung einen Recordtyp als Array festgelegt hast, dessen Inhalte du in eine Tabelle speichern möchtest, ist es erforderlich, daß die Record-Felder in der Tabelle sozusagen gespiegelt werden
Ich habe in der Anwendung, für die ich die Datenbank später brauche bereits Records. Meine Frage ist nur, soll ich nun einen Record wie beispielsweise

Delphi-Quellcode:
type RPerson=Record
Name:String;
ID:Integer
End;

Personen:Array of RPerson
mithilfe zweier Spalten "Name" und "ID" speichern, oder gibt es da noch etwas geschickteres?

*Edit*: Gerade, wenn man bedenkt, dass es in meinem Programm etwa 10 Recordtypen gibt, die als Basis von Arrays unterschiedlichste Daten beinhalten, wird das doch recht unübersichtlich, oder nicht? Sollte man dann mit unterschiedlichen Datasets arbeiten? Aber die müssten dann doch auch zusammengeführt werden, um alles am Ende in einer Datei speichern zu können...? Oder habe ich da was falsch verstanden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.
Seite 2 von 4     12 34      

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