Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Dom Mai 17, 2009 12:53 am Assunto: Importar hora no formato hh:mm do excel para CDS? |
|
|
Pessoal, alguém sabe me dizer como jogar um campo horas de uma tabela excel com formato de [hh]:mm no dbgrid?
Formatei a planilha do excel para formato de [hh]:mm para jogar valores acima de 23:59, pois trabalho com horas acima das 24:00.
Bom na celula do excel formatei um horario que é 39:26, mais quando jogo no dbgrid fica assim 01/01/1900 15:26:00
E não consegui formatar no displayformat do componente para ficar como 39:26.
Estou usando componentes do ADO.
Estou tentando jogar os valores assim num CDS
Código: | ADOTable1.First;
while not ADOTable1.Eof do
begin
if (ADOTable1AdNot.asString <> '') then
begin
ClientDataSet1.Insert;
ClientDataSet1NOME.AsString := ADOTable1ADMINISTRATIVO.String ;
ClientDataSet1VARIAVEIS.Value := ADOTable1AdNot.Value;
ClientDataSet1.Post;
end;
ADOTable1.Next;
end;
ClientDataSet1.IndexFieldNames := 'NOME'; |
Meu problema esta aqui
ClientDataSet1VARIAVEIS.Value := ADOTable1AdNot.Value;
Se eu não formato o displayformat ele me traz desta forma
01/01/1900 15:26:00
Se eu formato o displayformat assim hh:mm, o resultado fica assim:
15:26
Mas preciso que fique assim:
39:26
Acho que o problema nem seja no componente, e sim no excel, mais não sei como formatar esta droga de hora para ficar como preciso. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Dom Mai 17, 2009 4:16 pm Assunto: |
|
|
Olá adriano...
Bom amigo isto que vc quer é impossível desta maneira, pois o tipo TDateTime e TTime não aceitarão tal, pois isto foge ao escopo dos mesmo que é armazenar horas, nõ acumulá-las, portanto o máximo que vc conseguirá será armazenar 24:00 ou seja 23:59:999 e é por isto que vc não vai conseguir tal...
o unico modo é vc fazer uma função para guardar isto como uma string ou guardar como um inteiro assim vc pode guardar 39:27 ou seja 2367 minutos, o excel vc pode acumular horas mas no delphi nõa se tem um tipo que faça a mesma coisa o que é uma pena realmente...
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Dom Mai 17, 2009 4:46 pm Assunto: |
|
|
johnny-walker escreveu: | Olá adriano...
Bom amigo isto que vc quer é impossível desta maneira, pois o tipo TDateTime e TTime não aceitarão tal, pois isto foge ao escopo dos mesmo que é armazenar horas, nõ acumulá-las, portanto o máximo que vc conseguirá será armazenar 24:00 ou seja 23:59:999 e é por isto que vc não vai conseguir tal...
o unico modo é vc fazer uma função para guardar isto como uma string ou guardar como um inteiro assim vc pode guardar 39:27 ou seja 2367 minutos, o excel vc pode acumular horas mas no delphi nõa se tem um tipo que faça a mesma coisa o que é uma pena realmente...
bye | Olá Johnny, blz amigo.
E como faço para isso funcionar?
No excel o formato da celula esta assim:
Citação: | Formato de hora que permite valores superiores a 23h59. Como padrão, todo formato de hora do Excel inclui a data e a hora. Portanto, se você digitar 08:00 em uma célula, o programa interpretará 08:00 do dia 1. Assim, se você digitar 25:00, o Excel entenderá como 01:00 do dia 2.
Para evitar esse problema, selecione a célula em questão, escolha Formatar / Células, marque a categoria Hora no painel da esquerda e, no painel Tipo, selecione o sétimo formato disponível (“37:30:55”). Clique OK para confirmar. |
Que é a forma correta que preciso, mais no ADO traz em vez do valor dos 39:26, soma-se as 24:00 de um dia + 15:26 que ultrapassa para o proximo dia, ai no dbgrid aparece apenas o ultimo valor.
Achei que poderia ser feito desta forma aqui
Código: | if ADOTable1AdNot.AsDateTime > StrToTime('23:59') then
begin
somaHora := StrToTime('23:59') + ADOTable1AdNot.Value;
ClientDataSet1VARIAVEIS.Value := TimeToStr(SomaHora);
end else
begin
ClientDataSet1VARIAVEIS.Value := TimeToStr(ADOTable1AdNot.Value);
end;
ClientDataSet1.Post; |
Mais vi, que não é tão simples assim  _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
RodrigoFarias Experiente


Registrado: Domingo, 27 de Julho de 2008 Mensagens: 443
|
Enviada: Dom Mai 17, 2009 6:02 pm Assunto: |
|
|
Por curiosidade, pq dos valores acima de 24:00 ? |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Dom Mai 17, 2009 7:22 pm Assunto: |
|
|
Como disse adriano, no delphi isto não será possível, mas vc pode contornar isto facilmente... como te disse no post acima...
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Sex Jul 31, 2009 10:22 am Assunto: |
|
|
não tem, mas é só fazer:
Código: | function HoraToStr(Hora : TDateTime) : string;
var
I2 : Integer;
begin
I2 := Trunc(Frac(Hora) * 24 * 60);
Result := Format('%.2d:%.2d', [Trunc(Hora) * 24 + I2 div 60, I2 mod 60]);
end; |
|
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Sex Jul 31, 2009 10:19 pm Assunto: |
|
|
gilsonnrodrigues escreveu: | não tem, mas é só fazer:
Código: | function HoraToStr(Hora : TDateTime) : string;
var
I2 : Integer;
begin
I2 := Trunc(Frac(Hora) * 24 * 60);
Result := Format('%.2d:%.2d', [Trunc(Hora) * 24 + I2 div 60, I2 mod 60]);
end; |
| Boa noite Gilson Rodrigues. O problema é que o componente adoquery esta ligado diretamente na tabela do excel, ele já carrega diretamente por isso é que vem ja convertido. A não ser que dê para aplicar a função antes de carregar diretamente na tabela. Isso é possível?
Obrigado pela ajuda. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Sáb Ago 01, 2009 5:44 pm Assunto: |
|
|
leia como datatime e não como time
viu q o param é TDateTime? |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qua Ago 05, 2009 9:38 am Assunto: |
|
|
se vc mandar mostrar o valor campo q tem a hora assim:
ShowMessage(FloatToStr(SeuCampo.Value));
q valor mostra? esse q é 25:00
?? |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Ago 06, 2009 9:25 am Assunto: |
|
|
então cara.
a funçao q postei vai funcionar perfeitamente.
teste o seguinte agora:
ShowMessage(HoraToStr(SeuCampo.Value));
o q mostra? |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
|