Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FireDAC Exception, wenn String länger als Feldlänge beim select (https://www.delphipraxis.net/191844-firedac-exception-wenn-string-laenger-als-feldlaenge-beim-select.html)

DCoderHH 24. Feb 2017 13:13

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

FireDAC Exception, wenn String länger als Feldlänge beim select
 
Hallo,

ich frage in einer Firebird-DB mit einer TFDQuery ein VarChar-Feld (Länge 7, UTF8) wie folgt ab:

Code:
select Bezeichnung from MyTable where Code = '12345678'
Dabei wird die folgende Exception ausgelößt:
Code:
[FireDAC][Phys][FB]Dynamic SQL Error

SQL error code = -303

arithmetic exception, numeric overflow, or string truncation
string right truncation.
Das ist so, weil der String '12345678' mit 8 Zeichen Länge genau 1 Zeichen länger ist, als die Feldlänge vom Feld "Code".

Gibt es in den FireDAC-Komponenten ein Einstellung, mit der ich die Längenprüfung deaktiveren kann? Andere DB-Komponenten wie z.B. von DEVAR IBDAC haben dieses Verhalten ja z.B. auch nicht. Da der SQL-Ausdruck dynamisch erzeugt wird und viele verschiedene Felder, Tabellen, Queries genutzt werden, möche ich auch nicht im Code den String vorher auf die maximale Länge zuschneiden.

Uwe Raabe 24. Feb 2017 14:05

AW: FireDAC Exception, wenn String länger als Feldlänge beim select
 
Zitat:

Zitat von DCoderHH (Beitrag 1362542)

Code:
select Bezeichnung from MyTable where Code = '12345678'
....

Das ist so, weil der String '12345678' mit 8 Zeichen Länge genau 1 Zeichen länger ist, als die Feldlänge vom Feld "Code".

Was soll denn dann die SELECT-Anweisung zurückliefern? Rein logisch müsste die in dem Fall immer leer sein, da die WHERE-Bedingung nie erfüllt sein kann.

DCoderHH 24. Feb 2017 14:07

AW: FireDAC Exception, wenn String länger als Feldlänge beim select
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1362551)
Zitat:

Zitat von DCoderHH (Beitrag 1362542)

Code:
select Bezeichnung from MyTable where Code = '12345678'
....

Das ist so, weil der String '12345678' mit 8 Zeichen Länge genau 1 Zeichen länger ist, als die Feldlänge vom Feld "Code".

Was soll denn dann die SELECT-Anweisung zurückliefern? Rein logisch müsste die in dem Fall immer leer sein, da die WHERE-Bedingung nie erfüllt sein kann.

Ja, das Ergebnis soll leer sein. '12345678' steht hier nur als Beispiel, für einen String, den der User eintippen kann...

Uwe Raabe 24. Feb 2017 14:33

AW: FireDAC Exception, wenn String länger als Feldlänge beim select
 
Ich habe das hier mal gerade probiert und bekomme den von dir beschriebenen Fehler hier nicht. Die Datenmenge ist einfach nur leer.

mjustin 24. Feb 2017 15:02

AW: FireDAC Exception, wenn String länger als Feldlänge beim select
 
Zitat:

Zitat von DCoderHH (Beitrag 1362542)
Code:
[FireDAC][Phys][FB]Dynamic SQL Error

SQL error code = -303

arithmetic exception, numeric overflow, or string truncation
string right truncation.

Das sieht nach einer serverseitigen Fehlermeldung aus. Funktioniert das Statement, wenn es genau so im (grafischen oder Kommandozeilen) Firebird Client eingegeben wird? Ich tippe auf nein.

DCoderHH 24. Feb 2017 15:04

AW: FireDAC Exception, wenn String länger als Feldlänge beim select
 
Zitat:

Zitat von mjustin (Beitrag 1362562)
Zitat:

Zitat von DCoderHH (Beitrag 1362542)
Code:
[FireDAC][Phys][FB]Dynamic SQL Error

SQL error code = -303

arithmetic exception, numeric overflow, or string truncation
string right truncation.

Das sieht nach einer serverseitigen Fehlermeldung aus. Funktioniert das Statement, wenn es genau so im (grafischen oder Kommandozeilen) Firebird Client eingegeben wird? Ich tippe auf nein.

Mit dem IBExpert läufts. Es liegt also an Delphi/FireDAC-Komponenten.

MichaelT 24. Feb 2017 15:17

AW: FireDAC Exception, wenn String länger als Feldlänge beim select
 
Bei mir liefert die DB egal welchen Character Set ich einstelle ein leere Menge als Ergebnis. Was wäre denn der DB Character Set, den habe ich nicht gesetzt.

Zitat:

Zitat von Uwe Raabe (Beitrag 1362558)
Ich habe das hier mal gerade probiert und bekomme den von dir beschriebenen Fehler hier nicht. Die Datenmenge ist einfach nur leer.


DeddyH 24. Feb 2017 15:30

AW: FireDAC Exception, wenn String länger als Feldlänge beim select
 
Geht es vielleicht mit
Delphi-Quellcode:
DeineQuery.FormatOptions.StrsTrim2Len := true;
?

Slipstream 24. Feb 2017 17:04

AW: FireDAC Exception, wenn String länger als Feldlänge beim select
 
Oder man beschränkt das Editfeld, in dem der User eintippen kann, auf die Länge des DB-Feldes.


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