Fórum Administração das informações enviadas ao BD, para DbChart #372630

23/07/2009

0

Boooom essa Duvida é sobre um BD que meu programa de Delphi envias as informações...

Seguinte....meu soft administra ligações telefonicas, eu mando pro BD inicio, final, tempo de ligação, data....só que esou fazendo um Grafico DBChart, e precisava dele mostrando o tempo de ligação por dia...

Então eu não sei como somar todos os tempo de ligação de cada dia....

Alguem consegue me dar uma luz ai?!

Obrigadoo!!

Abrass...


Nino Marques

Nino Marques

Responder

Posts

23/07/2009

Vmlima

Faça algo assim

select data, sum(tempo)
from tabelas
group by data


nada demais... e depois jogue no chart


att.


Responder

Gostei + 0

23/07/2009

Nino Marques

Cara tem como você explicar um pouco melhor..
To começando a mexer em BD agora, então não conheço tão bem as funções....

Se puder vai ser um favorzãoo!

Abrass


Responder

Gostei + 0

23/07/2009

Emerson Nascimento

informe o banco de dados e a estrutura da tabela pra podermos ajudar da melhor forma possível...


Responder

Gostei + 0

23/07/2009

Nino Marques

O banco de dados foi feitos em Access, a tabela tem os seguintes campos:
-Inicio, final e tempo de ligação do tipo Data/hora
-canal, caminho da gravação e nome do arquivo do tipo texto

o envio dos dados está seno feito assim..

DM.ADOQuery_chamadas1.Close;
DM.ADOQuery_chamadas1.SQL.Clear;
DM.ADOQuery_chamadas1.SQL.Add(´UPDATE chamadas SET final = :final1, dtmf = :dtmf1,Tempo_de_Ligação=:Tempo_de_Ligação1 WHERE Canal = :canal1 AND inicio = :inicio1´);
DM.ADOQuery_chamadas1.Parameters.ParamByName(´canal1´).Value := nome_linha1;
DM.ADOQuery_chamadas1.Parameters.ParamByName(´inicio1´).Value := inicio_linha1;
DM.ADOQuery_chamadas1.Parameters.ParamByName(´final1´).Value := FormatDateTime(´dd/mm/yyyy hh:mm:ss´,now);
DM.ADOQuery_chamadas1.Parameters.ParamByName(´dtmf1´).Value := Label_placa1_dtmf.Caption;
DM.ADOQuery_chamadas1.Parameters.ParamByName(´Tempo_de_Ligação1´).Value := FormatDateTime(´hh:mm:ss´,(finalt - iniciot));
DM.ADOQuery_chamadas1.ExecSQL;


Responder

Gostei + 0

23/07/2009

Vmlima

Caro...

Por favor, mostre-nos a estrutura da tabela, pode ser a SQL de criação mesmo, que da pra importar pelo IBExpert
Create table chamadas(
...
)

só pra gente ver certo seus campos e mandar uma resposta mais distinta...

Att.


Responder

Gostei + 0

23/07/2009

Nino Marques

Meuu....

Sei que to dando trabalho...
Mas como q faz isso???


Responder

Gostei + 0

23/07/2009

Facc

[quote:8c4b679c5e=´Nino Marques´]Meuu....

Sei que to dando trabalho...
Mas como q faz isso???[/quote:8c4b679c5e]

é facil. abre o Access e copia o nome dos campos

Quem montou a estrutura do banco?


Responder

Gostei + 0

23/07/2009

Emerson Nascimento

não uso access (na verdade nunca usei), mas fiz uns testes aqui com essa instrução e, aparentemente, retorna o que você precisa:
select
  left(inicio, 10) as data,
  int(sum(tempo_de_ligacao)) as dias,
  right(cdate(sum(tempo_de_ligacao)), 8) as horas,

  right(´0000´+cstr(int(sum(tempo_de_ligacao))),4)+´d:´+
  right(cdate(sum(tempo_de_ligacao)), 8) as duracaototal,

  right(´0000´+cstr( (24*int(sum(tempo_de_ligacao)))  + datepart(´h´, cdate(sum(tempo_de_ligacao)))), 4)+´:´+
  right(cdate(sum(tempo_de_ligacao)), 5) as horastotais
from
  chamadas
group by
  left(inicio, 10)



Responder

Gostei + 0

23/07/2009

Nino Marques

A estrutura eu peguei pronta já, um amigo que estava no projeto que fez...
Eu não entendo muito de Access então aprendi a enviar os dados, essas coisas.....

O nome dos CAmpos

Códigocanal inicio finaldtmftipocaminhoarquivoemailTempo_de_Ligação

Seria isso?! hahuHUaa...

