Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-12-2006
juanmaster juanmaster is offline
Miembro
 
Registrado: ago 2006
Posts: 24
Poder: 0
juanmaster Va por buen camino
query no Graba , se cierra

Hola buenos dias ;dios los vendiga
el problema que tengo es el siguiente
procedure TFclienteN.BitBtn1Click(Sender: TObject);
begin
with Query1 do
begin
close;
sql.clear;

SQL.add('INSERT INTO clientes (IDcliente,Nombre_Cliente,Apellido,Dirreccion,Cedula,Telefono,)');
SQL.add ( 'VALUE ('+ inttostr (edit6.text)+','+edit1.Text+','+edit3.Text+','+edit4.text+','+edit2.Text+','+edit4.Text+')');

end;es el codigo de un voton quiero que graba y quiero cambiar el valor de el edit uno a integer inttostr (edit6.text) pero me da erroer cuando ago esa comvercion
Responder Con Cita
  #2  
Antiguo 12-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Lo que espera intToStr es un entero, sin embargo lo que hay en el Edit6 es un texto, de ahí que dé error.

Debes tener en cuenta los tipos de datos:
Imaginando que IDCLIENTE es un entero, el sql debe quedar así:
Código SQL [-]
INSERT INTO clientes (IDcliente,Nombre_Cliente,Apellido,Dirreccion,Cedula,Telefono)
VALUE (3, 'nombre1', 'apellido1', 'direccion 1', 'cedula', '23234223');
tal y como lo haces ahora mismo quedaría así:
Código SQL [-]
INSERT INTO clientes (IDcliente,Nombre_Cliente,Apellido,Dirreccion,Cedula,Telefono)
VALUE (3, nombre1, apellido1, direccion 1, cedula , 23234223);

Como ves no hay comillas simples para que el sql entienda que nombre1 es un texto, deberás usar algo así:
Código Delphi [-]
SQL.add('INSERT INTO clientes (IDcliente,Nombre_Cliente,Apellido,Dirreccion,Cedula,Telefono,)');
SQL.add ( 'VALUE ('+ edit6.text)+','+QuotedStr(edit1.Text)+','+QuotedStr(edit3.Text)+','+QuotedStr(edit4.text)+','+Quoted  Str(edit2.Text)+','+QuotedStr(edit4.Text)+')');

como ves es bastante lioso, es preferible usar parámetros en el sql

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 12-12-2006 a las 19:54:13.
Responder Con Cita
  #3  
Antiguo 12-12-2006
juanmaster juanmaster is offline
Miembro
 
Registrado: ago 2006
Posts: 24
Poder: 0
juanmaster Va por buen camino
Base de datos en access , idcliente lave primaria , y es numerica
Recuerda que no me graba , el codigo
Responder Con Cita
  #4  
Antiguo 12-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Pues muchas gracias, parece que me has leído la mente

La verdad, inicialmente creí que era problemas por los tipos de datos que enviabas y los que la base de datos esperaba, así que hice las preguntas a las cual has contestado.

Revisando el código entendí por donde iban los tiros y edité mi mensaje cambiándolo totalmente, mientras redactaba el mensaje se ve que has llegado.

Bueno espero que ahora si leas mi mensaje anterior.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 12-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola juanmaster
Segun veo:
Código Delphi [-]
procedure TFclienteN.BitBtn1Click(Sender: TObject);
begin
with Query1 do
begin
close;
sql.clear;

SQL.add('INSERT INTO clientes (IDcliente,Nombre_Cliente,Apellido,Dirreccion,Cedula,Telefono,)');
SQL.add ( 'VALUE ('+ inttostr (edit6.text)+','+edit1.Text+','+edit3.Text+','+edit4.text+','+edit2.Text+','+edit4.Text+')');

end;
No se porque pero me suena que cierras, la tabla y luego tratas de insertar.
Para mi nunca insertaras nada en un query o tabla cerrado.
Yo lo haria asi:
Código Delphi [-]
procedure TFclienteN.BitBtn1Click(Sender: TObject);
begin
 Query1.Close;
 Query1.sql.clear;
 Query1.Open;
 Query1.SQL.TEXT:= 'INSERT INTO clientes (IDcliente,Nombre_Cliente,Apellido,Dirreccion,Cedula,Telefono)' +
 'VALUE ('+ inttostr (edit6.text)+','+edit1.Text+','+edit3.Text+','+edit4.text+','+edit2.Text+','+edit4.Text+')';
end;
Puede ser que me equivoque en el open, si no camina asi, ponlo antes del end.
Saludos
Responder Con Cita
  #6  
Antiguo 12-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Código Delphi [-]

