Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-03-2007
deadsystems deadsystems is offline
Miembro
 
Registrado: mar 2007
Posts: 12
Poder: 0
deadsystems Va por buen camino
¿Por qué no inserta?

Hola, amigos del foro.

Tengo una aplicación donde quiero guardar en una base de datos en MS Access los datos que se introducen en un formulario que contiene edit's.
Cuando oprimo el boton guardar se debe ejecutar el siguiente código SQL

Código SQL [-]
  With Datamodule6 do begin
    With Guarda_Colega do begin
      Close;
      Active := True;
      With SQL do begin
        Clear;
        Text := 'INSERT INTO TColegas (indicativo, nombre, apellido1, apellido2) Values (:indicativo, :nombre, :apellido1, :apellido2)';
        ParamByName('indicativo').Value:=edit9.Text;
        ParamByName('nombre').Value:=edit5.Text;
        ParamByName('apellido1').Value:=edit6.Text;
        ParamByName('apellido2').Value:=edit7.Text;
        ExecSQL;
      end;
    end;
  end;

Sin embargo, cuando ejecuto el código me devuelve un error.

¿Qué estoy haciendo mal?

Saludos.
Responder Con Cita
  #2  
Antiguo 07-03-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Que componentens usas>? ADO?, Si es el caso, antes de ParamByName va Parameter. (Parameter.ParamByName('nombre').Value)
Si es otro componente, entonces en vez de usar Value debes definirle el tipo de datos correspondiente, Por ejemplo AsString o AsInteger,...
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 07-03-2007
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.285
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 deadsystems
Sin embargo, cuando ejecuto el código me devuelve un error.
¿Y el error es?????????
__________________
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
  #4  
Antiguo 07-03-2007
deadsystems deadsystems is offline
Miembro
 
Registrado: mar 2007
Posts: 12
Poder: 0
deadsystems Va por buen camino
Ahora el error que me devuelve es "Field value requiered. Field: indicativo."
Responder Con Cita
  #5  
Antiguo 07-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Coloca un Break y haz un depurar, así te darás cuenta que edit9.Text; debe estar vació...
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 07-03-2007
deadsystems deadsystems is offline
Miembro
 
Registrado: mar 2007
Posts: 12
Poder: 0
deadsystems Va por buen camino
El error esta en la línea:

Código Delphi [-]
   With SQL do begin

En el datamodule que utilizo tengo un Query donde en la propiedad SQL tengo:

Código SQL [-]
insert into TColegas (indicativo, nombre, apellido1, apellido2)
Values (indicativo, nombre, apellido1, apellido2)

saludos.
Responder Con Cita
  #7  
Antiguo 07-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
El error ahora es obvio la sql debe ser:
Código SQL [-]
insert into TColegas (indicativo, nombre, apellido1, apellido2)
Values (:indicativo, :nombre, :apellido1, :apellido2)

para indicar que cada "value" es un parámetro que debe ser suministrado con Parambyname.

PD: ¿Me llevo el gallifante?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 07-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Pues no, parece que no me lo llevo

Código Delphi [-]

var Val:Variant;
begin
  With Datamodule6 do begin
    With Guarda_Colega do begin
      Close;
//      Active := True; No puede estar activa si vamos a modificar su SQL
      With SQL do begin
//        Clear;  //sobra, ya lo hace internamente
        Text := 'INSERT INTO TColegas (indicativo, nombre, apellido1, apellido2) Values (:indicativo, :nombre, :apellido1, :apellido2)';
        if edit9.Text = EmptyStr then
          Val := NULL
          else
          Val := edit9.text;       
        ParamByName('indicativo').Value:=Val;

// lo mismo que he hecho, para el resto de parámetros.
// Puedes reusar la variable Val, ya que siempre se le asigna un valor.

        ExecSQL;
      end;
    end;
  end;
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 07-03-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Chanfle!, en la cara de uno!

Saludos
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #10  
Antiguo 07-03-2007
deadsystems deadsystems is offline
Miembro
 
Registrado: mar 2007
Posts: 12
Poder: 0
deadsystems Va por buen camino
Con el ejemplo de Lepe me da el error:

'Maximum validity check failed. Field: indicativo.'
Responder Con Cita
  #11  
Antiguo 07-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Lo que sucede es que en tu BD mas exactamente en tu tabla tienes configurado un Check que restringe valores para que sean menores en ese campo a algun determinado valor (Que seria el valor que estas pasando como parametro).
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #12  
Antiguo 07-03-2007
deadsystems deadsystems is offline
Miembro
 
Registrado: mar 2007
Posts: 12
Poder: 0
deadsystems Va por buen camino
Yo tengo el campo indicativo con un tamaño de 8 catacteres y tan solo le paso 6, a lo sumo 7 que es el máximo permitido.
Responder Con Cita
  #13  
Antiguo 08-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
No estoy hablándote de el tamaño del campo si no de el dato en si pues debe haber un Check en la tabla; verifica los Check de tu tabla pues allí habrá alguno que este verificando ese dato.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #14  
Antiguo 08-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Tambien puede ocurrir otro detalle:

En mi SQL he indicado los dos puntos seguido del nombre del campo, por ejemplo ":indicativo".... en ese caso no se interpreta como un parámetro sino como un nombre de campo, es decir en lugar de usar "Parambyname('indicativo')" debes usar "FieldByName('indicativo')"

Para que se considere un parámetro, debería ser los dos puntos seguido de "algo " que no sea el nombre del campo, por ejemplo "values (:prIndicativo, :prNombre, ...)"



Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #15  
Antiguo 08-03-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Y ese comportamiento? Que extraño me resulta esto.

Saludos
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
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
Inserta Registros maestro/detalle Vlady Firebird e Interbase 2 28-10-2006 04:35:48
Inserta fecha actual zvf OOP 4 06-04-2006 01:23:16
Como se inserta el valor de un checkbox? Ivan_25 C++ Builder 4 04-11-2005 11:02:51
procedimiento que no inserta ni actualiza jzginez Firebird e Interbase 2 12-09-2005 17:34:36
No me inserta despues de un registro con Ñ o tilde JoanKa Firebird e Interbase 2 04-03-2005 09:06:17


La franja horaria es GMT +2. Ahora son las 19:06:57.


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