Somar horas..

Delphi

25/11/2004

Boa tarde pessoal,
estou fazendo um programa que tem que me retornar as horas de crédito ou débito que estamos com a empresa..

estou usando o sqlserver com bd, nos campos crédito e débito uso o tipo datetime..

o meu problema é qdo vou pedir no relatório a soma..
SUM(qhoras.credito).. e no campo crédito em vez do valor que está lá no crédito ou débito(ex: 01:20:00)... aparece uma data..

queria saber o que vcs me aconselham a fazer..

segue abaixo minha rotina

procedure TFrmPrincipal.TreeView1Change(Sender: TObject; Node: TTreeNode);
CONST PADRAO = ´08:00:00´;
var caminho,DIA,DIAOBS,MES,ANO,VIATURA,TEMP: string;
LINHA,LINHAOBS,COD,DIASMES: INTEGER;
Excel:variant;
SAIDADER,INICIOOPER,FINALOPER,CHEGADADER,HORASTRABALHADAS: TTIME;
begin

case Treeview1.Selected.ImageIndex of

0:
Begin
if Opendialog.Execute then
begin
Caminho:= Opendialog.FileName;
end;
if copy(extractfilename(caminho),1,5) = ´OPERA´ THEN
Begin
TRY
BEGIN
DM.RECEBE.Close;
DM.RECEBE.SQL.Clear;
DM.RECEBE.SQL.Add(´SELECT MAX(CODOPERA) FROM OPERA´);
DM.RECEBE.Prepare;
DM.RECEBE.Open;
COD:= DM.RECEBECOLUMN1.asinteger+1;
Excel := CreateOleObject(´Excel.Application´);
Excel.Visible :=false;
Excel.WorkBooks.Open(caminho);
MES:= Excel.WorkBooks[1].Sheets[1].Cells[4,8];
ANO:= Excel.WorkBooks[1].Sheets[1].Cells[4,9];
VIATURA:= Excel.WorkBooks[1].Sheets[1].Cells[4,5];
VIATURA:= StringReplace(VIATURA,#32, ´´, [rfReplaceAll]);
DM.Database.StartTransaction;
DIASMES:=DiasPorMes(strtoint(Ano),strtoint(Mes));
GAUGE.MaxValue:= DIASMES;
GAUGE.Progress:= 0;
GAUGE.VISIBLE:= TRUE;
FOR LINHA:=9 TO (DIASMES + 8) DO
Begin
DM.OPERA.Append;
DIA := Excel.WorkBooks[1].Sheets[1].Cells[linha,1];
DM.OperaCODOPERA.Value := COD;
DM.OperaVIATURA.Value := VIATURA;
DM.OperaSP.Value := Excel.WorkBooks[1].Sheets[1].Cells[linha,2];
DM.OperaKM.Value := Excel.WorkBooks[1].Sheets[1].Cells[linha,3];
SAIDADER := Excel.WorkBooks[1].Sheets[1].Cells[linha,4];
DM.OperaSAIDADER.Value := timetostr(SAIDADER);
INICIOOPER := Excel.WorkBooks[1].Sheets[1].Cells[linha,5];
DM.OperaINICIOOPER.Value := timetostr(INICIOOPER);
FINALOPER := Excel.WorkBooks[1].Sheets[1].Cells[linha,6];
DM.OperaFINALOPER.Value := timetostr(FINALOPER);
CHEGADADER := Excel.WorkBooks[1].Sheets[1].Cells[linha,7];
DM.OperaCHEGADADER.Value := timetostr(CHEGADADER);
DM.OperaAGENTE.Value := Excel.WorkBooks[1].Sheets[1].Cells[linha,8];
DM.OperaCOORD.Value := Excel.WorkBooks[1].Sheets[1].Cells[linha,9];
DM.OperaDATA.Value := STRTODATE(DIA+´/´+MES+´/´+ANO);
HORASTRABALHADAS := CHEGADADER - SAIDADER- STRTOTIME(PADRAO);

IF HORASTRABALHADAS > 0 THEN
BEGIN
DM.OPERACREDITO.Value:= TIMETOSTR(HORASTRABALHADAS);
END
ELSE
BEGIN
DM.OperaDEBITO.Value:= TIMETOSTR(HORASTRABALHADAS);
END;


DM.Opera.Post;
COD:= COD+1;
GAUGE.Progress:= GAUGE.Progress+1;
end;
LINHAOBS:= 42;
DM.RECEBE.Close;
DM.RECEBE.SQL.Clear;
DM.RECEBE.SQL.Add(´SELECT MAX(CODOBS) FROM OBSOPERA´);
DM.RECEBE.Prepare;
DM.RECEBE.Open;
COD:= DM.RECEBECOLUMN1.asinteger+1;
TEMP:= Excel.WorkBooks[1].Sheets[1].Cells[LINHAOBS,2];
WHILE TEMP <> ´´ DO
BEGIN
DM.ObsOpera.Append;
DM.ObsOperaCODOBS.Value:= COD;
DIAOBS:= Excel.WorkBooks[1].Sheets[1].Cells[LINHAOBS,1];
DM.ObsOperaDTOPERA.Value := STRTODATE(DIAOBS+´/´+MES+´/´+ANO);
DM.ObsOperaOBSERVACAO.Value := Excel.WorkBooks[1].Sheets[1].Cells[LINHAOBS,2];
DM.ObsOperaVIATURA.Value := VIATURA;
DM.ObsOpera.Post;
INC(LINHAOBS);
TEMP:= Excel.WorkBooks[1].Sheets[1].Cells[LINHAOBS,2];
INC(COD);
END;
DM.Database.Commit;
treeview1.Selected.Parent.Collapse(true);
Excel.WorkBooks.close;
GAUGE.VISIBLE:= FALSE;
SHOWMESSAGE(´O Processo foi concluído com sucesso!´);
END;
EXCEPT
ON E:EXCEPTION DO
BEGIN
SHOWMESSAGE(´OCORREU O SEGUINTE ERRO: ´+E.Message);
DM.Database.Rollback;
Treeview1.Selected.Parent.Collapse(true);
Excel.WorkBooks.close;
GAUGE.VISIBLE:= FALSE;
END;
END;
END;
END;


Jm

Jm

Curtidas 0
POSTAR