Power Builder - Que Significa If sqlca.SQLCode <> 0 Then

 
Vista:

Que Significa If sqlca.SQLCode <> 0 Then

Publicado por Pipe (1 intervención) el 21/02/2011 21:42:38
Señores del foro, tengo una gran duda, me gustaria saber que significa esta instruccion y poder detirminar si la busqueda en la tabla es efectiva, o simplemente que no logro ubicar el registro, o que no logro conectar a la tabla ?

No se a cual de estas opciones se refiere, aca les dejo es Scrip

Select tb_in_lista_precios.precio,
Into :p
From tb_in_lista_precios
Where tb_in_lista_precios.cod_empresa= :c_emp;

If sqlca.SQLCode <> 0 Then // NO SE QUE SIGNIFICA ESTE CODIGO

Pipe
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
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

RE:Que Significa If sqlca.SQLCode <> 0 Then

Publicado por JeinnerH (646 intervenciones) el 21/02/2011 22:49:56
El SQLCA es el objeto transacsacional que se encarga de controlar la conexión a la base de datos. Cada vez que se hace una operación sobre la base de datos el SQLCA, contendrá cuál fue el resultado final de esta operación.

Algunas de las consultas u operaciones que se pueden ejecutar sobre la base de datos son las siguientes:
Insert
Select
Delete
Update

Y otras.

Si el SQLCA.Code (indicador del resultado de la operación), fue mayor a cero, significa que algún error ocurrió durante la consulta. Cuál error?, pues el número que contenga el SQLCA.Code. En el caso de que este sea 100, significa que la consulta fue correcta, pero no se logró obtener información.

Por eso generalmente se utiliza la siguiente instrucción luego:
Messagebox('ERROR('+String(SQLCA.SQLCode)+')', 'ERROR INTERNO: '+SQLCA.SQLErrText)

Ahí te dará el número del error y el mensaje generado por la base de datos.

Ahora bien, si se logró conseguir la información depende de varias cosas.

Primero, que no se haya producido error, segundo, que se haya podido recuperar alguna información válida.

Para el caso:
Select tb_in_lista_precios.precio,
Into :p
From tb_in_lista_precios
Where tb_in_lista_precios.cod_empresa= :c_emp;
If SQLCA.Code = 0 Then
If IsNull(p) Then
Messagebox('ERROR', 'ERROR No es posible recuperar la información')
End If

Else
Messagebox('ERROR('+String(SQLCA.SQLCode)+')', 'ERROR INTERNO: '+SQLCA.SQLErrText)
End If
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:Que Significa If sqlca.SQLCode <> 0 Then

Publicado por Luis (47 intervenciones) el 22/02/2011 08:54:22
Hola Pipe,

En concreto, los posibles errores son:

0 -> Success. (consulta ok)
100 -> Fetched row not found. (no retorna registros la consulta)
-1-> Error; the statement failed. Use SQLErrText or SQLDBCode to obtain the detail.(error en la sentencia sql)

De todos modos, ten cuidado si tienes más de una conexión, es decir, como dice JeinnerH, sqlca es el objeto transaction a través del cual te conectas a la base de datos, pero podría haber más de uno (no sé si es tu caso), por lo que es recomendable informar en esos caso, en la sentencia sql, qué objeto transaccional se utiliza, es decir, algo así:

Select tb_in_lista_precios.precio,
Into :p
From tb_in_lista_precios
Where tb_in_lista_precios.cod_empresa= :c_emp
using sqlca;

y luego el mensaje que quieras lanzar dependiendo el código devuelto que son los que te he puesto arriba. Lo más usual es el ejemplo que te propone JeinnerH.

De todos modos, ¿has descartado la alternativa de datastore?

Saludos.
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:Que Significa If sqlca.SQLCode <> 0 Then

Publicado por pipe (13 intervenciones) el 22/02/2011 13:42:55
Señores, muchas gracias por su tan apreciada información, ya estoy mucho más claro al respecto, pero eh de realizar un comentario, pues me llama la atención que a pesar de esta la siguiente validación,

If sqlca.SQLCode <> 0 Then
// en esta parte de la pregunta si trae información la variable p
else
// en esta parte de la pregunta también trae información la variable p
end if

Por eso mi duda, pues jamás podía estar seguro cuando es que hay error y cuándo es que si trae la información

Por lo cual como en ambos caso trae la información, realice el proceso de validaciones y de esta manera pude obtener los resultados, porque si lo dejaba dentro de una de las opciones a veces me daba valores y en otros no

De todas formas muy agradecido por su impecable explicación, lo tomare y anotare en mis trucos de Power

Atentamente Pipe
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:Que Significa If sqlca.SQLCode <> 0 Then

Publicado por Luis (47 intervenciones) el 22/02/2011 14:13:19
Hola Pipe,

Es extraño lo que comentas, y podría ser motivado por dos razones:

1.- el objeto transacción de la sql embebida es distinto (no es el sqlca), por ello lo de añadir
using sqlca;

2.- la variable no te la refresca, por lo que podrías inicializarla previamente, por ejemplo, para que funcione correctamente el código que te propone JeinnerH, antes de la sentencia sql pon esto:

SetNull(p)

De todos modos, comentas que lo has solventado realizando ciertas validaciones, pues perfecto, lo que cuenta es que funcione y sea correcto ¿no?

Saludos.
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:Que Significa If sqlca.SQLCode <> 0 Then

Publicado por pipe (13 intervenciones) el 22/02/2011 16:32:07
Así es estimado Luis, la verdad me sorprendió que en ambos caso trajera información, pero te digo que los valores son absolutamente distintos, y los verifique con la tabla, y ambos están correctos

La búsqueda la realizo en una función, y le paso parámetros, la variable p, está declarada como Decimal antes de ingresar a la función

Una vez mas, muchas gracias por la apreciable ayuda

Afectuosamente Pipe
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