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 en la base de datos (https://www.clubdelphi.com/foros/showthread.php?t=29397)

alfil123 20-01-2006 18:36:03

problemas en un insercion en la base de datos
 
hola amigos tengo un problema al introducir un nuevo registro en una base de datos de access, este es el error que se produce en tiempo de ejecucion


no coinciden los tipos de datos en la espresion de criterios


eso se ocaciona cuando cuando agrego al codigo el procedimiento datachange, este es el codigo que tengo en ese procedimiento


Código Delphi [-]
begin
  inherited;
  if NOT  ADOQuery1.EOF
  then
    Begin
    // Recuperamos los valores del registro actual en los campos respectivos
  // le_id01.Text:=DataSource1.Fields[0].AsString;
    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;
   // bbModificar.Enabled := true;
    //bbEliminar.Enabled := true;
    End
  {else
  begin
    // Recuperamos los valores del registro actual en los campos respectivos
    edCodDocente.Text:= '';
    edNombres.Text:= '';
    edApPaterno.Text:= '';
    edApMaterno.Text := '';
    edDNI.Text := '';
    edDireccion.Text := '';
    edTelefono.Text := '';
    bbModificar.Enabled := false;
    bbEliminar.Enabled := false;
  end;}
end;

por favor es pido ayuda

delphi.com.ar 20-01-2006 18:54:20

Por casualidad... ¿Si comentas todo el evento no se produce el error de todos modos?
¿Cuál es la consulta del ADOQuery1?

alfil123 20-01-2006 19:12:32

re
 
si comento todo el evento no se pruduce el error,


esta es la consulta para guardar

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.open;
  ADOQuery1.Append;
  // ADOQuery1.FieldByName('id_Docente').asstring:= LabeledEdit1.text;
ADOQuery1.FieldByName('Nombres').asString:= LabeledEdit2.text;
ADOQuery1.fieldbyname('ap').asString:= LabeledEdit3.text;
ADOQuery1.fieldbyname('am').asString:= LabeledEdit4.text;
ADOQuery1.fieldbyname('Dni').asstring:= LabeledEdit5.text;
ADOQuery1.fieldbyname('direccion').asString:= LabeledEdit6.text;
ADOQuery1.fieldbyname('telefono').asString:= LabeledEdit7.text;
ADOQuery1.fieldbyname('Especialidad').asString:= LabeledEdit8.text;
ADOQuery1.fieldbyname('Area').asString:= 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;

y esta es la consulta de creacion del form

Código Delphi [-]
procedure TMantenimiento_Docente.FormShow(Sender: TObject);
begin
  inherited;
ADOQuery1.close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.add('Select* from DOCENTE');
   ADOQuery1.Open;
end;
procedure TMantenimiento_Docente.Formcreate(Sender: TObject);
begin
  inherited;
ADOQuery1.close;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.add('Select* from DOCENTE');
   ADOQuery1.Open;
end;
grasias por su tiempo

fabianbbg 20-01-2006 20:05:50

Hola:
Tengo dudas con tu aplicación: aver..
*¿Porque haces en el create del form y en el show lo mismo?
*¿No es redundante?

*Otra cosa:
cuando agregas un registro:
Código Delphi [-]
ADOQuery1.Close;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('select *');
ADOQuery1.SQL.Add('from Docente');
ADOQuery1.open;
  ADOQuery1.Append;
  // ADOQuery1.FieldByName('id_Docente').asstring:= LabeledEdit1.text;
ADOQuery1.FieldByName('Nombres').asString:= LabeledEdit2.text;
ADOQuery1.fieldbyname('ap').asString:= LabeledEdit3.text;
ADOQuery1.fieldbyname('am').asString:= LabeledEdit4.text;
ADOQuery1.fieldbyname('Dni').asstring:= LabeledEdit5.text;
ADOQuery1.fieldbyname('direccion').asString:= LabeledEdit6.text;
ADOQuery1.fieldbyname('telefono').asString:= LabeledEdit7.text;
ADOQuery1.fieldbyname('Especialidad').asString:= LabeledEdit8.text;
ADOQuery1.fieldbyname('Area').asString:= LabeledEdit9.text
    ADOQuery1.post;

No hace falta traer todos los registros solo para que el dataset tenga la estructura que necesitas para insertar.

Si queres insertar todo con SQL podes mandar dentro del SQL.text del TADOQuery la sentencia INSERT

Código Delphi [-]
ADOQuery1.sql,text:='INSERT INTO Docente (Nombres,ap,am,Dni,direccion,telefono,Especialidad,Area)
SELECT '+
quotedstr(LabeledEdit2.text)+ 'AS Expr1' //asi para todos los campos

Luego a ese Query lo ejecutas con ADOQuery.ExecSql

Ahora bien.. si no te gusta la idea y seguis con tu planteo, deberias revisar si no estas queriendo guardar un valor string (label.text) en un campo tipo numerico.

y ademas podrias probar asi

Código Delphi [-]

ADOQuery1.FieldByName('Nombres').Value:= LabeledEdit2.text;

por supuesto por cada campo..

bueno. Saludos..


La franja horaria es GMT +2. Ahora son las 05:58:00.

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