Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cannot perform this operation on a ON A CLOSED DATASET (https://www.clubdelphi.com/foros/showthread.php?t=52296)

Yun-i 16-01-2008 18:08:44

Cannot perform this operation on a ON A CLOSED DATASET
 
Perdon por el titulo si querer aplaste enter.

El caso es el siguiente miren tengo una aplicacion que me manda este el error de can not perform this operation on a closed dataset, yo pensaba que era un error del codigo, pero en esta liga http://www.clubdelphi.com/foros/showthread.php?t=19379 vi que no que es de la base de datos asi que me fije cual la tabla ala que apunta cuando me manda el error y fui ala base de datos, me di ceunta que solo hay un registro pero no se si beda borrarlo o que debo hacer?? si kieren ver algo de el codigo solo diganme que parte, la aplicacion no la codifique pero la debocorregir yo el manejador de base de datos es ms sql server gracias:) espero susrespuestas

kuan-yiu 16-01-2008 18:25:19

Tienes que explicar cuando te da el error, si es posible el trozo de código en el que falla indicando la línea, la base de datos que usas, los componentes con los que te conectas a ella...

enecumene 16-01-2008 18:31:19

Hola, concuerdo con Kuan-yiu, especifica, especifica, porque estoy seguro que debe ser que el componente que usas para conectarte a la tabla no esta Active o Open:

Cita:

ADOTable1.Active := True;

ADOTable1.Open;
Saludos.

Yun-i 16-01-2008 19:15:04

Delphi 6, base de datos MS SQL Server, la conecion es ADO y el componentes es un TADOdataset que ase referencia a una tabla

Application.CreateForm(TFRBusquedaCliente,FRBusquedaCliente);
if FRBusquedaCliente.ShowModal = mrOk then
begin
ADODSFact.Edit;
ADODSFactID_CLIENTE.Value:=FRBusquedaCliente.intCliente;
end;
FRBusquedaCliente.Free;
end;

La aplicacion no la codifique yo por eso no entiendo muy bien el codigo si es otra parte la que necesito poner solo decime cual y la pongo es un programa que abarca muchas cosas y no las se espero que estedes si gracias

enecumene 16-01-2008 19:23:16

he aqui el problema:

Código Delphi [-]
Application.CreateForm(TFRBusquedaCliente,FRBusquedaCliente);
if FRBusquedaCliente.ShowModal = mrOk then
   begin
      ADODSFact.Open; --> esto es lo que faltaba
      ADODSFact.Edit;
      ADODSFactID_CLIENTE.Value:=FRBusquedaCliente.intCliente;
   end;
FRBusquedaCliente.Free;
end;

Saludos.

Caral 16-01-2008 19:23:53

Hola
Ya te lo dijeron pero para insistir.
No se puede editar una tabla, query si esta cerrada, donde se abre en el codigo que pusiste, no lo veo.
Tal vez asi:
Código Delphi [-]
Application.CreateForm(TFRBusquedaCliente,FRBusquedaCliente);
if FRBusquedaCliente.ShowModal = mrOk then
begin
ADODSFact.Open;// esta seria la diferencia
ADODSFact.Edit;
ADODSFactID_CLIENTE.Value:=FRBusquedaCliente.intCliente;
end;
FRBusquedaCliente.Free;
end;
Saludos

Caral 16-01-2008 19:24:50

Hola
Me ganaron por 37 segundos
Saludos

Yun-i 16-01-2008 19:31:34

Graciassssss!!!!!!
 
Esa era la solucionnn muchas gracias soy un novato :( pero ustedes si que saben gracias a los dosss jejeje me prestan su cerebro unos meses :p jajajaj
graciasssss

Yun-i 16-01-2008 20:05:25

Ese Problema ya esta solucionado pero ahora estoy en otro identico marca el mismo error solo que en un dbgirddetafact


procedure TFPrincipal.actFactDireExecute(Sender: TObject);
begin
Application.CreateForm(TFFacturacionDirecta,FFacturacionDirecta);
FFacturacionDirecta.ShowModal;
FFacturacionDirecta.Free;// aqui me marca el error
end;



que sera ??

Caral 16-01-2008 20:12:28

Hola
El error lo marca ahí por que es el principio del programa, osea que en el oncreate del from tienes el problema.
Aparte:
Código Delphi [-]
procedure TFPrincipal.actFactDireExecute(Sender: TObject);
begin
Application.CreateForm(TFFacturacionDirecta,FFacturacionDirecta);
try
FFacturacionDirecta.ShowModal;
finally
FFacturacionDirecta.Free;// aqui me marca el error
end;
end;
Para mi no lo puedes enseñar y liberar enseguida.
Saludos

Yun-i 16-01-2008 20:34:23

Código Delphi [-]
procedure TFPrincipal.actFactDireExecute(Sender: TObject);
begin
Application.CreateForm(TFFacturacionDirecta,FFacturacionDirecta);
try
FFacturacionDirecta.ShowModal;//ahora el error es aqui
finally
FFacturacionDirecta.Free;
end;
end;


el error ahora lo marca ahi mm weno hgracias por tu apoyoo :) gracioas

eduarcol 16-01-2008 20:38:37

trata de mostrar el evento onshow, y on create del formulario, a su ves escribe el error que te da, si en verdad es el mismo es porq te falto abrir la tabla

Caral 16-01-2008 20:38:51

Hola
Coloca el codigo del from FFacturacionDirecta completo.
Si dices que el error es el mismo solo que en dbgirddetafact, pues ahi esta el error, ahi es donde hay que buscar.
Tambien puedes presionar f8 o f7 creo.
Saludos

maeyanes 16-01-2008 20:39:50

Hola...

Si indicas cual es el error que obtienes, te podremos ayudar mejor... ;)



