Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi problem mit anzeige und auswahl einer combobox (https://www.delphipraxis.net/31731-problem-mit-anzeige-und-auswahl-einer-combobox.html)

stonimahoni 13. Okt 2004 09:30


problem mit anzeige und auswahl einer combobox
 
moin leute

ich steh mal wieder vor nen prob und hoffe ihr habt ein paar schlaue ideen.
ez muss ich erst mal überlegen wie ich das ganze formulier *gg*
also :
als erstes : ich hab ne access DB dahinter. ich hab auf dem formular eine combobox und möchte aus der db raus die kunden über die combobox anzeigen lassen - so auswahlmässig beim aufklappen das da alle drinstehen. soweit ok ?! gut ;)
soooo....jetzt möchte ich das ganze aber auch gern handhaben wie es in vb standartmässig dabe ist : ich möchte, wenn ich die box nicht aufklappe sondern einfach in die box was reinschreibe den namen des kunden nach und nach vorgeblendet bekommen - versteht ihr ? also wenn ich z.b. nen kunden "wolf" habe und in der box w eingebe dann soll der schonmal als erste auswahl angezeigt werden in den dazugehöreigen feldern ( name, vorname, strasse, usw...) die direkt unter der combobox stehen. wenn ich nun mehrere kunden mit einem "w" im namen habe, soll er mir zwar einen vorschlagen , doch ich möchte dann, wen nich die box dann aufklappe, nur noch die leute mit "w" in ihrem namen angezeigt bekommen. und wenn ich mehr buchstaben eingebe ( z.b. "wo") dann soll er die auswahl der namen halt auch weiter eingrenzen ( also das dann z.b. kein name mehr wie "wingert" oder so vorkommt weil ja kein "wo" in dem name ist ). ez hab ich nur noch ein kleines problem : so wie ich es atm umgesetzt habe, kann ich beim ersten aufklappen der box einen kunden aussuchen und der wird auch in den feldern angezeigt, doch wen nich dann nochmal die box aufkappe und nen anderen aussuchen will, kann ich den zwar selectieren mit der maus, aber er wird nicht übernommen udn die felder bleiben leer :(
weiss jmd rat ? oder ne bessere lösung als meine ?
ich schieb mal meinen quellcode mit rein - seid nachsichtig mit mir bzgl dem code - bin ja noch im lernstadium *gg*

Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//       Aufklappen der Combobox um alle Kunden anzeigen zu lassen
////////////////////////////////////////////////////////////////////////////////
procedure TFormAuftrag.ComboBox1DropDown(Sender: TObject);
var name: string;
    leerzeichen: string;
    vorname: string;
    //ort: string;
    kundennr: Longint;
begin
   // die liste wird geleert, zumal ansonsten dieselben datensätze immer angehängt werden
   // bei jedem neuaufklappen
   //  ComboBox1.Items.Clear;
   // Kennzeichen 3 bedeutet die DropDown Liste wurde geöffnet
   kennzeichen := 3;
   kundensuch(kennzeichen);
   if (combobox1.Text <> '') or (combobox1.Text = '') then
   begin
     //Liste mit Werten füllen
     while not FormKunden.ADOQueryKunden.Eof do
     begin
        leerzeichen := ' ';
        // Die Felder müssen vor der Zuweisung geprüft werden, ob hier auch ein
        // Eintrag in der Datenbank vorliegt.
        kundennr := FormKunden.ADOQueryKunden.FieldValues['kunden_nummer'];
        name := FormKunden.ADOQueryKunden.FieldValues['name'];
        vorname := FormKunden.ADOQueryKunden.FieldValues['vorname'];
  //      ort := FormKunden.ADOQueryKunden.FieldValues['ort'];
        gesamt:= IntToStr(kundennr) + leerzeichen + name + leerzeichen + vorname;
        Combobox1.Items.Add(gesamt);
      FormKunden.ADOQueryKunden.Next;
     end;
   end;
end;


////////////////////////////////////////////////////////////////////////////////
//                     Auswahl innerhalb der Combobox
////////////////////////////////////////////////////////////////////////////////
procedure TFormAuftrag.ComboBox1Select(Sender: TObject);
var i:   integer;
    ende: boolean;
begin
   // Kennzeichen 1 bedeutet, es wurde eine Auswahl aus der Liste getroffen
   kennzeichen := 1;
   ende := false;
  // Nachdem der Benutzer einen Eintrag aus der Liste gewählt hat, soll dieser natürlich
  // vorgeblendet werden. Dazu muss dass ausgewählte Feld bis zum Namen abgeschnitten
  // werden und erneut eine Suche erfolgen.
  // Ausgewählter Eintrag zuweisen
  //ComboBox1.Items.Clear;
  gesamt := ComboBox1.Items[ComboBox1.ItemIndex];
  for i := 1 to Length(gesamt) do
  begin
     // Zeichen nacheinander dem Suchnamen zuweisen
     if (gesamt[i] <> ' ') and not ende then
     begin
       // in dem Fall ist der Suchname die Kundennummer
       suchname := suchname + gesamt[i];
     end
     else
     begin
       ende := true;
     end;
  end;
  kundensuch(kennzeichen);
  ComboBox1.Clear;
end;


////////////////////////////////////////////////////////////////////////////////
//                           Kundenselektion
////////////////////////////////////////////////////////////////////////////////
function TFormAuftrag.kundensuch(var kennzeichen: integer): integer;
begin
   FormKunden.ADOQueryKunden.Active:= False;
   FormKunden.ADOQueryKunden.Close;
   if (kennzeichen = 2) or (kennzeichen = 3) then
   begin
      with FormKunden.ADOQueryKunden do begin
        SQL.Clear;
        SQL.Add('select * from kunden where kunden.name like "' + ComboBox1.Text + '%"');
        FormKunden.ADOQueryKunden.Active := True;
        FormKunden.ADOQueryKunden.Open;
      end;
   end;
   if (kennzeichen = 1) and (combobox1.Text <> '') then
   begin
      with FormKunden.ADOQueryKunden do begin
        SQL.Clear;
        SQL.Add('select * from kunden where kunden.kunden_nummer = '+ suchname +'');
        FormKunden.ADOQueryKunden.Active := True;
        FormKunden.ADOQueryKunden.Open;
      end;
   end;
   if (kennzeichen = 1) and (combobox1.Text = '') then
   begin
      with FormKunden.ADOQueryKunden do begin
        SQL.Clear;
        SQL.Add('select * from kunden');
        FormKunden.ADOQueryKunden.Active := True;
        FormKunden.ADOQueryKunden.Open;
      end;
   end;
   result := kennzeichen;
end;


////////////////////////////////////////////////////////////////////////////////
//            Änderung innerhalb der Combobox
////////////////////////////////////////////////////////////////////////////////
procedure TFormAuftrag.ComboBox1Change(Sender: TObject);
begin
  // Der Suchname hier initialisiert bzw. er muss "geleert" werden damit die daten übernommen werden
  suchname := ' ';
   // Kennzeichen 2 bedeutet das der Name aus dem Feld gesucht wird
  kennzeichen := 2;
  kundensuch(kennzeichen);
end;

stonimahoni 13. Okt 2004 13:55

Re: problem mit anzeige und auswahl einer combobox
 
ok - hab das problem gelöst :)