E Emerson...esse Codigo q vc fez....qual a variavel de saida???
E qual será o melhor caminho p fazer o grafico?? eu crio uma nova tabela no access com dia e tempo de ligação e faço a ligação com o DbChart???


Responder

Gostei + 0

27/07/2009

Nino Marques

Eu não ainda não conhecia essa função Select, então não sei muito bem us-la.....mas assim, está dando Undeclared Identifier, oque preciso fazer?


Responder

Gostei + 0

27/07/2009

Emerson Nascimento

você precisa colocar a instrução SQL dentro de um ADOQuery, assim como aquele UPDATE que você apresentou.

algo assim:
ADOQuery1.Close;
ADOQuery1.SQL.Text :=
  ´  select ´+
  ´  left(inicio, 10) as data, ´+
  ´  int(sum(tempo_de_ligacao)) as dias, ´+
  ´  right(cdate(sum(tempo_de_ligacao)), 8) as horas, ´+
  ´  right(´´0000´´+cstr(int(sum(tempo_de_ligacao))),4)+´´d:´´+ ´+
  ´  right(cdate(sum(tempo_de_ligacao)), 8) as duracaototal, ´+
  ´  right(´´0000´´+cstr( (24*int(sum(tempo_de_ligacao)))  + datepart(´´h´´, cdate(sum(tempo_de_ligacao)))), 4)+´´:´´+ ´+
  ´  right(cdate(sum(tempo_de_ligacao)), 5) as horastotais ´+
  ´from ´+
  ´  chamadas ´+
  ´group by ´+
  ´  left(inicio, 10) ´;
ADOQuery1.Open;


dependendo da sua necessidade, você poderá ligar esse ADOQuery à uma grade, para visualizar o resultado e analisar se está correto.

ou ainda fazer uma consulta pelo próprio Excel, utilizando essa mesma instrução.


Responder

Gostei + 0

28/07/2009

Nino Marques

Olha só...
estou usando a rotina q foi passada....mas está dando erro parece q de tempo de execução (Runtime error)...o codigo ficou assim...
Estou puxando as informações de uma tabela (chamadas) e depois jogando em outra (grafico)...


DM.ADOQuery_grafico.Close;
DM.ADOQuery_chamadas.open;
DM.ADOQuery_chamadas.sql.Text :=
´ select ´+
´ left(inicio, 10) as data, ´+
´ int(sum(Tempo_de_Ligação)) as dias, ´+
´ right(cdate(sum(Tempo_de_Ligacão)), 8) as horas, ´+
´ right(´´0000´´+cstr(int(sum(Tempo_de_Ligação))),4)+´´d:´´+ ´+
´ right(cdate(sum(Tempo_de_Ligação)), 8) as duracaototal, ´+
´ right(´´0000´´+cstr( (24*int(sum(Tempo_de_Ligação))) + datepart(´´h´´, cdate(sum(Tempo_de_Ligação)))), 4)+´´:´´+ ´+
´ right(cdate(sum(Tempo_de_Ligação)), 5) as horastotais ´+
´from ´+
´ chamadas ´+
´group by ´+
´ left(inicio, 10) ´;
DM.ADOQuery_chamadas.Close;
DM.ADOQuery_grafico.SQL.Add(´Select * from grafico where data = :data AND horastotais= :horastotais´);
DM.ADOQuery_grafico.SQL.Add(´Insert Into grafico(data, horastotais) Values (data, horastotais)´);
DM.ADOQuery_grafico.Parameters.ParamByName(´horastotais´).Value := horastotais;
DM.ADOQuery_grafico.Parameters.ParamByName(´data´).Value := FormatDateTime(´dd/mm/yyyy´,now);
DM.ADOQuery_grafico.Open;


Tem algo errado ai?!


Responder

Gostei + 0

28/07/2009

Nino Marques

Algo errada tirando esses emotionq sairam!!
hehehehe...

na vdd eh um ´8 )´...

Abraço!


Responder

Gostei + 0

28/07/2009

Emerson Nascimento

tente somente:
DM.ADOQuery_grafico.Close;
DM.ADOQuery_grafico.sql.Text :=
´ select ´+
´ left(inicio, 10) as data, ´+
´ right(´´0000´´+cstr( (24*int(sum(Tempo_de_Ligação))) + datepart(´´h´´, cdate(sum(Tempo_de_Ligação)))), 4)+´´:´´+ ´+
´ right(cdate(sum(Tempo_de_Ligação)), 5) as horastotais ´+
´from ´+
´ chamadas ´+
´group by ´+
´ left(inicio, 10) ´;
DM.ADOQuery_grafico.Open;



Responder

Gostei + 0

28/07/2009

Nino Marques

Deu o mesmo erro Denovo...
Compila sem erros..mas na execução...Runtime error..


Responder

Gostei + 0

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

Aceitar