La palabra comilla y la variable se resuelven en la sentencia, por ejemplo si tiene un WHERE  de una variable alfa debes colocar WHERE @SITUAC = 'ALGO'  la primera comilla la resuelvo con la palabra comilla lo mismo que la ultima y no quedan como un literal
Jaime Villa T.
----- Mensaje original -----
Enviado: Jueves, 24 de Febrero de 2005 02:59 a.m.
Asunto: Re: Sql dinamico


Pero @situac y @categoria son dos variables y si les pongo comillas me los coje como literal


 "Jaime Villa Torres" <[EMAIL PROTECTED]>
 Enviado por:  [EMAIL PROTECTED] 24/02/05 00:23
Por favor, responda a
forum.help400@combios.es

Para
<forum.help400@combios.es>
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: forum.help400@combios.es
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