Filipe eu tentei fazer com generator mas encontrei o seguinte problema... é que 
o clientdataset trabalha em memoria, entao no 
beforepost do clientdataset criei um metodo ValidateFields que tem a finalidade 
de verificar quais campos obrigatorios estao nulos
e sempre estourava uma excessao, pois o generator ainda n tinha sido disparado, 
pesquisei em varios foruns e vi esse exemplo que postei aqui. Mas de qualquer 
maneira muito obrigado pela dica
 


Diego   




----- Mensagem original ----
De: Filipe Belchior <[EMAIL PROTECTED]>
Para: delphi-br@yahoogrupos.com.br
Enviadas: Quinta-feira, 26 de Outubro de 2006 16:49:04
Assunto: [delphi-br] Re: Procedures no Firebird




Jorge, vai ficar assim..





 ----------   corpo da procedure   ----------------

 CREATE PROCEDURE P_INCREMENTA_CAMPOS (

     PI_TABELA VARCHAR(30),

     PI_CAMPO VARCHAR(20))

 RETURNS (

     PO_VALUE INTEGER)

 AS

 BEGIN

   EXECUTE STATEMENT

   'SELECT MAX (' || :PI_CAMPO || ') FROM ' || :PI_TABELA

   INTO :PO_VALUE;

   SUSPEND;

 END;

 ----------------------------------------------------





..Mas não é aconselhavel tratar assim incremento de PK de tabela,

o ideal é usar generator, e ter um outro campo, q vc possar usar

como quiser e mostrar ao usuário.







--- Em delphi-br@yahoogrupos.com.br, Rodrigo Bevilacqua Marcondes

<[EMAIL PROTECTED]> escreveu

>

> [FOR] EXECUTE STATEMENT <string>

> [INTO :var1 [, var2 [, :varn]]] DO

> <compound-statement>];

> <compound-statement> = {statement | block-of-statements}

> 

> ---Ex .

> SQL = 'EXECUTE PROCEDURE '||PROC_NAME;

> EXECUTE STATEMENT SQL;

> 

> "Jorge Diego de A. Lopes" <[EMAIL PROTECTED]> escreveu: Ola pessoal

estou tentando fazer uma StoredProcedure generica para

> fazer o auto incremento do campo chave no momento da inserção pelo

delphi.

> 

> ----------   corpo da procedure   ----------------

> CREATE PROCEDURE P_INCREMENTA_CAMPOS (

>     PI_TABELA VARCHAR(30),

>     PI_CAMPO VARCHAR(20))

> RETURNS (

>     PO_VALUE INTEGER)

> AS

> BEGIN

>   SELECT MAX (:PI_CAMPO) FROM :PI_TABELA

>   INTO :PO_VALUE;

>   SUSPEND;

> END;

> ----------------------------------------------------

> so que está procedure nao esta compilando, pois ela informa que esta

> tabela nao existe, pois o correto seria assim

> SELECT MAX (ID_USUARIO) FROM USUARIOS 

> INTO :PO_VALUE;

> So que esta forma nao ficaria generia para todas as tabelas... alguem

> poderia me informar se teria alguma forma generica de fazer isso...

> 

> 

> 

> 

>              

> ---------------------------------

>  Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador

agora! 

> 

> [As partes desta mensagem que não continham texto foram removidas]

>















                
_______________________________________________________ 
O Yahoo! está de cara nova. Venha conferir! 
http://br.yahoo.com

[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 

Responder a