Conversão: código delphi -gt; stored procedure

Delphi

31/01/2008

Salve galera !

No Delphi eu tenho a seguinte expressão:

    sql.text := ´ update ´+fTabela+´ set ´+
                    ´ jahretornou = ´+inttostr(fMarca)+
                    ´ where codigo = ´+inttostr(fCod);


E na stored procedure, tentei fazer a mesma coisa:

CREATE or ALTER PROCEDURE SP_UpdateEhRetorno (
    FCOD INTEGER,
    FMARCA INTEGER,
    FTABELA VARCHAR(50))
AS
begin

    update :fTabela set jahretornou = :fMarca where codigo = :fCod;

end;


Porém dá erro na coluna 12, que é o parâmetro [b:f87b1fc00b]:fTabela[/b:f87b1fc00b] .

Se alguém puder me ajudar ...

Valeu ! :!:


Powerlog Tecnologia

Powerlog Tecnologia

Curtidas 0

Respostas

Flyskin

Flyskin

31/01/2008

em procedimentos e funções o nome da tabela não pode estar em parâmetros... vai ter que criar uma procedure para cada tabela e chamar conforme fo o caso.
se estiver utilizando o oracle, pode criar um código pl/sql buscando o nome da tabela nos objetos do banco.


GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

31/01/2008

Estou usando Firebird 2.0

Será que tem alguma coisa do gênero

rdb$(´nome-da-tabela´)


igual no Delphi, quando usamos, por exemplo, TEdit(sender) ???

Só chutômetro...


GOSTEI 0
Djjunior

Djjunior

31/01/2008

uhm... é só uma idéia mas vc não pode criar uma variavel do tipo varchar a preencher com o seu código e depois dar um execute nele ?

Só chute....


GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

31/01/2008

No código funciona muito bem; mas é exatamente o contrário do que eu estou fazendo: tirando do código e colocando no banco de dados.


GOSTEI 0
Djjunior

Djjunior

31/01/2008

não falo do sequinte:

Procedure do banco
procedure tabName, campo, condicao: varchar(20)
var instrucao;
begin
  instrucao = ´Select ´+ campo + ´ from ´ + tabName;
  if condicao <> ´´ then
     instrucao = instrucao + ´ where ´ + condicao;
  exec instrucao
end;



GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

31/01/2008

djjunior, vou tirar tudo do código, ficar apenas em procedures...


GOSTEI 0
Pestana_

Pestana_

31/01/2008

utilize [b:de3fe593a2]execute statement[/b:de3fe593a2].

ex.:
set term ^ ;

create procedure teste_procedure (
nomeTabela varchar(40),
nomeCampo varchar(40),
id integer,
returns (data date)
as
  declare variable codigo integer;
begin
  strSql = ´SELECT id FROM ´ || :nomeTabela || ´ WHERE ´ || :nomeCampo || ´ = ´ || :id;
  execute statement :strSql into :codigo;
end ^

set term ; ^


flw


GOSTEI 0
Pestana_

Pestana_

31/01/2008

utilizando o seu código:

CREATE or ALTER PROCEDURE SP_UpdateEhRetorno ( 
    FCOD INTEGER, 
    FMARCA INTEGER, 
    FTABELA VARCHAR(50)) 
AS
    DECLARE VARIABLE strSql varchar(500); 
begin 
    strSql = update :fTabela set jahretornou = :fMarca where codigo = :fCod; 
    execute statement :strSql
end;


flw.


GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

31/01/2008

Valeu Pestana_ !!!!!!!!!!!!!

Era isso que eu precisava

:!:


GOSTEI 0
Pestana_

Pestana_

31/01/2008

blz, apesar que neste último post eu cometi alguns erro de digitação (esqueci de concatenar as strings), mas se você consegiu resolveu o problema tudo bem.

qualquer coisa posta aqui no forum!
flw.


GOSTEI 0
Powerlog Tecnologia

Powerlog Tecnologia

31/01/2008

Deu certo sim Pestana_ , peguei a idéia e funcionou blz !


GOSTEI 0
POSTAR