![]() |
Datenbank: BDE • Zugriff über: Table und Query
Problem mit Zugriff auf ComboBox Inhalt
Hey,
Habe ein kleines Problemchen... In der ComboBox1 zeige ich die SQL Abfrage einer *.db an. Klappt! Nun möchte ich die untenstehenden Editfelder mit der Abfrage füllen. Klappt nicht! z.B. in der ComboBox1 steht: Lieferant1 Lieferant2 Wenn ich nun Lieferant1 auswähle soll im Editfeld1 die Lieferanten ID aus der Datenbank stehen und in Edit2 der Lieferanten name zu Lieferant2. Kann mir einer bei dieser ich gebe zu leichten Frage helfen??? Danke! |
Re: Problem mit Zugriff auf ComboBox Inhalt
Moment, ich schau mal in meine Glaskugel....
Also etwas mehr Info (am besten Quellcode) würde die sache vereinfachen. z.B. Verwendest Du TComboBox/TEdit oder die DB-Gebundenen Versionen TDBComboBox, TDBLookupComboBox, TDBEdit? |
Re: Problem mit Zugriff auf ComboBox Inhalt
TComboBox und TEdit!
Delphi-Quellcode:
Welche Infos benötigt Ihr noch?
procedure TL_aendern.FormCreate(Sender: TObject);
begin Query1.Close; Query1.DatabaseName:='.\DB\'; ComboBox1.Style := csDropDownList; With Query1 do begin Active := False; SQL.Add('Select L_Name FROM Lieferanten Group by L_Name'); Open; While Not EOF do begin ComboBox1.Items.Add(FieldByName('L_Name').AsString); Next; end; Active := False; end; end; procedure TL_aendern.ComboBox1Change(Sender: TObject); begin Edit1.Text:= //Liefernaten ID aus DB Edit2.Text:= //Lieferanten Name aus DB = L_Name(nur zur Kontrolle:)) end; Eine Steigerung des Problemchens ist mir inzwischen auch schon eingefallen. Lieferant wird über TCombobox ausgesucht. Alle Artikel dieses Lieferanten werden in Listbox angezeigt. Bei Klick auf einen Artikel werden die TEdit Felder gefüllt und können bearbeitet werden. |
Re: Problem mit Zugriff auf ComboBox Inhalt
Hai Hansi,
hier einmal eine mögliche Lösung für dein Problem. Dafür missbrauche ich, wie schon an anderen Stellen immer wieder mal erwähnt, die Eigenschaft ![]()
Delphi-Quellcode:
Auf die Hilfsvariablen kann man natürlich verzichten. Diese habe ich nur eingebaut um den Ablauf deutlicher zu machen.
procedure TForm1.FormCreate(Sender: TObject);
var stext : String; iID : Integer; begin With ZQuery1 do begin Close; SQL.Text := 'SELECT * FROM test1'; Open; While Not EOF do begin stext := FieldByName('Name').AsString; iID := FieldByName ('ID').AsInteger; ComboBox1.AddItem(sText,TObject(iID)); // ID wird zu einem "Object" gecastet. Next; end; Close end; end; procedure TForm1.ComboBox1Click(Sender: TObject); var sText : String; iID : Integer; begin sText := ComboBox1.Items[ComboBox1.ItemIndex]; // Akuteller Text in der CB Edit1.Text := sText; iID := Integer(Combobox1.Items.Objects[ComboBox1.ItemIndex]); // Object wird wieder zu einem Integer gecastet Edit2.Text := IntToStr (iID); end; |
Re: Problem mit Zugriff auf ComboBox Inhalt
Guten Morgen Stephan,
Vielen Dank für Deine ausführliche Antwort. Sie hat mir fast komplett geholfen, nur... Edit1.Text := ComboBox1.Items[ComboBox1.ItemIndex]; // Akuteller Text in der CB Damit lese ich den aktuellen String der CB aus; Was ich zusätzlich bräuchte ist, wenn ich einen String in einer ComboBox oder z.B. in einer ListBox anklicken dann soll genau der Datensatz der selektiert ist ausgewählt werden und alle Werte die dieser Datensatz enthält in edit feldern angezeigt werden. Kannst Du mir da nochmal bitte weiterhelfen? |
Re: Problem mit Zugriff auf ComboBox Inhalt
Hai Hansi,
da Du ja die ID des Datensatzes hast brauchst Du jetzt nur noch das .OnClick der ComboBox zu erweitern:
Delphi-Quellcode:
procedure TForm1.ComboBox1Click(Sender: TObject);
var sText : String; iID : Integer; begin sText := ComboBox1.Items[ComboBox1.ItemIndex]; // Akuteller Text in der CB Edit1.Text := sText; iID := Integer(Combobox1.Items.Objects[ComboBox1.ItemIndex]); Edit2.Text := IntToStr (iID); // Den gesamten Datensatz auswählen: with Query1 do begin Close; SQL.Text := 'SELECT * FROM test1 WHERE id = ' + #10 + IntToStr (iID); Open; Editx := FieldByName ('feldname1').AsString; Edity := FieldByName ('feldname2').AsString; ... Close; end; end; |
Re: Problem mit Zugriff auf ComboBox Inhalt
Lösung war!
Delphi-Quellcode:
procedure TL_aendern.FormCreate(Sender: TObject);
var stext : String; iID : Integer; begin Query1.Close; Query1.DatabaseName:='.\DB\'; ComboBox1.Style := csDropDownList; With Query1 do begin Active := False; SQL.Add('Select L_Name,L_ID FROM Lieferanten ORDER by L_Name'); Open; While Not EOF do begin stext := FieldByName('L_Name').AsString; iID := FieldByName ('L_ID').AsInteger; ComboBox1.AddItem(sText,TObject(iID)); // ID wird zu einem "Object" gecastet. Next; end; end; end; procedure TL_aendern.ComboBox1Change(Sender: TObject); var ID: Integer; begin Edit1.Text:=ComboBox1.Items[ComboBox1.ItemIndex]; ID:=Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]); With Query2 do begin Close; DatabaseName:='.\DB\'; SQL.Text:='SELECT * FROM Lieferanten WHERE L_ID = '+#10+IntToStr(ID); Open; Edit2.Text:=FieldByName('L_ID').AsString; Edit3.Text:=FieldByName('L_Name').AsString; Close; end; end; |
Re: Problem mit Zugriff auf ComboBox Inhalt
Hi Hansi,
eine andere (und einfachere ;-)) Möglichkeit wäre: - DBLookupComboBox benutzen - deine Query über eine DataSource als ListSource dranhängen; ListField auf L_Name und KeyField auf L_Id - ins AfterScroll der Query einfach deine Zuweisungen an die Editfelder MfG Stevie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz