![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: UniDAC
UniDAC Merkwürdigkeiten
Hallo...:P
Ich habe mein Project auf Berlin incl. UniDAC gehoben. Allerdings habe ich einen Fehler den ich nicht einordnen kann. :? Was früher ging, geht nicht mehr. :?
Code:
MasterDevice.Active := Boolean(Qry.FieldByName('F_ACTIVE').Value); // <- das geht (Test)
MasterDevice.IsValid := Boolean(Qry.FieldByName('F_ISVALID').AsInteger); // <- resultiert im Fehler MasterDevice.ConfigurationName := Qry.FieldByName('F_CONFIGURATION_NAME').AsString; Zitat:
Danke... :P |
AW: UniDAC Merkwürdigkeiten
Müsste doch so gehen oder ?
// <> 1 = False
Code:
MasterDevice.IsValid := Qry.FieldByName('F_ISVALID').AsInteger = 1;
|
AW: UniDAC Merkwürdigkeiten
Ich würde eher gegen 0 prüfen.
Delphi-Quellcode:
MasterDevice.IsValid := Qry.FieldByName('F_ISVALID').AsInteger <> 0;
|
AW: UniDAC Merkwürdigkeiten
Moin...:wink:
Habt ihr die Fehlermeldung gelesen? :wink: Unabhängig von der späteren Auswertung... Zitat:
Nachtrag: Ist das Boolean der Urheber? Trotzdem danke... :P |
AW: UniDAC Merkwürdigkeiten
Kannst du mal prüfen, was bei F_ISVALID für ein Feldtyp von UniDAC generiert wird? Wenn es ein TBooleanField ist, würde das dieses Verhalten erklären.
|
AW: UniDAC Merkwürdigkeiten
Mach ich...8-)
Kann aber eine Weile dauern... |
AW: UniDAC Merkwürdigkeiten
Zitat:
Ist F_ISVALID denn auch wirklich ein Integer? (ich hab schon Felder gesehen die sollten numerisch sei, es hatte dann aber nur für Alpha gereicht!) Neben dem DB-Typ wäre ja auch noch interessant ob Du im zugehörigen Select noch irgendwelche TypeCasts durchgeführt hast? Gruß K-H |
AW: UniDAC Merkwürdigkeiten
Liste der Anhänge anzeigen (Anzahl: 2)
Hallöle...8-)
Danke für deine Anteilnahme. :P 1. Es ist ein Integer Feld. Früher mit IBDAC war das kein Problem darauf via AsInteger zuzugreifen. 2. Meine Datenbankfelder kenne ich persönlich mit Namen... 8-) Da ist keine Verwechslung möglich. |
AW: UniDAC Merkwürdigkeiten
Schau mal hier - sieht ähnlich aus:
![]() |
AW: UniDAC Merkwürdigkeiten
Zitat:
Mich würde da nun nicht wundern, wenn datanbankseitig ein boolsches Feld wie ein Integer behandelt wird, aber nach außen durchaus als boolscher Wert "verkauft" wird. Wäre meiner Meinung nach aus durchaus sinnvoll. Habe mich immer wieder über solche Konstrukte amüsiert:
Delphi-Quellcode:
Die dritte Variante ist der berühmtberüchtigte Dritte von zwei möglichen Werten ;-)
if DataSet.FieldByName('Aktiv').AsBoolean = true then ...
if DataSet.FieldByName('Aktiv').AsBoolean = false then ... if DataSet.FieldByName('Aktiv').AsString = '' then ... |
AW: UniDAC Merkwürdigkeiten
Hallo...
Zitat:
Inzwischen habe ich herausgefunden, das das Integer Feld nach Boolean gemappt wird bei Verwendung als Boolean Wert.
Delphi-Quellcode:
...ich würde sagen das eine Eigenart ist die aus den multiplen DBMS entsteht. :wink: Das müssen wir noch üben...
MasterDevice.IsValid := Qry.FieldByName('F_ISVALID').AsBoolean;
@Uwe: Das Mapping der Integer Felder als Boolean bringt es nicht. Das gilt dann für alle Felder. Das Mapping für die einzelnen Felder ist mit Arbeit verbunden... da kann ich gleich VALUE nehmen. :P |
AW: UniDAC Merkwürdigkeiten
Zitat:
|
AW: UniDAC Merkwürdigkeiten
:P
Im Prinzip muß ich ruhig sein...Die Umstellung von IBDAC auf UniDac war eine Action von einer Stunde. :thumb: Hier hat mir sehr geholfen, das die SQL nicht über die Anwendung verteilt hatte sondern alles in einem Interface gekapselt ist. Danke an alle. :P |
AW: UniDAC Merkwürdigkeiten
Hat das nicht vielleicht damit zu tun, dass Unidac eine integerbasierte Domain als Boolean-Feld erwartet, deren Bezeichner die Zeichenfolge "BOOLEAN" beinhalten muß?
Used to create TBooleanField for fields that have domain of the integer data type, and the domain name contains 'BOOLEAN'. ![]() FireDac: A boolean field may be created using a domain. The domain name must contain 'BOOL' substring. Also, add ExtendedMetadata=True parameter to your connection definition. CREATE DOMAIN T_BOOLEAN SMALLINT; CREATE TABLE ... ( ... BOOLEAN_FIELD T_BOOLEAN, ...); Die Lösung, AsValue statt AsBoolean zu verwenden, wäre für mich nicht durchgängig praktikabel, weil ich auch datensensitive Steuerelemente wie DBCheckboxen und DBGrids verwende. |
AW: UniDAC Merkwürdigkeiten
Hallöle...:P
Das ist mal ein Ding...8-) Das der Name der Domain die "Logik" beeinfusst. :gruebel: Ich werde das mal im Hinterkopf behalten. Danke...8-) Nachtrag: Wenn ich die Domain von BOOLEAN NORMAL in BO_NORMAL ändere, wird das Feld wie gewohnt als Integer angesprochen... Dinge gibt es...:gruebel: Danke nochmal. |
AW: UniDAC Merkwürdigkeiten
Zitat:
Bei dir liegt dann das Problem genau andersherum, nämlich dass ein Boolean-Typ nicht als Integer angesprochen werden kann. Ach ja: Typbezeichner mit Leerzeichen sind auch in Firebird keine gute Idee. Und nochwas: Wenn man mit Firedac auf eine Firebird-Datenbank zugreift und diese selbsterstellten Boolean-Domains verwenden will, muß man in der Connection-Komponente unbedingt die Eigenschaft ExtendedMetadata=True setzen, sonst funktioniert das nicht und die Fehlermeldung lautet auch hier, dass auf diesen Typen nicht als Boolean zugegriffen werden kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 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