procedure TFclienteN.BitBtn1Click(Sender: TObject);
//Version mejorada, mas legible y mas potente
begin
with Query1 do
       begin
  close;
  sql.clear;
  // Ponenmos la setencia SQL pero parametrizada
   SQL.add('INSERT INTO clientes   (IDcliente,Nombre_Cliente,Apellido,Dirreccion,Cedula,Telefono,)' );
SQL.add ( 'VALUES( :edit6,:edit1, :edit3,:edit4,:edit2,:edit4)' );

//Asignamos valores a los parametros:

 ParamByName('edit1').AsString := edit1.Text;
 ParamByName('edit2').AsString := edit2.Text;
 ParamByName('edit3').AsString := edit3.Text;
 ParamByName('edit4').AsString := edit4.Text;
 ParamByName('edit6').AsString := edit6.Text;
// Delphi hace la conversión de tipos, en caso de que no se pueda asigna un null. Por ejemplo si pusiste una letra y el campo espera numeros..se coloca un null

//Grabamos los datos

ExecSQL;

    end;
El codigo anterior queda mas legible y no necesitas concatenar cadenas para formar la sentencia. Obviamente tienes que validar los Edits para que los que tengan que llevar solo números efectivamente los lleven para que al momento de hacer el query no haya problema.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #7  
Antiguo 12-12-2006
juanmaster juanmaster is offline
Miembro
 
Registrado: ago 2006
Posts: 24
Poder: 0
juanmaster Va por buen camino
probelma resuelto , ahora necestito es savar el la cantidad maxima del idcliente , para cuando balla a a pedir un regostro nuevo m genere un numero de idcliente que estaba mas uno
DBEdit2.SetFocus;
DBEdit1.text:=1+query1.sql.Add('select max(idcliente)from clientes');
quiero buscar el idcliente el registro mas alto y sumarle uno para que se genere progresibamente los numeros
pero el codigo esta malo :s
Responder Con Cita
  #8  
Antiguo 12-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Código Delphi [-]
DBEdit2.SetFocus;
DBEdit1.text:=1+query1.sql.Add('select max(idcliente)from clientes'); // Esto no va...
Código Delphi [-]
Query1.Clear;   //Limpiamos por si habia SQL guardado ahi
Query1.SQL.Add('select max(idcliente)+1 as sig_cliente from clientes');
Query1.Open;
DBEdit1.text:=  Query1.FieldByName('sig_cliente').AsString;
Query1.Close; // Cerramos el query pues ya no lo necesitamos.

Te recomiendo usar mejor un campo autoincrementado para guardar idcliente, de esta forma el motor de BD automáticamente irá aumentándo el número y nos ahorramos todo el código anterior.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #9  
Antiguo 12-12-2006
juanmaster juanmaster is offline
Miembro
 
Registrado: ago 2006
Posts: 24
Poder: 0
juanmaster Va por buen camino
perdon pero tengo el campo id cliente auto increme pero me;

me da error lo que me diste dataset no int edit or insert mode
Responder Con Cita
  #10  
Antiguo 13-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Si pusieras un poco más de código seria mas facil para todos...No se en que momento ejecutas las rutinas de tu código (después de postear?, antes del siguiente Edit?) Si estas insertando un nuevo registro entonces debes llamar a Insert en algun lado antes de volver a editar los datos con los TDBEdits
Código Delphi [-]

QuerySinNombre.Insert;  //Cmabiale a como se llame tu query.

// Todo lo de aqui abajo seguramente puede ir en un dialogo que se abra para pedir datos
Query1.Clear;   //Limpiamos por si habia SQL guardado ahi
Query1.SQL.Add('select max(idcliente)+1 as sig_cliente from clientes');
Query1.Open;
DBEdit1.text:=  Query1.FieldByName('sig_cliente').AsString;
Query1.Close; // Cerramos el query pues ya no lo necesitamos.

// Aqui cerrarias tu dialogo y dependiendo si fue OK o Cancel haces el Post

If  VentanaSinNombre.modalresult := mrOk Then
   QuerySinNombre.Post; 
else
  QuerySinNombre.Cancel;

Todo lo anterior es código genérico solo tienes que traslaparlo a l que estas haciendo pero te repito si nos dieras mas código sería mas fácil y no tendríamos que estar adivinando
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Grabar En SQL Campos Decimales, Solo me graba enteros? Con Codigo freddiaz07 SQL 13 21-09-2006 19:44:34
Grabar En SQL Campos Decimales, Solo me graba enteros? freddiaz07 SQL 2 07-09-2006 17:24:04
Me cierra Delphi totalmente al activar Query JamesBond_Mx SQL 2 12-01-2006 16:47:39
lookup + dbgrid: no graba jonmendi Conexión con bases de datos 4 12-01-2006 09:21:53
Cuando trabajan dos usuarios simultaneos solo graba la factura de uno tulio Firebird e Interbase 11 28-10-2003 13:10:34


La franja horaria es GMT +2. Ahora son las 02:05:26.


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