Hola, estoy haciendo una prueba en delphi 2010 datasnap utilizando los componentes de la paleta DbExpress. El ejemplo consta de una carga de facturación y al momento de grabar se descuenta el stock en la tabla de artículos. Esta operación la estoy haciendo en la aplicación servidor en el ServerMethod correspondiente, en el evento AfterUpdateRecord del componente DataSetProvider.
Este es mi codigo:
Código Delphi
[-]
var
CodigoArtic: integer;
CantidadArtic: double;
oTempArticulos: TSQLQuery;
case UpdateKind of
ukInsert: Begin
if SourceDS.Name = 'SQLDataSetDetalle' then
begin
if DeltaDS.FieldByName('CANTIDAD').Value > 0 then
begin
CodigoArtic:= DeltaDS.FieldByName('COD_ARTIC').AsInteger;
CantidadArtic:= DeltaDS.FieldByName('CANTIDAD').AsFloat;
oTempArticulos:= TSQLQuery.Create(nil);
oTempArticulos.SQLConnection:= SQLConnectionMovimientos;
oTempArticulos.Close;
oTempArticulos.SQL.Clear;
oTempArticulos.SQL.Add('Select * From "Articulos" Where CODIGO= ' + inttostr(CodigoArtic));
oTempArticulos.Open;
oTempArticulos.Edit; <----------ERROR
oTempArticulos.FieldByName('CANTIDAD').AsFloat:= oTempArticulos.FieldByName('CANTIDAD').AsFloat - CantidadArtic;
oTempArticulos.Post;
end;
end;
End;
El Error dice:
Project servidor.exe raised exception class EDatabaseError with message 'Cannot modify a read-only dataset'.
Elegí este foro porque no creo que la excepción tenga que ver con Datasnap, mas bien parecería que me falta aclarar algo del componente. Como dice el enunciado de la excepción "no se puede modificar un dataset de solo-lectura" pero lo cierto es que ni siquiera hay una propiedad ReadOnly en el SQLQuery. Bueno cualquier sugerencia es bienvenida, gracias de antemano.