Hallo,
ich hatte seinerzeit ein ähnliches Problem. Ich habe das mit einer
StoredProcedure gelöst:
SQL-Code:
CREATE OR ALTER PROCEDURE GET_DATENTYP (
Typ SMALLINT,
Sub SMALLINT,
Len SMALLINT,
Prec SMALLINT,
Scale SMALLINT,
Text CHAR(67))
RETURNS (
Data VARCHAR(20))
AS
begin
/* Procedure Text */
if ((Typ = 10) or (Typ = 12) or (Typ = 13) or (Typ = 27) or (Typ = 35)) then
begin
/* einfache Konvertierungen */
/* gegebener Text wird unveraendert uebernommen */
if (StrLen(Text) > 20) then
Text = Substr(Text,1,20);
Data = Trim(Text);
end
else begin
if ((Typ = 7) or (Typ = 8) or (Typ = 16)) then
begin
/* numerische Typen: Wertebereich, Laenge, Praezision */
if (Sub = 0) then
begin
if (Typ = 7) then
Data = 'SMALLINT';
else
if (Typ = 8) then
Data = 'INTEGER';
else
Data = 'BIGINT';
end
else begin
if (Sub = 1) then
Data = 'NUMERIC(' || prec || ',' || (0 - scale) || ')';
else
Data = 'DECIMAL(' || prec || ',' || (0 - scale) || ')';
end
end
else begin
if (Typ = 261) then
begin
/* Blobs */
if (Sub = 0) then
Data = 'BLOB / BINARY';
else
Data = 'BLOB / TEXT';
end
else begin
if ((Typ = 14) or (Typ = 37)) then
begin
/* char und varchar */
if (Typ = 14) then
Data = 'CHAR(' || len || ')';
else
Data = 'VARCHAR(' || len || ')';
end
else Data = 'UNKNOWN';
end
end
end
suspend;
end
Als Parameter werden übergeben:
Code:
RDB$Fields.RDB$Field_Type, RDB$Fields.RDB$Field_Sub_Type,
RDB$Fields.RDB$Field_Length, RDB$Fields.RDB$Field_Precision,
RDB$Fields.RDB$Field_Scale, RDB$Types.RDB$Type_Name
Vielleicht kannst du damit etwas anfangen. Jürgen
PS. Ich musste danach in meinen Quellen erst suchen, sonst hätte ich früher geantwortet.