war etwas schwieriger aber es hat gefunzt *gg*

bis dahin...

grüsse

stoni

fkerber 13. Okt 2004 15:20

Re: problem mit anzeige und auswahl einer combobox
 
Hi!

Verrätst du uns, wie du es gelöst hast?
Falls mal wieder jrmand bei ähnlichem hängt?

Ciao Frederic

stonimahoni 13. Okt 2004 16:35

Re: problem mit anzeige und auswahl einer combobox
 
hi

klar reiche ich meine lösung nach - aber morgen erst
jetzt fahr ich erst mal heim :)
morgen früh stell ich den quellcode zur verfügung

mfg

stoni

stonimahoni 14. Okt 2004 08:47

Re: problem mit anzeige und auswahl einer combobox
 
morgen

hier mein versprochener code mit dem ich mein prob gelöst habe ( waren nur minimal änderungen nötig )

Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//       Aufklappen der Combobox um alle Kunden anzeigen zu lassen
////////////////////////////////////////////////////////////////////////////////
procedure TFormAuftrag.ComboBox1DropDown(Sender: TObject);
var name: string;
    leerzeichen: string;
    vorname: string;
    ort: string;
    kundennr: Longint;
begin
   // die liste wird geleert, zumal ansonsten dieselben datensätze immer angehängt werden
   // bei jedem neuaufklappen
      ComboBox1.Items.Clear;
   // Kennzeichen 3 bedeutet die DropDown Liste wurde geöffnet
   kennzeichen := 3;
   kundensuch(kennzeichen);
   if (ComboBox1.Text <> '') or (ComboBox1.Text = '') then
   begin
     //Liste mit Werten füllen
     while not FormKunden.ADOQueryKunden.Eof do
     begin
        leerzeichen := ' ';
        // Die Felder müssen vor der Zuweisung geprüft werden, ob hier auch ein
        // Eintrag in der Datenbank vorliegt.
        kundennr := FormKunden.ADOQueryKunden.FieldValues['kunden_nummer'];
        name := FormKunden.ADOQueryKunden.FieldValues['name'];
        vorname := FormKunden.ADOQueryKunden.FieldValues['vorname'];
        if(FormKunden.ADOQueryKunden.FieldValues['ort'] <> NULL) then
        begin
          ort := FormKunden.ADOQueryKunden.FieldValues['ort'];
        end;
        gesamt:= IntToStr(kundennr) + leerzeichen + name + leerzeichen + vorname;
        if ort <> '' then
        begin
          gesamt:= gesamt +leerzeichen + ort;
        end;
      ComboBox1.Items.Add(gesamt);
      FormKunden.ADOQueryKunden.Next;
     end;
   end;
