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 14-04-2005
kryna kryna is offline
Miembro
 
Registrado: mar 2005
Posts: 46
Poder: 0
kryna Va por buen camino
no sobre escribe un registro lo agrega

Hola amigos del foro!!

Tengo otro problemilla.... cuando modifica en vez de sobre escribirme en el registro activo lo que me hace es que me agrega otro registro a mi tabla..

yo lo hago de esta forma

Código:
Código Delphi [-]
     MessageDlg('ESTA SEGURO Q DESEA MODIFICAR ESTE REGISTRO???', mtCONFIRMATION, [mbOk], 0)
     Tb1.Edit;
  Tb1.FieldByName('especialidad').AsString := edit1.text;
    Tb1.FieldByName('codigo').AsString := edit2.text;
   Tb1.Post;
  Tb1.FlushBuffers;
    Tb1.Close;
      Tb2.Edit;
    Tb2.FieldByName('especialidad').AsString := edit1.text;
    Tb2.FieldByName('descripcion').AsString := edit3.text;
   Tb2.post;
 Tb2.FlushBuffers;
    Tb2.Close;
  ShowMessage('EL REGISTRO FUE MODIFICADO CON EXITO!!');
   end;
Donde tengo el error

Última edición por marcoszorrilla fecha: 14-04-2005 a las 22:00:40.
Responder Con Cita
  #2  
Antiguo 14-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
En especialidad te faltaba una comilla, pero el código que tienes es imposible que añade un registro, lo que hace es modificar el actual.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 14-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por marcoszorrilla
pero el código que tienes es imposible que añade un registro, lo que hace es modificar el actual.
A menos, claro que el dataset este vacio, en cuyo caso la llamada a edit es equivalente a una llamada a insert/append.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 14-04-2005
kryna kryna is offline
Miembro
 
Registrado: mar 2005
Posts: 46
Poder: 0
kryna Va por buen camino
disculpe sr marcos....

pero en verdad me agrega un registro no me modifica el actual...

yo se que parece ilogico pero es asi... sino no les hari aperder su tiempo.. no se donde pueda estar la falla..

yo tampoco lo entiendo
Responder Con Cita
  #5  
Antiguo 14-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Al hilo de lo que dice Juan Antonio, también pude ser que tengas una rejilla y avances por algún motivo una línea con lo cual se agregaría un registro.

Porque no nos pones la unit completa que pienso no tendrá mucho código porque tiene que haber algo que no estamos viendo.

Y nada de Señor hombre, aquí somos foristas que intercambiamos opiniones y conocimientos y por eso nunca perdemos el tiempo.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 14-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Quizá lo que voy a decir no es del todo cierto pues ya no me acuerdo bien.

Con alguna versión antigua de MySql y de phpMyAdmin me sucedía lo mismo cuando trataba de editar un registro de una consulta en la que no se especificaba la llave primaria de la tabla (o la tabla no tenía llave primaria).

phpMyAdmin, al no disponer de la llave primaria, generaba la cláusula WHERE basándose en todos los campos presentes y por alguna razón, quizá por el juego de caracteres usado, daba la impresión de no encontrar el registro y en su lugar lo insertaba.

Claro que esto o era un "bug" o una "funcionalidad" de MySql al trocar un UPDATE por un INSERT.

Por otra parte sería bueno que nos indicaras qué componentes usas para acceder a MySql.

// Saludos
Responder Con Cita
  #7  
Antiguo 14-04-2005
kryna kryna is offline
Miembro
 
Registrado: mar 2005
Posts: 46
Poder: 0
kryna Va por buen camino
aqui les va el codigo..

te lo voy a enviar como privado

Última edición por kryna fecha: 14-04-2005 a las 23:28:58.
Responder Con Cita
  #8  
Antiguo 14-04-2005
kryna kryna is offline
Miembro
 
Registrado: mar 2005
Posts: 46
Poder: 0
kryna Va por buen camino
hola

no uso mysql.. mi gestor es paradox 7
Responder Con Cita
  #9  
Antiguo 15-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

¿Y por qué el código como privado???

?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 15-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por kryna
no uso mysql..
Disculpa, no sé de dónde saqué que estabas hablando de MySql. Siendo Paradox, secundo entonces la frase de Marcos:

Cita:
Empezado por marcoszorilla
el código que tienes es imposible que añade un registro
así que sería bueno ver el código más en detalle. No entiendo por qué lo borraste.

// Saludos
Responder Con Cita
  #11  
Antiguo 15-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Este es el código que he recibido como privado y que debe de ser público ya que sino los que están siguiendo el hilo .... lo perderían...

