el eval lo realizaria asi
     C                   EVAL      Seletq= 'select arcodi, arnomb, -
     C                             from fartic -
     C                             where arempr=:@empresa and arsitu=:@situac -
     C                             and arcate=:@categoria'
 
 
        dcomilla        s            1        inz('''')
        c                eval    selectq =    'select arcodi, arnomb '    +
        c                                            'from fartic '    + 
        c                                            'where arempr = '    +
        c                                            @empresa +
        c                                            ' and  arsitu = '    +
        c                                            comilla    +
        c                                            @situac    +
        c                                            comilla    +
        c                                            'and arcate = '    +
        c                                            comilla    +
        c                                            @categoria    +
        c                                            comilla   
        c 
Esta sentencia es completamente din�mica                                                                        
Jaime Villa T.
----- Mensaje original -----
Enviado: Mi�rcoles, 23 de Febrero de 2005 05:27 a.m.
Asunto: Re: Sql dinamico

[EMAIL PROTECTED] escribi�:

Hola Foro. Estoy haciendo una prueba para trabajar con SQL dinamico y no hay manera, a ver si me podeis echar una mano. En principio no hace la seleccion y el SQLCOD = -514  Os paso el peque�o programa de pruebas. Compilo con commit *none . hasta que no hemos pasado a V5r3 no he podido hacer nada con sql embebido y esta prueba es bas�ndome en ejemplos que habeis enviado al Foro. La misma seleccion en est�tico funciona bien.

FFartic IF E k disk FProvartic O a E disk D @empresa S 3 0 Inz(10) D @situac S 1 Inz('A') D @categoria S 2 Inz('BR') D Seletq S 300 * C EVAL Seletq= 'select arcodi, arnomb, - C from fartic - C where arempr=:@empresa and arsitu=:@situac - C and arcate=:@categoria' � C/Exec sql � C+ PREPARE stmt FROM :seletQ C/end-exec � * � C/EXEC SQL � C+ DECLARE C1 CURSOR FOR Stmt C/END-EXEC � * � C/Exec sql � C+ open C1 � C/end-exec � * � � C Dow sqlcod <>100 and sqlcod>=0 ��---------------1-. C/Exec sql � | C+ FETCH NEXT FROM C1 INTO :prcodi, :prnomb C/end-exec � | � C If sqlcod<>100 and sqlcod>=0 ��-------------2-. | C Write Provesr � | | � C Endif ��-------------2-' | � C Enddo ��---------------1-' C/Exec sql � C+ CLOSE C1 C/end-exec � C Seton Lr � 
No puedes emplear variables del lenguaje de esa forma en sql din�mico. En su lugar, utiliza el valor de �stas mismas variables en la sentencia, o bien prepara una sentencia con par�metros (por ejemplo, 'where arempr = ? '), y luego ejec�tala pas�ndole dichos par�metros (creo recordar que para un cursor ser�a 'declare c1 cursor for stmt using :variable')


--
Saludos.

Fernando P�rez 

Cer�mica Saloni. Dpto. Sistemas

Responder a