Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TDBLookupComboBox funktioniert nicht richtig (https://www.delphipraxis.net/164106-tdblookupcombobox-funktioniert-nicht-richtig.html)

AlexW93 28. Okt 2011 17:43

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

TDBLookupComboBox funktioniert nicht richtig
 
Hallo!

Ich arbeite gerade an einem Weinlagerverwaltungsprogramm das aus einer normalen Weindatenbank und einem Lagerverwaltungsteil besteht.
SQL ist für mich neu und ich benutze Komponenten wie die TDBLookupComboBox zum ersten Mal, funktioniert aber nicht so wie ich es will.

Bevor ich mein Problem erkläre möchte ich euch kurz den Grundaufbau meines Programms erklären:
* TDBLookupComboBox (hab sie LCBTraube genannt)
* eine TQuery und DataSource Komponenten pro Paradox-Tabelle (DataSource und TQuery sind immer miteinerander verknüpft)
* eine TQuery und DataSource Komponente zusätzlich (hab sie QueryAnzeige und DataSourceAnzeige genannt)
* eine TDBGrid Komponente pro Paradox-Tabelle für die Testausgabe (dass ich schauen kann, ob meine TDBLookupComboBox richtig funktioniert)
* eine TDBGrid Komponente (DataSource = DataSourceAnzeige)


Delphi-Quellcode:
  //-------- Select statements for all tables ----------
const
  LAENDER = 'SELECT ID,land FROM laender';
  REGIONEN = 'SELECT ID,region,landID FROM regionen';
  WEINGUT = 'SELECT ID,weingut,regionID FROM weingut';
  WEINLISTE = 'SELECT ID,rebsorteID,weingutID,jahr,preis,alk FROM weinliste';
  WEINSORTEN = 'SELECT ID,traube,rebsorte FROM weinsorten';

implementation

{$R *.dfm}

procedure Tform1.AbfrageWeinListe;
begin
  queryanzeige.SQL.Clear;
  queryanzeige.SQL.add('SELECT weinListe.ID,weinsorten.traube,weinsorten.rebsorte,weingut.weingut,weinListe.jahr,laender.land,regionen.region,weinliste.alk,weinliste.preis');
  queryanzeige.SQL.add('FROM weingut,weinListe,weinsorten,laender,regionen');
  queryanzeige.SQL.add('WHERE weinListe.rebsorteID=weinsorten.ID');
  queryanzeige.SQL.Add('AND weingut.ID=weinListe.weingutID');
  queryanzeige.SQL.Add('AND regionen.ID=weingut.regionID');
  queryanzeige.SQL.Add('AND laender.ID=regionen.landID');
  queryanzeige.Active:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //------------ SQL-statements to queries ------------
  querylaender.SQL.text:=LAENDER;
  querylaender.Active:=true;
  queryregionen.SQL.text:=REGIONEN;
  queryregionen.Active:=true;
  queryweingut.SQL.Text:=WEINGUT;
  queryweingut.Active:=true;
  queryweinliste.SQL.Text:=WEINLISTE;
  queryweinliste.Active:=true;
  queryweinsorten.SQL.Text:=WEINSORTEN;
  queryweinsorten.Active:=true;

  //----------- DB-components configuration -----------
  //LCB = LookupComboBox
  LCBTraube.datafield:='rebsorteID';
  LCBTraube.ListField:='rebsorte';
  LCBTraube.KeyField:='ID';
  AbfrageWeinListe;
end;

procedure TForm1.LCBTraubeCloseUp(Sender: TObject);
begin
  AbfrageWeinListe;
end;
Die precedure AbfrageWeinListe soll dann später als Anzeige der Daten dienen.


Jetzt zu meinem Problem:

Wenn ich jetzt einen Datensatz auf meinem TDBGrid (das mit datasourceweinsorten verknüfpt ist) einen Datensatz auswähle und die Rebsorte des Weins mithilfe der TDBLookupComboBox ändern will, dann ändert sich im TDBGrid (das mit datasourceweinsorten verknüpft ist) die rebsortenID. Leider aber ändert sich im TDBGrid (das mit DataSourceAnzeige verknüpft ist) gar nichts. Wenn ich danach einen anderen Datensatz auswähle und die Rebsorte dann wieder mit der TDBLookupComboBox ändere, dann erst sieht man die alten Änderungen in dem DataSourceAnzeige. Die neue Änderung wird wieder nur im DataSourceWeinsorten übernommen, aber wieder nicht im DataSourceAnzeige.

Klingt kompliziert, vielleicht wirds mit einem Beispiel klarer:
Schritt 1) Der 1. Datensatz im TDBGrid (das mit datasourceweinsorten verknüpft ist) wird ausgewählt.
Schritt 2) Die Rebsorte wird mit der LookupComboBox von "Grüner Veltliner" auf "Riesling" geändert
--> rebsorteID im 1. Datensatz von datasourceweinsorten wird von "1" auf "2" geändert
--> keine Änderungen im datasourceanzeige :(
Schritt 3) Der 2. Datensatz im TDBGrid (das mit datasourceweinsorten verknüpft ist) wird ausgewählt.
Schritt 4) Die Rebsorte wird mit der LookupcomboBox von "Grüner Veltliner" auf "Zweigelt" geändert
--> rebosrteID im 2. Datensatz von datasourceweinsorten wird von "1" auf "3" geändert
--> Im Schritt 2 hätte sich im 1. Datensatz datasourceanzeige die Rebsorte von "Grüner Veltline" auf "Riesling" ändern sollen, ist aber nicht passiert. Erst jetzt im Schritt 4 passiert es.
im 2. Datensatz von datasourceanzeige sollte sich "Grüner Veltliner" auf "Zweigelt" ändern. Tut es aber nicht -> Problem wie bei Schritt 2