Saludos...

Yun-i 16-01-2008 20:40:07

Esta prte del codigo es la que ejecuta cuando le doy click al grid me di cuanta que tampoco tenia el ADODSFact.open se lo puese pero esta vez el error sigue siendo el mismo


procedure TFFacturacionDirecta.actBusqEvenExecute(Sender: TObject);
begin
Application.CreateForm(TFRBusquedaEventos,FRBusquedaEventos);
if FRBusquedaEventos.ShowModal = mrOk then
begin
ADODSFact.Edit;
ADODSFactNUM_EVENTO.Value:=FRBusquedaEventos.intEvento;
end;
FRBusquedaEventos.Free;
end;

Yun-i 16-01-2008 20:42:53

todo el codigo
 
procedure TFFacturacionDirecta.FormCreate(Sender: TObject);
begin
New(Permiso);
Permiso:=FDMPrincipal.leerPermiso('FFACTURACIONMESA');
ADODSServ.Open;
ADODSClie.Open;
ADODSRfc.Open;
ADODSEven.Open;
end;
procedure TFFacturacionDirecta.actNuevoExecute(Sender: TObject);
begin
ADODSFact.Open;
ADODSDetaFact.Open;
ADODSFact.Last;
if ADODSFactNUM_FACTURA.IsNull then
intFactura:=1
else
intFactura:=ADODSFactNUM_FACTURA.Value+1;
try
ADODSFact.Append;
ADODSFact.Post;
ADODSFact.Edit
except
FDMPrincipal.capturarExcepcion;
end;
end;
procedure TFFacturacionDirecta.ADODSFactBeforeInsert(DataSet: TDataSet);
begin
if Permiso^.Insertar=False then
Raise Exception.Create('No Posee Privilegios Para Ingresar Registros En Este Módulo');
end;
procedure TFFacturacionDirecta.ADODSFactNewRecord(DataSet: TDataSet);
begin
intIDFactura:=FDMPrincipal.obtenerMaxID('ID_FACTURA','SIE_FACTURACIONMESA');
ADODSFactID_FACTURA.Value:=intIDFactura;
ADODSFactNUM_FACTURA.Value:=intFactura;
ADODSFactID_CLIENTE.Value:=0;
ADODSFactSUBTOTAL.Value:=0;
ADODSFactIVA.Value:=0;
ADODSFactTOTAL.Value:=0;
ADODSFactNUM_EVENTO.Value:=0;
ADODSFactFECHA_FACTURACION.Value:=Date;
ADODSFactTASA_IMPUESTO.Value:=currIVA;
end;
procedure TFFacturacionDirecta.ADODSFactID_CLIENTEValidate(Sender: TField);
begin
if not ADODSClie.Locate('ID_CLIENTE',ADODSFactID_CLIENTE.Value,[]) then
Raise Exception.Create('El cliente especificado no existe. Seleccione otro');
end;
procedure TFFacturacionDirecta.actBusqClieExecute(Sender: TObject);
begin
Application.CreateForm(TFRBusquedaCliente,FRBusquedaCliente);
if FRBusquedaCliente.ShowModal = mrOk then
begin
ADODSFact.Edit;
ADODSFactID_CLIENTE.Value:=FRBusquedaCliente.intCliente;
end;
FRBusquedaCliente.Free;
end;
procedure TFFacturacionDirecta.dbEdtClieKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if Key=VK_F2 then
actBusqClie.Execute;
end;
procedure TFFacturacionDirecta.ADODSClieAfterScroll(DataSet: TDataSet);
begin
intCliente:=ADODSClieID_CLIENTE.Value;
ADODSRFC.Close;
ADODSRFC.Parameters.ParamByName('IDCLIE1').Value:=intCliente;
ADODSRFC.Parameters.ParamByName('IDCLIE2').Value:=intCliente;
ADODSRFC.Open;
DBCBoxRFC.KeyValue:=ADODSRFCRFC.Value;
end;
procedure TFFacturacionDirecta.actBusqEvenExecute(Sender: TObject);
begin
Application.CreateForm(TFRBusquedaEventos,FRBusquedaEventos);
if FRBusquedaEventos.ShowModal = mrOk then
begin
ADODSFact.Edit;
ADODSFactNUM_EVENTO.Value:=FRBusquedaEventos.intEvento;
end;
FRBusquedaEventos.Free;
end;
procedure TFFacturacionDirecta.ADODSFactNUM_EVENTOValidate(Sender: TField);
begin
if ADODSFactNUM_EVENTO.Value<>0 then
begin
if not ADODSEven.Locate('ID_EVENTO',ADODSFactNUM_EVENTO.Value,[]) then
Raise Exception.Create('El evento especificado no existe. Seleccione otro')
else
ADODSFactEVENTO.Value:=ADODSEvenCONCEPTO.Value;
end
else
ADODSFactEVENTO.Value:=EVENTO_DEFAULT;
end;
procedure TFFacturacionDirecta.dbEdtEvenKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if Key=VK_F2 then
actBusqEven.Execute;
end;
procedure TFFacturacionDirecta.ADODSDetaFactNewRecord(DataSet: TDataSet);
begin
ADODSDetaFactID_EMPRESA.Value:=intEmpresa;
ADODSDetaFactID_USUARIO.Value:=intUsuario;
ADODSDetaFactID_FACTURA.Value:=intIDFactura;
ADODSDetaFactNUM_FACTURA.Value:=0;
ADODSDetaFactPER_DESCTO.Value:=0;
ADODSDetaFactDESCUENTO.Value:=0;
ADODSDetaFactFECHA_REGISTRO.Value:=Date;
ADODSDetaFactCANTIDAD.Value:=1;
end;
procedure TFFacturacionDirecta.actBusqServExecute(Sender: TObject);
begin
Application.CreateForm(TFRBusquedaServicios,FRBusquedaServicios);
if FRBusquedaServicios.ShowModal = mrOk then
begin
ADODSDetaFact.Edit;
ADODSDetaFactCLAVE_SERVICIO.Value:=FRBusquedaServicios.cveServicio;
end;
FRBusquedaServicios.Free;
end;
procedure TFFacturacionDirecta.ADODSDetaFactCLAVE_SERVICIOValidate(
Sender: TField);
begin
if not ADODSServ.Locate('CLAVE',ADODSDetaFactCLAVE_SERVICIO.Value,[]) then
Raise Exception.Create('El servicio especificado no existe. Seleccione otro')
else
begin
ADODSDetaFactPRECIO_VENTA.Value:=ADODSServPRECIO_VENTA.Value;
ADODSDetaFactID_SERVICIO.Value:=ADODSServID_SERVICIO.Value;
end;
end;

