Sei sulla pagina 1di 4

FieldByName e Fields vs FieldValues

Por: Hracles Alencar heracles_alencar@hotmail.com timo e prazeroso saber que estou escrevendo meu primeiro artigo para este site que, apesar de ser novo nele, tanto prezo e muito tem me ajudado. Antes de iniciar, saudaes a todos os leitores deste! Estive dando uma passada pela Net e percebi que existem muitas perguntas referentes a erros do BDE. No s em nosso Frum mas em outras comunidades Delphi comum o uso de algumas tcnicas de TDataSet para atribuir ou mapear valores de uma tabela. Gostaria de fazer uma explanao sobre um assunto referente. Lembro aos leitores que o artigo uma comparao de mtodos que podem ser usados em registros de TDataSet, defendendo o uso de FieldValues[ ], no a soluo de todos os erros do BDE que possam existir, embora a adoo do mtodo aqui descrito poder diminuir essa margem de erro. Confira! A Funo FieldByName( ) FieldByName( ) aceita um parmetro de string que retorna o valor de algum campo no registro atual do DataSet. Estou fazendo referncia a Classe TDataSet em um contexto geral, ou seja, TDBEDataSet descendente de TDataSet, portanto qualquer componente descendente do mesmo, como o TTable, para fins de explicao deste, trato como simplesmente DataSet. Um exemplo para a sintaxe bsica para a chamada do mtodo FieldByName seria: Table1.FieldByName('NomeCampo').AsX Considerando que, Table1 um componente descendente de TDataSet. ...('NomeCampo') o nome do campo ao qual voc quer se referir e AsX uma propriedade para acessar campos de um componente TField, retornando um valor de determinado tipo. As propriedades AsX e seus respectivos valores de retorno seguem abaixo: Propriedade AsBoolean AsString AsInteger AsFloat AsDateTime AsValue Tipo de Retorno Boolean String LongInt Double TDateTime Variant

Exemplo 1 - Uso de FieldByName( )

procedure TForm1.Button1Click(Sender: TObject); Var S: String; I: Integer; begin S := Table1.FieldByName('Nome').AsString; I := Table1.FieldByName('Codigo').AsInteger; ShowMessage(S); ShowMessage(IntToStr(I)); End; Para o uso de FieldByName necessrio que se saiba o tipo de campo que se est acessando, para tal, procure a propriedade DataType de TField que indica o tipo de dados com relao Tabela do Banco de Dados. A propriedade DataType de TFieldType que definido da seguinte forma: type 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); A Propriedade Fields[ ] A Propriedade de Array Fields[ ] baseado em zero com Objetos TField, sendo que Fields[1] retorna um TField representando o segundo campo lgico do DataSet. Pra quem tem curiosidade de saber como TField implementado procure-o na unidade DB. Dica: Declare uma varivel qualquer do tipo TField, segure Ctrl e clique na palavra TField que o Delphi buscar a unidade correspondente, depois s usar o Exploring e mergulhar no que a nossa to querida e amada Borland nos produziu. A mesma regra de TFieldType para FieldByName( ) deve ser aplicado para Fields[ ]. Um exemplo de Fields[ ] no lugar de FieldByName mostrado a seguir: Exemplo 2 - Uso de Fields[ ] procedure TForm1.Button1Click(Sender: TObject); Var S: String; I: Integer; begin S := Table1.Fields[1].AsString; //Campo Nome I := Table1.Fields[0].AsInteger; //Campo Codigo ShowMessage(S);

ShowMessage(IntToStr(I)); End; Para acessar o nome de um campo de um DataSet use a propriedade FieldName de TField. Exemplo 3 - Uso de FieldName procedure TForm1.Button1Click(Sender: TObject); Var S: String; begin S := Table1.Fields[0].FieldName; end; Se tiver apenas o nome do campo e quiser saber o valor lgico do campo, use a propriedade FieldNo. Proceda: Exemplo 4 - Uso de FieldNo procedure TForm1.Button1Click(Sender: TObject); Var I: Integer; begin I := Table1.FieldByName('Nome').FieldNo; end; A Propriedade FieldValues[ ] A Propriedade de Array Padro FieldValues[ ] de TDataSet retorna o valor de um campo como um Tipo de Dado Variant. Sendo FieldValues um propriedade padro, no necessrio que seja referenciada o nome da propriedade. Os leitores percebero que o uso de FieldValues substitui significativamente a digitao de mais cdigo e menos passvel de erros devido o poder do tipo de dado Variant. Em um outro artigo pretendo demonstrar a forma de se utilizar um tipo de dados Variant e descrever um pouco sobre OleVariant. Indo diretamente ao que interessa: Exemplo 5 - Uso de FieldValues procedure TForm1.Button1Click(Sender: TObject); Var S: String; I: Integer; begin S := Table1.FieldValues['Nome']; I := Table1.FieldValues['Codigo']; ShowMessage(S)

ShowMessage(IntToStr(I)); end; O cdigo acima pode ser simplificado para: Exemplo 6 - Simplificao FieldValues procedure TForm1.Button1Click(Sender: TObject); Var S: String; I: Integer; begin S := Table1['Nome']; I := Table1['Codigo']; ShowMessage(S); ShowMessage(IntToStr(I)); end; Torna-se possvel esta simplificao devido FieldValues ser a propriedade padro. Notem que as propriedades de TField (AsString e AsInteger) so excludas. Isso acontece porque o tipo Variant compatvel com tipos nativos do Delphi e outros derivados. Concluindo Tanto a Funo FieldByName quanto a Propriedade Fields continuam no Delphi apenas para manter compatibilidade entre as verses. So tcnicas do Delphi 1 de 16 bits, de modo que, o uso de FieldValues torna o cdigo menos passvel de erros e mais cmodo e rpido. Economiza muita digitao desnecessria. Uma capacidade poderosa de FieldValues a de armazenar os valores de vrios campos em um Array do Tipo de Dados Variant (ArrayVariant := Table1['Codigo; Nome; Endereo; Fone; CPF'];). As nicas desvantagens so que o ndice do Array Variant precisa ser baseado em zero e o contedo precisa ser varVariant. Espero, sinceramente que tenham apreciado este artigo e que ele valha de alguma coisa em seus Projetos Delphi. Usei o Livro Delphi 5 - Guia do Desenvolvedor, dos Autores Steve Teixeira e Xavier Pacheco, como fonte de consulta para resgatar alguns mtodos esquecidos. Qualquer dvida ou comentrio podem entrar em contato ou usar a seo de comentrios. Gostaria de agradecer a usuria deste site Patrcia que me ajudou no processo de desenvolvimento deste artigo, conversando e trocando idias. Ela no sabe mas, isso muito me ajudou. Obrigado!

Potrebbero piacerti anche