AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Einfache Tabelle mit TClientDataSet
Thema durchsuchen
Ansicht
Themen-Optionen

Einfache Tabelle mit TClientDataSet

Ein Thema von DualCoreCpu · begonnen am 12. Jan 2019 · letzter Beitrag vom 13. Jan 2019
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#1

AW: Einfache Tabelle mit TClientDataSet

  Alt 12. Jan 2019, 09:48
Die Spalten im Grid verweisen auf die Felder "Medium", "Autor" und "Titel", aber die eigentlichen Feldnamen sind "mediakind" bzw. "media", "author" und "title".
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#2

AW: Einfache Tabelle mit TClientDataSet

  Alt 12. Jan 2019, 17:57
@Uwe Raabe:

Ich wollte einen Displaynamen für die Spalten verwenden. Habe das aber korrigiert im Objektinspektor. Vorher Kontextmenü von DBGrid aufgerufen, dort den Spalteneditor. Dort habe ich 3 Spalten angelegt, mit Feldname(n) gemäß denen in meiner Datenbaktabelle. Dann gibt es da in DBGrid.Columns[Index] die Eigenschaft Feldname, der ich den Feldnamen meiner Dantenbanktabelle bergeben habe und eine Eigenschaft Title vom Typ TColumnTitle. Dort gibt es die Eigenschaft Caption, die ich mit der von mir gewünschten Spaltenüberschrift gefüllt habe.

@newIndy:

Danke für den Tipp. Geschwindigkeit optimiere ich später. Jetzt ist erst mal XML Format Ok. Kann man dies später in ein beliebiges anderes Datenformat umwandeln (Firebird, Acess, Paradox, ...), gibt es da Tools?

Die Dateneingabe funktionierte zwar zunächst immer noch nicht. Hatte mit dem Spalteneditor von DBGrid 3 Spalten angelegt, mit Feldname einer derjenigen in meiner Datentabelle und DBGrid.Column[Index].Title.Caption meine von mir gewünschte Spaltenüberschrift. Wenn ich das nutze, funktioniert die Dateneingabe nicht, wenn ich keine Spalten mit dem Spalteneditor von DBGrid anlege, funktioniert die Dateneingabe. Warum das?

Ich kann jetzt endlich Daten in meine Tabelle eingeben.