so könnte man das ewig fortsetzen.


Wenn ich nun einen Datensatz ändere und dann mein Programm schließe und wieder neu starte, gehen meine Änderungen verloren.
Wenn ich aber zwei Datensätze ändere und dann mein Programm schließe und wieder neu starte, dann bleibt meine 1. Änderung in der Datenbank bestehen, meine 2. Änderung geht aber wieder verloren.
Wenn ich nun drei Datensätze ändere ---------------------------------------- . -------------------------------------, dann bleibt meine 1. und 2. Änderung in der Datenbank bestehen, meine 3. Änderung geht aber wieder verloren.


Ich finde das ganz komisch und weiß jetzt einfach nicht mehr weiter :(



Versteht jemand mein Problem und weiß wer eine Lösung?


Danke!

Alex


PS: Ist mein erste Post in diesem Forum. Sry dass ihr so viel lesen müsst. Hab versucht mein Problem so kurz wie möglich zu beschreiben...

Bummi 28. Okt 2011 20:43

AW: TDBLookupComboBox funktioniert nicht richtig
 
Versuch es mal persistent...

Eine Query/Table nur mit
Code:
Select * from Weinliste
rechter Mausklick, Feldeditor > Felder hinzufügen, alle die Du nachschlagen willst kannst Du auf visible false setzen
Danach Feldeditor > Neues Feld und die Nachschlagedefinitionen füllen (mit Hilfe Deiner anderen Querys/Tabellen)

wenn das alles richtig versorgt ist kannst Du im Grid die Region/Sorte etc. auswählen, und auch die Felder aus dem Feldeditor direkt auf die Maske ziehen, die Nachschlagefelder bekommen automatisch ein DBLookupCombobox verpasst.

AlexW93 23. Nov 2011 20:27

AW: TDBLookupComboBox funktioniert nicht richtig
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die schnelle Antwort!

Hab nicht mitbekommen, dass mir jemand geantwortet hat, und jetzt ist mir mein Beitrag wieder eingefallen.

Ich hab versucht, deinen Tip anzuwenden, leider kam eine Fehlermeldung als ich auf "Felder hinzufügen" gegangen bin (siehe Anhang).
Warum sollte sich meine Paradox Tabelle im system32-Ordner befinden? Ich dachte, Delphi greift auf die Tabellen zu, in dem die .exe compiliert wurde. :?

Auch wenn ich die Tabelle in system32 kopiere findet Delphi nichts...

Bummi 24. Nov 2011 09:50

AW: TDBLookupComboBox funktioniert nicht richtig
 
Die Fehlerbeschreibung hat mit dem ursprünglichen Thema nichts zu tun.
Es sieht eher aus als ob die BDE-Konfiguration nicht passt oder Databasename von TTable oder TQuery nicht (richtig) versorgt ist.

AlexW93 24. Nov 2011 10:13

AW: TDBLookupComboBox funktioniert nicht richtig
 
TQuery ist richtig versorgt. Hab meinen SQL-string schon überprüft. Werd mir mal meine BDE-Konfiguration anschauen.


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