
Estoy trabajando con delphi2010 y sqlserver 2000 (despues usaré una bd más reciente)
Les comento que tengo un formulario (consulta nivel educativo) donde muestro en un tdbgrid el resultado de una consulta: SELECT * FROM T_NIVEL_EDUCATIVO
La tabla se llama: t_nivel_educativo y los campos que tiene: id_ne, codigo_ne y denominacion_ne
En este formulario tengo: adoconnection1, adoquery1, datasource1 y un botón donde puedo seleccionar un registro para luego modificarlo en un segundo formulario.
El código de este botón es:
delphi
procedure TFormConsultaNivelEducativo.BtnAceptarClick(Sender: TObject); var ClaveID:Integer; begin //*** Asignar el valores ID a una Variable ClaveID := FormConsultaNivelEducativo.ADOQuery1.FieldByName('ID_NE').Value; //*** Mostrar Formulario FormNivelEducativo.Show; //Llenar los campos con el registro seleccionado en el grid FormNivelEducativo.TxtID.Text := FormConsultaNivelEducativo.ADOQuery1.FieldByName('ID_NE').asString; FormNivelEducativo.TxtCodigo.Text := FormConsultaNivelEducativo.ADOQuery1.FieldByName('CODIGO_NE').asString; FormNivelEducativo.TxtDenominacion.Text :=FormConsultaNivelEducativo.ADOQuery1.FieldByName('DENOMINACION_NE').asString; end;
Hasta aquí todo bien
Cuando muestro el segundo formulario (nivel educativo), también tengo un adoconnection2, adoquery2, datasource2 y un DBNavigator2 que necesito que pueda mostrar los demás registros de la tabla, después de modificar el que se seleccionó en el grid.
Esto es para evitar que el usuario tenga que salir hasta el primer formulario para ubicar otro registro que también debe modificar, sino que simplemente con los botones lo puede hacer.
El código del botón de modificar el registro en este segundo formulario es:
delphi
procedure TFormNivelEducativo.BtnModificarClick(Sender: TObject); var ClaveID : Integer; BookMark : TBookMarkStr; begin with FormNivelEducativo.ADOQuery2 do begin //GUARDAMOS EL CAMPO CLAVE ID DEL REGISTRO QUE ESTAMOS MODIFICANDO ClaveID := FormConsultaNivelEducativo.ADOQuery1.FieldByName('ID_NE').Value; //++++++++++++++++++++++++++++++++++++++++ //MARCAMOS EL REGISTRO SOBRE EL QUE ESTAMOS TRABAJANDO Close; SQL.Clear; SQL.Text := 'SELECT * FROM T_NIVEL_EDUCATIVO WHERE ID_NE = '+QuotedStr(TxtID.Text); Open; BookMark := ADOQuery2.Bookmark; //++++++++++++++++++++++++++++++++++++++++ //CODIGO PARA MODIFICAR EL REGISTRO Close; SQL.Clear; SQL.Text := 'UPDATE T_NIVEL_EDUCATIVO SET CODIGO_NE=:CODIGO_NE, DENOMINACION_NE=:DENOMINACION_NE WHERE ID_NE=:ID_NE'; //ASIGNAMOS A CADA CAMPO LOS VALORES CORRESPONDIENTES Parameters.ParamByName('ID_NE').Value := ClaveID; Parameters.ParamByName('CODIGO_NE').Value := TxtCodigo.Text; Parameters.ParamByName('DENOMINACION_NE').Value := TxtDenominacion.Text; ExecSQL; //++++++++++++++++++++++++++++++++++++++++ //REFRESCAMOS LOS DATOS DE LOS CAMPOS Close; SQL.Clear; SQL.Text := 'SELECT * FROM T_NIVEL_EDUCATIVO'; Open; ADOQuery2.Bookmark := BookMark; FormNivelEducativo.TxtId.Text := FormNivelEducativo.ADOQuery2.FieldByName('ID_NE').asString; FormNivelEducativo.TxtCodigo.Text := FormNivelEducativo.ADOQuery2.FieldByName('CODIGO_NE').asString; FormNivelEducativo.TxtDenominacion.Text := FormNivelEducativo.ADOQuery2.FieldByName('DENOMINACION_NE').asString; end; end;
Los datos se guardan correctamente con las correcciones que se realizan en los campos.
Pero el BookMark no me está mostrando el id del registro corregido, es como si no estuviese allí.
No se que puede estar mal...

Si me pueden dar una mano se los agradezco!!
PD: Mis disculpas por si mi mensaje no va en esta sección.