Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-03-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
Insertar datos con dbGo

Holas a todos estoy con el siguiente problema resulta que estoy intentando insertar un registro en una BD en Access con los componentes dbGo, la conexión y la query en si. Conecta bien pero a la hora de querer insertar me da que hay un error en la sintaxis de la instrucción SQL.

Los campos 'idus' se auto incrementa y el campo 'activo' es del tipo bool.
Código Delphi [-]
with cmdAgregar do
     begin
          Open;
          SQL.Clear;
          SQL.Text:='insert into Usuarios (idus,user,pass,nombre,activo) values (NULL,'+
                     QuotedStr(txtUsuario.Text)+','+QuotedStr(txtClave.Text)+','+
                     QuotedStr(txtNombre.Text)+',1)';
          ExecSQL;
          Close;
     end;

La verdad que no se que pasa pero que puede ser el hecho de que el valor sea Null en el primer campo que se yo.

Gracias.
Responder Con Cita
  #2  
Antiguo 08-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si el campo es autoincremental, prueba a no ponerlo en la consulta, ni el nombre ni el NULL, simplemente no lo añadas a la lista.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 08-03-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
Intente lo que me dijiste y me sigue dando el error:

Cita:
Error de Sintaxis en la instrucción 'INSERT INTO'
Te comento que utilizo un ADOQuery para insertar datos o debería utilizar un ADOCommand.

Gracias.
Responder Con Cita
  #4  
Antiguo 08-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo he usado de siempre un ADOQuery para las inserciones y nunca he tenido problemas. No creo que ahora haya cambiado nada.

¿Puedes poner la SQL de la estructura de la tabla?

Otra cosa, haz una prueba con una SQl directa, a ver si falla.

Código SQL [-]
insert into Usuarios (user,pass,nombre,activo) values 
('pepe','contra','Pepe Gómez',1)

o
insert into Usuarios (user,pass,nombre,activo) values 
('pepe','contra','Pepe Gómez',True)

Colocala en la propiedad SQL del ADOQuery directamente y ejecuta desde código el ADOQuery1.ExecSQL a ver que te dice.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 08-03-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
La estructura de la tabla en cuestion es:

------------------------------------
Tabla Usuarios
------------------------------------
1 | idus | Autonumérico
2 | user | Texto de 20 caracteres
3 | pass | Texto de 8 caracteres
4 | nombre | Texto de 32 caracteres
5 | activo | Si/No (o sea booleano)
------------------------------------

Te cuento algo que me olvide es que no trabajo con los dataset porque como es solo para dar de alta a usuarios no me parecía que vaya a ser necesario.

Gracias.

Responder Con Cita
  #6  
Antiguo 09-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por mcsebas Ver Mensaje

Te cuento algo que me olvide es que no trabajo con los dataset porque como es solo para dar de alta a usuarios no me parecía que vaya a ser necesario.
No es necesario. A priori con el ADOQuery y el ADOConnection debería bastar. Incluso si configuras la conexión en el ADOQuery te puedes ahorrar el ADOConnection. No necesitas más componentes para la inserción.

¿Has probado lo de colocar la SQL en el query y realizar el INSERT?
¿Funciona? Te da algun error? ¿Cual?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 09-03-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
Hermano eh intentado todo lo que me dijiste y hasta ahora ningun resultado me sigue dando error en la sintaxis pero no se que puede ser.

Te paso la cadena parametrizada que utilizo y decime si hay algun error.

Código SQL [-]
 
insert into Usuarios (idus,user,pass,nombre,activo) values (null,:User,:Pass,:Nom,True)

La verdad que sigue con los problemas si persisten todavía probaré con Zeos o algun driver nativo tipo dbExpress.

Gracias.
Responder Con Cita
  #8  
Antiguo 10-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Otra cosa, ahora me acabo de dar cuenta de que el Open del principio sobra.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 10-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Tonto, tonto, tonto, tonto (de mi)...

Al final he realizado una pequeña prueba y efectívamente tienes razón. Da error de INSERT INTO... en una sentencia sencilla que no tiene problemas...

Después de andar dándole vueltas un rato (porque habré hecho esto cientos de veces) me ha venido a la cabeza un error que me pasó hace bastante tiempo... (y al que estuve un rato dándole vueltas como a este... )

Haz una prueba:

Cambia el nombre campo user por user1 y vuelve a realizar las pruebas que hemos comentado.



Ya me dirás...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 10-03-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
Camarada la cosa ha mejorado yo tambien habia pensado en este caso pero ahora me sale con otro mensaje de error que es el siguiente:

Cita:
Ha intentado asignar el valor Null a una variable que no es un tipo de datos Variant
Es referido al campo indice que es autonumérico según el diseño de la tabla o sea que se auto incrementa.

Gracias.
Responder Con Cita
  #11  
Antiguo 11-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En ese caso, ya te comenté que no debes añadir ese campo a la consulta SQL; Ni el nombre ni el valor, puesto que es un autonumérico que se incrementa sólo.

Código Delphi [-]
  insert into Usuarios (user,pass,nombre,activo) values (:User,:Pass,:Nom,True)

Porque intentar añadir un valor (aunque sea NULL) dará error, puesto que no es un campo que debas añadir tú.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 12-03-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
Camarada ahora si funciona por fin. Sólo una unica pregunta como hago para ponerle seguridad a la base de datos.

Porque veo que en la cadena de conexion me permite poner un password.

Gracias.
Responder Con Cita
  #13  
Antiguo 12-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba a colocar la contraseña desde el Access y en la cadena de conexón deberás añadir la misma para poder conectar.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 15-03-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
Efectivamente tenías razon gracias man por todo.

Buena Ondaaaaaaaa !!!
Responder Con Cita
  #15  
Antiguo 16-03-2010
mcsebas mcsebas is offline
Miembro
 
Registrado: feb 2008
Posts: 78
Poder: 17
mcsebas Va por buen camino
Compañero ahora tengo un problema con el dataset y dbgrid. Resulta que puse un compenente ADOConnection, ADODataSet y DataSource y en una libreria hago la activación del usuario, hasta ahi todo bien pero cuendo hago

Código Delphi [-]
 
ADODataSet.Refresh

Los datos en el DBGrid no se ha actualizado o sea que no me figura el nuevo usuario activado. Reinicio el programa y si me aparece.
Responder Con Cita
  #16  
Antiguo 17-03-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola mcsebas, utiliza esto para actualizar tu consulta:

Código Delphi [-]
 //Esto
 ADODataSet.Close;
 ADODataSet.Open;
 //o
 ADODataSet.Active := False;
 ADODataSet.Active := True;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
dbGo, dbExpress o UniDAC? paladincubano Conexión con bases de datos 8 02-12-2008 15:29:38
Insertar Datos a un campo de la base de datos desde un DBEdit saltamirano Varios 11 12-12-2007 17:29:35
Insertar Datos Con Php Caray PHP 10 25-04-2007 05:06:34
Insertar datos en Base de Datos aoiTo C++ Builder 2 18-06-2006 15:42:43
Conectar con DBGo a SQLServer hibero Conexión con bases de datos 6 10-02-2006 22:15:11


La franja horaria es GMT +2. Ahora son las 17:53:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi