Delphi - Insertar en Delphi

   
Vista:

Insertar en Delphi

Publicado por Osmani (1 intervención) el 06/07/2009 14:14:12
tengo un problema y es que no puedo hacer de manera continua la captura de los datos.
La idea es la siguiente tengo un formulario en el cual puse una regilla de datos y un TDBNavigator, pero no permito la edicion o modificacion de los datos directamente desde la rejilla sino que al efectuar los procedimientos sobre insert o edit llamo a un formulario que tie las etiquetas de los campos con sus DBEdit correspondientes, un boton aceptar y un boton terminar. El libro La cara oculta de Delphi 4 recomienda utilizar una funcion que ellos desarrollan llamada PuedoCerrar y que se utiliza en el procedimiento ONQueryClose. El libro tambien dice como debe usarse lo que no logro es la continuidad en el formulario. Mira el codigo del boton aceptar del formulario:
procedure TFrmEdicionFibras.BtnAceptarClick(Sender: TObject);
begin
//If DBEdtIdentificador.Text <>'' then
//ADOTableFibras.Fields[1].Value:= DBEdtIdentificador.Text;
If ((DBEdtIdentificador.Text <>'') and (DBEditNombre.Text<>'')) then
begin
Modulo_De_Datos.DataModuleControl_De_Procesos.ADOTableFibras.Fields [0].Value :=DBEdtIdentificador.Text;
Modulo_De_Datos.DataModuleControl_De_Procesos.ADOTableFibras.Fields [1].Value := DBEditNombre.Text;
end;
Close;
end;

Esta es la funcion PuedoCerrar: Esta funcion se ejecuta en el evento onclosequery

function PuedoCerrar (FrmEdicionFibras: TFrmEdicionFibras; ADOTableFibras: TADOTable; ModoContinuo:Boolean):Boolean;
var
PrevState:TDataSetState;
begin
Result:= True;
If FrmEdicionFibras.ModalResult = mrok then
begin
PrevState:=ADOTableFibras.State;
ADOTableFibras.Post;
If ModoContinuo and (PrevState = dsInsert) then
begin
ADOTableFibras.Append;
Result:= False;
end;
end
else if not ADOTableFibras.Modified or (Application.MessageBox ('¿Desea guardar los cambios?', 'Atención', MB_IConquestion+MB_YesNo) = IdYes) then
ADOTableFibras.Cancel
else
Result:= False;
end;

y este es procedimiento
ONCloseQuery del formualrio done tengo el boton Aceptar o cancelar.

procedure TFrmEdicionFibras.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose:=PuedoCerrar(Self, Modulo_De_Datos.DataModuleControl_De_Procesos.ADOTableFibras, True)
end;
Con esto lo que me pasa es que introduzco los datos pero al dar clic en el boton Aceptar Me Pregunata ¿Desea guaradr los cambios? Si digo que si me guarda los cambios y me cierra si digo que no me mantiene en el mismo registro y lo que me permite es modificar.

Disculpa la molestia
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Insertar en Delphi

Publicado por Rolando Glez (6 intervenciones) el 30/07/2009 19:03:31
Debe tener en cuenta que la insercion de un registro y la edicion deben de trartarse en eventos distintos pues en un caso se inserta y en otro se modifica un registro determinado, en la programacion como en la vida hay un refran que dice divides y venceras y esto es una verdad absoluta pues hace mas sencillos los procedimientos no solo en la ejecucion sino en el que lee el codigo, lo primero que debe de pensar es trasarte estrategias del comportamiento que debe hacer el programa en esos dos momentos

Insercion:
1: el usuario solicita insercion de un registro
en este caso el programa debe "insertar" un registro(buffer) en blanco que ud lo hace con el append y permite la edicion de ese registro

2: una vez que el programa esta en este estado el usuario oprima la tacla aceptar y el programa le pregunta si desea guardar los cambios si oprime yes(si) el programa debe validar los datos si son correctos hacer un post sobre el dataset (de lo contrario seguir en la edicion del buffer) y a continuacion cerrar la forma donde se inserta el registro y todo ok pero si dice que no el programa debe cancelar sobre el dataset el registro que esta en buffer (append) para poner nuevamente el dataset en modo dsbrowse cerrando la forma de insercion y dando el focus al grid.

como vez en el primer caso se inserta y se edita sobre un buffer y se soilicita confirmacion
para hacer el post o no del buffer sobre el dataset.

edicion:

para el caso de la edicion(modificacion de un registro) seria parecido pero en vez de utilizar append se utiliza solo edit sobre el dataset y la estrategia seria la misma solo que en este caso se modifica un registro existente

trata de dividir lo mas posible el codigo en procedimientos y funsiones ejemplo puedes crear una funsion para la validacion y llamarla en el momento oportuno

saludos un amigo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar