Como armazenar o tipo de campo

Delphi

06/11/2007

Opa pessoal,

Bem, tenho uma procedure que e capaz de ler os campos e o nome da tabela, e em seguida coloca tudo num txt:

procedure TFPrincipal.LerTabelasANTIGO(); 
// Esta procedure tem como objetivo criar um arquivo de texto em aonde o migrador esta sendo executado e, em seguida, 
// escrever o nome dos campos da tabela antiga e o nome da tabela, tal como tipo do campo, etc. 
// As variaveis globais responsaveis pelo armazenamento de dados sao: 
//DadosBDANTIGO : TStringList; 
var 
  ArquivoTexto            : TextFile;                        //Declarando var do arquivo de texto. 
  TiposBDANTIGO_Temp      : TStringList;                     //Declarando a variavel que armazenara o tipo dos campos, temporariamente. 
  CamposBDANTIGO_Temp     : TStringList;                     //Declarando a variavel que armazenara o nome dos campos, temporariamente. 
  TabelasBDANTIGO_Temp    : TStringList;                     //Declarando a variavel que armazenara o nome dos campos, temporariamente. 
  I,J: Integer;                                                //Declarando o contador. 
begin 
  DadosBDANTIGO           := TStringList.Create; 
  CamposBDANTIGO_Temp     := TStringList.Create; 
  TabelasBDANTIGO_Temp    := TStringList.Create; 
  AssignFile(ArquivoTexto, ´C:\BD.txt´); 
  Rewrite(ArquivoTexto); 
  DataBaseANTIGO.GetTableNames(TabelasBDANTIGO_Temp, FALSE);  // Armazenando o nome das tabelas na variavel. 

  for I := 0 to TabelasBDANTIGO_Temp.Count - 1 do 
  Begin 
    DataSetANTIGO.Active := False; 
    DataSetANTIGO.SQLs.SelectSQL.Clear; 
    DataSetANTIGO.SQLs.SelectSQL.Add(´SELECT FIRST 1 * FROM ´+TabelasBDANTIGO_Temp.Strings[I]); 
    DataSetANTIGO.Active := True; 
    DataSetANTIGO.GetFieldNames(CamposBDANTIGO_Temp);           // Armazenando o nome dos campos na variavel. 
      for J := 0 to CamposBDANTIGO_Temp.Count - 1 do 
        begin 
          WriteLn(ArquivoTexto, TabelasBDANTIGO_Temp.Strings[I]+´;´+CamposBDANTIGO_Temp[J]); 
        end; 


  end; 
    Closefile(ArquivoTexto); 
  end; 




Bem, agora a questao e: Alem de armazenar no TXT o nome do campo, o nome da tabela, tambem quero armazenar o TIPO do campo.

Alguem poderia me ajudar?

Grato!!!


Icarus

Icarus

Curtidas 0

Respostas

Micheus

Micheus

06/11/2007

[b:dd040b6f22]Icarus[/b:dd040b6f22], vc pode começar dando uma olhada no help sobre a propriedade FieldList.
Trata-se da lista de campos do seu dataset, onde vc pode extrair as informações de cada item da lista - um TField.

Este exemplo ilustra como popular um ListBox (ListBox1) com a lista de campos de uma Tabela (Table1) onde são inseridos em cada linha o nome do campo e seu tipo concatenados.
procedure TForm1.Button1Click(Sender: TObject);
var
  Idx :Integer;
  FldTypeStr :string;
begin
  ListBox1.Items.Clear;
  with Table1 do
    for Idx := 0 to FieldList.Count -1 do
    begin
      case FieldList[Idx].DataType of
        ftAutoInc :
          FldTypeStr := ´AUTO NUMERAÇÃO´;
        ftString :
          FldTypeStr := Format(´VARCHAR(¬d)´, [FieldList[Idx].Size]);
        ftSmallint :
          FldTypeStr := ´SMALLINT´;
        ftInteger,
        ftWord :
          FldTypeStr := ´INTEGER´;
        ftBoolean :
          FldTypeStr := ´LOGICAL´;
//        ...  os outros tipos a serem tratados
      else
        FldTypeStr := ´tipo não tratado´;
      end;
      ListBox1.Items.Add(Table1.FieldList[Idx].FieldName +´ - ´ +FldTypeStr);
    end;
end;

a chave é tratar os campos desejados baseados no tipo do campo definido na propriedade [i:dd040b6f22]DataType[/i:dd040b6f22] do [i:dd040b6f22]TField[/i:dd040b6f22] que é do tipo [i:dd040b6f22]TFieldType[/i:dd040b6f22]

Veja os tipos possíveis listados no help:
TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd);

É seguir por ai. Boa sorte.


GOSTEI 0
POSTAR