![]() |
Delphi-Version: XE8
Abfrage scheint nicht zu funktionieren
Hi zusammen
Ich habe folgendes Konsttrukt:
Delphi-Quellcode:
Der Sinn ist, den (lesenden) Zugriff auf die Compobox nur zuzulassen, wenn da auch wirklich was drinsteht, weil es sonst eine AV gibt - aber genau diese gibt es (Listenindex ausserhalb...).
if CmbxCategorys.Items.Objects[0] <> nil then
ApplicationManager.CategoryKey := Integer(CmbxCategorys.Items.Objects[0]); Wieso das? Abfragen, ob ein Objekt nil ist, laufen sonst meiner Erinnerung nach immer ohne AV durch... Etwas nachdenken bringt oft "Wunder", und so habe ich die Zeilen etwas abgeändert:
Delphi-Quellcode:
In dieser Compobox werden die in der DB vorhandenen Kategorien mit ihren Primärschlüsselwerten aufgelistet, sofern die entsprechende Tabelle auch solche enthält.
if CmbxCategorys.Items.Count > 0 then
begin ApplicationManager.Category := CmbxCategorys.Items[0]; if CmbxCategorys.Items.Objects[0] <> nil then ApplicationManager.CategoryKey := Integer(CmbxCategorys.Items.Objects[0]); end; Das ist um Beispiel beim ersten Programmstart nicht so. Trotzdem erstaunt mich die Reaktion - grundsätzlich könnten ja items vorhandensein, die zusätzlichen Objekte aber nicht... Des weiteren könnte ein Programm - wie meines zum Bleistift - eine Auswahlbox zur Verfügung stellen, die erstmal leer ist und erst im weiteren Programmverlauf mit Daten gefüllt wird. Gruss Delbor |
AW: Abfrage scheint nicht zu funktionieren
Zitat:
nach meinem Kenntnisstand gibt es diese erst in der
Delphi-Quellcode:
. Die Items aus der
TStringlist
Delphi-Quellcode:
sind noch
TCombobox
Delphi-Quellcode:
.
Tstrings
Gruß K-H |
AW: Abfrage scheint nicht zu funktionieren
Hi p80286
Zitat:
Wenn ich ![]() ![]() ![]() Objekte werden bereits bei ![]() Aber danke für deinen Beitrag; der hat dazu geführt, dass ich mir wieder mal etwas Grundlagen repetiert habe! :) Gruss Delbor |
AW: Abfrage scheint nicht zu funktionieren
So, noch mal zum mitdenken:
Du hast eine Combobox an deren Items du irgendwelche Instanzen hängst. Später läufst du die Items dann durch und gibst irgend einem ApplikationsManager irgendeinen CategoryKey? Ein paar Fragen: 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? Generell habe ich das Gefühl, dass hier eine etwas unglückliche Herangehensweise gewählt wurde. Zitat:
|
AW: Abfrage scheint nicht zu funktionieren
Zitat:
|
AW: Abfrage scheint nicht zu funktionieren
Zitat:
Zitat:
Gruß K-H |
AW: Abfrage scheint nicht zu funktionieren
Zitat:
Die TListBox verwaltet ihre "Strings", ähhhh Items, einzeln und es wird angeboten zu Jedem ein Objects zu hinterlegen. Das TMemo verwaltet seine Strings als einen String und hat keinerlei Speicher zu den Zeilen für die Objects. Gut, man könnte auch eine Exception werfen, wenn jemand versucht dem Object was zuzuweisen, es aber nicht unterstützt wird, anstatt die Operation stillschweigend nichts machen zu lassen. |
AW: Abfrage scheint nicht zu funktionieren
Das hab ich nie geschrieben... Lügenpresse :mrgreen:
|
AW: Abfrage scheint nicht zu funktionieren
Hi zusammen
@SebastianZ: Zitat:
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:
Zitat:
Delphi-Quellcode:
Der Empfänger:
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;
Delphi-Quellcode:
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...
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; Gruss Delbor |
AW: Abfrage scheint nicht zu funktionieren
Ich verstehe Deinen Code nicht einmal zur Hälfte, allein schon die Tatsache, dass Du Eof von FDQueryMain abfragst, dann aber durch FDMySQLQueryInfo interierst, lässt mir das Hirn einfrieren. Es scheint so, als versuchtest Du DataBinding oder gar ORM selbst zu stricken. Wären da nicht z.B.
![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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-2025 by Thomas Breitkreuz