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

uso de SQLite3 en C

Estas en el tema de uso de SQLite3 en C en el foro de C/C++ en Foros del Web. hola a todos, queria plantearles un problema que tengo al usar la libreria SQLite3 en mi programa, me baje el archivo de la pagina oficial ...
  #1 (permalink)  
Antiguo 08/09/2011, 18:50
Avatar de eric_brandan  
Fecha de Ingreso: agosto-2011
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 2
uso de SQLite3 en C

hola a todos, queria plantearles un problema que tengo al usar la libreria SQLite3 en mi programa, me baje el archivo de la pagina oficial SQLite3_dll_win32, el cual trae dos archivos: uno dice SQLite3.dll y el otro SQLite3(archivo DEF).

El problema es que no se como usar estas librerias en mi programa, yo intente lo siguiente pero sin resultado:

#include <stdio.h>
#include <sqlite3.h>

void main ()

{
sqlite3 *db;
int msg;
char sentencia[200];
char* error;

msg = sqlite3_open("jugadores.db",&db);
if (msg!=SQLITE3_OK)
{
printf("se ha producido un error al crear la base de datos");
}
else
{
printf("la base de datos se ha creado satisfactoriamente");
}

}

Al compilar me tira un error, "declarations sintax error".

por otro lado me es extraño el contenido del arhivo SQLite3 (archivo DEF) , el cual solo tiene declaraciones del tipo :

EXPORTS
sqlite3_aggregate_context
sqlite3_aggregate_count
sqlite3_auto_extension
sqlite3_backup_finish
....

espero que si alguien sabe como usar esta libreria , pueda darme una mano...mchas gracias
  #2 (permalink)  
Antiguo 08/09/2011, 20:33
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: uso de SQLite3 en C

Mira lo que te falta es hacer el linkeo de la DLL. Pero al ser una DLL lo tienes que hacer dinamicamente, vas a tener que usar la funcion LoadLibrary de WinAPI para cargar la DLL.

Otro posibilidad es buscar en la pagina de sqlite, viene una libreria que te hace esos linkeos.

O por ultimo, te puedes bajar esto: http://www.sqlite.org/sqlite-amalgamation-3070701.zip
Es el codigo fuente en un solo archivo.

Para compilar usas: gcc mifile.c sqlite3.c

No se necesita nada extra para compilarlo y te queda todo en un solo paquete. No dependes de la DLL.
  #3 (permalink)  
Antiguo 09/09/2011, 22:39
Avatar de eric_brandan  
Fecha de Ingreso: agosto-2011
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: uso de SQLite3 en C

hola, antes que nada gracias por tu ayuda, te comento que estoi trabajando con turbo C++ en windows xp, por lo cual uso la instruccion : tcc sqlite3.c.....desgraciadamente para mi , me tira mucho errores al momento de compilar . baje el archivo del link que me diste el cual trae los siguientes archivos:

sqlite3.c, sqlite3txt.h, shell.c, sqlite3.h.

tambien me da los mismos errores cuando intento compilar shell.c....voy a seguir probando e investigando para ver si puedo solucionar esto...si se te ocurre alguna solucion para este problema..agredeceria tu ayuda....saludos....
  #4 (permalink)  
Antiguo 11/09/2011, 14:07
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: uso de SQLite3 en C

que errores te da y como lo estas tratando de compilar???
  #5 (permalink)  
Antiguo 12/09/2011, 16:19
Avatar de eric_brandan  
Fecha de Ingreso: agosto-2011
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: uso de SQLite3 en C

Estos son los errores que me da al momento de compilar :

