AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit Zugriff auf ComboBox Inhalt
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Zugriff auf ComboBox Inhalt

Ein Thema von Hansi · begonnen am 12. Mär 2005 · letzter Beitrag vom 14. Mär 2005
Antwort Antwort
Hansi

Registriert seit: 8. Okt 2004
271 Beiträge
 
#1

Problem mit Zugriff auf ComboBox Inhalt

  Alt 12. Mär 2005, 16:22
Datenbank: BDE • Zugriff über: Table und Query
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!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem mit Zugriff auf ComboBox Inhalt

  Alt 12. Mär 2005, 17:00
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?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Hansi

Registriert seit: 8. Okt 2004
271 Beiträge
 
#3

Re: Problem mit Zugriff auf ComboBox Inhalt

  Alt 12. Mär 2005, 17:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Problem mit Zugriff auf ComboBox Inhalt

  Alt 13. Mär 2005, 07:53
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Hansi

Registriert seit: 8. Okt 2004
271 Beiträge
 
#5

Re: Problem mit Zugriff auf ComboBox Inhalt

  Alt 13. Mär 2005, 09:14
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Problem mit Zugriff auf ComboBox Inhalt

  Alt 13. Mär 2005, 09:22
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Hansi

Registriert seit: 8. Okt 2004
271 Beiträge
 
#7

Re: Problem mit Zugriff auf ComboBox Inhalt

  Alt 13. Mär 2005, 10:17
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;
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: Problem mit Zugriff auf ComboBox Inhalt

  Alt 14. Mär 2005, 09:46
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
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 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