![]() |
Datenbank: Oracle • Version: 10g • Zugriff über: Bdp
Inhalt eines Dataset zur Laufzeit ändern
Moin Leute,
folgendes Problem: Ich möchte in meinem Programm den Inhalt einer ComboBox abhängig machen vom Inhalt einer TextBox. Also beim Verlassen der TextBox wird der Inhalt der TextBox genommen und damit nach Einträgen in der Datenbank gesucht. Konkret: Zu einer Bankleitzahl gibt es die jeweilige Bank in verschiedenen Orten. Die möglichen Orte möchte ich dann über eine ComboBox auswählen können. Das klappt soweit auch schon für die erste BLZ die ich in die Textbox tippe. Wenn ich dann aber eine andere eingebe, bleibt die ComboBox hinterher leer. Hier mein
Delphi-Quellcode:
Welchen Fehler mache ich?procedure LSFormFINANZAMT.TBBLZ_Leave(sender: System.Object; e: System.EventArgs); var BLZ : string; begin BLZ := (Sender as Textbox).Text; BdpDataAdapBANKNAME.Active := FALSE; if BLZ <> '' then begin with BdpDataAdapBANKNAME.SelectCommand do begin if Connection.State = System.Data.ConnectionState.Closed then Connection.Open; CommandText := 'SELECT ORT FROM LUG.S_BLZ WHERE BLZ = ' + BLZ + ' ORDER BY ORT'; ExecuteNonQuery; Connection.Close; end; end; BdpDataAdapBANKNAME.Active := TRUE; end; Gruß, Raphael |
Re: Inhalt eines Dataset zur Laufzeit ändern
evtl. ist das connection.close schuld.
|
Re: Inhalt eines Dataset zur Laufzeit ändern
Nein, das ist es leider nicht...
|
Re: Inhalt eines Dataset zur Laufzeit ändern
Klammere mal das
Delphi-Quellcode:
aus, mir scheint es auch so als wäre das der Fehler.
Connection.Close;
Keine Verbindung, keine Daten. |
Re: Inhalt eines Dataset zur Laufzeit ändern
Ich habe das ja inzwischen ausgeklammert, aber das scheint es nicht so sein.
Und wenn ich es drinne lasse, klappt das ja auch mit der ersten BLZ, aber wenn ich die dann ändere, also eine zweite eingebe, dann gehts eben nicht mehr... |
Re: Inhalt eines Dataset zur Laufzeit ändern
Ändere mal diese Zeile
Delphi-Quellcode:
CommandText := 'SELECT ORT FROM LUG.S_BLZ WHERE BLZ = ' + QuotedStr(BLZ) + ' ORDER BY ORT';
|
Re: Inhalt eines Dataset zur Laufzeit ändern
Warum arbeitest Du nicht mit einer Master-Detailbeziehung und lässt beide Tabellen offen statt bei jeder Anpassung der BLZ die Tabelle zu öffnen und zu schliessen?
SQL-Code:
Über die Master-Detailbeziehung werden dann alle die Orte angezeigt deren BLZ dem Wert der BLZ-Tabelle entspricht.
SELECT BLZ FROM BLZ_Tab ORDER BY BLZ
SELECT ORT FROM ORT_Tab |
Re: Inhalt eines Dataset zur Laufzeit ändern
Oder Du könntest auch nur einen Filter für die Tabelle setzen.
|
Re: Inhalt eines Dataset zur Laufzeit ändern
Zitat:
Das liefert die selben Ergebnisse... Zitat:
Die BLZ Tabelle bleibt ja unverändert. Der Nutzer tippt ja eine BLZ in die TextBox ein und erst dann durchsuche ich die BLZ-Tabelle, in welchen Orten diese Bank vorhanden ist. |
Re: Inhalt eines Dataset zur Laufzeit ändern
In diesem Fall etwas konkreter:
Dass beide Informationen in einer Tabelle stehen spielt m.E. keine Rolle, Du öffnest ja zwei verschiedene Abfragen und damit zwei verschiedene Datasets, etwa so:
SQL-Code:
Dass die Daten physisch in der gleichen Tabelle stehen spielt keine Rolle.
SELECT DISTINCT BLZ FROM Tabelle ORDER BY BLZ
SELECT DISTINCT ORT FROM Tabelle Bei der Auswahl der BLZ kannst Du auch eine DBCombobox einsetzen, damit kann der Benutzer auswählen statt eingeben. |
Re: Inhalt eines Dataset zur Laufzeit ändern
1.) Connection.Close muss raus. Die Connection muss bis zum Programmende offen bleiben.
2.) ExecuteNonQuery ist natürlich falsch. Alle SQl-Abfragen mit SELECT geben eine Datenmenge zurück. Also nur Open verwenden. |
Re: Inhalt eines Dataset zur Laufzeit ändern
Zitat:
|
Re: Inhalt eines Dataset zur Laufzeit ändern
Ja, der Dataset mit den BLZ (bzw. die davon gespeiste Datasource) fungiert als Master für den Dataset mit den Orten.
Die Felder musst Du entsprechend in der verwendeten Komponente einstellen. |
Re: Inhalt eines Dataset zur Laufzeit ändern
Hmm, leider finde ich keine Einstellungsmöglichkeiten in meinen ComboBoxen oder Datasets, um etwas als Master zu deklarieren...gibts irgendwo ein gutes Tutorial dafür?
|
Re: Inhalt eines Dataset zur Laufzeit ändern
Wo die Daten in den von Dir verwendeten Kompos zu finden sind weiss ich nicht,
bei ADO, BDE oder Mydac findet sich im entsprechenden TDataset oder TQuery in der IDE die Felder Mastersource und Masterfield resp. Detailfield Schau dort mal nach. |
Re: Inhalt eines Dataset zur Laufzeit ändern
Ihr habt aber schon alle mitbekommen, dass es hier um .NET geht, oder? :mrgreen:
|
Re: Inhalt eines Dataset zur Laufzeit ändern
:oops: schäm
|
Re: Inhalt eines Dataset zur Laufzeit ändern
Bei den Borland Data Providers habe ich da nichts vergleichbares entdecken können...
Werde da vielleicht mal einen neuen Thread zu dem Thema starten. Ah, aber es muss doch unter .NET auch die Möglichkeit existieren eine Master Detail - Beziehung mit ComboBoxen herzustellen, oder? MfG Raphael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 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