Delphi-PRAXiS

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

Hansa 7. Nov 2006 11:23

Re: Combobox und Datenbank
 
Zitat:

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

Diese String-Zuweisung :

Delphi-Quellcode:
DataSet.SelectSQL.Text := 'SELECT * FROM BLUBB';
schließt ein Dataset ? :shock:

mkinzler 7. Nov 2006 11:44

Re: Combobox und Datenbank
 
Zitat:

Diese String-Zuweisung :

Delphi-Quellcode: markieren
DataSet.SelectSQL.Text := 'SELECT * FROM BLUBB';


schließt ein Dataset ? Shocked
Ja.

Hansa 7. Nov 2006 12:21

Re: Combobox und Datenbank
 
Und das ist nichts Paradox-spezifisches ? Na dann spare ich doch glatt ein paar hundert zeilen. Wehe, wenn das nicht stimmt ! :mrgreen:

noch @marabu, wegen Paradox : ich halte den nicht davon ab, das zu benutzen. Dass man es besser nicht (mehr) benutzt (zumindest langfristig) kann er sowieso überall lesen. Der Fall ist für mich nur insofern vorerst erledigt, weil ich das zu wenig kenne ! Glück gehabt 8)

raiguen 7. Nov 2006 13:02

Re: Combobox und Datenbank
 
Zitat:

Zitat von Hansa
Und das ist nichts Paradox-spezifisches ? Na dann spare ich doch glatt ein paar hundert zeilen. Wehe, wenn das nicht stimmt ! :mrgreen:

Nö.. hab das grad mal (u.a.) mit ABSDB ausgetestet! Sobald das SQL-Statement geändert wird, geht das Dataset in den inaktiven Zustand. Um allerdings auf der sicheren Seite zu sein, sollte man expliziet das .Close() aufrufen... DAS empfiehlt sogar (oder auch) die (sonst nicht immer erschöpfende) [oh]So weisen Sie der Eigenschaft SQL zur Laufzeit direkt einen Wert zu:

1 Rufen Sie die Methode Close auf, um die Abfrage zu deaktivieren. Ein Versuch, die Eigenschaft SQL zu ändern, deaktiviert die Abfrage automatisch, es ist jedoch eine gute Sicherheitsmaßnahme, dies explizit zu tun.
[/oh] :-D

Hansa 7. Nov 2006 16:19

Re: Combobox und Datenbank
 
Dann lasse ich es doch besser so, wie es ist. :lol:


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