Turbo C++ Version 3.00 Copyright (c) 1992 Borland International
sqlite3.c:
Error sqlite3.c 13606: Numeric constant too large in function localtimeOffset
Error sqlite3.c 13686: Numeric constant too large in function parseModifier
Error sqlite3.c 14095: Numeric constant too large in function strftimeFunc
Error sqlite3.c 17340: Unable to open include file 'pthread.h'
Error sqlite3.c 17357: Declaration missing ;
Error sqlite3.c 17446: Undefined symbol 'PTHREAD_MUTEX_INITIALIZER' in function pthreadMutexAlloc
Error sqlite3.c 17446: Declaration syntax error in function pthreadMutexAlloc
Error sqlite3.c 17446: Declaration missing ; in function pthreadMutexAlloc
Warning sqlite3.c 17446: Function should return a value in function pthreadMutexAlloc
Warning sqlite3.c 17446: 'staticMutexes' is assigned a value that is never used in function pthreadMutexAlloc
Warning sqlite3.c 17446: Parameter 'iType' is never used in function pthreadMutexAlloc
Error sqlite3.c 17446: Declaration terminated incorrectly
Error sqlite3.c 17452: Unexpected }
Error sqlite3.c 17454: Declaration terminated incorrectly
Error sqlite3.c 17497: Unexpected }
Error sqlite3.c 17508: Undefined symbol 'mutex' in function pthreadMutexFree
Error sqlite3.c 17551: Undefined symbol 'mutex' in function pthreadMutexEnter
Warning sqlite3.c 17564: Parameter 'p' is never used in function pthreadMutexEnter
Error sqlite3.c 17597: Undefined symbol 'mutex' in function pthreadMutexTry
Warning sqlite3.c 17614: Parameter 'p' is never used in function pthreadMutexTry
Error sqlite3.c 17635: Undefined symbol 'mutex' in function pthreadMutexLeave
Warning sqlite3.c 17643: Parameter 'p' is never used in function pthreadMutexLeave
Warning sqlite3.c 18300: Constant out of range in comparison in function sqlite3Malloc
Warning sqlite3.c 18520: Constant out of range in comparison in function sqlite3Realloc
Warning sqlite3.c 20244: Condition is always true in function sqlite3VdbeMemTranslate
Warning sqlite3.c 20252: Condition is always true in function sqlite3VdbeMemTranslate
Warning sqlite3.c 20263: Constant out of range in comparison in function sqlite3VdbeMemTranslate
Warning sqlite3.c 20269: Constant out of range in comparison in function sqlite3VdbeMemTranslate
Warning sqlite3.c 20451: Constant out of range in comparison in function sqlite3Utf16ByteLen
Warning sqlite3.c 20451: Constant out of range in comparison in function sqlite3Utf16ByteLen
Warning sqlite3.c 20456: Constant out of range in comparison in function sqlite3Utf16ByteLen
Warning sqlite3.c 20456: Constant out of range in comparison in function sqlite3Utf16ByteLen
Warning sqlite3.c 21575: Constant out of range in comparison in function sqlite3SafetyCheckOk
Warning sqlite3.c 21588: Constant out of range in comparison in function sqlite3SafetyCheckSickOrOk
Warning sqlite3.c 21589: Constant out of range in comparison in function sqlite3SafetyCheckSickOrOk
Warning sqlite3.c 21590: Constant out of range in comparison in function sqlite3SafetyCheckSickOrOk
Error sqlite3.c 24377: Unable to open include file 'unistd.h'
Error sqlite3.c 24378: Unable to open include file 'sys/time.h'
Error sqlite3.c 24381: Unable to open include file 'sys/mman.h'
Error sqlite3.c 24776: Undefined symbol 'close'
Error sqlite3.c 24776: Declaration terminated incorrectly
Error sqlite3.c 24776: Unexpected }
Error sqlite3.c 24776: Declaration terminated incorrectly
Error sqlite3.c 24858: Unexpected }
Error sqlite3.c 24880: Not an allowed type in function unixSetSystemCall
Error sqlite3.c 24880: Too many error or warning messages in function unixSetSystemCall
*** 26 errors in Compile ***


Available memory 3783028

La instruccion que uso es : tcc sqlite3.c
  #6 (permalink)  
Antiguo 13/09/2011, 14:22
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 6 meses
Puntos: 61
Respuesta: uso de SQLite3 en C

El uso de Turbo C++ es mandatorio?
Puedo estar equivocado, pero el mensaje de copyright es de 1992, sugeriria probar con un compilador mas moderno. Por ejemplo g++, o Microsoft, que tiene versiones gratuitas de su compiladores tambien.
  #7 (permalink)  
Antiguo 13/09/2011, 16:16
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: uso de SQLite3 en C

Ademas de actualizar el compilador, creo que debe agregar la libreria -pthread a la hora de compilar. Pero fijate que ni siquiera encuentra el archivo de cabecera...asi que deberias actualizarte un poco!
  #8 (permalink)  
