<< InputForm.ibeblock | IBEBlock | RunMe.ibeblock >>

TableDDL.ibeblock

 execute ibeblock (
    Frm variant,
    Op variant)
 as
 begin
    FldType = ibec_LoadFromFile('E:\IBEBlocks\FldTypeHTML.ibeblock');

    TableID = ibec_uf_GetElementAttribute(Frm, 'TableSelect', 'value', 0);
    sDDL = ;
    if (TableID is not null) then
    begin
       select rdb$relation_name from rdb$relations where rdb$relation_id = :TableID into :sTableName;
       sTableName = ibec_trim(sTableName);
       sDDL = '<B>CREATE TABLE</B> ' || sTableName || '(' || ibec_Chr(13) || ibec_chr(10);

       for select rf.rdb$field_name, rf.rdb$field_source, rf.rdb$field_position,
                  f.rdb$field_type, f.rdb$field_length, f.rdb$field_scale,
                  f.rdb$field_sub_type, f.rdb$field_precision, f.rdb$character_length,
                  f.rdb$segment_length, rf.rdb$null_flag, chr.rdb$character_set_name
          from rdb$relation_fields rf, rdb$relations r, rdb$fields f
          left join rdb$character_sets chr on (f.rdb$character_set_id = chr.rdb$character_set_id)
          where  (rf.rdb$relation_name = r.rdb$relation_name) and
                 (rf.rdb$field_source = f.rdb$field_name) and
                 (r.rdb$relation_id = :TableID)
          order by 2
          into :FieldName, :fDomain, :FieldPos, :fType, :fLen, :fScale, :fSubType, :fPrec, fCharLen,
 :fSegLen, :fNullFlag, :fCharset
       do
       begin
          sType = ibec_trim(fDomain);
          IsDomainBased = FALSE;
          if (ibec_Copy(sType, 1, 4) <> 'RDB$') then
             IsDomainBased = TRUE;
          execute ibeblock FldType(:fType, :fSubType, :fLen, :fScale, :fSegLen, :fCharLen, :fPrec, 3)
                   returning_values :FieldType;
          sType = ibec_IIF(IsDomainBased, sType, FieldType);

          if (fNullFlag = 1) then
             sType = sType || ' <B>NOT NULL</B>';

          if (((fType = 37) or (fType = 14) or (fType = 261)) and (IsDomainBased = FALSE) and (fCharset is not NULL)) then
          begin
             sType = sType || ' <B>CHARACTER SET</B> ' || ibec_trim(fCharset);
          end
          sType = ibec_IIF(IsDomainBased, sType || ' <I>/* ' || FieldType || ' */</I> ', sType);
          sDDL = sDDL || ' ' || ibec_trim(FieldName) || ' ' || sType || ',' || ibec_Chr(13) || ibec_chr(10);
          suspend;
       end
       iLen = ibec_Length(sDDL) - 3;
       sDDL = ibec_Copy(sDDL, 1, iLen);
       sDDL = sDDL || ');';
    end

    OldData = ibec_uf_GetFormData(Frm);
    iPos = ibec_Pos('<P ID="FAKE">', OldData);
    if (iPos > 0) then
       OldData = ibec_Copy(OldData, 1, iPos + 12);

    sDDL = OldData || '<P>The DDL of the selected table is:</P><P></P><PRE>' || sDDL || '</DDL>';

    ibec_uf_SetFormData(Frm, sDDL);
    ibec_uf_SetElementAttribute(Frm, 'TableSelect', 'value', TableID, 0);
 end

See also:
User Form functions

back to top of page
<< InputForm.ibeblock | IBEBlock | RunMe.ibeblock >>