AS/400 - dudas con as400 y c++

 
Vista:

dudas con as400 y c++

Publicado por cruzemer (5 intervenciones) el 02/04/2008 00:48:14
Hola a todos!!!!

Estoy usando c++ para poder ejecutar instrucciones embebidas de SQL como select, insert, delete, update, compilando y ejecutando los programas en as400; con la instruccion select si lo puedo hacer, este es el codigo que uso:

EXEC SQL SELECT describe_chequera
INTO :Sql_chequera:Sql_null_chequera
FROM cuenta_banco
WHERE id_banco = 127;

Pero para las otras instrucciones que afectan los datos de la tabla, no me permite hacer cambios, sera a caso que necesito algun tipo de permisos para poder escribir en estas. Este es el codigo que uso en un update:

EXEC SQL UPDATE control_concilia
SET usuario_alta = 15
WHERE id_banco = 5;

Estos son los errores que me manda:

-518 The statement identified in the EXECUTE statement is a select-statement, or is not in a prepared state.

-7008 The table is in an invalid state for the operation

Por su ayuda, muchisimas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:dudas con as400 y c++

Publicado por ros (95 intervenciones) el 02/04/2008 09:53:17
Te lo paso la lectura SQL en RPG, pero da lo mismo el leguaje de programación.

Para las sentencias SQL embebidas en leguaje de programación debes de declarar un cursor, abrir dicho cursor y trabajar sobre el.

Cuando declaras el cursor tienes la opción de declarar las columnas que vas actualizar, esto se hace así en as400 entre otras cosas porque a nivel de seguridad C2 (nivel 50) puede llegar incluso a definir a que columnas o campos de fichero o tabla tiene acceso un usuario .
*-
*DECLARACIÓN DEL CURSOR
*-
=========
solo lectura
=========
C/EXEC SQL
C+ DECLARE C1 SCROLL CURSOR FOR SELECT F2CODI, F2NOM1, F2TLF,
C+ F2POBL, F2PROV, F2BLOQ, F2CIF FROM CLIL99 WHERE F2NOM1 LIKE
C+ :X0NOMB AND F2CIF LIKE :XCIF ORDER BY F2NOM1
C/END-EXEC

==========
lectura y escritura
==========
C/EXEC SQL
C+ DECLARE C1 DYNAMIC SCROLL CURSOR FOR SELECT F2CODI, F2NOM1,
C+ F2TLF, F2POBL, F2PROV, F2BLOQ, F2CIF FROM CLIL99 WHERE F2NOM1
C+ LIKE :X0NOMB AND F2CIF LIKE :XCIF ORDER BY F2NOM1 FOR UPDATE OF
C+ F2CODI, F2NOM1, F2NOM2
C/END-EXEC



*
*-
*APERTURA DEL CURSOR
*-
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*-
*SITUAR EN EL PRIMER REGISTRO
*-
C/EXEC SQL
C+ FETCH BEFORE FROM C1
C/END-EXEC

Si quieres saber mas te paso donde están todos los manuales, por supuesto en la lengua del imperio, http://publib-b.boulder.ibm.com/Redbooks.nsf/redbooks/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dudas con as400 y c++

Publicado por cruzemer (5 intervenciones) el 02/04/2008 23:45:01
Que tal!!!!

Trate de adaptarlo a mi codigo pero marca error de sintaxis en la parte donde esta el SQL embebido.

¿¿¿¿Me pueden ayudar????

Este es mi codigo:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <signal.h>

#include "SETSRC/QHSRC2/CONCIBS"
#include "SETSRC/QHSRC1/AYUDA"
#include "SETSRC/QHSRC1/GLOBAL"

EXEC SQL include SQLCA;
EXEC SQL include "GRALSQL";

long result = 0;
long num;
int ban_print = ERRC_OK;

int main()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;

printf("Inicia la consulta SELECT... ");

EXEC SQL CONNECT TO DEVLEG;

result = ChecaErrorDB (0, 0, 0);
if (result != ERRC_OK)
{
printf ("Error en OpenDB al conectarse al ambiente ");
return ERRC_FATAL;
}

EXEC SQL BEGIN DECLARE SECTION;

short Sql_null_chequera,
char Sql_LS1id_chequera[50] = "100";
Sql_LC2chequera[26],
Sql_LCtipConcil[2] = "S";
int Sql_LIid_banco = 5,
Sql_LIusuario = 10;

EXEC SQL END DECLARE SECTION;

EXEC SQL COMMIT;
result = ChecaErrorDB(0,1,&num);

EXEC SQL
DECLARE C1 CURSOR FOR
SELECT id_banco, id_chequera, id_tipo_concilia, usuario_alta
FROM cat_cta_banco;

EXEC SQL OPEN C1;
EXEC SQL FETCH C1 INTO :Sql_LIid_banco, :Sql_LS1id_chequera, :Sql_LCtipConcil, :Sql_LIusuario;

if(result != ERRC_OK)
{
fprintf(GF_pa,"ERROR: de SQL CODE[%d] ",SQLCODE);
EXEC SQL ROLLBACK;
return 113;
}

return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dudas con as400 y c++

Publicado por ros  (95 intervenciones) el 03/04/2008 19:14:02
Solo una pregunta el tipo de documento es tipo “C” o tipo “SQLC”, esto es importante.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dudas con as400 y c++

Publicado por cruzemer (5 intervenciones) el 03/04/2008 20:21:10
Es de tipo SQLC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dudas con as400 y c++

Publicado por cruzemer (5 intervenciones) el 03/04/2008 20:33:49
Que diferencia hay entre crear archivos SQLC y C, es que cuando comenzaba a hacer el programa me dijeron que lo guardara con el tipo de SQLC y cuando menos las instrucciones SELECT si trabajaban bien, pero no las que afectaban la informacion de la base de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dudas con as400 y c++

Publicado por ros (95 intervenciones) el 04/04/2008 10:04:14
Veras el compilador ya sea de C, RPG, COBOL, etc..., cuando chequea las líneas de código tiene en cuenta esta diferencia.
Lamento no poder ayudarte mas en tu problema, pues lo mió en el AS/400 es el RPG.
Un Saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dudas con as400 y c++

Publicado por Oscar (1 intervención) el 29/10/2008 00:12:56
Hola amigos!. Estoy aprendiendo a programar en C y C++ y me preguntaba si es posible hacerlo en AS/400, ya que quiero crear el pgm "HOLA MUNDO" y me da error al compilarlo. el error es el siguiente. SE PRODUJO UN ERROR INTERNO AL CARGAR EL PGM I5/OS...
Desde ya, agradezco a todos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar