Ver la Versión Completa : problemas en un insercion en la base de datos
alfil123
20-01-2006, 18:36:03
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
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
si comento todo el evento no se pruduce el error,
esta es la consulta para guardar
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
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:
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
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
ADOQuery1.FieldByName('Nombres').Value:= LabeledEdit2.text;
por supuesto por cada campo..
bueno. Saludos..
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.