Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Modo de edicion componente Firebird (https://www.clubdelphi.com/foros/showthread.php?t=69524)

shany 24-08-2010 04:18:35

Modo de edicion componente Firebird
 
Hola a todos!

estoy utilizando en delphi los componentes de Firebird, pero me sucede algo extraño que nunca me habia pasado.

uno de los dataset que tengo por ejemplo:

pfibdatasetReportes lo tengo en modo browse y justo cuando le pongo
pfibdatasetReportes.edit para poder modificar un dato en vez de ponerse en estado dsedit se pone en estado dsinsert, mas adelante lo quiero forzar antes de hacerle un post ponerlo en edicion y sigue en insert.
no entiendo por que me hace esto.. no se si haya alguna sugerencia a observar detenidamente que no me permita hacer lo que necesito.


esta tonteria me tiene retrasada en mi trabajo.


por otra parte hay otra duda que no entiendo muy bien

estoy utilizando dbcombolookup y un grid, cuando requiero hacer una insercion en el grid con insert en el grid se añade una nueva linea, todo bien pero cuando deseo elegir el dato que ira en el grid este vuelve al estado anterior y apuntando al registro anterior que muestra el grid.

ya probe quitando la conexion de dbcombolookup al mismo dataset que apunta el grid y de todos modos me quita el estado de insercion, cabe mencionar que cuando le da su gana lo hace bien y tambien mal. y lo que hago es que antes del post me cercioro que este en insert si no lo vuelvo a poner en ese estado pero tal vez no sea lo correcto.

no se si me de a entender que no entiendo jjeje.

de antemano gracias por la ayuda recibida.

JosepGA 24-08-2010 09:44:38

hola, si puedes poner ejemplo del código fuente mejor, para ver si estas haciendo algo incorrecto. Por otro lado ¿ Estas traceando el código ? Te lo digo, por que dependiendo de los eventos, te puede pasar que al hacer el insert se este cancelando por que entre a algún evento que cause la interrupción del Insert.

Por otro lado, a que te refieres con que usas componentes de Firebird. ¿ Te refieres a los componentes de conexión ? ¿ A los de edición ?

shany 24-08-2010 18:01:44

ok aqui va lo que hice
 
Espero se entienda, muchas gracias por la atencion.

procedure TFMovimientos.SpBtnAreasClick(Sender: TObject);
var
FAgregarAreas :TFAgregarAreas;
begin
try
FAgregarAreas := TFAgregarAreas.Create(Self);
with DMHelpDesk do
begin
FAgregarAreas.EFolioLetra.Text:=pFIBDSViewReportesFOLIO.value + pFIBDSViewReportesIDLETRA.value;
pFIBDSReportesAreas.active:=false;
pFIBDSReportesAreas.Params[0].Value:=pFIBDSRepAreaEdoIDREPORTE.value;//pFIBDSReportesIDREPORTE.Value;
pFIBDSReportesAreas.active:=true;
pFIBDSReportes.Active:=FALSE;
pFIBDSReportes.Params[0].Value:=pFIBDSViewReportesFOLIO.value;//******activo el dataset
pFIBDSReportes.Active:=TRUE;
FAgregarAreas.idreporte:=pFIBDSRepAreaEdoIDREPORTE.value
end;
FAgregarAreas.ShowModal;
finally
FAgregarAreas.Free;
end;
end;


procedure TFAgregarAreas.SpBtnAceptarClick(Sender: TObject);
begin
with DMHelpDesk do
begin
if(pFIBDSReportesAreas.STATE<>dsinsert)then //****este es el dataset que me trae problemas con los combos lookup
begin
pFIBDSReportesareas.append;//y revalido que se ponga en insert otra vez porq tan solo con dar un click
end; //en el combo se quita el estado de append que puse al inicio, sin tener eventos en ellos.

pFIBDSReportesAreasIDAREA.value:=pFIBDSAreasIDAREA.value;
pFIBDSReportesAreasIDSERVICIO.value:=pFIBDSIdServicioAreaIDSERVICIO.value;

try
begin
If not pFIBDSReportesAreas.IsEmpty then
begin
pFIBDSReportesAreas.Post;
if(pFIBDSReportes.STATE<>dsedit)then
begin
pFIBDSReportes.edit; //***aqui intento poner el dataset en edicion y sigue en insert
end;

pFIBDSReportes.Post;
DMMov.pFIBTMov.CommitRetaining;
end;
end;
except
pFIBDSReportesAreas.Cancel;
pFIBDSReportes.cancel;
DMMov.pFIBTMov.RollbackRetaining;
Application.MessageBox('Ha ocurrido un error con el registro'#13'Favor de verificar la información introducida','Error',MB_OK+MB_ICONERROR);
end;




procedure TDMHelpDesk.pFIBDSReportesAreasBeforePost(DataSet: TDataSet);
begin
with DMHelpDesk do
begin
if pFIBDSReportesAreasIDAREA.IsNull then
begin
Application.MessageBox('Debe Seleccionar el area','Error',MB_OK+MB_ICONERROR);
exit;
end
else
if pFIBDSReportesAreasIDSERVICIO.IsNull then
begin
Application.MessageBox('Debe Seleccionar el servicio','Error',MB_OK+MB_ICONERROR);
exit;
end;
//OBT RA
pFIBDSGet_IdRA.active:=true;
pFIBDSReportesAreasIDRA.value:=pFIBDSGet_IdRAIDRA.value;
pFIBDSGet_IdRA.active:=false;
pFIBDSReportesAreasIDREPORTE.value:=pFIBDSReportesIDREPORTE.value;
pFIBDSReportesAreasESTADO.value:='R';
pFIBDSReportesAreasFASIGNADO.Value:=now;
//update
pFIBDSReportes.Edit; /*******esta es la parte donde trato de poner el modo y me pone insert
pFIBDSReportesESTADO.value:='P';
pFIBDSReportesFECHAAREASERV.value:=now;
end;
end;

//este es el unico evento que tengo para el dataset problema de reportes pero no creo que tnga nada de malo
procedure TDMHelpDesk.pFIBDSReportesCalcFields(DataSet: TDataSet);
begin
if pFIBDSReportesESTADO.value = 'R' then
pFIBDSReportesCCEstado.Value:= 'R - Recibido'
else
if pFIBDSReportesESTADO.value = 'P' then
pFIBDSReportesCCEstado.Value:= 'P - Proceso'
else
if pFIBDSReportesESTADO.value = 'T' then
pFIBDSReportesCCEstado.Value:= 'T - Terminado'
else
if pFIBDSReportesESTADO.value = 'C' then
pFIBDSReportesCCEstado.Value:= 'C - Concluido';
end;

shany 24-08-2010 18:19:27

uso los componentes firebird
 
conexion
pfibdatabase

transaccion
pfibtransaction

dataset
pfibdataset


y si, si traceo por eso me di cuenta que no me deja poner edit en vez de insert.

no entiendo porque.

JosepGA 25-08-2010 09:18:41

hola, ¿ has mirado el estado en concreto, no sea que sea distinto de dsBrowse ? ¿ Y si en el datasource del combo asignas al principio Nil y luego al final le asignas el DataSource ? Para ver si interfiere, y si es así, al menos de este modo no te afectara.

ecfisa 25-08-2010 10:57:55

Hola shany.

¿ Creaste algún trigger o procedimiento que pueda afectar a pFIBDSReportesAreas ?


Saludos.

shany 30-08-2010 06:32:18

ya resolvi lo del edit
 
fue una tonteria de mi parte, tenia una consulta con un filtro que use en otro modulo y pues siempre me regresaba vacio y pues no habia nada que editar por eso lo ponia en insert.

muchas gracias por su interes y aprecio su amable ayuda!


La franja horaria es GMT +2. Ahora son las 19:54:35.

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