Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Insertar en una base de datos access desde VC 6

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

Insertar en una base de datos access desde VC 6

Notapor rbpkirow el Jue Jun 02, 2005 12:17 pm

lo que me ocurre es que no se insertar datos en la base de datos:

Tengo lo siguiente,
una base de datos llamada "ro2005", con una tabla= "inicio"
la tabla tiene 3 campos(Id, Nombre, Valor),

Un cliente, con un boton que llama a la funcion insertar del interfaz del servidor(que funciona bien)

Y el servidor tiene una funcion dentro del interfaz llamada insertar, que recibe tres parametros(los tres de la tabla),

lo que hago es lo siguiente:

CDatabase base1;
base1.OpenEx("DSN=ro2005",0);
CString ComandoSQL="INSERT INTO inicio VALUES (longId,bstrNombre,doubleValor)";
base1.ExecuteSQL(ComandoSQL);
base1.Close();


y no se donde tengo el fallo, Me podeis ayudar?
Gracias
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 72
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España

Re: Insertar en una base de datos access desde VC 6

Notapor latindeveloper el Jue Jun 02, 2005 1:51 pm

La consulta SQL debería ser de esta forma:

Código: Seleccionar todo
INSERT INTO inicio (Id, Nombre, Valor) VALUES (1,'Nombre1',99.99)


Si el campo Id es de tipo autonumerico entonces:

Código: Seleccionar todo
INSERT INTO inicio (Nombre, Valor) VALUES ('Nombre1',99.99)
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

No funciona

Notapor rbpkirow el Jue Jun 02, 2005 2:04 pm

Ahora lo que tengo es lo siguiente:


CDatabase base1;
base1.OpenEx("DSN=ro2005",0);
CString ComandoSQL="INSERT INTO inicio (Id, Nombre, Valor) VALUES (1,'Nombre1',99.99)";
base1.ExecuteSQL(ComandoSQL);
base1.Close();

pero tampoco me guarda los valores en la BD.
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 72
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España

Re: No funciona

Notapor latindeveloper el Jue Jun 02, 2005 2:45 pm

Entonces la conexion no esta establecida.

Intenta cone este codigo:

Código: Seleccionar todo
try
{
   CDatabase base1;
   base1.OpenEx("DSN=ro2005",0);
   CString ComandoSQL="INSERT INTO inicio (Id, Nombre, Valor) VALUES (1,'Nombre1',99.99)";
   base1.ExecuteSQL(ComandoSQL);
   base1.Close();
}
catch(CDBException *dbe)
{
   dbe->ReportError(); // Si hay error se motará
   dbe->Delete();
}

Ultima edición por latindeveloper el Jue Jun 02, 2005 3:04 pm, editado 1 vez en total
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Me da el error

Notapor rbpkirow el Jue Jun 02, 2005 2:59 pm

Exactamente, me sale un MessageBox, diciendo: 'no encuentra el nombre de origen de datos y no especificó ningún controlador predeterminado'


Y porque me da este error y como puedo solucionar esto
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 72
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España

Re: Me da el error

Notapor latindeveloper el Jue Jun 02, 2005 3:14 pm

Si es una base de datos de access entonces la funcion de apertura esta mal establecida.

Intenta cambiar

Código: Seleccionar todo
base1.OpenEx("DSN=ro2005",0);


Por:

Código: Seleccionar todo
CString sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
CString sFile = "c:\\Projects\\Temporal\\Tempdb.mdb";
CString sDsn;

sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);

base1.Open(NULL,false,false,sDsn);
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

casi:

Notapor rbpkirow el Jue Jun 02, 2005 3:34 pm

Funciona pero cuando los parametros son constantes, es decir si pongo:

CString ComandoSQL="INSERT INTO inicio (Id, Nombre, Valor) VALUES (10,'hola',99.99)";

si que funciona, pero en cuanto pongo parametros:

CString ComandoSQL="INSERT INTO inicio (Id, Nombre, Valor) VALUES (longId,bstrNombre,doubleValor)";

me salta un messagebox 'pocos parametros, se esperaba 3'

Gracias
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 72
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España

Re: casi

Notapor latindeveloper el Jue Jun 02, 2005 4:13 pm

Entonces tienes que ensamblar la cadena de consulta:

Código: Seleccionar todo
CString sql;
int id = 10;
CString nombre = "Nombrecillo";
double valor = 12.25;

sql.Format("INSERT INTO inicio (Id, Nombre, Valor) VALUES  (%d, '%s', %.2f)"
   ,id
   ,nombre
   ,valor);

Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Gracias

Notapor rbpkirow el Vie Jun 03, 2005 4:23 am

Muchas Gracias por la ayuda, parece que ahora tira correctamente
rbpkirow
Usuario Activo
Usuario Activo
 
Mensajes: 72
Registrado: Jue Abr 07, 2005 2:52 am
Ubicación: España


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados