Fórum Como pegar o FieldTypeNames ou DataType de um campo? #478749

12/05/2014

0

Amigos

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

Itamar Souza

Responder

Posts

13/05/2014

Felippe Tadeu

Boa noite.

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.
Responder

Gostei + 0

13/05/2014

Itamar Souza

Bom dia

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!
Responder

Gostei + 0

13/05/2014

Felippe Tadeu

Bom dia.

Então não entendi, onde dá erro e qual seria o erro e qual seria a dúvida?
Responder

Gostei + 0

13/05/2014

Wilton Júnior

Qual banco de dados vc esta usando?
Responder

Gostei + 0

13/05/2014

Felippe Tadeu

O banco de dados iria interferir nisso ?
Responder

Gostei + 0

13/05/2014

Wilton Júnior

Alaplaia eu to numa briga violenta com sqlite, pois não consigo capitar os tipos de dados correto pq não sei.
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.
Responder

Gostei + 0

13/05/2014

Itamar Souza

Bom dia
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!!!
Responder

Gostei + 0

13/05/2014

Wilton Júnior

Tenta usar o select que com certeza vai funcionar melhor que o uso do componente.
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.
Responder

Gostei + 0

13/05/2014

Felippe Tadeu

WILTON SéRGIO BACALá JúNIOR obrigado pela informação, nunca utilizei SQLite e acho que agora já tem -1 ponto ao meu ver kk.
Responder

Gostei + 0

13/05/2014

Wilton Júnior

Alaplai se quizer te mando os fontes do programa que to fazendo para mim só para vc ver a dor de cabeça que o SQlite ta me dando.
Responder

Gostei + 0

13/05/2014

Felippe Tadeu

Por favor.

Quem sabe eu não consigo te ajudar tmb.

felippe_tadeu@hotmail.com
Responder

Gostei + 0

13/05/2014

Wilton Júnior

Ja esta no seu email se quizer me add no skype é bacalajr1978@hotmail.com.br
Responder

Gostei + 0

13/05/2014

Felippe Tadeu

Ok, essa semana estará corrida para mim, para eu estar testando tudo, tenho uns projetos da faculdade pra entregar, mas no máximo domingo eu vou tentar falar com vc
Responder

Gostei + 0

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

Aceitar