Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problemas en un insercion de un nuevo registros (https://www.clubdelphi.com/foros/showthread.php?t=29529)

alfil123 24-01-2006 20:16:50

problemas en un insercion de un nuevo registros
 
Hola amigos, no puedo insertar un nuevo registro

Código Delphi [-]
procedure TMantenimiento_Docente.ToolButton2Click(Sender: TObject);
begin
  inherited;
  if (LabeledEdit2.text='') or (LabeledEdit3.text='')
    or (LabeledEdit4.text='') or (LabeledEdit5.text='')
      or (LabeledEdit6.text='') or (LabeledEdit7.text='')
        or (LabeledEdit8.text='')or (LabeledEdit9.text='')
  then
  begin
    showmessage('le falta completar los campos');
    exit;
  end;
  ADOQuery1.Close;
  ADOQuery1.sql.Clear;
  ADOQuery1.SQL.Add('select *');
  ADOQuery1.SQL.Add('from Docente');
  //ADOQuery1.SQL.Add('where id_Docente="'+ le_id01.text +'"');
  ADOQuery1.open;
  ADOQuery1.Append;
  // ADOQuery1.FieldByName('id_Docente').asstring:= LabeledEdit1.text;
  //ADOQuery1.FieldByName('Nombres').value:= LabeledEdit2.text;
  ADOQuery1.fieldbyname('ap').value:= LabeledEdit3.text;
  ADOQuery1.fieldbyname('am').value:= LabeledEdit4.text;
  ADOQuery1.fieldbyname('Dni').value:= LabeledEdit5.text;
  ADOQuery1.fieldbyname('direccion').value:= LabeledEdit6.text;
  ADOQuery1.fieldbyname('telefono').value:= LabeledEdit7.text;
  ADOQuery1.fieldbyname('Especialidad').value:= LabeledEdit8.text;
  ADOQuery1.fieldbyname('Area').value:= LabeledEdit9.text;
  ADOQuery1.post;
  ADOQuery1.close;
  LabeledEdit2.text:='';
  LabeledEdit3.text:='';
  LabeledEdit4.text:='';
  LabeledEdit5.text:='';
  LabeledEdit6.text:='';
  LabeledEdit7.text:='';
  LabeledEdit8.text:='';
  LabeledEdit9.text:='';
  showmessage('sea agregado un nuevo docente ');
end;

la linea en la que se produce el error en " ADOQuery1.post; "pero cuando no activo el evento DataChange, se puede introdusir sin ningun problema, este es el procedimiento del data change

Código Delphi [-]
procedure TMantenimiento_Docente.DataSource1DataChange(Sender:
  TObject; Field: TField);
begin
  inherited;
  if NOT ADOQuery1.EOF then
  Begin
    // Recuperamos los valores del registro actual en los campos respectivos
    le_id01.Text:=ADOQuery1.FieldByName('id_docente').Value;
    LabeledEdit2.Text:=ADOQuery1.FieldByName('Nombres').Value;
    LabeledEdit3.Text:=ADOQuery1.FieldByName('Ap').Value;
    LabeledEdit4.Text := ADOQuery1.FieldByName('AM').Value;
    LabeledEdit5.Text := ADOQuery1.FieldByName('DNI').Value;
    LabeledEdit6.Text := ADOQuery1.FieldByName('Direccion').Value;
    LabeledEdit7.Text := ADOQuery1.FieldByName('Telefono').Value;
    LabeledEdit8.Text := ADOQuery1.FieldByName('Especialidad').Value;
    LabeledEdit9.Text := ADOQuery1.FieldByName('Area').Value;
    // bbModificar.Enabled := true;
    //bbEliminar.Enabled := true;
  End
  else
  begin
    // Recuperamos los valores del registro actual en los campos respectivos
    le_id01.Clear;
    LabeledEdit2.Clear;
    LabeledEdit3.Clear;
    LabeledEdit4.Clear;
    LabeledEdit5.Clear;
    LabeledEdit6.Clear;
    LabeledEdit7.Clear;
    LabeledEdit8.Clear;
    ToolButton2.Enabled:=true;
    SpeedButton8.Enabled:=false;
  end;
end;

porfavor ayudenme ya me estan por estrangular aqui.

alfil123 24-01-2006 20:18:21

el mensaje de error es
"el campo docente.ap no puede ser una cadena de longitud cero"

Jonnathan 25-01-2006 02:00:06

Hola Alfil123, creo que lo que pasa ahi es lo siguiente: el evento DataChange se va a llamar cuando le asignes un valor a cualquier campo, lo que quiere decir que al tratar de asignar al primer campo (docente.ap) el evento se va a disparar. Lo siguiente que va a pasar es que va a entrar en el condicional:
Código Delphi [-]
if NOT ADOQuery1.EOF then
ADOQuery1.EOF será igual a true porque estas insertando con la función append que te crea un registro vacio al final. Por consiguiente creo que se ejecutará el bloque:
Código Delphi [-]
...
else
  begin
  le_id01.Clear;
  LabeledEdit2.Clear;
  LabeledEdit3.Clear;
  LabeledEdit4.Clear;
  LabeledEdit5.Clear;
  ...
  end;
y al tratar de continuar asignando campos la rutina se encontrará que los LabeledEdit estan limpios.

Prueba poner ese código en algun otro evento, como por ejemplo en el evento AfterPost. Saludos.


La franja horaria es GMT +2. Ahora son las 04:21:04.

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