Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird BigInt - Fehler bei Bereichsüberprüfung (https://www.delphipraxis.net/166891-firebird-bigint-fehler-bei-bereichsueberpruefung.html)

Perlsau 4. Mär 2012 15:27

Datenbank: Firebird • Version: 2.5 • Zugriff über: FibPlus

Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Moin DelphiPraxler,

in meiner Datenbank-Anwendung entsteht ein "Fehler bei Bereichsüberprüfung", wenn ich einem in der Datenbank als BigInt (20 Zeichen) deklarierten Feld einen Integerwert mit 10 Stellen zuweisen möchte. Der aktuelle Wert, bei dem Delphi meckert, ist 2.178.588.332 (die Größe einer mp4-Datei).

Delphi-Quellcode:
Dset_Datei.FieldByName('DATEIGROESSE').AsInteger := FileInfo.Size;


Liegt es möglicherweise am Parameter AsInteger, daß die Zuweisung nicht klappt. Ich habe auch bereits in den persistenten Feldern meines Datasets den DisplayWith des Feldes 'DATEIGROESSE' von 10 auf 20 gesetzt, der Fehler erscheint jedoch immer noch.
Leider gibt es ja kein AsInt64 für die Zuweisung von Werten, die größer sind als 2.147.483.647, ich kann jetzt höchstens noch versuchen, den Wert AsVariant zuzuweisen. Die Variable File.Size ist vom Typ Int64.

himitsu 4. Mär 2012 15:35

AW: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Delphi-Referenz durchsuchenTField.AsLargeInt
.AsVariant nicht, aber es gäbe noch ein ein .Value

Du scheinst ja einer der Wenigen zu sein, welcher die Bereichsüberprüfung in den Projektoptionen auch mal aktiviert hat.
Denn sonst wäre der Fehler wohl nicht so schnell aufgefallen. :thumb:



Tipp:
Gib das nächste mal
Delphi-Quellcode:
Dset_Datei.FieldByName('DATEIGROESSE').As
ein und schau was dir die Autovervollständigung so alles anbietet,
vorallen welche Datentypen die angebotenen Dinge haben und such dir dort etwas Passendes raus.

Perlsau 4. Mär 2012 16:04

AW: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Zitat:

Zitat von himitsu (Beitrag 1154452)

Gibt es bei FibPlus-Dataset leider nicht :cry:

Zitat:

Zitat von himitsu (Beitrag 1154452)
.AsVariant nicht, aber es gäbe noch ein ein .Value

Die Version mit .AsVariant läuft gerade durch, er hat's gleich :lol:

Zitat:

Zitat von himitsu (Beitrag 1154452)
Du scheinst ja einer der Wenigen zu sein, welcher die Bereichsüberprüfung in den Projektoptionen auch mal aktiviert hat. Denn sonst wäre der Fehler wohl nicht so schnell aufgefallen. :thumb:

Keine Ahnung, wie viele Leute die Überprüfungen einschalten, ich mache das in den Debug-Einstellungen immer. Wird am Ende mit Release-Einstellung kompiliert, sind die Überprüfungen natürlich deaktiviert. So sollte man es wohl auch machen, es sei denn, man interessiert sich nicht für Laufzeitfehler ...

Zitat:

Zitat von himitsu (Beitrag 1154452)
Tipp: Gib das nächste mal
Delphi-Quellcode:
Dset_Datei.FieldByName('DATEIGROESSE').As
ein und schau was dir die Autovervollständigung so alles anbietet, vorallen welche Datentypen die angebotenen Dinge haben und such dir dort etwas Passendes raus.

Danke, aber ich arbeite immer mit Autovervollständigung, schon allein, weil's schneller geht und Fehler vermeiden hilft.

himitsu 4. Mär 2012 16:43

AW: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Nja, der Variant ist ein Typ, welcher unter Anderem einen Int64 enthalten kann, also ist das eine gute Lösung.
Abgesehn von der "unnötigen" Formatkonvertierung, falls es doch einen passenden nativen Weg gäbe.

Zitat:

Zitat von Perlsau (Beitrag 1154456)
Gibt es bei FibPlus-Dataset leider nicht :cry:

Gut, ich hätte erwartet, daß die auch auf TDataSet und damit auf TField aufsetzen. Kenn TpFIBDataSet allerding nicht.
Aber wenn dem nicht so ist. :?

Zitat:

Zitat von Perlsau (Beitrag 1154456)
Keine Ahnung, wie viele Leute die Überprüfungen einschalten,

Genug Probleme / Threads in der DP wären von selbst aufgefallen/gelöst, wenn mehr sowas machen würden.

Perlsau 4. Mär 2012 16:55

AW: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Zitat:

Zitat von himitsu (Beitrag 1154462)
Nja, der Variant ist ein Typ, welcher unter Anderem einen Int64 enthalten kann, also ist das eine gute Lösung.

Scheint auch zu funktionieren. Ergebnis kann ich aber erst sehen, wenn meine Anwendung die ganze 1,5 Terrabyte-Platte gescant hat, sonst müßte ich den Suchlauf abbrechen, und das möchte ich nicht. (Ich lieg eh gleich in der Wanne, bis dahin dürfte er durch sein ...)

Zitat:

Zitat von himitsu (Beitrag 1154462)
Abgesehn von der "unnötigen" Formatkonvertierung, falls es doch einen passenden nativen Weg gäbe.

Die Formatkonfertierung stört mich im Augenblick weniger, es ist ja eh nur ein Testprogramm ...
Mir kam auch noch in den Sinn, einen String zu verwenden (unsaubere Lösung, ich weiß) oder mittels SQL-Statement zuzuweisen.

Zitat:

Zitat von himitsu (Beitrag 1154462)
Zitat:

Zitat von Perlsau (Beitrag 1154456)
Gibt es bei FibPlus-Dataset leider nicht :cry:

Gut, ich hätte erwartet, daß die auch auf TDataSet und damit auf TField aufsetzen. Kenn TpFIBDataSet allerding nicht.
Aber wenn dem nicht so ist. :?

Ja, ich bin auch überrascht, da die Firma mit Firebird-Kompatibilität wirbt und dann sowas! Weißt du, ob das Dataset von AnyDac einen LargInt-Parameter kennt?

Zitat:

Zitat von himitsu (Beitrag 1154462)
Zitat:

Zitat von Perlsau (Beitrag 1154456)
Keine Ahnung, wie viele Leute die Überprüfungen einschalten,

Genug Probleme / Threads in der DP wären von selbst aufgefallen/gelöst, wenn mehr sowas machen würden.

Daher siehst du mich auch selten hier oder in den anderen Foren Fragen stellen – das meiste fällt mir selbst auf wie z.B. heute mittag der versehentliche Zuweisungsversuch eines Strings an ein als Integer deklariertes Feld :stupid: Da gab's eine Zugriffsverletzung, und ich mußte erstmal Stück für Stück meinen Code durchackern, bis ich's gefunden hatte ...

Perlsau 4. Mär 2012 17:34

GELÖST: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Zitat:

Zitat von Perlsau (Beitrag 1154451)
ich kann jetzt höchstens noch versuchen, den Wert AsVariant zuzuweisen. Die Variable File.Size ist vom Typ Int64.

Mit AsVariant funktioniert die Zuweisung eines Int64 an ein Firebird-BigInt-Feld einwandfrei! :-D

alex517 5. Mär 2012 11:34

AW: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Warum verwendest du nicht .AsInt64?:gruebel:

Oder ist das jetzt zu einfach.:-D

Perlsau 5. Mär 2012 11:37

AW: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Zitat:

Zitat von alex517 (Beitrag 1154566)
Warum verwendest du nicht .AsInt64?:gruebel:
Oder ist das jetzt zu einfach.:-D

Wenn du die Diskussion verfolgt hättest, wüßtest du, daß ich diese Frage weiter oben bereits beantwortet habe: Das gibt's bei FibPlus nicht, zumindest nicht in meiner Version für Delphi 2009.

alex517 5. Mär 2012 11:59

AW: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
bitte um Entschuldigung, habe ich überlesen, aber

Bei mir unter D7 + FibPlus Version 6.9.9 gibt es .AsInt64.
und in XE2 + FibPlus Version 7.2 gibt es ein .AsLarge was als Int64 definiert ist.

Perlsau 5. Mär 2012 12:18

AW: Firebird BigInt - Fehler bei Bereichsüberprüfung
 
Zitat:

Zitat von alex517 (Beitrag 1154573)
bitte um Entschuldigung, habe ich überlesen

No Problem.

Zitat:

Zitat von alex517 (Beitrag 1154573)
Bei mir unter D7 + FibPlus Version 6.9.9 gibt es .AsInt64.
und in XE2 + FibPlus Version 7.2 gibt es ein .AsLarge was als Int64 definiert ist.

Tja, ich hab 'ne ältere Version, die auch noch andere Schwächen zeigt, z.B. Stack Overflow bei Anwendung von DoSort auf größere Tabellen (aktuell 160.000 Datensätze). Mein Test hat ergeben, daß meine alte Version nicht wirklich brauchbar ist ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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