Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten von DBLookUpListBox in ComboBox übernehmen (https://www.delphipraxis.net/7110-daten-von-dblookuplistbox-combobox-uebernehmen.html)

Matze 2. Aug 2003 10:01


Daten von DBLookUpListBox in ComboBox übernehmen
 
Hi @all!

Ich habe im Forum gestöbert und gegoogelt, aber habe nichts Passendes gefunden. :(

Mein Problem:
Ich habe Daten in einer Paradox7 Tabelle gespeichert. In einer DBLookUpListBox sehe ich die Namen der Personen.
Jetzt möchte ich diese Namen alle einer ComboBox zuweisen (Items). Ich kann keine DBLookUpComboBox verwenden, da ich auch mal Namen eingeben muss, die nicht in der Datenbank vorhanden sind, diese sollen allerdings nicht gespeichert werden.

Kann mir jemand helfen?

Gruß Matze

Matze 2. Aug 2003 10:36

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hi!
Sorry, dass ich gestört habe, ich habe gefunden, was ich haben wollte. :mrgreen: Falls es auch andere interessiert, HIER der Link.

Gruß Matze

Matze 2. Aug 2003 10:51

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Es gibt jetzt doch noch ein Problem (besser gesagt: 2).

1. Ich kann in die DBComboBox nichts eingeben.
2. Wenn ich einen Eintrag der DBComboBox anklicke, dann wird er nicht in das DBComboBox-Feld übertragen.

Was mache ich falsch? :cry:

Matze 3. Aug 2003 11:43

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hi!
Nach langem Suchen ist es mir gelungen. :D
Jedoch habe ich ein neues Problem, was wahrscheinlich sehr einfach zu lösen ist:
Ich benutze: Table1, DataSource1, Paradox 7-Datenbank

In einer normalen ComboBox werden mir jetzt die Namen aus der Datenbank angezeigt. Wenn ich dort einen Namen auswähle, dann sollten in Edit-Felder die dazugehörigen Daten eingetragen werden.
Kann mir jemand sagen, wie das geht??

Gruß Matze

kiar 3. Aug 2003 12:55

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
schau mal nach locate oder sql

Matze 3. Aug 2003 13:14

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Danke für deine Antwort!
Da finde ich sooooooooo viel, aber ich glaube, das Passende ist nicht dabei. Kannst du mir nicht etwas auf die Sprünge helfen.
Das mit dem Datensatz finden kappier ich nicht so richtig und wie ich dann die dazugehörigen Daten bekomme auch nicht. :cry:
Gruß Matze

kiar 3. Aug 2003 14:05

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
zb
Code:
table1.locate('deinFeld',combobox.text[locaseInsensitive,lopartialKey]);
so suchst du den text der combobox in der tabelle

Matze 3. Aug 2003 14:35

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Danke!Könntest du mir vielleicht noch sagen, wie ich das wo einbinden muss und wie ich die dazugehörigen Daten erhalte? Bin noch Anfänger :wink:

kiar 3. Aug 2003 14:43

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Code:
procedure TForm1.combobox1.change(sender: TObject);
begin
table1.locate('deinFeld',combobox.text[locaseInsensitive,lopartialKey]);
end;

Matze 3. Aug 2003 14:48

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Danke!
Mein Code sieht jetzt so aus:
Code:
Form3.Table1.locate(ComboBox2.Text,combobox2.text[locaseInsensitive,lopartialKey]);
Jetzt kommt aber:
[Fehler] Formular.pas(332): Undefinierter Bezeichner: 'lopartialKey'
[Fehler] Formular.pas(332): Undefinierter Bezeichner: 'locaseInsensitive'
[Fehler] Formular.pas(332): Array-Typ erforderlich

Gruß Matze

kiar 3. Aug 2003 15:07

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
1. die units Db und DBTable sind eingebunden?
2. du musst bei locate mit 'deinfeld' das feld angeben in dem gesucht werden soll

Matze 3. Aug 2003 15:12

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Zitat:

Zitat von kiar
2. du musst bei locate mit 'deinfeld' das feld angeben in dem gesucht werden soll

Was meinst du damit? Ich habe alle Daten in Table1 drin, glaube ich, aber wenn ich das dahin schreibe, dann kommt eine Fehlermeldung.

Die Unit DBTable.dcu findet er bei mir nicht!
Ohne die kommt die Meldung:

[Fehler] Formular.pas(332): Inkompatible Typen: 'Integer' und 'TLocateOption'.

Übrigens: Danke, dass du dich so bemühst!

kiar 3. Aug 2003 15:21

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
ich denke du solltest dich erstmal mit den grundlagen befassen
beschäftige dich mit den mitgelieferten demos \db\ctrlgrid
da kannst du sehen wie eine db-app aufgebaut ist

Matze 3. Aug 2003 15:22

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Danke, ich schau mir das mal an...

Matze 3. Aug 2003 15:40

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Ich verstehe nur Bahnhof *peinlich*
Das sind doch bestimmt nur 2 Zeilen Code oder so. Die eine hast du mir ja schon genannt, da müsste ich nur noch wissen, was ich bei 'dein Feld' eingeben muss.
Und die 2. Zeile Code muss die sein, mit der ich die dazugehörigen Daten anzeigen lassen kann, wenn ich auf einen Namen klicke.

Man kann es auch so lösen (vielleicht).
Ich benutze eine DBLookUpListBox.
Kann ich diese fernsteuern, also ich meine:
Kann ich, wenn ich z.B. auf einen Button klicke sagen, dass in dieser DBLookUpListBox ein Eintrag ausgewählt wird und ein Mausklick darauf simuliert wird (wie, als ob ichs anklicken würde).

@kiar:
Falls dir das auf die Nerven gehen sollte, einem Anfänger auf diesem Gebiet zu helfen, dann bin ich dir natürlich nicht böse! :wink:
Es gibt ja auch noch andere Forum-Members, die mir vielleicht helfen können.

Gruß Matze

kiar 3. Aug 2003 17:03

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
ich versuche es noch mal
Code:
procedure tForm1.combox1.change(sender :TObject);

begin
 table1.locate('name',combobox1.text[locaseinsensitive]);
 edit1.text:=table1.fieldbyname('vorname').asstring;
 edit2.text:=table1.fieldByname('ort').asstring;
end;
voraussetzung ist die oben genannten units eingebunden sind.

raik

Matze 4. Aug 2003 13:00

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Vielen Dank! :mrgreen:
Ich probiere das mal aus und sage dann Bescheid, ob's geklappt hat.
Gruß Matze

Matze 4. Aug 2003 15:58

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hi kiar!

Bei der 1. Zeile:
Code:
Form3.Table1.locate('Name',Combobox2.text[LoCaseInsensitive]);
kommt bei mir die Fehlermeldung:
  • [Fehler] Formular.pas(333): Inkompatible Typen: 'Integer' und 'TLocateOption'

Könntest du mir vielleicht noch sagen, woran das liegt, bitte. :D

Die anderen beiden Zeilen:
Code:
Edit1.Text:=Table1.FieldByHame('Vorname').AsString;
Edit2.Text:=Table1.FieldByName('Ort').AsString;
müssten allerdings funktionieren. :mrgreen: , es kommt zumindest keine Fehlermeldung.

Danke!

Gruß Matze

Matze 5. Aug 2003 09:57

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Nochmals Danke kiar!!
Ich hab den kleinen Fehler gefunden. Es muss so heißen:

Code:
Form3.Table1.locate('Name',Combobox2.text,[LoCaseInsensitive]);
also: es hat nur ein Komma gefehlt.

Gruß Matze.

PS: Ich hoffe, der Forum-Start war für dich nicht allzu stressig. :mrgreen:

Matze 5. Aug 2003 10:09

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Da gibt es noch was... :wink:
Also:
Wenn ich die ComboBox2 verändern möchte (OnChange), dann kommt die Fehlermeldung:
  • Index nicht mehr gültig.
    Index: Name
In der Paradox-Tabelle ist die Spalte: Name aber vorhanden. Was ist das für ein Fehler und wieso?

Gruß Matze

Hansa 5. Aug 2003 20:17

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hier ist vielleicht was:

Delphi-Quellcode:
unit grid;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DBCtrls, DB, FIBDataSet, pFIBDataSet, FIBDatabase, pFIBDatabase,
  Grids, DBGrids;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    pFIBDatabase1: TpFIBDatabase;
    pFIBTransaction1: TpFIBTransaction;
    pFIBDataSet1: TpFIBDataSet;
    DataSource2: TDataSource;
    pFIBDatabase2: TpFIBDatabase;
    pFIBTransaction2: TpFIBTransaction;
    pFIBDataSet2: TpFIBDataSet;
    DBLookupComboBox1: TDBLookupComboBox;
    procedure FormCreate(Sender: TObject);
    procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBLookUpComboBox1.visible := false;
end;

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  if (gdFocused in state) then begin
    if (Field.FieldName = DBLookupComboBox1.DataField) then begin
      DBLookUpComboBox1.Left   := Rect.Left + DBGrid1.Left;
      DBLookUpComboBox1.Top    := Rect.Top + DBGrid1.Top;
      DBLookUpComboBox1.Width  := Rect.Right - Rect.Left;
//      DBLookUpComboBox1.Height := Rect.Bottom - Rect.Top;
      DBLookUpComboBox1.Visible := true;
      DBLookUpComboBox1.DropDownRows := 5;
    end;
  end;
end;

end.
So in der Richtung müßte es gehen. Mit FIBplus geht es jedenfalls.

Matze 6. Aug 2003 08:03

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Das ist nett, dass du mir das geschrieben hast, aber ich weiß nicht so Recht, was mir das bringen soll. :?: Die Fehlermeldung:

Index nicht mehr gültig.
Index: Name

kommt immer noch, und außerdem benutze ich gar kein DBGrid. :wink:

Gruß Matze

Hansa 6. Aug 2003 08:51

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Zitat:

Zitat von Matze
Das ist nett, dass du mir das geschrieben hast...

Träumst wohl von Hollywood. :lol: Laß das DBgrid eben weg und schreibe StringGrid1 usw.

Matze 6. Aug 2003 08:55

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Zitat:

Zitat von Hansa
Laß das DBgrid eben weg und schreibe StringGrid1 usw.

Ich benutze gar kein...Grid!!! :mrgreen:

MrSpock 6. Aug 2003 17:46

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hallo Matze,

hat die Tabelle, die das Feld Name enthält, einen Index? Ist dieser Index ausgewählt?

Du solltest ggf. mit der Datenbankoberfläche den Index ggf. löschen und neu anlegen.

Matze 7. Aug 2003 09:02

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hallo!
In der Datenbankoberfläche ist bei Sekundärindizes 'Name' eingestellt.
In der Table1 habe ich bei den 4 Index-Eigenschaften nichts eingestellt. Was muss ich dort einstellen?

Gruß Matze

MrSpock 7. Aug 2003 10:59

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hallo Matze,

ich meine, dass Paradox es eigentlich nicht erlaubt, dass ein Feld einer Tabelle und der Name eines (Sekundär)Indexes denselben Namen haben.

Benutze einmal die Datenbankoberfläche und lösche den Index auf das Feld "Name". Speichere das Ergebnis und lege anschließend einen neuen Sekundärindex auf das Feld "Name" an, das du z.B. idxName nennst.

Wenn du mit locate arbeitest, musst du den Index nicht vorher auswählen. Alternativ kannst du aber bei Table1 die Eigenschaft IndexName auf idxName setzen und anschließend anstatt mit Locate auch mit FindKey suchen:

Delphi-Quellcode:
if Table1.FindKey([Edit1.Text]) then
  { Name gefunden }
else
   { Name nicht gefunden }
Aber auch die locate Anweisung muss funktionieren.

Matze 7. Aug 2003 11:20

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Also, ich hab das mit dem Index jetzt mal weggelassen. Jetzt ist es bei mir so: Es ist egal, welchen Datensatz ich auswähle, es werden immer nur die Daten vom letzten Datensatz zugeordnet. :evil:

So rufe ich den Datensatz auf:

Code:
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
  try
  Form3.Table1.Locate('Name',Combobox2.text,[LoCaseInsensitive]);
  except
  end;
  Edit2.text:=Form3.Table1.fieldbyname('Str').asstring;
  Edit3.text:=Form3.Table1.fieldByname('Ort').asstring;
end;
Gruß Matze

Matze 7. Aug 2003 12:48

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hey, sorry, dass ich nochmal geschrieben hab. Jetzt geht es!! :mrgreen: :mrgreen:

Ich hab einfach die Zeile:

Code:
Form3.Table1.Locate('Name',Combobox2.text,[LoCaseInsensitive]);
durch diese:

Code:
Form3.Table1.Locate('Name',Combobox2.text,[]);
ersetzt.

Mal so nebenbei: Was bedeutet eigentlch das in den eckigen Klammern??

Gruß Matze

MrSpock 7. Aug 2003 21:52

Re: Daten von DBLookUpListBox in ComboBox übernehmen
 
Hallo Matze,

ist schon komisch, dass es mit dieser Änderung funktioniert.

Die eckigen Klammern kennzeichnen eine Menge, in diese kannst du grundsätzlich beliebig viele Elemente der zugrundeliegenden Menge (als Teilmenge) aufnehmen; bei locate gibt es nur zwei Elemente. Schau dir in der OH einmal Set of an.


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