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

Obtener valores de consulta a Pstgres

Estas en el tema de Obtener valores de consulta a Pstgres en el foro de C/C++ en Foros del Web. Hola gente! Tengo un incoveniente...estoy trabajando con visual c++ conectado a Postgres y soy nuevo en esto... Necesito obtener valores de una consulta (select) pero ...
  #1 (permalink)  
Antiguo 17/02/2008, 16:48
 
Fecha de Ingreso: febrero-2008
Mensajes: 4
Antigüedad: 16 años, 3 meses
Puntos: 0
Obtener valores de consulta a Pstgres

Hola gente!

Tengo un incoveniente...estoy trabajando con visual c++ conectado a Postgres y soy nuevo en esto...
Necesito obtener valores de una consulta (select) pero no se como puedo almacenar los datos obtenidos de la consulta en variables. Ej:

sprintf(sql,"select cantidad from productos where codigo_producto=12");

quiero guardar la cantidad en una variable del tipo int

COMO PUEDO HACER ESO???

Por favor una pronta respuesta ya que tengo que terminar este sistema en los proximos dias...
  #2 (permalink)  
Antiguo 18/02/2008, 05:06
 
Fecha de Ingreso: febrero-2007
Mensajes: 163
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Obtener valores de consulta a Pstgres

Pero como te estas conectando a la base?.
  #3 (permalink)  
Antiguo 19/02/2008, 08:16
 
Fecha de Ingreso: febrero-2008
Mensajes: 4
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Obtener valores de consulta a Pstgres

padre->cone = PQsetdbLogin("localhost", "5432", NULL, NULL, "STOCK", "postgres", m_pass);
if(PQstatus(padre->cone) == CONNECTION_OK)
{
MessageBox("Conectado con Exito","EXITO");
CDialog::OnOK();
}
else
MessageBox("Fallo la conexíon. El password es incorrecto.","ERROR");

m_pass = "";


ASI ME CONECTO...EL USUARIO INGRESA EL PASSWORD DE LA BASE DE DATOS

pero eso me funciona correctamente... mi problema es q al ejecutar la consulta..quiero obtener el valor en una variable y no se como hacerlo

sprintf (sql, "select cantidad from productos where codigo=%d",m_codigo);
result3=PQexec(cone,sql);

ASI ENVIO LA CONSULTA...TMB OBTIENE LOS VALORES PERO YO NECESITO GUARDAR EL VALOR EN UNA VARIABLE...

int cant=cantidad_obtenida_de_la_consulta;

eso es lo q quiero hacer..
  #4 (permalink)  
Antiguo 19/02/2008, 08:30
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Obtener valores de consulta a Pstgres

Con la función PQntuples() obtienes cuantas filas tiene la respuesta, con PQgetvalue() obtienes el dato específico que quieres y debes convertirlo a entero ya que te retorna una cadena de caracteres:
Código:
...
int valorEntero;
PGresult *resConsulta;

resConsulta = PQexec(conexPostgres, consultaSQL);
if(PQresultStatus(resConsulta) == PGRES_TUPLES_OK) // se ejecutó bien la consulta?
{
   for (i = 0; i < PQntuples(resConsulta); i++)
   {
      valorEntero = atoi(PQgetvalue(resConsulta, i, 0)); //fila i columna 0 de resConsulta
      // Haces algo con ese valor
   }
}
PQclear(resConsulta); // limpiamos
...
Si sabes que vas a obtener un solo valor como respuesta entonces no hace falta el for, solo necesitas verificar que la consulta se hizo bien y que obtuvieras 1 resultado.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:

Última edición por _Lucifer_; 19/02/2008 a las 08:35 Razón: Errores de tipeo
  #5 (permalink)  
Antiguo 19/02/2008, 10:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 4
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Obtener valores de consulta a Pstgres

Gracias Lucifer... me sirvio y mucho tu ayuda

ahora otra pregunta...

como puedo obtener eso en una variable del tipo char???

char cadena [100];

cadena = PQgetvalue(resConsulta, i, 0);

ESA ES LA FORMA Q TRATE PERO ME DICE Q NO PUEDO CONVERTIR ASI

AYUDA!!!
  #6 (permalink)  
Antiguo 19/02/2008, 10:29
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Obtener valores de consulta a Pstgres

Código:
...
char *cadena;
cadena = PQgetvalue(resConsulta, i, 0); 
...
Que no se te olvide que la función retorna un puntero a char y no se lo puedes asignar directamente a un arreglo si quieres hacer una copia en el arreglo estático debes usar la función strcpy.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
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 22:10.