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...