Código Delphi [-]
   unit Unit1;
   
  procedure TFormservicios.botonbuscarClick(Sender: TObject);
  begin
  
      if editorcodigo <> nil then
       begin
      qrycodigo.Close;
      qrycodigo.ParamByName('Codigo').AsInteger := StrToInt(editorcodigo.text);
      Dsconcepto.dataset := qrycodigo;
      qrycodigo.Open;
    
      qryespecialidad.Close;
      qryespecialidad.ParamByName('Codigo').AsInteger := StrToInt(editorcodigo.text);
      Dsespecialidad.dataset := qryespecialidad;
      qryespecialidad.Open;
   
  codigo_esp.Text := codigo_es.Text;
  descripcion_con.Text := descripcion_co.Text;
  codigo_con.Text := codigo_co.Text;
  descripcion_esp.Text := descripcion_es.Text;
  cost.Text := costo.Text;
  fech.Text := fecha.Text;
  orde.Text := norden.Text;
  
       if qrycodigo.EOF then
       ShowMessage('No encontré ningún Registro!');
 
 end
  
  end;
  
  
  procedure TFormservicios.BmodificarClick(Sender: TObject);
  var
  //las borre
  begin
  // borre
  MessageDlg('ESTA SEGURO Q DESEA MODIFICAR ESTE REGISTRO???', mtCONFIRMATION, [mbOk], 0);
  Tbconcepto.Edit;
  Tbconcepto.FieldByName('cod_especialidad').AsString := clave;
  Tbconcepto.FieldByName('cod_concepto').AsString := clave2;
  Tbconcepto.FieldByName('descripcion_concepto').AsString := clave3;
  Tbconcepto.Post;
  Tbconcepto.FlushBuffers;
  Tbconcepto.Close;
  Tbespecialidad.Edit;
  Tbespecialidad.FieldByName('cod_especialidad').AsString := Clave;
  Tbespecialidad.FieldByName('descripcion_especialidad').AsString := clave4;
  Tbespecialidad.FieldByName('orden').AsString := claveo;
  tbespecialidad.FieldByName('nota').AsString := claven;
  Tbespecialidad.post;
  Tbespecialidad.FlushBuffers;
  Tbespecialidad.Close;
   
  ShowMessage('EL REGISTRO FUE MODIFICADO CON EXITO!!');
  end;
   
  end.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 15-04-2005 a las 07:25:13.
Responder Con Cita
  #12  
Antiguo 15-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Realmente no veo muy claro el funcionamiento si se busca mediante una consulta el registro por qué luego se modifica apuntando directamente a la tabla, el puntero de la tabla, no estará en el mismo lugar que el de la consulta, los datos se deben de modificar en la consulta, o por el contrario si existen índices utilizar Findkey directamente con la tabla, ya que sino cuando se supone que estamos haciendo la modificación en la tabla el puntero puede estar en Eof y provocar un alta como es el caso.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #13  
Antiguo 15-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Y una observación colateral:

En BmodificarClick, no importa qué conteste el usuario al mensaje, el resto del código siempre se ejecutará.

// Saludos
Responder Con Cita
  #14  
Antiguo 15-04-2005
kryna kryna is offline
Miembro
 
Registrado: mar 2005
Posts: 46
Poder: 0
kryna Va por buen camino
Disculpa Marcos

Pero como hago eso..
Cuando hago la consulta y me muestra los datos en las DBEdit no me permite modificar ya que los DS se vuelven de solo lectura, un opcion que me plantearon fue pasar los datos de los DBEdit a unos Edit y modificarlos desde los Edit apuntandolos a las tablas...

Estoy muy interesada en que me digas como hacerlo desde la consulta como tu planteas .. ya que viendolo desde tu punto de vista tienes la razon ....
Responder Con Cita
  #15  
Antiguo 15-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Como es una consulta simple que no involucra varias tablas a la vez será suficiente con que pongas la propiedad de la Consulta RequestLive = True.


Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #16  
Antiguo 15-04-2005
kryna kryna is offline
Miembro
 
Registrado: mar 2005
Posts: 46
Poder: 0
kryna Va por buen camino
tengo esa opcion en true....

y si me involucra varias tabla.. en realidad son 3 tablas ahi tienes solo 2, lo que pasa es que para que el codigo no se hiciera largo elimine parte de ste al momento de enviarte el codigo esa parte del codigo....
Responder Con Cita
  #17  
Antiguo 15-04-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
En el caso de una consulta de varias tablas no es actualizable, puedes consultar en el momento de intentar hacer la modificación CanModify a ver si es cierta o no, pero para el caso que citas no lo es.

Tendrás que mirar el componente UpdateSql en especial su propiedad ModifySql.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #18  
Antiguo 15-04-2005
kryna kryna is offline
Miembro
 
Registrado: mar 2005
Posts: 46
Poder: 0
kryna Va por buen camino
Hola

Al parecer ya me esta funcionando... coloque a codigo como clave principal en el Database Desktop y hasta los memento me esta funcionando... gracias.

Sabes ? yo pense cuando se me empezo a presentar el problema con los DS de solo lectura en usar el UpdateSql pero en realidad no se como se usa? ni su utilidad? ni como llamarlo desde delphi? ni como crear el sql del update? ni si se necesita un query para midificar, insertar y eliminar? cree un hilo en este foro y me remitian a otros hilos pero en realidad mis dudas no se disiparon...

Si podrian asesorarme con esto?
Responder Con Cita
  #19  
Antiguo 15-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Hola Kyrna.

Para comprender el funcionamiento de TUpdateSQL podes comenzar por leer lo que Ian Marteens ha escrito en su libro "La cara oculta de delphi4", que está disponible para descarga en su propia web, además de la propia ayuda de borland.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
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


La franja horaria es GMT +2. Ahora son las 02:17:14.


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