Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Incompatilbe column/host variable data type (https://www.delphipraxis.net/194323-incompatilbe-column-host-variable-data-type.html)

alex517 9. Nov 2017 15:13

AW: Incompatilbe column/host variable data type
 
inzwischen kam der rote Kasten. Aber trotzdem zur Erläuterung..

Das Problem mit den Parameter habe ich auch schon gehabt.
Firebird versucht der Parameter :tmp_tabellen_name zu interpretieren.
Es kommt zu dem Schluss ein '*' die Länge von 1 Zeichen hat.
Für der Parameter :tmp_tabellen_name wird also der entsprechende Platz bereitgestellt.

Wenn jetzt mit f_lrtrim8(f_upper(:tmp_tabellen_name)) ein String mit der Länge > 1
an den Parameter übergeben wird, gibt es ein "string right truncation".

Man muss also Firebird mit cast() oder einer anderen Formulierung der Bedingung
überreden entsprechen Platz zu Verfügung zu stellen.


ich nehme mal ein einfacheres Beispiel.
Es sollen nur die passenden oder alle Personen zurückgegeben werden.
Für alle übergibt man * oder *** oder NULL je nach Variante
SQL-Code:
select
  P.*

from
  PERSON P

where
--  :NACHNAME = '' OR (P.NACHNAME = :NACHNAME) -- geht nicht
  :NACHNAME = '*' OR (P.NACHNAME = :NACHNAME) -- geht mit max 1 Zeichen
--  :NACHNAME = '***' OR (P.NACHNAME = :NACHNAME) -- geht bis max 3 Zeichen

--  (:NACHNAME = cast('*' as VARCHAR(10))) OR (P.NACHNAME = :NACHNAME) -- geht bis 10 Zeichen

--  (cast(:NACHNAME as type of COLUMN PERSON.NACHNAME) = '*') OR (P.NACHNAME = :NACHNAME) -- geht bis Länge PERSON.NACHNAME

--  (:NACHNAME = cast('*' as type of COLUMN PERSON.NACHNAME)) OR (P.NACHNAME = :NACHNAME) -- geht bis Länge PERSON.NACHNAME

--  (:NACHNAME is null) or (P.NACHNAME = :NACHNAME) -- geht auch ohne cast()

p80286 9. Nov 2017 15:21

AW: Incompatilbe column/host variable data type
 
Ich hätte da noch einen Vorschlag aus der hinteren Ecke
SQL-Code:
select
     lt.id,
     lt.date_time,
     lt.operation,
     lt.user_name
from ibe$log_tables lt
where lt.Tabellenname like '%'||:tablename||'%'
Zitat:

Werden diese mit NULL übergeben, so wird in eine Variable ein '*' eingetragen
Wenn Du statt '*' ein '' übergibst, sollte das funktionieren.

Gruß
K-H

ZOD 9. Nov 2017 15:38

AW: Incompatilbe column/host variable data type
 
@hoika
ich habe die 8191 aus Anzeige im Eingabedialog für Parameter von IBExpert.
War es nicht so, dass für ein varchar immer noch ein Zeichen hinzu kommt - also 8190 Zeichen für die Funktion aber der varchar hat 8191 Länge .. da muss ich selbst nochmals suchen.

@p80286
probiere ich später nochmals

@alex517
das muss es sein!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.
Seite 3 von 3     123   

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