Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema c++ con SQL Oracle

Estas en el tema de problema c++ con SQL Oracle en el foro de C/C++ en Foros del Web. Buenas, estoy liado con un ejercicio de clase se tratata de insertar en una tabla clientes, que he creado previamente, unos valores que voy pidiendo ...
  #1 (permalink)  
Antiguo 12/11/2015, 05:36
 
Fecha de Ingreso: octubre-2013
Mensajes: 79
Antigüedad: 10 años, 6 meses
Puntos: 1
problema c++ con SQL Oracle

Buenas,

estoy liado con un ejercicio de clase se tratata de insertar en una tabla clientes, que he creado previamente, unos valores que voy pidiendo al usuario. Utilizo el virtual studio 6 y Oracle8i (vamos a la ultima en tecnologia :) ).
Me da un error al parecerporque falta hacer un casting de char a SQLCHAR* (undefinied char).

Gracias por las ideas!, Adjunto el codigo:

-----------------------------------------------------------------------------------------------------------------------------------------------

el codigo de error que da visual studio:

Compiling...
Ejercicio_DAW.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\Ej2_8\Ejercicio_DAW.cpp(59) : error C2440: '=' : cannot convert from 'char' to 'unsigned char *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
C:\Program Files\Microsoft Visual Studio\MyProjects\Ej2_8\Ejercicio_DAW.cpp(86) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.

Ejercicio_DAW.exe - 1 error(s), 1 warning(s)

--------------------------------------------------------------------------------------------------------------------------------------------------

El codigo fuente:


#include <windows.h>
#include <sqlext.h>
#include <stdio.h>

main()

{
SQLHENV henv1;
SQLHDBC hdbc1;
SQLRETURN estado;
SQLHSTMT hstmt1;

SQLCHAR* sentencia;
SQLINTEGER DNI;
SQLCHAR* nombre;
SQLCHAR* direccion;
SQLINTEGER telefono;
SQLINTEGER DNIInd=0;
SQLINTEGER nombreInd=SQL_NTS;
SQLINTEGER direccionInd=SQL_NTS;
SQLINTEGER telefonoInd=0;


SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hen v1);

SQLSetEnvAttr(henv1,SQL_ATTR_ODBC_VERSION,(SQLPOIN TER*)SQL_OV_ODBC3,0);

SQLAllocHandle(SQL_HANDLE_DBC, henv1, &hdbc1);


estado=SQLConnect(hdbc1,
(SQLCHAR*) "Base de Datos Oracle",20,
(SQLCHAR*) "polly",5,
(SQLCHAR*) "gone",4);


SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);







printf("introduzca el DNI del cliente\n");
scanf("%d",&DNI);
printf("introduzca el nombre del cliente\n");
scanf("%s",&nombre);
printf("introduzca la direccion del cliente\n");
scanf("%s",&direccion);
printf("introduzca el telefono del cliente\n");
scanf("%d",&telefono);

SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_SL ONG,SQL_INTEGER,9,0,&DNI,0,&DNIInd);
SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CH AR,SQL_CHAR,50,0,&nombre,0,&nombreInd);
SQLBindParameter(hstmt1,3,SQL_PARAM_INPUT,SQL_C_CH AR,SQL_CHAR,50,0,&direccion,0,&direccionInd);
SQLBindParameter(hstmt1,4,SQL_PARAM_INPUT,SQL_C_SL ONG,SQL_INTEGER,9,0,&telefono,0,&telefonoInd);

sentencia=(char)"INSERT INTO clientes VALUES(?,?,?,?)";

estado=SQLExecDirect(hstmt1,sentencia, 255);

if
(estado==SQL_SUCCESS||estado==SQL_SUCCESS_WITH_INF O)
{
printf("\nInsercion en tabla clientes realizada con exito\n");
}

else
{

printf("\nInsercion en tabla no realizada con exito\n");

}

SQLEndTran(SQL_HANDLE_DBC,hdbc1,SQL_COMMIT);

SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);

estado=SQLDisconnect(hdbc1);


SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv1);

}
  #2 (permalink)  
Antiguo 12/11/2015, 06:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problema c++ con SQL Oracle

El tema es de C ++.
OFF TOPIC en Oracle.

Movido a foro más adecuado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/11/2015, 06:24
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: problema c++ con SQL Oracle

Código C++:
Ver original
  1. sentencia=(char)"INSERT INTO clientes VALUES(?,?,?,?)";
no debería ser?
Código C++:
Ver original
  1. sentencia = (char*)"INSERT INTO clientes VALUES(?,?,?,?)";
o directamente...
Código C++:
Ver original
  1. sentencia = "INSERT INTO clientes VALUES(?,?,?,?)";
???

Aunque ya puestos, en C++ eso no es técnicamente correcto. Para empezar "algo" es un const char*, no un char*. La solución "cruda" pasa entonces por hacer una reserva de memoria para sentencia y después llamar a strcpy para copiar el texto en dicha región de memoria. La solución más sencilla pasa por usar la clase std::string y te quitas de problemas.

Código C++:
Ver original
  1. std::string sentencia = "INSERT INTO clientes VALUES(?,?,?,?)";
  2. estado=SQLExecDirect(hstmt1,sentencia.c_str(), 255);

---------
EDITO:

Aunque bueno, para usos tan simples como los de tu ejemplo casi es más sencillo que declares sentencia como const char*:

Código C++:
Ver original
  1. const char* sentencia;
  2. sentencia = "INSERT INTO...";
  3. estado=SQLExecDirect(hstmt1,sentencia, 255);

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Última edición por eferion; 12/11/2015 a las 07:43

Etiquetas: insert, oracle, sql, usuario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:06.