Hi zusammen
@SebastianZ:
Zitat:
So, noch mal zum mitdenken:
Du hast eine Combobox an deren Items du irgendwelche Instanzen hängst.
Genau genommen speichere ich einen Datensatz aus einer Abfrage meiner Kategorientabelle, bzw. aus dem
Query, das diese abfragt, in einem eigenen Object.
Grundsätzlich erstreckt sich der komplette Datensatz eigentlich über 12 Tabellen, hier aber nur gerade auf die eine, und die hat auch nur 2 Felder: den Primarykey und einen String.
Der String wird dem CMbx.Item zugewiesen, der PK dem Cmbx.items.Objects.
Zitat:
Wenn was drinnen steht, ein Text oder ein Objekt?
Irgendwo da setzte mein Denkfehler ein: Es ist nicht möglich, dass ein Objekt drin steht ohne ein Item als 'Parent' (Das Object ist ein Property des Item-Objects).
Zitat:
Soll das Item, das kein Objekt hat nicht auswählbar sein, Liste entfernt werden, oder auswählbar sein, nur ohne
AV?
Falls ersteres: warum werden Items ohne Objekt überhaupt in die Liste genommen?
Grundsätzlich sollte jeder der aus der erwähnten
DB-Abfrage stammenden Datensätze :
- Den Stringwert einem Item und den
- PK-Wert einem Items.Objects zugewiesen werden
- Items ohne zugehöriges Object kann/sollte es in diesem Falle nicht geben
Zur Verdeutlichung die Abfrage:
Delphi-Quellcode:
procedure TFDMySQLDml.SelectCategoryRecords;
var SQLString: String; Zero: Boolean;
QueryCategory : TQueryResultClass; LCategory : String; LCategoryKey : Integer;
begin
if FCategoryList.Count>0 then
FCategoryList.Clear;
if assigned(FOnStartCategoryQuery) then
begin
Zero := True;
FOnStartCategoryQuery(Self, Zero); //<=Der Empfänger dieses Ereignisses leert die Combobox
end;
FDMySQLQueryInfo.SQL.Clear;
SQLString := 'SELECT Kath_ID as Kath_ID, Kategorie as Kategorie FROM contentmasterdata.kategorien_tabelle';
FDMySQLQueryInfo.Open(SQLString); //<==Kategorientabelle wird nicht gefunden `` ` ` `` UTF8
FDMySQLQueryInfo.First;
while not FDQueryMain.Eof do //TFDMySQLDml-Klasse
begin
QueryCategory := TQueryResultClass.Create(Self);
QueryCategory.KategoryTabelle.Kath_Id := FDMySQLQueryInfo.FieldByName('Kath_ID').AsInteger;
QueryCategory.KategoryTabelle.Kategory := UTF8ToUnicodeString(FDMySQLQueryInfo.FieldByName('Kategorie').AsString);
FCategoryList.Add(QueryCategory);
if assigned(FOnFoundedCategory) then
begin
LCategory := QueryCategory.KategoryTabelle.Kategory;
LCategoryKey := QueryCategory.KategoryTabelle.Kath_Id;
FOnFoundedCategory(Self,LCategory,LCategoryKey);
end;
FDMySQLQueryInfo.Next;
end;
// CM_First.CmbxFrame1.ComboBox1.Items.Add(FCategoryList.CurrentRecord.KategoryTabelle.Kategory);
FDMySQLQueryInfo.SQL.Clear;
FDMySQLQueryInfo.Close;
end;
Der Empfänger:
Delphi-Quellcode:
procedure TCM_First.DoOnFoundedCategory(Sender: TObject;
const Category: String; const CategoryKey : Integer);
begin
CmbxFrame1.ComboBox1.Items.Add(Category);
CmbxFrame1.CmbxCategorys.Items.AddObject(Category,TObject(CategoryKey)); <===
Application.ProcessMessages;
end;
Mein (Flüchtigkeits-)Fehler war, dass ich ursprünglich nur prüfte, ob das Objekt vorhanden ist, bevor ich es einem andern Object zuwies - es hätte gereicht, das Item aauf vorhandensein zu prüfen. Denn ohne Item auch kein Items.Objekt...
Gruss
Delbor