Fórum Verificando o tipo do campo selecionado no DBGrid #412957
18/02/2012
0
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
Curtir tópico
+ 0Posts
18/02/2012
Marco Salles
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
Gostei + 0
19/02/2012
Fábio Banhos
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 ?
Gostei + 0
19/02/2012
Marco Salles
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 ..
Gostei + 0
20/02/2012
Fábio Banhos
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;
Gostei + 0
20/02/2012
Marco Salles
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
Gostei + 0
20/02/2012
Fábio Banhos
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.
Gostei + 0
20/02/2012
Marco Salles
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)