![]() |
combobox problem
hi all
ich nutzte eine access db, und eine ado connection. Habe in Form 1 meine eingaben (zb name und datum, vorname), und speichere die Daten in der datenbank. nun soll in der combobox die "namen"- Spalte aus der access db gelesen werden, und die andern datenssätze sollen damit gesteuert werden. hum is das verwirrt Bsp: Eingabe: Name Datum Vorname Richter 17.09.2004 Gerdrut Müller 16.09.2004 Michael Ausgabe: in der combobox sollen nun richter und müller stehen, wenn ic hdie auswähle, soll in anderen feldern, die zugehörigen daten erscheinen .D hoffe ihr versteht mich danke :D |
Re: combobox problem
So vertwirrend nun auch nicht.
Du liest die andern sachen einfach in OnChange-Event aus |
Re: combobox problem
öhm ja, verstehe ich ned ganz
das problem ist, hab ich vergessen zu erwähnen, das in meiner combobox nix angzeigt wird, wenn ich die ado connection aufgebaut habe |
Re: combobox problem
kann mir keiner helfen ?
|
Re: combobox problem
Zitat:
|
Re: combobox problem
wieso, wir sind hier doch in datenbanken sparte, und ich denk mal das das mit was zu tun hat, darum frage ich ja hier
zb wenn ich dbgrid nehme funzt es wird alles angezeigt, nur mit der combobox halt ned, die aber gleich auch meine datensätze steuern soll |
Re: combobox problem
Zitat:
ich glaube hier liegt ein kleines "Verständnissproblem" vor ;-) Mit einer DBCombobox kannst Du nicht in einer Tabelle navigieren! Mit dieser kannst Du dem Datenfeld das Du in DataField angegeben hast einen Wert zuweisen der entweder in die Combobox eingetippt wird oder ein Wert der aus der Eigenschaft Items ausgewählt wird. Wenn Du mit einer "Combobox" in deiner Tabelle navigieren möchtest kannst Du dafür eine DBLookupCombobox missbrauchen. Zuerst aber mal die "offizielle" Verwendung der DbLCb. Diese ist dafür da um im Feld DataField der Tabelle DataSource den Wert aus dem Feld KeyField der Tabelle ListSource zuweisen zu können. Angezeigt wird in der DbLCb das Feld ListField aus der Tabelle ListSource. Uff... schöner Satz oder? :stupid: Ein klassiches Beispiel dafür ist zum Beispiel das Speichern von Anreden in einer Adress-Tabelle:
Code:
Adress-Tabelle
adress_id : Integer anrede_id : Integer name : String vorname : String
Code:
Die Eigenschaften der DBLookupComboBox wären jetzt so:
Anreden-Tabelle
anrede_id : Integer anrede : String
Code:
So könnte man mit Hilfe der DbLCb die Anrede ändern.
DataSource : Adress-Tabelle
DataField : anreden_id ListSource : Anreden-Tabelle KeyField : anreden_id ListField : anrede Aber das alles möchtest Du ja überhaupt nicht :lol: Du möchtest nur mit Hilfe einer ComboBox in eine Tabelle navigieren. Ganz einfach. Lasse DataSource und DataField unbenutzt. Möchtest Du zum Beispiel durch die Adress-Tabelle navigieren setze die Eigenschaften so:
Code:
Einen kleinen Fehler hat das ganze aber! Wenn Du auf andere Weise durch deine Tabelle navigierts (DBGrid, .Next, .First usw) bekommt die DbLCb das nicht mit. In diesem Fall müsstest Du dich von Hand darum kümmern das die Anzeige dort stimmt.
DataSource :
DataField : ListSource : Adress-Tabelle KeyField : adress_id ListField : name So, ich hoffe das hilft Dir etwas weiter. |
Re: combobox problem
Hallo,
ich "mißbrauche" die ComboBox (NICHT DBCombo...) auch oft zum Navigieren in der Datenmenge. Wie Sharky schon gesagt hat, ist hierbei allerdings Handarbeit erforderlich. z.B. so: Eine kleine Datenstruktur zur Speicherung der ID in meiner Tabelle (Jede Tabelle bekommt bei mir eine LongInteger ID als Primary Key)
Delphi-Quellcode:
Dann eine Funktion mit der die Daten einer SQL-Abfrage
type aTag = class(TObject)
ID : Integer; end;
SQL-Code:
in der ComboBox dargestellt werden:
(z.B. Select Vorname + ' ' + Nachname as AnzeigeText, IDAdresse as AnzWert from Adressen Order by Nachname ASC )
Delphi-Quellcode:
Im Programm steht dann im OnChange Event der ComboBox etwa folgendes:
procedure TDBTools.readDBDaten( SQLAbfrage :String; Combo:TComboBox );
var tmpTag : aTag; tmpStr:String; begin with DBModul.SQLAbfrage do begin Close; SQL.Clear; SQL.Add( SQLAbfrage ); CursorType := ctOpenForwardOnly; Open; while not EOF do begin tmpStr := FieldbyName('AnzText').asString; tmpTag := aTag.Create(); tmpTag.ID := FieldbyName('AnzWert').asInteger; Combo.Items.AddObject( tmpStr,tmpTag); next(); end; Close; CursorType := ctKeySet; end; end;
Delphi-Quellcode:
dann Selektion des Datensatzes via SQL-Statement
einTag := aTag( meineComboBox.Items.Objects[ meineComboBox.ItemIndex ] );
tmpIDAdresse := einTag.ID;
Delphi-Quellcode:
oder falls die Daten sowieso schon in einer Tabelle verfügbar sind
"Select * from Adressen where IDAdresse =" + tmpIDAdresse
Delphi-Quellcode:
Ich hoffe es hilft.
if ADOTable1.Locate('IDAdresse',tmpIDAdresse) then begin
// usw. end; Niels |
Re: combobox problem
Zitat:
|
Re: combobox problem
danke für die hilfe werde das mal testen
aber ich wollte halöt mit der combobox machen weil die sich für meine programm gut eignet. ich will ja nicht direkt in der tabelle navigieren. ich will halt nur in der combobox zb alle namen drine stehen haben, die ich vorher in die datenbank gespeichert habe. wenn dann ein name angezeigt wird, will ich nur in anderen datenfeldern, die zugehörigen daten angezeigt haben, ich dachte das geht mfg eddy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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