procedure TFFacturacionDirecta.dbGridDetaFactDblClick(Sender: TObject);
begin
if dbGridDetaFact.SelectedField.FieldName='CLAVE_SERVICIO' then
actBusqServ.Execute;
end;
procedure TFFacturacionDirecta.dbGridDetaFactKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if KEY=VK_F2 then
begin
if dbGridDetaFact.SelectedField.FieldName='CLAVE_SERVICIO' then
actBusqServ.Execute;
end;
end;
procedure TFFacturacionDirecta.ADODSDetaFactCANTIDADValidate(
Sender: TField);
begin
if ADODSDetaFactCANTIDAD.Value<1 then
Raise Exception.Create('La cantidad del servicio debe ser mayor o igual a 1 (uno)');
end;
procedure TFFacturacionDirecta.ADODSDetaFactCANTIDAD_UNIDADValidate(
Sender: TField);
begin
if ADODSDetaFactCANTIDAD_UNIDAD.Value<1 then
Raise Exception.Create('El número de unidades debe ser mayor o igual a 1 (uno)');
end;
procedure TFFacturacionDirecta.dbGridDetaFactKeyPress(Sender: TObject;
var Key: Char);
begin
if dbGridDetaFact.SelectedField.FieldName='PRECIO_VENTA' then
begin
if bolModiPrecServicioMesa then
begin
if ADODSDetaFactMOD.Value=False then
key:=#0;
end
else
Key:=#0;
end;
end;
procedure TFFacturacionDirecta.ADODSDetaFactCalcFields(DataSet: TDataSet);
var
Sub:Currency;
begin
Sub:=ADODSDetaFactPRECIO_VENTA.Value*ADODSDetaFactCANTIDAD.Value*ADODSDetaFactCANTIDAD_UNIDAD.Value;
ADODSDetaFactIMPORTEC.Value:=Sub;
end;
procedure TFFacturacionDirecta.ADODSDetaFactBeforePost(DataSet: TDataSet);
begin
if ADODSDetaFactID_SERVICIO.IsNull then
begin
Raise Exception.Create('Especifíque la Clave del Producto');
Exit;
end;
ADODSDetaFactIMPORTE.Value:=ADODSDetaFactIMPORTEC.AsCurrency;
end;
end.

