Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Firebird Feldtypen richtig benennen

  Alt 10. Jul 2009, 13:58
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.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat