GARANTIR DESCONTO

Fórum Verificando o tipo do campo selecionado no DBGrid #412957

18/02/2012

0

Ola amigos,

gostaria de saber como faço para pegar o tipo do campo que está selecionado no DBGrid.

Alguém pode me ajudar ?
Fábio Banhos

Fábio Banhos

Responder

Posts

18/02/2012

Marco Salles

Olá Fábio Banhos tudo bem . Então eu escrevi uma classe que pode ser utilizada para esta finalidae

http://marcosalles.wordpress.com/2011/03/28/classe-generica-para-transformar-tipos-enumerados-para-tstrings/

Após adicionar a unit uEnunConvertString no seu projeto de uses a esta Unidade no Form que esta o DbGrid

Adicone um Variável do tipo FLista:Tstrings na secção Private deste form

Instancie esta variável no evento OnShow e Destrua no Ondestroy


procedure TForm2.FormShow(Sender: TObject);
begin
Flista:=TStringList.Create;
TConvert<TFieldType>.PopulateListEnum(Flista);
end;


Agora em qq evento coloque

procedure TForm2.Button3Click(Sender: TObject);
begin
showmessage(FLista.Strings[integer(DBGrid1.SelectedField.DataType)]);
end;

ps) tem outros modos de fazer tb , mas acredito que qq um deles # deste processo irá cair num case
Responder

Gostei + 0

19/02/2012

Fábio Banhos

Vou começar a implementar agora MARCO ;)

Mas tipo, tenho uma unit chamada Biblioteca onde coloco todas as procedures, funcions e variaveis que seja comum a todo projeto, como validação de CPF por exemplo. Eu poderia colocar a classe escrita por você nessa unit ou devo realmente adicionar a uEnunConvertString no meu projeto ?
Responder

Gostei + 0

19/02/2012

Marco Salles

Veja bem , modestia a parte é uma unidade bem feita e poderosa

se voce adicionar no seu projeto toda vez que voce for utiliza-la em outro projeto terá mais trabalho
porque tem que achar o caminho onde ela se encontra , e adicionar no novo dpr .. Processo chato e não
muito recomendável

voce pode Adicionar esta unit com Patch Files do delphi , assim ela pode ser utilizada em qq aplicação

mas antes voce tem que experimenta-la , pode ser que não seja isso tudo como eu imagino ..
Responder

Gostei + 0

20/02/2012

Fábio Banhos

Consegui fazer o que queria.

Achei o tipo do campo da coluna selecionada no grid com o seguinte comando:

dbgrdPesquisa.Columns[dbgrdPesquisa.SelectedIndex].Field.DataType

Veja o código implementado:

procedure TfrmPadraoPesquisa.edtPesquisaChange(Sender: TObject);
var CampoSelecionado: String;
begin
inherited;
if not (cdsPesquisa.IsEmpty) and (Trim(edtPesquisa.Text) <> ) then
begin
CampoSelecionado := dbgrdPesquisa.Columns[dbgrdPesquisa.SelectedIndex].Field.FieldName;

if (dbgrdPesquisa.Columns[dbgrdPesquisa.SelectedIndex].Field.DataType = ftString) then
begin
cdsPesquisa.Filtered := False;
cdsPesquisa.Filter := CampoSelecionado + LIKE + edtPesquisa.Text + %;
cdsPesquisa.Filtered := True;
end
else if (dbgrdPesquisa.Columns[dbgrdPesquisa.SelectedIndex].Field.DataType = ftInteger) then
begin
cdsPesquisa.Filtered := False;
cdsPesquisa.Filter := CampoSelecionado + = + edtPesquisa.Text;
cdsPesquisa.Filtered := True;
end;
end
else
begin
cdsPesquisa.Filtered := False;
end;
end;
Responder

Gostei + 0

20/02/2012

Marco Salles

então Fabio , foi o que eu ohe disse .. Desde do inicio
Com IFs ou CASES voce consegui

ps) tem outros modos de fazer tb , mas acredito que qq um deles # deste processo irá cair num case


Tudo bem que voce imprementou Dois IFS , mas sua pergunta inicial foi como saber pegar o tipo do campo
selecionado na Grid , e isto são muitas as possibilidades ...


TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, // 0..4
ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, // 5..11
ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, // 12..18
ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, // 19..24
ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, // 25..31
ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd, // 32..37
ftFixedWideChar, ftWideMemo, ftOraTimeStamp, ftOraInterval, // 38..41
ftLongWord, ftShortint, ftByte, ftExtended, ftConnection, ftParams, ftStream, //42..48
ftTimeStampOffset, ftObject, ftSingle); //49..51

se voce pergunta-se que queria saber se era somente o ftInteger ou o ftString Ai a resposta seria outra

Responder

Gostei + 0

20/02/2012

Fábio Banhos

Entendi!

Bom, a principio só irei trabalhar com esses dois tipos, mas fiquei curioso em utilizar aquela sua unit.
Como esse é um projeto teste para um processo de seleção, procurei utilizar códigos mais familiares.
Acho que deveria ter especificado mais a minha duvida mesmo.

Obrigado por estar sempre me ajudando MARCO.

Abraço.
Responder

Gostei + 0

20/02/2012

Marco Salles

se é um processo de seleção no minimo utilize o case ao inves de dois if concatenados

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar