Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 13:06
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat