Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Prism Inhalt eines Dataset zur Laufzeit ändern (https://www.delphipraxis.net/88238-inhalt-eines-dataset-zur-laufzeit-aendern.html)

Raffigator 12. Mär 2007 13:15

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:

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;
Welchen Fehler mache ich?

Gruß,
Raphael

bttb930 12. Mär 2007 13:17

Re: Inhalt eines Dataset zur Laufzeit ändern
 
evtl. ist das connection.close schuld.

Raffigator 12. Mär 2007 13:26

Re: Inhalt eines Dataset zur Laufzeit ändern
 
Nein, das ist es leider nicht...

uwewo 12. Mär 2007 14:04

Re: Inhalt eines Dataset zur Laufzeit ändern
 
Klammere mal das
Delphi-Quellcode:
Connection.Close;
aus, mir scheint es auch so als wäre das der Fehler.

Keine Verbindung, keine Daten.

Raffigator 12. Mär 2007 14:07

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

uwewo 12. Mär 2007 14:22

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';

JohannesK 12. Mär 2007 14:24

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:
SELECT BLZ FROM BLZ_Tab ORDER BY BLZ
SELECT ORT FROM ORT_Tab
Über die Master-Detailbeziehung werden dann alle die Orte angezeigt deren BLZ dem Wert der BLZ-Tabelle entspricht.

uwewo 12. Mär 2007 14:27

Re: Inhalt eines Dataset zur Laufzeit ändern
 
Oder Du könntest auch nur einen Filter für die Tabelle setzen.

Raffigator 12. Mär 2007 14:37

Re: Inhalt eines Dataset zur Laufzeit ändern
 
Zitat:

Zitat von uwewo
Ändere mal diese Zeile
Delphi-Quellcode:
CommandText := 'SELECT ORT FROM LUG.S_BLZ WHERE BLZ = ' + QuotedStr(BLZ) + ' ORDER BY ORT';


Das liefert die selben Ergebnisse...



Zitat:

Zitat von JohannesK
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:
SELECT BLZ FROM BLZ_Tab ORDER BY BLZ
SELECT ORT FROM ORT_Tab
Über die Master-Detailbeziehung werden dann alle die Orte angezeigt deren BLZ dem Wert der BLZ-Tabelle entspricht.

Hier sind aber Ort und BLZ in einer Tabelle abgelegt (leider nicht normalisiert)...oder verstehe ich da jetzt was falsch?
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.

JohannesK 12. Mär 2007 14:44

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:
SELECT DISTINCT BLZ FROM Tabelle ORDER BY BLZ
SELECT DISTINCT ORT FROM Tabelle
Dass die Daten physisch in der gleichen Tabelle stehen spielt keine Rolle.

Bei der Auswahl der BLZ kannst Du auch eine DBCombobox einsetzen, damit kann der Benutzer auswählen statt eingeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Seite 1 von 2  1 2      

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