Usar quot;:quot; em uma query sem ser para passar parametr

Delphi

09/03/2008

Bom dia.

Estou precisando mandar uma atualização do banco de dados do meu sistema para um cliente. Porém, nessa atualização, vai além de outras coisas, uma nova TRIGGER. Nela, contém um código similar ao exemplo abaixo:

CREATE OR REPLACE FUNCTION tg_teste() RETURNS TRIGGER AS
$BODY$
DECLARE
var1 INTEGER;
var2 VARCHAR;

BEGIN

var1 [color=red:4eb9f3f016][b:4eb9f3f016]:=[/b:4eb9f3f016][/color:4eb9f3f016] 150;
var2 [color=red:4eb9f3f016][b:4eb9f3f016]:=[/b:4eb9f3f016][/color:4eb9f3f016] ´FULANO DE TAL´;

...

END;
$BODY$
LANGUAGE PLPGSQL;

O problema é que o Delphi, melhor dizendo o componente query do Deplhi, entende isso, os dois pontos, como parâmetro e ai acontece o erro.

A pergunta é a seguinte: Tem como usar dois ponto sem ser para passar parâmetro, como no exemplo acima?

Já tentei algo do tipo [color=red:4eb9f3f016][b:4eb9f3f016] \: [/b:4eb9f3f016][/color:4eb9f3f016] como se o barra fosse caracter de escape, mais não funcionou.

Abraço.

Guilherme.


Guilherme.analista

Guilherme.analista

Curtidas 0

Respostas

Desenvolvimento_camp

Desenvolvimento_camp

09/03/2008

Ja tentou usar só o sinal de igual ao invés do := na sua variável ?
var1 = 150 por exemplo ?


GOSTEI 0
Paulo

Paulo

09/03/2008

Não sei se é isso, mas acho que o código inteiro deveria estar entre aspas simples. Quando passo qualquer coisa para uma query eu passo assim:
query.sql.add(´Select * from tabela´);
No seu caso passar comando da PL/SQL para uma query acho que deveria ser a mesma coisa ou eu não entendi a sua dúvida? O [color=red:8ee606dd44]:=[/color:8ee606dd44] dentro da PL/SQL é um sinal de atribuição, semelhante ao Delphi. No seu caso está usando o PostgreSql, pelo que parece e não Oracle, mas a sintaxe de ambos tem alguma semelhança, por isso citei PL/SQL, mas dá no mesmo. Acho que deveria estar entre aspas tudo, se é que entendi. Caso contrário, explique melhor. Espero ter ajudado, senão, vale a tentativa,eheheheheheh.


GOSTEI 0
Guilherme.analista

Guilherme.analista

09/03/2008

Não sei se é isso, mas acho que o código inteiro deveria estar entre aspas simples. Quando passo qualquer coisa para uma query eu passo assim: query.sql.add(´Select * from tabela´); No seu caso passar comando da PL/SQL para uma query acho que deveria ser a mesma coisa ou eu não entendi a sua dúvida? O [color=red:e714036609]:=[/color:e714036609] dentro da PL/SQL é um sinal de atribuição, semelhante ao Delphi. No seu caso está usando o PostgreSql, pelo que parece e não Oracle, mas a sintaxe de ambos tem alguma semelhança, por isso citei PL/SQL, mas dá no mesmo. Acho que deveria estar entre aspas tudo, se é que entendi. Caso contrário, explique melhor. Espero ter ajudado, senão, vale a tentativa,eheheheheheh.



Opa...

É isso mesmo Paulo. Estou usando o PostgreSQL, porém, não funciona colocando o código dentro de aspas simples. O problema é que o Delphi, como vc sabe, entende quando se coloca 2 pontos (:) em uma query, o que vem em seguida é um parâmetro. Mais o código, como vc mesmo citou, é uma pl/sql e ai ta o problema.

Caso vc tenha alguma outra ideia....

Valeu.


GOSTEI 0
Hall 9000

Hall 9000

09/03/2008

Que componentes vc está usando e qual o método que usa para executar os comandos? Porque para vc criar ou alterar obejtos de banco de dados como tabelas, triggers, etc... vc tem que usar componente próprio para excutar scripts.. talvez uma query normal funcione chamando o comando Execsql;...


GOSTEI 0
Guilherme.analista

Guilherme.analista

09/03/2008

[quote:6ae85262dc=´Hall 9000´]Que componentes vc está usando e qual o método que usa para executar os comandos? Porque para vc criar ou alterar obejtos de banco de dados como tabelas, triggers, etc... vc tem que usar componente próprio para excutar scripts.. talvez uma query normal funcione chamando o comando Execsql;...[/quote:6ae85262dc]

Estou usando os componentes ZeosLib.

E para executar a query, estou usando o método ExecSQL


GOSTEI 0
Paulo

Paulo

09/03/2008

Guilherme, use o componente StoreProc para passar parâmetros para a sua função. Assim: Crie a função no banco e no Delphi, adicione um componente StoreProc, e aponte para a sua função no banco. Selecione os parâmetros e no OnClick do botão escreva:
StorecProc.ParamByName(´Param1´).AsInteger := 1; StorecProc.ParamByName(´Param2´).AsString := ´Teste de Função´; Exec.StoreProc;


Acho que assim vai funcionar. Qquer coisa poste aí.


GOSTEI 0
POSTAR