Como armazenar o tipo de campo
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:
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!!!
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
Curtidas 0
Respostas
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.
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.
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