PDA

Ver la Versión Completa : Actualizar Registros En Una Tabla Paradox


sdiaz1983
11-01-2008, 04:59:50
Buen dia a todos, antes que nada queria agradecerles por la colaboracion a todas mis dudas que he formulado en varios temas, vengo a molestarlos uan vez mas con otra duda, pero antes quiero explicar que es lo que estoy haciendo:


procedure TFrmClientes.BtnConsultarClick(Sender: TObject);
begin
TblCliente.Active:=True;
QryCliente.SQL.Text:='select * from cliente where Cedula=:P1';
QryCliente.Params[0].AsString:=EdtCedula.Text;
QryCliente.RequestLive:=True;
QryCliente.Active:=True;
if (QryCliente.RecordCount>0) then
begin
LblNombre.Visible:=True;
EdtNombre.Visible:=True;
LblApellido.Visible:=True;
EdtApellido.Visible:=True;
LblDireccion.Visible:=True;
EdtDireccion.Visible:=True;
LblTelefono.Visible:=True;
EdtTelefono.Visible:=True;
BtGuardar.Visible:=False;
BtBorrar.Visible:=True;
BtEditar.Visible:=True;
BtnConsultar.Visible:=False;
EdtCedula.SetFocus;
EdtCedula.Enabled:=False;
end
else
begin
MessageDlg('REGISTRO NO EXISTE',mtError,[mbOk],0);
end;
end;


En este segmento lo que hago es validar si el dato que ingreso en el campo cedula existe en la base de datos, si existe habilita unos objetos que ahi se muestran de lo contrario muestra el mensaje, esta validacion la hago con el objeto de poder actualizar un registro que ya existe en la tabla.

Ahora en este codigo:

procedure TFrmClientes.BtEditarClick(Sender: TObject);
begin
EdtCedula.Text:='';
EdtNombre.Text:='';
EdtApellido.Text:='';
EdtDireccion.Text:='';
EdtTelefono.Text:='';
EdtNombre.SetFocus;
QryCliente.UpdateRecord;
QryCliente.Edit;
QryCliente.SQL.Text:='update cliente set Cedula:=P1 and Nombre:=P2 and Apellido:=P3 and Telefono:=P4 and Direccion:=P5';
QryCliente.Params[0].AsString:=EdtCedula.Text;
QryCliente.Params[1].AsString:=Edtnombre.Text;
QryCliente.Params[2].AsString:=EdtApellido.Text;
QryCliente.Params[3].AsString:=EdtTelefono.Text;
QryCliente.Params[4].AsString:=EdtDireccion.Text;
QryCliente.Post;
end;


Lo que trato de hacer es realizar una actualizacion aun registro que ya se encuentra en la tabla pero cuando doy click en el boton para que me ejecute el proceso me aparece un mensaje de error que me dice: "QryCliente: el Dataset no esta en modo insert o update(traduccion al español)", la pregunta que les queria plantear a ustedes es si tengo un error en el codigo, que tengo que corregir, ya que no se cual es el error.

Mil gracias por su ayuda.

mzell
11-01-2008, 06:27:31
Hola sdiaz1983.

Segun lo que veo, estás combinando dos metodos diferentes para realizar la actualización.

Puedes probar actualizarlo en las siguientes formas:
(estoy asumiendo que los EditBox ya tienen valores asignados)

Forma 1 (Utilizando metodos de dataset):

procedure TFrmClientes.BtEditarClick(Sender: TObject);
begin
{...}
QryCliente.Edit;
QueryCliente.FieldByName('Cedula').value := EdtCedula.Text;
QueryCliente.FieldByName('Nombre').value := EdtNombre.Text;
QueryCliente.FieldByName('Apellido').value := EdtApellido.Text;
QueryCliente.FieldByName('Telefono').value := EdtTelefono.Text;
QueryCliente.FieldByName('Direccion').value := EdtDireccion.Text;
QryCliente.Post;



Forma 2 (Utilizando los metodos de Query)

procedure TFrmClientes.BtEditarClick(Sender: TObject);
begin
{...}
QryCliente.SQL.Text:='update cliente set Cedula:=P1 and Nombre:=P2 and Apellido:=P3 and Telefono:=P4 and Direccion:=P5';
QryCliente.Params[0].AsString:=EdtCedula.Text;
QryCliente.Params[1].AsString:=Edtnombre.Text;
QryCliente.Params[2].AsString:=EdtApellido.Text;
QryCliente.Params[3].AsString:=EdtTelefono.Text;
QryCliente.Params[4].AsString:=EdtDireccion.Text;
QryCliente.ExecSQL;
end;


Espero que sea útil esta sugerencia.
Hasta luego.

sdiaz1983
11-01-2008, 14:54:31
Buen dia.

De antemano Le agradezco por haber respondido mi duda, pero probe ambas alternativas, en una me bota un error con respecto a la sentencia QryCliente.ExecSql; que me dice que invalid use of keyword token, y con respecto al otro metodo el registro me lo elimina.

Una cosa que queria depronto complementar es que yo los datos los ingreso al formulario, los editbox no tienen valores preasignados sino que yo se los ingreso estando el programa en ejecucion, no se entonces si en algo cambia las sentencias que usted me explico anteriormente.

Mil gracias por su ayuda y estare pendiente de su respuesta.