enecumene 16-01-2008 20:43:05

Código Delphi [-]
 procedure TFFacturacionDirecta.actBusqEvenExecute(Sender: TObject);
begin
Application.CreateForm(TFRBusquedaEventos,FRBusquedaEventos);
if FRBusquedaEventos.ShowModal = mrOk then
   begin
      ADODSFact.Open;
      ADODSFact.Edit;
      ADODSFactNUM_EVENTO.Value:=FRBusquedaEventos.intEvento;
   end;
FRBusquedaEventos.Free;
end;

Yun-i, publica el error que te sale no el codigo, asi te ayudamos mejor.

saludos.

maeyanes 16-01-2008 20:44:46

Y por favor, usa las etiquetas [ delphi ] [ /delphi ] (sin los espacios en blanco) cuando publiques código en Delphi...


Saludos...

Yun-i 16-01-2008 21:03:30

Ok perdon no saba eso gracas soy nuevo nunka habia pegado codigo pero gracias

encuanto al error sigue marcando lo mismo aun agregando lo que me dicen :/

Caral 16-01-2008 21:25:05

Hola
Me lo explican?, por que esto:
Código Delphi [-]
try
ADODSFact.Append;
ADODSFact.Post;
ADODSFact.Edit
except
Nunca lo he visto.:confused:
Saludos


La franja horaria es GMT +2. Ahora son las 04:50:59.

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