Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: angman - Giugno 19, 2025, 09:12:12 am

Titolo: liberia ivcl
Inserito da: angman - Giugno 19, 2025, 09:12:12 am
Ciao a tutti, dovendo riconvertire un progetto da lazarus a delphi, dal momento che viene usato un componente della rxlib rxmemds (memory dataset) ho pensato di sostituirlo con un jvmemdataset. ho installato quindi i packages della vcl, ma il componente jvmemdataset, non sembra essere disponibile. non posso installare la rxlib in delphi athens in quanto richiede la presenza del bde e rende anche l'intera idea molto instabile.

Qualcuno sa come eventualmente potrei risolvere?
Titolo: Re:liberia ivcl
Inserito da: DragoRosso - Giugno 19, 2025, 09:32:41 am
Ciao,

Nelle JVCL c'è il TJvMemoryData (probabilmente è lo stesso componente).

Ma, in Delphi 12 puoi usare FireDac per un Database in memoria qui l'esempio a runtime senza componente a DesignTime:

Codice: [Seleziona]
var
  dbo: TFDMemTable;

//Esempio di creazione:
begin
  dbo := TFDMemTable.Create(nil);
  dbo.LogChanges := False;
  dbo.FetchOptions.RecsMax := 300000;  //Sample value
  dbo.ResourceOptions.SilentMode := True;
  dbo.UpdateOptions.LockMode := lmNone;
  dbo.UpdateOptions.LockPoint := lpDeferred;
  dbo.UpdateOptions.FetchGeneratorsPoint := gpImmediate;
  with dbo.FieldDefs do
    begin
      with AddFieldDef do
        begin
          Name := 'Uova';
          DataType := ftVarBytes;
          Size := 50;
        end;
      with AddFieldDef do
        begin
          Name := 'Luci';
          DataType := ftVarBytes;
          Size := 17;
        end;
    end;
  with dbo do
    begin
      Open;
    end;
end;

//Esempio di append:
  begin
    with dbo do
        begin
           Append;
           Fields[0].AsBytes := [0];   //UOVA
            Fields[1].AsBytes := (BufferLight);   //LUCI, è un array
            Post;
        end;
   end;

//Chiusura
begin
  if assigned(dbo) then
    begin
      dbo.Close;
      dbo.Free;
    end;
end;
Titolo: Re:liberia ivcl
Inserito da: angman - Giugno 19, 2025, 09:50:14 am
Si ma il cliente vuole che il codice sorgente possa essere compatibile e compilare sia in delphi sia in lazarus
Titolo: Re:liberia ivcl
Inserito da: DragoRosso - Giugno 19, 2025, 10:25:26 am
Si ma il cliente vuole che il codice sorgente possa essere compatibile e compilare sia in delphi sia in lazarus

Usa il TJVMemoryData che è (dovrebbe ?? ) essere disponibile sia in Delphi che in Lazarus.

L'alternativa è usare componenti di ultriori terze parti come ZEOS (compatibile sia con Delphi che con Lazarus) ... da verificare se ha la possibilità di creare i DS in memoria.

Il TClientDataSet mi pareva che una volta potesse creare tabelle in memoria, ma sinceramente non lo uso da anni a causa della distribuzione della MIDAS.DLL (ora c'è il link statico della LIB e non serve più distribuire la DLL).
Potrebbe esserci (vado a memoria) una classe equivalente in Lazarus tipo TBufDataSet (o simile).
Titolo: Re:liberia ivcl
Inserito da: DragoRosso - Giugno 19, 2025, 10:39:21 am
Qui https://www.lazaruspascal.it/index.php?page=86 (https://www.lazaruspascal.it/index.php?page=86) c'è un esempio di @xinyiman per Lazarus.

Lasciando perdere il componente a DesigntTime, se cambi il TBufDataSet con TCLientDataSet tutto il resto potrebbe essere identico. Se lo gestisci a runtime, con gli {$IFDEF ...} separi le parti di codice differente.