DBGrid: Spalte hinzufügen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

DBGrid: Spalte hinzufügen

Beitrag von Aliobaba »

Hallo,

schon lange arbeite ich mit einem selbstgemachten Programm, das sowohl unter Linux als auch unter Windows problemlos funktioniert.
Nun wollte ich in eine vorhandene DBGrid eine weitere Spalte einfügen, was mir trotz vieler Versuche einfach nicht gelingen mag. :cry:

Die Datenbank ist verbunden (Design Connection), alles funktioniert, Daten werden im Designmodus korrekt angezeigt. Aber wenn ich versuche, in die Grid-Anzeige eine neue Spalte einzufügen (rechte Maustaste: "Spalten bearbeiten") und auf "Hinzufügen" klicke, dann wird stets eine Spalte mit Namen "Title" eingetragen, die in der Datenbank gar nicht vorkommt. Die in der Datenbank hinterlegten Spalten werden nicht zur Auswahl angeboten.

Woran kann das liegen, Was mache ich falsch?

Aliobaba

Datenbank: SQLite
Zeos-Komponenten
Lazarus version 1.2.4
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: DBGrid: Spalte hinzufügen

Beitrag von Michl »

Aliobaba hat geschrieben:Nun wollte ich in eine vorhandene DBGrid eine weitere Spalte einfügen, was mir trotz vieler Versuche einfach nicht gelingen mag. :cry:
Was meinst Du denn genau damit?

z.B. könntest Du:
Eine weitere Spalte aus der selben Tabelle -> Dein "Select" entsprechend aktualisieren z.B. "SELECT spalte1, spalte2, neuespalte FROM mytable..."
Eine Spalte einer anderen Tabelle aus der Datenbank -> Dein "Select" entsprechend mittels "JOIN" anpassen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: DBGrid: Spalte hinzufügen

Beitrag von Aliobaba »

Sorry, Michl, dass ich mich nicht klar genug ausgedrückt habe.

In der Datenbank selbst sind alle Datenfelder (Sorry, der Ausdruck war falsch, ich meinte die "Spalten"), die ich brauche vorhanden und ich kann diese Spalten, alle Felder und Datensätze auch zur Laufzeit ansprechen, verändern und mit SQL-Statements bearbeiten wie ich möchte.

Mein Problem ist viel trivialer :oops: : Auf der Entwickleroberfläche (Programmoberfläche von Lazarus / auf dem Formular ) würde ich gerne dem "DBGrid" eine Spalte hinzufügen und nur sichtbar machen. In der in der Datenbank selbst ist diese Spalte schon enthaltenen; sie "funktioniert" zur Laufzeit problemlos.

Wenn man in das DBGrid-Feld rechtsklckt, dann erscheint als Menüpunkt (ganz oben) der Eintrag "Spalten bearbeiten" und wenn man diesen Menüpunkt anklickt, dann erscheint das Fenster: "Bearbeitung DB_Grid_bearbeiten.Columns". und wenn man da auf "hinzufügen" klickt (kleines Feld mit einem "+" drin), dann erhalte ich eben NICHT die Auswahl aller Spalten, die in der SQLite-Datenbankdatei vorhanden sind, sondern es wird immer nur die Spalte "Title" hinzugefügt. Gerne würde ich aber das DB_Grid Feld um eine in der Datenbank schon vorhandene Spalte erweitern.

Und ich krieg das einfach nicht hin, obwohl die Datenbank mit dem DB_Grid-Feld - wie mir scheint - ordnungsgemäß verbunden ist.

... ist jetzt wieder etwas "umständlich" erklärt, aber vielleicht trotzdem ein bissl besser.

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: DBGrid: Spalte hinzufügen

Beitrag von Aliobaba »

:idea: ... jetzt bin ich möglicherweise soeben selber drauf gekommen: :idea:
Man muss erstmal ALLE vorgegebenen Spalten (ALLE!!) erstmal entfernen, dann erscheinen wieder ALLE in der Datenbank enthaltenen Spalten in der DB_Grid angezeigt - und dann muss man die Spalten wieder aus dem DB_Grid nehmen, die man in diesem DB_Grid-Feld nicht braucht.

... :roll: :?: :|

Ist dieses Programmverhalten Absicht?

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: DBGrid: Spalte hinzufügen

Beitrag von Aliobaba »

