Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi UniDAC Merkwürdigkeiten (https://www.delphipraxis.net/191177-unidac-merkwuerdigkeiten.html)

haentschman 16. Dez 2016 10:45

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:

Im Projekt dVAServer.exe ist eine Exception der Klasse EDatabaseError mit der Meldung 'Feld 'F_ISVALID' kann nicht als Typ Integer angesprochen werden' aufgetreten.
Die Datenbank Felder sind definiert als INTEGER. Ich würde gern den Datentyp (AsInteger) behalten statt VALUE.

Danke... :P

user0815 16. Dez 2016 10:50

AW: UniDAC Merkwürdigkeiten
 
Müsste doch so gehen oder ?

// <> 1 = False

Code:
MasterDevice.IsValid := Qry.FieldByName('F_ISVALID').AsInteger = 1;

DeddyH 16. Dez 2016 10:56

AW: UniDAC Merkwürdigkeiten
 
Ich würde eher gegen 0 prüfen.
Delphi-Quellcode:
MasterDevice.IsValid := Qry.FieldByName('F_ISVALID').AsInteger <> 0;

haentschman 16. Dez 2016 11:09

AW: UniDAC Merkwürdigkeiten
 
Moin...:wink:

Habt ihr die Fehlermeldung gelesen? :wink: Unabhängig von der späteren Auswertung...
Zitat:

Feld 'F_ISVALID' kann nicht als Typ Integer angesprochen werden'
...ich will auf ein Integer Feld als AsInteger zugreifen aber er läßt mich nicht. :?

Nachtrag: Ist das Boolean der Urheber?

Trotzdem danke... :P

Uwe Raabe 16. Dez 2016 11:11

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.

haentschman 16. Dez 2016 11:14

AW: UniDAC Merkwürdigkeiten
 
Mach ich...8-)

Kann aber eine Weile dauern...

p80286 16. Dez 2016 12:01

AW: UniDAC Merkwürdigkeiten
 
Zitat:

Zitat von haentschman (Beitrag 1356343)
Allerdings habe ich einen Fehler den ich nicht einordnen kann. :? Was früher ging, geht nicht mehr. :?

weil sie jetzt eine strengere Typ-Behandlung eingebaut haben??

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

haentschman 16. Dez 2016 12:08

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.

Uwe Raabe 16. Dez 2016 12:29

AW: UniDAC Merkwürdigkeiten
 
Schau mal hier - sieht ähnlich aus: Unable to access field 'Active' as type Integer

nahpets 16. Dez 2016 13:18

AW: UniDAC Merkwürdigkeiten
 
Zitat:

Zitat von haentschman (Beitrag 1356364)
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.

Rechts neben dem Integer steht noch was: Boolean Normal. Ist das "nur" ein Kommentar oder hat das irgendwelche Bedeutung für den Datentyp?

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:
if DataSet.FieldByName('Aktiv').AsBoolean = true then ...
if DataSet.FieldByName('Aktiv').AsBoolean = false then ...
if DataSet.FieldByName('Aktiv').AsString = '' then ...
Die dritte Variante ist der berühmtberüchtigte Dritte von zwei möglichen Werten ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Seite 1 von 2  1 2      

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