end;


////////////////////////////////////////////////////////////////////////////////
//                     Auswahl innerhalb der Combobox
////////////////////////////////////////////////////////////////////////////////
procedure TFormAuftrag.ComboBox1Select(Sender: TObject);
var i:   integer;
    ende: boolean;
begin
   // Kennzeichen 1 bedeutet, es wurde eine Auswahl aus der Liste getroffen
   kennzeichen := 1;
   ende := false;
   suchnr := '';
   i:= 0;
  // Nachdem der Benutzer einen Eintrag aus der Liste gewählt hat, soll dieser natürlich
  // vorgeblendet werden. Dazu muss dass ausgewählte Feld bis zum Namen abgeschnitten
  // werden und erneut eine Suche erfolgen.
  // Ausgewählter Eintrag zuweisen
  gesamt := ComboBox1.Items[ComboBox1.ItemIndex];
  while not ende do
  begin
     i:= i + 1;
     // Zeichen nacheinander dem Suchnamen zuweisen
     if (gesamt[i] <> ' ') and not ende then
     begin
       // in dem Fall ist der Suchname die Kundennummer
       suchnr := suchnr + gesamt[i];
     end
     else
     begin
       ende := true;
     end;
  end;
  kundensuch(kennzeichen);
  ComboBox1.Clear;
end;


////////////////////////////////////////////////////////////////////////////////
//                           Kundenselektion
////////////////////////////////////////////////////////////////////////////////
function TFormAuftrag.kundensuch(var kennzeichen: integer): integer;
begin
   FormKunden.ADOQueryKunden.Active:= False;
   FormKunden.ADOQueryKunden.Close;
   if (kennzeichen = 2) or (kennzeichen = 3) then
   begin
      with FormKunden.ADOQueryKunden do begin
        SQL.Clear;
        SQL.Add('select * from kunden where kunden.name like "' + ComboBox1.Text + '%" order by kunden.name');
        FormKunden.ADOQueryKunden.Active := True;
        FormKunden.ADOQueryKunden.Open;
      end;
   end;
   if (kennzeichen = 1) then
   begin
      with FormKunden.ADOQueryKunden do begin
        SQL.Clear;
        SQL.Add('select * from kunden where kunden.kunden_nummer = '+ suchnr +' order by kunden.name');
        FormKunden.ADOQueryKunden.Active := True;
        FormKunden.ADOQueryKunden.Open;
      end;
   end;
   result := kennzeichen;
end;


////////////////////////////////////////////////////////////////////////////////
//            Änderung innerhalb der Combobox
////////////////////////////////////////////////////////////////////////////////
procedure TFormAuftrag.ComboBox1Change(Sender: TObject);
begin
  // Der Suchname hier initialisiert bzw. er muss "geleert" werden damit die daten übernommen werden
  suchnr := ' ';
   // Kennzeichen 2 bedeutet das der Name aus dem Feld gesucht wird
  kennzeichen := 2;
  kundensuch(kennzeichen);
end;



in diesem sinne :hello:

frohes schaffen und vor allem proggn weiterhin

bis zum nächsten prob *gg*

bis dann :hi:
grüsse

stoni

stonimahoni 14. Okt 2004 08:50

Re: problem mit anzeige und auswahl einer combobox
 
noch was auf die schnelle :
sag mal fkerber....woher kommst du ? ich mein wo liegt der ort genau ? hört sich an als wär das im saarland ?!

grüsse

stoni


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