Pompeu Postado Julho 25, 2009 Denunciar Share Postado Julho 25, 2009 Saudações ...Estou desenvolvendo um sistema em Delphi e MySQL, preciso gerar um faturamento e tenho certeza q através de uma SP é bem mais rápido, mas não estou conseguindo.sei q este forum é sobre MySQL mas segue rotina feita em delphi: DTM.TBSocios.First; while not DTM.TBSocios.Eof do begin //Gerar Valor Mensalidade V_TipoSocio := DTM.TBSocios.FieldByName('tiposocio').AsString; V_NTitulo := DTM.TBSocios.FieldByName('ntitulo').AsString; V_Codigo := DTM.TBSocios.FieldByName('codigo').AsString; DTM.TBTaxas.Locate('id', DTM.TBSocios.FieldByName('TaxaID').AsString, []); DTM.TBTaxasLancamentos.Active := True; DTM.TBTaxasLancamentos.Filter := 'idsocio=' + DTM.TBSocios.FieldByName('id').AsString; DTM.TBTaxasLancamentos.Filtered := True; VValorTaxas := 0; DTM.TBTaxasLancamentos.First; while not DTM.TBTaxasLancamentos.Eof do begin VValorTaxas := VValorTaxas + DTM.TBTaxasLancamentos.FieldByName('valor').AsFloat; DTM.TBTaxasLancamentos.Next; end; DTM.TBTaxasLancamentos.Active := False; VValorMensalidade := DTM.TBTaxas.FieldByName('valor').AsFloat + VValorTaxas; CRNovoRegistro; DTM.TBContas.Close; DTM.TBContas.SQL.Clear; DTM.TBContas.SQL.Add('Insert Into contasreceber (id, codigo, ' + 'nome, ' + 'ndoc, ' + 'valor, ' + 'lancamento, ' + 'vencimento, ' + 'planocontas, ' + 'idfaturamento' + ') Values (' + chr(39) + IntToStr(CRID) + chr(39) + ', ' + chr(39) + ContasReceber.V_IDCodigo + chr(39) + ', ' + chr(39) + DTM.TBSocios.FieldByName('nome').AsString + chr(39) + ', ' + chr(39) + NDocumento.Text + chr(39) + ', ' + chr(39) + FloatToStr(VValorMensalidade) + chr(39) + ', ' + chr(39) + DateToStr(Date) + chr(39) + ', ' + chr(39) + Vencimento.Text + chr(39) + ', ' + chr(39) + PlanoConta.Text + chr(39) + ', ' + chr(39) + IntToStr(ID) + chr(39) + ')'); DTM.TBContas.ExecSQL; DTM.TBContas.Close; DTM.TBContas.SQL.Clear; DTM.TBContas.SQL.Add('commit'); DTM.TBContas.ExecSQL; //FIM Gerar Valor Mensalidade DTM.TBSocios.Next; end;A rotina em delphi está funcionando perfeitamente, gostaria de fazer uma SP.O Problema está sendo em localizar o registro em outra tabela ... não sei fazer isso em SPObrigado Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 27, 2009 Denunciar Share Postado Julho 27, 2009 Oi, 'Pompeu' A rotina em delphi está funcionando perfeitamente, gostaria de fazer uma SP.O Problema está sendo em localizar o registro em outra tabela ... não sei fazer isso em SPPara trabalhar lendo linhas de tabelas você deverá usar CURSORes. Recentemente foram publicados alguns tópicos sobre storage procedures usando cursor.Cursor nada mais é que o nome interno que a tabela vai usar durante o ciclo da SP(storage procedure).Para ler cada linha usa-se o comando FETCH. Para controlar o final do arquivo usa-se uma variável inteira. Esta variável deve ser atribuida a um HANDLER.Veja o exemplo abaixo:DELIMITER $$; DROP PROCEDURE IF EXISTS `base_teste_drc`.`CalculaSaldo`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `CalculaSaldo`(in vColaboradorID INT) BEGIN DECLARE vDone INT DEFAULT 0; /* declarada a variavel que servirá de marcador de EOF*/ DECLARE vPontoID INT; DECLARE vCargaHoraria INT; DECLARE vTrabalho INT; DECLARE vSaldoAux INT; DECLARE vDataAtual DateTime; DECLARE vStatus INT default 0; -- Busca todas as datas que devem ser atualizadas (ultimos 30 dias) DECLARE Curs CURSOR FOR /* declaração do cursor*/ SELECT str_to_date(date_format(Entrada,'%Y-%m-%d 00:00:00'), get_format(Datetime, 'iso')), SUM(Trabalho) FROM Ponto WHERE ColaboradorID = vColaboradorID AND DATEDIFF(now(), Entrada) <= 180 AND DATEDIFF(now(), Entrada) >= 1 GROUP BY str_to_date(date_format(Entrada,'%Y-%m-%d 00:00:00'), get_format(Datetime, 'iso')) ORDER BY 1; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1; /* declaração do handler que controlará o EOF */ -- Busca a carga hor?ria do colaborador SELECT @vCargaHoraria := CargaHoraria*60 FROM Colaborador WHERE ColaboradorID = vColaboradorID; OPEN Curs; /* abre o cursor */ REPEAT FETCH Curs INTO vDataAtual, vTrabalho; /* lê linha do select contido no cursor */ IF NOT vDone THEN /* Verifica se ocorreu o EOF */ SELECT @vSaldoAUx := IFNULL((SELECT saldo FROM Ponto WHERE ColaboradorID = vColaboradorID AND Str_to_date(Date_format(Entrada,'%Y-%m-%d 00:00:00'), Get_format(DATETIME,'iso')) < Str_to_date(Date_format(vDataAtual,'%Y-%m-%d 00:00:00'),Get_format(DATETIME,'iso')) ORDER BY Entrada DESC LIMIT 1),0) + vTrabalho - (CASE WHEN Weekday(vDataAtual) IN (5,6) THEN 0 ELSE vCargaHoraria END); UPDATE Ponto SET Saldo = @vSaldoAux WHERE ColaboradorID = vColaboradorID AND Str_to_date(Date_format(Entrada,'%Y-%m-%d 00:00:00'), Get_format(DATETIME,'iso')) = Str_to_date(Date_format(vDataAtual,'%Y-%m-%d 00:00:00'),Get_format(DATETIME,'iso')); END IF; UNTIL vDone END REPEAT; CLOSE Curs; /* Fecha o cursor */ END$$ DELIMITER;$$ Link para o comentário Compartilhar em outros sites More sharing options...
0 Pompeu Postado Julho 27, 2009 Autor Denunciar Share Postado Julho 27, 2009 Obrigado Denis ...Estou tentando fazer e assim q conseguir ou eu tiver alguma duvida eu posto aki okvocê poderia me dar uma explicação sobre como armazenar informações nas ariaveis da SP ? pode ser em qualquer linguagem de programação, não precisa ser exatamente em delphi só pra eu ter uma ideia.mais uma vez Obrigado Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 27, 2009 Denunciar Share Postado Julho 27, 2009 Obrigado Denis ...Estou tentando fazer e assim q conseguir ou eu tiver alguma duvida eu posto aki okvocê poderia me dar uma explicação sobre como armazenar informações nas ariaveis da SP ? pode ser em qualquer linguagem de programação, não precisa ser exatamente em delphi só pra eu ter uma ideia.mais uma vez ObrigadoSe você falou de atribuição, o comando em SQL é este:SET Saldo = @vSaldoAuxSe você quer passar parâmetros de sua linguagem de peogramação para a SP, vai depender do componente que você estiver usando. No seu caso ZEOS ou BDE via ODBC.Quanto ao exemplo acima Saldo é um campo da tabela e @vSaldoAux é uma variável não declarada. Particularmente, eu prefiro declarar a variável e usá-la sem o "@".Se não for nada disso que passei acima, por favor explique melhor o que você quer.P.S. Entendo bem de Delphi. Só não tenho tempo para coneverter seu código para SQL. Link para o comentário Compartilhar em outros sites More sharing options...
0 Pompeu Postado Julho 27, 2009 Autor Denunciar Share Postado Julho 27, 2009 "Denis" eu uso delphi 7 e o coponente Zeos ... eu gostaria de saber como enviar valores para a variavel dentro da SPEx: tenho uma SP e duas variaveis declaradas certo, como eu envio valores para essas variaveis. Eu chamo a SP atraves do delphi usando o comando "call" conforme exemplo abaixo: DTM.TBNomeDaTabela.Close; DTM.TBNomeDaTabela.SQL.Clear; DTM.TBNomeDaTabela.SQL.Add('CALL nome_da_sp()'); DTM.TBNomeDaTabela.ExecSQL;só q eu não queria chamar somente a SP, eu gotaria de chama-la passando os valores das variaveis entendeu ?Muito obrigado mais uma vez "Denis" Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Julho 27, 2009 Denunciar Share Postado Julho 27, 2009 Oi, 'Pompeu'Você já tentou assim?DTM.TBNomeDaTabela.Close; DTM.TBNomeDaTabela.SQL.Clear; DTM.TBNomeDaTabela.SQL.Add('CALL nome_da_sp(:param1)'); DTM.TBNomeDaTabela.parambyname('param1').value := sua_variavel; DTM.TBNomeDaTabela.ExecSQL;É desta forma que passo parametros para todas as minhas instruções SQL dentro do delphi.Também uso o Delphi 7. Link para o comentário Compartilhar em outros sites More sharing options...
0 Pompeu Postado Julho 27, 2009 Autor Denunciar Share Postado Julho 27, 2009 "Denis" ... era isso q eu precisava pra começar a trabahar com as SPsVlw einUm grande Abraço Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Pompeu
Saudações ...
Estou desenvolvendo um sistema em Delphi e MySQL, preciso gerar um faturamento e tenho certeza q através de uma SP é bem mais rápido, mas não estou conseguindo.
sei q este forum é sobre MySQL mas segue rotina feita em delphi:
A rotina em delphi está funcionando perfeitamente, gostaria de fazer uma SP.
O Problema está sendo em localizar o registro em outra tabela ... não sei fazer isso em SP
Obrigado
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados