Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Combobox und Datenbank (https://www.delphipraxis.net/80291-combobox-und-datenbank.html)

Bruce86 6. Nov 2006 18:15

Datenbank: Paradox • Version: 7 • Zugriff über: per Combobox

Combobox und Datenbank
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Habe da mal ne Frage! Habe eine Datenbank erstellt!
Habe eine Combobox in der die Namen der Spieler stehen! In der Datenbank stehen weitere Daten zu den Spielern, wie Nachname, Spielerposition, Einsätze, Gelbe und Rote Karten etc.! Wollte nun mal fragen wie ich es realisieren kann, dass, wenn ich auf Den Namen in der Combobox klicke, die Daten aus der Datenbank gelesen werden und die Daten in das entsprechende Edit eingetragen werden! Dies soll also dann passieren, wenn ich auf den Namen in der Combobox klicke!
Habe dafür noch eine Image im Anhang damit ihr wisst wie das so aussehen soll!
Wäre schön wenn ihr mir da helfen könntet! Mit nem Quelltext oder vielleicht einer Anwendung von euch, die ihr mir vielleicht posten könnt oder per mail senden könnt! Wäre echt super!!!

Vielen Dank im Vorraus

Euer Bruce86

mkinzler 6. Nov 2006 18:22

Re: Combobox und Datenbank
 
Nimm am Besten ne DBLookupComboBox.

marabu 6. Nov 2006 19:01

Re: Combobox und Datenbank
 
Hi,

wenn die ComboBox als Selektor für deine Datensätze herhalten soll, dann würde ich mir beim Befüllen der ComboBox.Items den Schlüssel des Spieler-Datensatzes merken. Das geht mit der Methode AddObject(). Angenommen es gibt ein eindeutiges Feld NICKNAME:

Delphi-Quellcode:
 
begin
  with ComboBox do
  begin
    Items.Clear;
    Query.SQL.Text := 'SELECT id, nickname FROM tbl ORDER BY nickname';
    Query.Open;
    while not Query.Eof do
    begin
      Items.AddObject(Query.FieldByName('NICKNAME').AsString, Pointer(Query.FieldByName('ID').AsInteger));
      Query.Next;
    end;
    Query.Close;
  end;
end;
Wenn du dann noch das Ereignis OnChange der ComboBox bedienst, dann kannst du deine Edit-Felder füllen:

Delphi-Quellcode:
procedure TDemoForm.ComboBox1Change(Sender: TObject);
begin
  with Sender as TComboBox do
    if (ItemIndex <> -1) then
    begin
      Query.SQL.Text := 'SELECT * FROM spieler WHERE id = :id';
      Query.Params.ParamByName('id').AsInteger := Integer(Items.Objects[ItemIndex]);
      Query.Open;
      NachnameEdit.Text := Query.FieldByName('NACHNAME').AsString;
      // ...
      Query.Close;
    end;
end;
Allerdings kannst du dir das Leben auch leichter machen, wenn du die datensensitiven Controls (TDBEdit) verwendest. Insbesondere, wenn du die Daten nicht nur Anzeigen, sondern auch verändern möchtest.

Getippt und nicht getestet.

Freundliche Grüße vom marabu

semo 6. Nov 2006 19:46

Re: Combobox und Datenbank
 
wenn man eine datenmenge öffnet und diese dann der reihe nach durchlaufen will, sollte man den zeiger auf den ersten datensatz setzen per First().

Delphi-Quellcode:
begin
  with ComboBox do
  begin
    Items.Clear;
    Query.SQL.Text := 'SELECT id, nickname FROM tbl ORDER BY nickname';
    Query.Open;
    Query.First;
    while not Query.Eof do
    begin
      Items.AddObject(Query.FieldByName('NICKNAME').AsString, Pointer(Query.FieldByName('ID').AsInteger));
      Query.Next;
    end;
    Query.Close;
  end;
end;

Hansa 6. Nov 2006 20:33

Re: Combobox und Datenbank
 
Zitat:

Zitat von computer-glossar.de
.. sollte man den zeiger auf den ersten datensatz setzen per First().

Dann aber besser gleich richtig. Close -> Datenmenge zusammenstellen -> Open. Dadurch wird sichergestellt, daß die Datenmenge auch stimmt und First wird überflüssig. Ist die Datenmenge bereits geöffnet, dann kommt auch, egal wo, keine Fehlermeldung.

raiguen 6. Nov 2006 20:35

Re: Combobox und Datenbank
 
Zitat:

Zitat von computer-glossar.de
wenn man eine datenmenge öffnet und diese dann der reihe nach durchlaufen will, sollte man den zeiger auf den ersten datensatz setzen per First().

:gruebel: Wenn ich mich nicht irre, wird der Datensatzzeiger doch automatisch nach dem Öffnen einer Query (oder auch Tabelle) auf den ersten Satz gestellt, so dass hier das .First() nicht unbedingt notwendig ist :gruebel: Anders natürlich, wenn die Datenmenge bereits offen ist und schon einige Satzverschiebungen durchgeführt wurden und dann irgendwo im Prog nochmals die gesamte Abfragemenge durchlaufen werden soll. Da macht ein First() auf jeden Fall Sinn...

Bruce86 6. Nov 2006 22:05

Re: Combobox und Datenbank
 
Versuche mich nochmal zu erklären!

Also wenn ich auf den Namen in der Combobox klicke dann soll gesagt werden lade Daten aus der Datenbank für den Namen, der angeklickt ist! Dann soll gesagt werden - schreibe Daten in das dafür vorgesehene Edit!

Wenn ich den Index der Combobox auf 0 und Aktiv des Table auf True setze ist doch sowieso der erste Spieler geladen!

Mit geht es allein um die Realisierung von:

Wie sage ich den Programm wenn ich auf einen Namen in der Combobox klicke - LADE DATEN AUS DER DATENBANK FÜR DEN NUN AKTIVEN(angeklickten) NAMEN???

und wie realisiere ich, dass das Programm weiß dass es die ausgelesenen Daten in das jeweils dafür vorgesehene Edit schreibt???

Euer Bruce86

Bruce86 6. Nov 2006 22:06

Re: Combobox und Datenbank
 
Und gleich nochmal ne Frage! Wie funktioniert das Mit der DBLookupCombobox!

Wie geht man mit dieser um? Gibt es dafür ein Tutorial?

Euer Bruce86

Hansa 6. Nov 2006 22:41

Re: Combobox und Datenbank
 
Zitat:

Zitat von marabu
...Allerdings kannst du dir das Leben auch leichter machen, wenn du die datensensitiven Controls (TDBEdit) verwendest...

So gehen die Meinungen eben auseinander. Ich gehe eher vom Gegenteil aus. Für diesen Fall denke ich : Finger weg von DB-Controls. :mrgreen:

Lese jetzt nur gerade : Paradox ? Damit ist das Thema für mich vorerst erledigt. Tip : FieldByName in der Hilfe nachlesen.

marabu 7. Nov 2006 08:27

Re: Combobox und Datenbank
 
Aber hallo,

Zitat:

Zitat von computer-glossar.de
.. sollte man den zeiger auf den ersten datensatz setzen per First()

das macht schon die Methode Open().

Zitat:

Zitat von Hansa
Dann aber besser gleich richtig. Close -> Datenmenge zusammenstellen ...

Die Zuweisung eines Statements an die Eigenschaft SQL schließt den DataSet.

@Bruce: Lass dich nicht verwirren. Wenn du dein aktuelles Problem mit Paradox gelöst hast, ist es früh genug für eine Umschulung.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 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