procedure do sqlserver para o firebird

02/03/2010

-- insere debito para todos os ASSOCIADOS ATIVOS   PESSOAL ESTOU TRABALHANDO EM UM PROJETO DELPHI 2010, DBEXPRESS E AGORA SIM FIREBIRD ESSA PROCEDURE ABAIXO E DO SQL SERVER , TENHO UM PROJETO PARECIDO LA ,   COMO FAÇO ISSO AQUI NO FIREBIRD ?     -- Carlos Regis e Rodrigo Carreiro Mourao  19/05/2009 21:25
CREATE  PROCEDURE DBO.PROC_LANCA_DEBITO_Cliente(
@PBitCredito BIT,
@PDecMovimento DECIMAL(12,2),
@PSntTipoMovimento SMALLINT,
@PIndUsuario INT
) AS
DECLARE CURCLIENTE
CURSOR FOR
  SELECT ID_CLIENTE FROM TB_ASSOCIADOS where dt_saida is null and id_categoria_cliente not in (1,3)
DECLARE @idCliente INT
BEGIN TRANSACTION
 OPEN CURCLIENTE
 FETCH NEXT FROM CURCLIENTE INTO @IDCLIENTE
 WHILE @@FETCH_STATUS = 0
 BEGIN
  INSERT INTO tb_ASSOCIADOS  (ID_CLIENTE,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
                               VALUES (@idCliente,@PBitCredito,@PDecMovimento,@PSntTipoMovimento,@PIndUsuario )
  FETCH NEXT FROM CURCLIENTE INTO @IDCLENTE
 END
CLOSE CURCLIENTE
DEALLOCATE CURCLIENTE
COMMIT TRANSACTION
Carlos Faria

Carlos Faria

Curtidas 0

Respostas

Carlos Faria

Carlos Faria

02/03/2010

Ola Rodrigo   so Retificando abaixo   a procedure , faz um varredura na tabela onde os clientes obedecem os paramentros passados , em seguida ela lanca um debito para todos , valor esse passado pelo usuario, se voce se lembra foi voce quem me ajudou nessa proc do sql lembra ? entao agora preciso dela no firebird
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/03/2010

Olá Carlos,

Vou convertê-la para o firebird e lhe posto.

Peço a gentileza de aguardar.

Att,

GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

Ok amigo , fico aguardando entao
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/03/2010

SET TERM ^ ;

CREATE PROCEDURE PROC_LANCA_DEBITO_Cliente(
  PBitCredito SMALLINT,
  PDecMovimento DECIMAL(12,2),
  PSntTipoMovimento SMALLINT,
  PIndUsuario INTEGER )
AS
  DECLARE VARIABLE v_cliente CHAR(7);
BEGIN
    
    FOR SELECT ID_CLIENTE INTO :v_cliente FROM TB_ASSOCIADOS
         where dt_saida is null and id_categoria_cliente not in (1,3);
    DO
    BEGIN
        INSERT INTO tb_ASSOCIADOS  (ID_CLIENTE,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
                            VALUES (:v_cliente, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
        SUSPEND;
    END
END^

SET TERM ; ^
GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

Veja que aqui eu so troquei os nomes das tabelas que da na mesma nao compila , para em cima do campo nr_matricula      
CREATE PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO    
(
  PBitCredito SMALLINT,
  PDecMovimento DECIMAL(12,2),
  PSntTipoMovimento SMALLINT,
  PIndUsuario INTEGER
  )
AS
  DECLARE VARIABLE v_MOTOQUEIRO CHAR(7);
BEGIN
   
    FOR SELECT NR_MATRICULA INTO :v_MOTOQUEIRO FROM tb_motoqueiro --seleciona na tabela motoqueiro
         where id_categoria_diaria   in (1,3);
    DO
    BEGIN
        INSERT INTO tb_motoqueiro_movimentos -- insere na tabela motoqueiro movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
                            VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
        SUSPEND;
    END
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/03/2010

Qual a mensagem de erro pois assim nao tem como identificar.

Printa a tela e me envia !!1

Att,
GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/03/2010

Estranho Carlos, Ele esta rejeitando o INTO. Pode me enviar seu banco pelo disco Virtual ??? Att,
GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

Rodrigo segue o banco     http://video.devmedia.com.br/discovirtual/187481/DBMOTOTAXI.rar   deixa eu te fazer uma pergunta aqui mesmo , fora do chamado.   Eu to ralando num aplicativo faz tempo , preciso aprender como configuar esse aplicativo para distribui-lo na net : exemplo qtos dias de avaliação quantos cadastros e etc . mesmo que seja com uma ferramenta de 3º .   se eu abrir um outro chamado la no site vc monta uma video explicativa falando sobre esse assunto ?
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/03/2010

Posso lhe sugerir um componente pago que eu uso para controle de aplicacao ele vai por data e/ou por numero de execução. Ele tem um gerador de serial e querendo libera definitivamente.

Abra m chamado, pede pra passar pra mim que lhe explico tudo.


Att,


GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

ja abri la o chamado , ok , fico nesse aqui aguardando a procedure
GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

Capricha na video desse aplicativo ai , vai ser de grande utilidade !
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/03/2010

Segue procedure correta, as alteraçoes estão em vermelho.


SET TERM ^ ;

create or alter procedure PRI_LANCA_DEBITO_MOTOQUEIRO
(
  PBitCredito SMALLINT,
  PDecMovimento DECIMAL(12,2),
  PSntTipoMovimento SMALLINT,
  PIndUsuario INTEGER
  )
AS
  DECLARE VARIABLE v_MOTOQUEIRO INTEGER;
BEGIN
  
    FOR SELECT NR_MATRICULA FROM tb_motoqueiro  where id_categoria_diaria   in (1,3) INTO :v_MOTOQUEIRO
    DO
    BEGIN
        INSERT INTO tb_motoqueiro_movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
                            VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
        SUSPEND;
    END
end^

SET TERM ; ^

GRANT INSERT ON TB_MOTOQUEIRO_MOVIMENTO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT INSERT ON TB_MOTOQUEIRO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;


GRANT EXECUTE ON PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO TO SYSDBA;

Att,

GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

Ola Rodrigo Compilou agora porem essa proc nao esta fazendo como no sql , ela nao estas varrendo a tabela motoqueiro para inserir debito para todos ,esta pegando apenas o primeiro registo eu vou dar mais uma estuda aqui nos fontes dela mais a principio e isso mesmo , so inserte o primeiro e nao todoso os cadastrados como deveria ser !
GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

Realmento , nao esta varrendo a tabela insere somenete o primeiro registo !!"
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

02/03/2010

Remove o suspend de dentro do loop.


SET TERM ^ ;

create or alter procedure PRI_LANCA_DEBITO_MOTOQUEIRO
(
  PBitCredito SMALLINT,
  PDecMovimento DECIMAL(12,2),
  PSntTipoMovimento SMALLINT,
  PIndUsuario INTEGER
  )
AS
  DECLARE VARIABLE v_MOTOQUEIRO INTEGER;
BEGIN
  
    FOR SELECT NR_MATRICULA FROM tb_motoqueiro  where id_categoria_diaria   in (1,3) INTO :v_MOTOQUEIRO
    DO
    BEGIN
        INSERT INTO tb_motoqueiro_movimento (nr_matricula,Fl_Credito,Vl_Movimento,Id_Tipo_Movimento,Id_Usuario)
                            VALUES (:v_Motoqueiro, :PBitCredito, :PDecMovimento, :PSntTipoMovimento, :PIndUsuario);
        SUSPEND;
    END
end^

SET TERM ; ^

GRANT INSERT ON TB_MOTOQUEIRO_MOVIMENTO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;
GRANT INSERT ON TB_MOTOQUEIRO TO PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO;


GRANT EXECUTE ON PROCEDURE PRI_LANCA_DEBITO_MOTOQUEIRO TO SYSDBA;


Att,

GOSTEI 0
Carlos Faria

Carlos Faria

02/03/2010

Grande Rodrigo ,   vou estudar e testar aqui a proc , mas pode fechar o chamado ai acho que aqui ja era.
GOSTEI 0
POSTAR