No s� si tiene que ver, pero si hago un debug, ejecuta el prepare, pero el declare se lo salta a la torera. En principio el orden es correcto. No se necesita modificar ning�n par�metro en la compilaci�n si es SQL din�mico?


 "Jaime Villa Torres" <[EMAIL PROTECTED]>
 Enviado por:  [EMAIL PROTECTED] 24/02/05 00:23
Por favor, responda a
[email protected]

Para
<[email protected]>
cc
Asunto
Re: Sql dinamico





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 -----
De: Fernando P�rez
Para: [email protected]
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