[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
|
begin:vcard
fn;quoted-printable:Fernando P=C3=A9rez
n;quoted-printable:P=C3=A9rez;Fernando
org:;Sistemas
email;internet:[EMAIL PROTECTED]
tel;work:Ext. 627
x-mozilla-html:TRUE
version:2.1
end:vcard