Fórum Como pegar o FieldTypeNames ou DataType de um campo? #478749
12/05/2014
0
Estou precisando pegar o DataType da tabela, tenho o seguinte código, é um exemplo, dar um erro pois quero passar o nome do campo é compara o tipo
procedure TfrmGenerico.GridListaTitleClick(Column: TColumn);
var
NomeDoCampo:String;
begin
{pega a coluna do grid e o nome do campo para a pesquisa}
ColunaDoGrid := Column.ID;
NomeDoCampo := Column.FieldName;
if FieldTypeNames[dmGenerico.cdsEmpresa.Fields[NomeDoCampo].DataType] = TDateTimeField then
begin
//
end;
end;
Agradeço a ajuda!
Itamar Souza
Curtir tópico
+ 0Posts
13/05/2014
Felippe Tadeu
Cara, a maior chance de ser o causador do problema é que vc esta passando nome do campo (imagino eu que seja uma String) onde deveria ser um integer.
Caso realmente for, algo que pode agilizar para você seria o ctrl+espaço, depois que vc coloca o "." pressione as teclas que deverá ser listado uma lista de coisas que dá para vc usar seguido pelas propriedades corretas.
Nessa parte do teu código:
if FieldTypeNames[dmGenerico.cdsEmpresa.Fields[NomeDoCampo].DataType] = TDateTimeField then
begin
//
end;
Você não precisa fazer esse "cast". (Me avisem se eu estiver errado)
Você pode fazer da seguinte maneira:
if dmGenerico.cdsEmpresa.Fields[Index].DataType = TDateTimeField then
begin
//
end;
Obs: Index seria um inteiro.
Gostei + 0
13/05/2014
Itamar Souza
Você não esta enganado sobre o erro, eu estou certo que teria que passar um inteiro, eu dei apenas um exemplo:
Eu tentei fazer de algumas formas, se você verificar no exemplo, tem um campo inteiro “ColunaDogrid” que pega o Colum.ID, então ficaria :
if dmGenerico.cdsEmpresa.Fields[ColunaDoGrid].DataType = TDateTimeField then begin // end;
Vou continuar pesquisando!
Agradeço a ajuda!
Gostei + 0
13/05/2014
Felippe Tadeu
Então não entendi, onde dá erro e qual seria o erro e qual seria a dúvida?
Gostei + 0
13/05/2014
Wilton Júnior
Gostei + 0
13/05/2014
Felippe Tadeu
Gostei + 0
13/05/2014
Wilton Júnior
Não adianta eu procurar no google no ducumento do sqlite pois foi tão mal projetado e mal escrito que não consigo mexer nele direito.
O que o Colega quer fazer é saber se o campo a é do tipo datetime se for algo tera que acontecer eu entedi.
Foi por isso que perguntei qual banco ele esta usando pois existe uma outra forma facil mas trabalhosa de se fazer.
Gostei + 0
13/05/2014
Itamar Souza
A minha dúvida era como pegar o dataType sem precisar usar o banco de dados especifico, desta forma eu posso ter um formulário genérico e no caso de consultas utilizando todos os campos do grid eu posso direcionar o usuário para o tipo de consulta mais adequado, então a resposta ficou assim:
procedure TfrmMonitoraPDBO.dbgClienteAplicacaoTitleClick(Column: TColumn);
var
ColunaDoGrid : Integer;
s: TStringBuilder;
begin
//adicionar SysUtils na uses
ColunaDoGrid :=Column.ID;
try
s := TStringBuilder.Create;
case dbgClienteAplicacao.Fields[ColunaDoGrid].DataType of
ftInteger : begin
s.Append(dbgClienteAplicacao.Fields[ColunaDoGrid].FieldName + ': Tipo Integer'#13);
end;
ftString : begin
s.Append(dbgClienteAplicacao.Fields[ColunaDoGrid].FieldName + ': Tipo String '#13);
end;
ftDateTime: begin
s.Append(dbgClienteAplicacao.Fields[ColunaDoGrid].FieldName + ': Tipo DateTime'#13);
end;
ftDate : begin
s.Append(dbgClienteAplicacao.Fields[ColunaDoGrid].FieldName + ': Tipo Date'#13);
end;
ftTime : begin
s.Append(dbgClienteAplicacao.Fields[ColunaDoGrid].FieldName + ': Tipo Time'#13);
end;
end;
ShowMessage(s.ToString);
finally
FreeAndNil(s); end;
end;
Se eu fosse utilizar o banco de dados sql server ficaria assim:
SELECT COLUMN_NAME ,IS_NULLABLE , DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TBRECUPERACAO'
AND COLUMN_NAME = 'DAT_RECUPER'
DMPDbo.QryClienteAplicacao.FieldByName('COLUMN_NAME').AsString;
DMPDbo.QryClienteAplicacao.FieldByName('DATA_TYPE').AsString;
Agradeço a ajuda!!!
Gostei + 0
13/05/2014
Wilton Júnior
Estou fazendo um programa para mim mexer com firebird e para mostrar o nome do campo e o tipo dele eu faço um select mesmo não uso o compnente table não.
Gostei + 0
13/05/2014
Felippe Tadeu
Gostei + 0
13/05/2014
Wilton Júnior
Gostei + 0
13/05/2014
Felippe Tadeu
Quem sabe eu não consigo te ajudar tmb.
felippe_tadeu@hotmail.com
Gostei + 0
13/05/2014
Wilton Júnior
Gostei + 0
13/05/2014
Felippe Tadeu
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)