Estoy programando una aplicación nueva en Datasnap : Delphi 10.1 Berlin, SQL Server, Conexión TCP (no son conexiones REST), el Cliente es también Delphi.
Tengo dos tipos de llamada, las que devuelven un Dataset, y las que hacen acciones y por tanto no devuelven información en forma de Dataset. Las primeras funcionan perfectamente, puedes llamar tantas como quieres sin que falle la aplicación, pero las segundas vuelven la aplicación inestable (la primera llamada siempre funciona, pero a partir de allí empiezas a tener AV).
Por ejemplo, en esta llamada a guardar las modificaciones, la primera ejecución funciona bien, pero la segunda ejecución hace bien la llamada al Datasnap y guarda las nuevas modificaciones que se hayan hecho entre las dos llamadas, pero salta un AV en el qryDatos.CancelUpdates. También empiezas a tener AV al cerrar formularios, la aplicación, ...
function TfrmBaseGestion.iGuardar: boolean; var Stream: TMemoryStream; MemTable: TFDMemTable; begin Result := True; if qryDatos.ChangeCount > 0 then begin Result := False; Stream := TMemoryStream.Create; MemTable := TFDMemTable.Create(Self); try MemTable.Data := qryDatos.Delta; MemTable.SaveToStream(Stream); Stream.Position := 0; MethodsGestionesClient.PostDatos(Stream); AfterModificar; Result := True; finally MemTable.Free; Stream.Free; end; qryDatos.CancelUpdates; iAbrir; end; end;
He probado tanto a hacer las llamadas mediante un procedimiento almacenado FireDAC como mediante una clase proxy (a través de una conexión dbExpress) y los problemas son muy similares.
¿ Habéis tenido algún problema similar de que las llamadas Datasnap os desestabilicen la aplicación ?. La verdad es que ya no se me ocurre como enfocar el problema.
Gracias.