AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TDBLookupComboBox funktioniert nicht richtig
Thema durchsuchen
Ansicht
Themen-Optionen

TDBLookupComboBox funktioniert nicht richtig

Ein Thema von AlexW93 · begonnen am 28. Okt 2011 · letzter Beitrag vom 24. Nov 2011
Antwort Antwort
AlexW93

Registriert seit: 16. Nov 2009
5 Beiträge
 
#1

TDBLookupComboBox funktioniert nicht richtig

  Alt 28. Okt 2011, 17:43
Datenbank: Paradox • Version: 7 • Zugriff über: BDE
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...
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: TDBLookupComboBox funktioniert nicht richtig

  Alt 28. Okt 2011, 20:43
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
AlexW93

Registriert seit: 16. Nov 2009
5 Beiträge
 
#3

AW: TDBLookupComboBox funktioniert nicht richtig

  Alt 23. Nov 2011, 20:27
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...
Miniaturansicht angehängter Grafiken
unbenannt.png  

Geändert von AlexW93 (23. Nov 2011 um 20:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: TDBLookupComboBox funktioniert nicht richtig

  Alt 24. Nov 2011, 09:50
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
AlexW93

Registriert seit: 16. Nov 2009
5 Beiträge
 
#5

AW: TDBLookupComboBox funktioniert nicht richtig

  Alt 24. Nov 2011, 10:13
TQuery ist richtig versorgt. Hab meinen SQL-string schon überprüft. Werd mir mal meine BDE-Konfiguration anschauen.
  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 03:03 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