AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage scheint nicht zu funktionieren

Ein Thema von Delbor · begonnen am 30. Mär 2017 · letzter Beitrag vom 31. Mär 2017
Antwort Antwort
Seite 1 von 2  1 2      
Delbor

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

Abfrage scheint nicht zu funktionieren

  Alt 30. Mär 2017, 17:15
Delphi-Version: XE8
Hi zusammen
Ich habe folgendes Konsttrukt:
Delphi-Quellcode:
    if CmbxCategorys.Items.Objects[0] <> nil then
      ApplicationManager.CategoryKey := Integer(CmbxCategorys.Items.Objects[0]);
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...).
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:
    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;
In dieser Compobox werden die in der DB vorhandenen Kategorien mit ihren Primärschlüsselwerten aufgelistet, sofern die entsprechende Tabelle auch solche enthält.
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
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
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 12:22
Trotzdem erstaunt mich die Reaktion - grundsätzlich könnten ja items vorhandensein, die zusätzlichen Objekte aber nicht...
Welche Objekte?
nach meinem Kenntnisstand gibt es diese erst in der TStringlist . Die Items aus der TCombobox sind noch Tstrings .

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Delbor

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

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 12:44
Hi p80286
Zitat:
Welche Objekte?
Integer- oder Stringwerte zum Bleistift. Das hat so auf meiner alten Kiste funktioniert - natürlich bis auf die Sache mit dem Erststart, da die DB zu diesem Zeitpunkt noch keine Kategorien enthält.

Wenn ich das und das richtig interpretiere, haben die beiden gerade mal TPersistent in ihrer Ahnengallerie, während die Items in TListbox&Co TStrings-Objekte sind.
Objekte werden bereits bei TStrings eingeführt

Aber danke für deinen Beitrag; der hat dazu geführt, dass ich mir wieder mal etwas Grundlagen repetiert habe!

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (31. Mär 2017 um 13:08 Uhr) Grund: ein vorwitziges 'r' ins Nirwana geschickt...
  Mit Zitat antworten Zitat
SebastianZ

Registriert seit: 23. Jul 2009
89 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 12:49
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:
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...).
Wenn was drinnen steht, ein Text oder ein Objekt?
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.

Hi p80286
Zitat:
Welche Objekte?
Integer- oder Stringwerte zum Bleistift. Das hat so auf meiner alten Kiste funktioniert - natürlich bis auf die Sache mit dem Erststart, da die DB zu diesem Zeitpunkt noch keine Kategorien enthält.

Gruss
Delbor
Integers und Strings sind keine Objekte.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 12:52
Die Items aus der TCombobox sind noch Tstrings
Es sind TComboBoxStrings, abgeleitet von TCustomComboBoxStrings, wiederum abgeleitet von TStrings
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 13:24
Die Items aus der TCombobox sind noch Tstrings
Es sind TComboBoxStrings, abgeleitet von TCustomComboBoxStrings, wiederum abgeleitet von TStrings
Danke! ich bin über
Zitat:
Wenn der Eigenschaft Objects eines TStrings-Objekts ein Wert zugewiesen wird, hat dies keinen Effekt. Entsprechend wird beim Lesen nil (Delphi) bzw. NULL (C++) zurückgegeben. Erst die Nachkommen dieser Klasse können einzelnen Strings mit Hilfe der Eigenschaft Objects Objekte zuordnen.
gestolpert.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 13:56
Erst die Nachkommen dieser Klasse können einzelnen Strings mit Hilfe der Eigenschaft Objects Objekte zuordnen.
"können" ist dabei wichtig.

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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 13:58
Das hab ich nie geschrieben... Lügenpresse
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
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, 14: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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

AW: Abfrage scheint nicht zu funktionieren

  Alt 31. Mär 2017, 15:07
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. Aurelius oder EntityDAC einen Blick wert? Von beiden gibt es auch kostenlose Express-Editionen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:32 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