Antiguo 15/09/2011, 10:29
Avatar de eric_brandan  
Fecha de Ingreso: agosto-2011
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: uso de SQLite3 en C

voy a intentar compilarlo con Dev C++, encontre un tutorial que explica como hacerlo:

dejo el enlace por si a alguien le sirve:

[URL="http://source.online.free.fr/Windows_HowToCompileSQLite"]http://source.online.free.fr/Windows_HowToCompileSQLite[/URL]
  #9 (permalink)  
Antiguo 20/09/2011, 18:25
Avatar de eric_brandan  
Fecha de Ingreso: agosto-2011
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: uso de SQLite3 en C

hola, molesto una vez mas porque la verdad que ya estoi apunto de tirar la toalla con esto de sqlite3.....haber tengo este codigo que les presento a continuacion:

#include <stdio.h>
#include "sqlite3.h"
#include <windows.h>

typedef int (__cdecl * MYPROC) (LPWSTR);

int main (void)
{
sqlite3* db;
int msg;

HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = false;



hinstLib = LoadLibrary ("sqlite3.dll");
ProcAdd = (MYPROC) GetProcAddress (hinstLib, "sqlite3_open");

Este codigo casi que lo copie entero de MSDN, creo que hasta ahi voy bien a pesar de que no entiendo algunas cosas que dice el codigo como eso de :

typedef int (__cdecl * MYPROC) (LPWSTR);

y

HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = false;

La funcion que inteto usar (en principio) es sqlite3_open , la cuestion es que no se como llamarla , probe con :

ProcAdd("base.db", &db); y con msg = ProcAdd("base.db", &db);

pero no pasa nada y me tira un error:

21 C:\Dev-Cpp\sqlite3\prueba3.cpp cannot convert `const char*' to `WCHAR*' in argument passing

si alguien mas experimentado que yo supiera como usar esta funcion, se lo agradeceria ..... las explicaciones que ahi en internet con respecto a este tema son bastante complejas de entender para un principiante y amenudo imcompletas....

bueno nada...ojala puedan ayudarme y asi ya me saco de encima esto....no me gusta molestar pero no me queda otra....saludos
  #10 (permalink)  
Antiguo 20/09/2011, 19:57
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: uso de SQLite3 en C

Mira yo uso Sqlite en C/C++ pero no lo utilizo de esa forma. Como te mostre antes, me baje le fuente sqlite3.c y con un simple:
gcc -c sqlite3.c
Obtengo un archivo con el codigo objeto. Luego a eso lo incluyo en cualquier otro compiulacion y listo. Tanto c++ como en C.

Solo tengo que agregar las cabezeras "sqlite3.h".

Haceme caso, bajate un compilador mas actualizalo y probalo. Realmente resulta facil.
  #11 (permalink)  
Antiguo 20/09/2011, 22:43
Avatar de eric_brandan  
Fecha de Ingreso: agosto-2011
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: uso de SQLite3 en C

gracias por la respuesta, bueno ya pude compilar el archivo con gcc y como resultado tengo un archivo sqlite3.o....pregunta...basta con estas lineas en mi codigo ?

#include <stdio.h>
#include "sqlite3.h"

int main ()

{

sqlite3* db;
int msg;

msg = sqlite3_open ("base.db", &db);

}

al comilar esto me sale el error: [linked error] undefined reference to sqlite3_open.

gracias de ante mano por tu repuesta...
  #12 (permalink)  
Antiguo 21/09/2011, 08:14
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
Puntos: 228
Respuesta: uso de SQLite3 en C

Como estas compilando??
Deberia ser:

gcc sqlite3.o main.c

Tienes que agregar el archivo sqilte3.o a la hora de compilar tu programa.

Saludos
  #13 (permalink)  
Antiguo 23/09/2011, 15:55
Avatar de eric_brandan  
Fecha de Ingreso: agosto-2011
Mensajes: 18
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: uso de SQLite3 en C

hola sam90, finalmente pude hacer funcionar sqlite3 en mi programa.....te doy las gracias por haberme ayudado con este problema.....saludoss

Etiquetas: dll, programa, sqlite3
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 04:38.