... nee, geht auch leider nicht: Die Spalten erscheinen zwar alle, aber in dem Fenster, das nach dem Anwählen von "Spalten bearbeiten" erscheint, werden die enthaltenen Spalten nicht zum Löschen angeboten und wenn man auf "Hinzufügen" klickt (das Feld mit dem '+'), verschwinden die Bezeichnungen der Spalten wieder aus diesem Fenster wieder und als alleiniger Eintrag wird wieder "Title" eingetragen :(

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: DBGrid: Spalte hinzufügen

Beitrag von Soner »

Dann musst du nochmal mit der rechten Maustaste auf DBGrid klicken, und aus dem Menü "Spalten bearbeiten" wählen.
Es erscheint Spalteneditor, du wählst dann die Spalte die du bearbeiten willst und änderst du im Objektinspektor "FieldName"-Eigenschaft. Hier kannst du Spalten verstecken, Titel ändern, usw.

Beachte, wenn der Feldname den du willst in Fieldname-Eigenschaft nicht vorkommt, dann musst du entweder dein SQL-Anweisung aktualisieren oder Datenbank einmal trennen und neu verbinden.

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: DBGrid: Spalte hinzufügen

Beitrag von Aliobaba »

Danke Soner,

das funktioniert leider trotzdem nicht.
Die Datenbank ist ordentlich verbunden. (Hab die auch getrennt und erneut verbunden, was nichts geholfen hat).
Das sieht man an einem DB_Grid, das schon länger existiert:
Spalten_alter_Eintrag.png

Ein völlig neu erstellter DB_Grid, der mit denselben Parametern verbunden ist wie der "alte" DB_Grid sieht so aus:
Spalten_neuer_Eintrag.png

Sobald man auf "Hinzufügen" ("+") klickt, "leert" sich das neue DB_Grid und die Spalte "Title" erscheint, wobei es aber diese Spalte Title in der hinterlegten SQLite-Datenbankdatei gar nicht gibt.
Spalten_neuer_Eintrag1.png


Was mache ich falsch??

Aliobaba

(Ich musste das auf eine Windows-Oberfläche demonstrieren (VirtualBox), da ich im Rahmen meiner Fehlersuche mein Lazarus unter Linux updaten wollte, was mir absolut nicht gelingen will :cry: Wie immer: Wenn was nicht klappt, dann so richtig! :(
Ich kriege einfach diesen Fehler, den man beim Start gemeldet bekommt, nicht weg:
Directory: /home/ali/.lazarus/bin/
Warning: directory lcl not found

... aber das ist ja ein weiteres Problem, das sicherlich in einen neuen Thread gehört, falls ich im Lauf der nächsten Stunden den Fehler nicht finde.
... oder hat jemand hier den ultimaiven "schnellen Tip am Rande"?
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: DBGrid: Spalte hinzufügen

Beitrag von Aliobaba »

Hallo,

das "Installationsproblem" konnte ich lösen.
Nach dem Entfernen der alten Lazarus-Pakete musste noch manuell das gesamte Verzeichnis * ~/.lazarus gelöscht werden.

Dann funktioniert das Installieren. (Vielleicht haben ja auch andere dieses Problem und dieser Zusatz hilft dann)

Aliobaba
Zuletzt geändert von Aliobaba am So 21. Dez 2014, 14:49, insgesamt 1-mal geändert.
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: DBGrid: Spalte hinzufügen

Beitrag von Aliobaba »

:idea: ... so, und das ursprüngliche Problem konnte ich auch noch lösen :)

Der Spalte "Title", die erscheint, muss man gesondert in einem zweiten Schritt eine Spalte der hinterlegten Datenbank zuordnen und im Objekt-Inspektor den Eintrag "FieldName" richtig zuteilen.
Wie immer: Ganz einfach, wenn man's weiß
:oops: (und eigentlich auch ganz logisch) :oops:

Und wenn dann das Feld eine "Memo"-Feld ist und man immer noch nicht's sieht: Liebe Lazarus-Neulinge: auch das hat mich schon mal einen Tag gekostet; Euch soll's besser gehen: viewtopic.php?f=55&t=5987&p=54710&

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: DBGrid: Spalte hinzufügen

Beitrag von Soner »

Mann muss immer dran denken, dass Lazarus Anhand der Datenfelder von TDataSource automatisch Spalten hinzufügt, solange man selber nichts hinzufügt. Sobald man selber eine Spalte hinzufügt werden automatisch erstellte gelöscht.

Antworten