Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit Zugriff auf ComboBox Inhalt (https://www.delphipraxis.net/42045-problem-mit-zugriff-auf-combobox-inhalt.html)

Hansi 12. Mär 2005 15:22

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!

Bernhard Geyer 12. Mär 2005 16:00

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?

Hansi 12. Mär 2005 16:24

Re: Problem mit Zugriff auf ComboBox Inhalt
 
TComboBox und TEdit!
Delphi-Quellcode:
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;
Welche Infos benötigt Ihr noch?

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.

Sharky 13. Mär 2005 06:53

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-Referenz durchsuchenObject von TStrings. Dieser weise ich über Typecasting die ID des Datansatzes zu.
Delphi-Quellcode:
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;
Auf die Hilfsvariablen kann man natürlich verzichten. Diese habe ich nur eingebaut um den Ablauf deutlicher zu machen.

Hansi 13. Mär 2005 08:14

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?

Sharky 13. Mär 2005 08:22

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;

Hansi 13. Mär 2005 09:17

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;

Stevie 14. Mär 2005 08:46

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 08:04 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