Geändert von DualCoreCpu (12. Jan 2019 um 20:06 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#3

AW: Einfache Tabelle mit TClientDataSet

  Alt 12. Jan 2019, 19:53
Lass bitte zuerstmal jede Konfiguration im DBGrid weg, damit es die Chance hat die Tabelle, so wie sie ist, anzuzeigen.

Wenn das dann mal geht, kannst Du die Optik immernoch verschönern.

Du hast doch auch 'nen DBNavigator auf dem Formular.
Sind bei dem irgendwelche Buttons beim Programmstart aktiviert oder sind welche ausgegraut / deaktiviert.
Kannst Du das mal beschreiben oder 'nen Scrennshot anhängen?


Zuerst: Datenbank / ClientDataSet öffnen.

Geht das?

Dann die Daten anzeigen.

Geht das?

Dann Daten eingeben, verändern, speichern?

Geht das?

Dann um die Optik kümmern.

Was hilft es, wenn ich beim Hausbau zuerst eine schöne Fassade habe, aber Fenster zum Rausgucken und die Türe zum Reingehen vergessen wurde?
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#4

AW: Einfache Tabelle mit TClientDataSet

  Alt 12. Jan 2019, 20:28
Lass bitte zuerstmal jede Konfiguration im DBGrid weg, damit es die Chance hat die Tabelle, so wie sie ist, anzuzeigen.

Wenn das dann mal geht, kannst Du die Optik immernoch verschönern.

Du hast doch auch 'nen DBNavigator auf dem Formular.
Sind bei dem irgendwelche Buttons beim Programmstart aktiviert oder sind welche ausgegraut / deaktiviert.
Kannst Du das mal beschreiben oder 'nen Scrennshot anhängen?


Zuerst: Datenbank / ClientDataSet öffnen.

Geht das?
Ja.

Dann die Daten anzeigen.

Geht das?
Ja, außer dem zuletzt eingegebenen Satz. Muss dann übernehmen auslösen, um dies zu vermeiden.

Dann Daten eingeben, verändern, speichern?

Geht das?
Ja. Allerdings Übernehmen klappt, aber Update Aktualisieren nicht. Der Button des DBNavigators ist standardmäßig allerdings auch nicht ausgewählt, ich hab ihn aber probeweise mal aktiviert. Nur Übernehmen klappt, Aktualisieren aber nicht mit dem standardmäßig nicht angezeigten Button. Eingeben von Daten, diese Verändern und dann Übernehmen klappt dann, ich kann die eingegebenen Daten dann auch nach Neustart meiner Anwendung anzeigen. Habe diesen Button Update Aktualisieren (im OI nbApplyUpdates) wieder deaktiviert. Mit Übernehmen (im OI nbPost) erreiche ich ja mein Ziel.


Dann um die Optik kümmern.

Was hilft es, wenn ich beim Hausbau zuerst eine schöne Fassade habe, aber Fenster zum Rausgucken und die Türe zum Reingehen vergessen wurde?
Auch wahr.

Hier mein Screenshot:
https://1drv.ms/f/s!Akh20VYLxLoYg0RqLA005iRYqCWz

Allerdings klappt das Eingeben, Verändern und Löschen von Daten nur Interaktiv, aber nicht mit newIndys Quellcode.

Geändert von DualCoreCpu (12. Jan 2019 um 21:03 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#5

AW: Einfache Tabelle mit TClientDataSet

  Alt 12. Jan 2019, 21:31
Der DBNavigator sieht so ok aus.

Der Haken und des X bzw. der Pfeil rechts sind nur aktiv, wenn es Änderungen gab.

Der Haken, um eine im Grid gemachte Änderung zu speichern, das X, um sie zu verwerfen. Rechts der Kringelpfeil kann genutzt werden, um 'ne Datenmenge neu zu laden. (Ist hier aber wohl nicht wirklich sinnvoll einzusetzen.)

Bevor wir uns darum kümmern, ob newIndys Quelltext funktioniert oder nicht, zuerst mal die Frage:

Willst Du die Daten programmatisch in Deine Datenbank schreiben oder soll die Eingabe händisch (via Grid oder Eingabefelder) erfolgen?

Wenn die Daten nur in der Oberfläche erfasst werden sollen, dann ist der Quelltext nicht erforderlich.

Das Speichern von Änderung funktioniert übrigens gewöhlich auch durch das Scrollen im Grid, 'ne Zeile vor, 'ne Zeile zurück mit den Cursortasten. Der letzte Satz wird also gespeichert, wenn man 'ne Zeile nach oben geht. Klar geht auch alles per Maus und DBNavigator. Verwerfen einer Eingabe geht auch per ESC-Taste.

Achso: Wenn sowas, wie newIndys Quelltext sinnvoll eingesetzt werden soll.
Hast Du die Daten schon irgendwie vorliegen, wenn ja, wie?
Oder willst Du sie irgendwie programmatisch von Tonträgern, aus MP3-Dateien ... einlesen?
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#6

AW: Einfache Tabelle mit TClientDataSet

  Alt 13. Jan 2019, 08:28
Der DBNavigator sieht so ok aus.

Der Haken und des X bzw. der Pfeil rechts sind nur aktiv, wenn es Änderungen gab.

Der Haken, um eine im Grid gemachte Änderung zu speichern, das X, um sie zu verwerfen. Rechts der Kringelpfeil kann genutzt werden, um 'ne Datenmenge neu zu laden. (Ist hier aber wohl nicht wirklich sinnvoll einzusetzen.)
Alles klar, danke!

Willst Du die Daten programmatisch in Deine Datenbank schreiben oder soll die Eingabe händisch (via Grid oder Eingabefelder) erfolgen?
Händisch über DBGrid oder Eigabefelder. Die programmatische Eingabe könnte aner später interessant werden, wenn ich Daten kopieren will.

Außerdem hätte ich gerne eine Anwendung, die mir die Erstellung einer Datenbanktabelle auch dann ermöglicht, wenn ich keine Serververbindung habe. Firebird-Explorer aber verlangt zuerst eine Verbindung mit dem Server, bevor ich beginnen kann. Der Menüpunkt Create Table ist dort solange noch keine Verbindung besteht, ausgegraut. Dann brauche ich allerdings für Firebird, Interbase und Co. ein Konvertierungstool von XML nach FDB.

Wenn die Daten nur in der Oberfläche erfasst werden sollen, dann ist der Quelltext nicht erforderlich.
Ist verstanden. Trotzdem wundert mich, das die Daten so nicht übernommen werden, ich hätte erwartet, die Namen meiner Felder noch mal in meinem Datensatz angezeigt zu sehen.

Das Speichern von Änderung funktioniert übrigens gewöhlich auch durch das Scrollen im Grid, 'ne Zeile vor, 'ne Zeile zurück mit den Cursortasten. Der letzte Satz wird also gespeichert, wenn man 'ne Zeile nach oben geht. Klar geht auch alles per Maus und DBNavigator. Verwerfen einer Eingabe geht auch per ESC-Taste.
Ok, verstanden.

Achso: Wenn sowas, wie newIndys Quelltext sinnvoll eingesetzt werden soll.
Hast Du die Daten schon irgendwie vorliegen, wenn ja, wie?
Oder willst Du sie irgendwie programmatisch von Tonträgern, aus MP3-Dateien ... einlesen?
Nein, habe ich nicht, ich gebe alles über mein DBGrid ein. Hätte gemäß dem Quelltext aber erwartet, dass ich meine Feldnamen in meiner Datentabelle angezeigt bekomme.

Delphi-Quellcode:
ClientDataSet1.Append;
ClientDataSet1.FieldByName('media').AsString := 'media';
ClientDataSet1.FieldByName('author').AsString := 'author';
ClientDataSet1.FieldByName('title').AsString := 'title';
if ClientDataSet1.State in [dsEdit, dsInsert] then ClientDataSet1.Post;
An das Feld media wird der String 'media' zugewiesen, an das Feld author der String 'author', an das Feld title der String 'title'. Diese Strings sollte ich doch dann in meiner Tabelle sehen?

Die Felder werden doch so hier angelegt:

Delphi-Quellcode:
    with ClientDataSet1.FieldDefs do begin
      Clear;
      Add('media', ftString, 3);
      Add('author', ftString, 30);
      Add('title', ftString, 40);
    end;
    ClientDataSet1.CreateDataSet;
Oder interaktiv im Designer zur Entwurfszeit.

Geändert von DualCoreCpu (13. Jan 2019 um 08:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#7

AW: Einfache Tabelle mit TClientDataSet

  Alt 12. Jan 2019, 23:07
Ich wollte einen Displaynamen für die Spalten verwenden.
Dazu kannst du entweder bei jedem Feld das Property DisplayLabel setzen oder direkt im Grid bei der Column das Property Title.Caption. Der erste Ansatz ist in der Regel vorzuziehen, weil man damit auch die automatische Spalten-Erzeugung im Grid verwenden kann, wenn keine Columns angelegt sind.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DualCoreCpu
(Gast)

n/a Beiträge
 
#8

AW: Einfache Tabelle mit TClientDataSet

  Alt 13. Jan 2019, 08:08
Ich wollte einen Displaynamen für die Spalten verwenden.
Dazu kannst du entweder bei jedem Feld das Property DisplayLabel setzen
So habe ich das jetzt auch gemacht.

oder direkt im Grid bei der Column das Property Title.Caption.
Da hatte bei mir das Erfassen neuer Daten nicht funktioniert. Habe das dann in die erstere Variante geändert und die DBGrid Spalten gelöscht.

Der erste Ansatz ist in der Regel vorzuziehen, weil man damit auch die automatische Spalten-Erzeugung im Grid verwenden kann, wenn keine Columns angelegt sind.

Ok, dann lasse ich das so und werde dies in Zukunft auch so halten.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#9

AW: Einfache Tabelle mit TClientDataSet

  Alt 13. Jan 2019, 09:47
oder direkt im Grid bei der Column das Property Title.Caption.
Da hatte bei mir das Erfassen neuer Daten nicht funktioniert. Habe das dann in die erstere Variante geändert und die DBGrid Spalten gelöscht.
Nicht ganz. Du hattest in den Columns den FieldName abgeändert:
Delphi-Quellcode:
    Columns = <
      item
        Expanded = False
        FieldName = 'Medium'
        Width = 94
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'Autor'
        Width = 112
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'Titel'
        Visible = True
      end>
Richtig wäre, den FieldName beizubehalten und stattdessen Title.Caption zu ändern:
Delphi-Quellcode:
    Columns = <
      item
        Expanded = False
        FieldName = 'media'
        Title.Caption = 'Medium'
        Width = 94
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'author'
        Title.Caption = 'Autor'
        Width = 112
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'title'
        Title.Caption = 'Titel'
        Visible = True
      end>
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#10

AW: Einfache Tabelle mit TClientDataSet

  Alt 13. Jan 2019, 10:21
Programmatisches Erstellen einer Firebird-Datenbank per IB-Komponenten aus dem Delphiquelltext /-programm heraus: https://www.tabsoverspaces.com/7953-...tically-delphi

Die Embeddedversion von Firebird braucht keinen Server.

Wenn das "durch" ist, kannst Du eigentlich alles, was SQL so hergibt, per Querykomponente erledigen.

Select mit Query.Open, den Rest mit Query.ExecSQL.

Strenggenommen kannst Du Dein Programm so gestalten, dass Du ausser der Exe und den für Firebird erforderlichen DLLs ... nichts, aber wirklich garnichts, benötigst.

Für die Eingabe der SQL-Statements nehme man ein Memo, weise den dort eingegebenen Inhalt dem Query.SQL.Text zu und rufe Query.Open bzw. Query.ExecSQL auf. Das wars eigentlich schon.

Zur Anzeige nehme man ein DBGrid und / oder entsprechende Eingabefelder, 'nen DBNavigator, die mit 'ner TDataSource verbinden, die mit 'ner Query verbinden, die mit 'nem SQL versorgen, Open aufrufen und fertig ist die Laube.

Alles, was darüber hinausgeht, ist dann die "Geschäftslogik", die mehr oder weniger komplex sein kann.

Prinzipell hast Du den Quelltext von newIndy richtig verstanden, warum das nicht funktioniert, kann ich momentan von hier aus nicht erkennen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 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