Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: giacomarko - Dicembre 14, 2024, 12:27:54 pm

Titolo: [RISOLTO] DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 14, 2024, 12:27:54 pm
Vorrei sapere se essite un metodo per selezionare tutti i record visibili in un oggetto DBGrid, che sia alternativo (e più veloce sopratutto) del solito ciclo:

Codice: [Seleziona]
        
  First;
  DisableControls;
  while not EOF do
   begin
       DBDataGrid.SelectedRows.CurrentRowSelected := True;
       Next;
   end;

in breve,

si parte da una DBGrid con molte colonne, per ogni colonna l'utente ha la possibilità di definire un filtro, e ad ogni filtro la DBGrid si riduce... alla fine quando l'utente ha "scremato" la lista dovrebbe selezionare tutto (questo per evitare di fare Ctrl+click per ogni record) e dopo lanciare una comando che esegua altro su ognuno di questi records.
Questo tipo di selezione è necessaria perchè successivamente utilizzo il Bookmark per eseguire altre operazioni sui record.

Il loop ovviamente funziona, ma è parecchio lento, per darvi un'idea, sul mio PC un I7 con 16Gb di Ram e W11 la selezione di 3354 records impiega 2 minuti e 11 sec

Certo potrei intervenire sulla query ma non voglio perchè i filtri sono molti e così come è strutturata la lista e la gestione funzionano perfettamente.

L'applicativo dovrà alla fine essere eseguito in rete, è vero che anche se da rete, non eseguendo accessi al disco ma solo sul controllo, teoricamente non dovrei avere un incremento di tempo... però anche così mi sembra troppo lungo

mi domando, un semplice comando "seleziona tutto" non esiste ? ... o almeno io non l'ho trovato

grazie

M
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 14, 2024, 02:29:35 pm
Vorrei sapere se essite un metodo per selezionare tutti i record visibili in un oggetto DBGrid, che sia alternativo (e più veloce sopratutto) del solito ciclo:
Il loop ovviamente funziona, ma è parecchio lento, per darvi un'idea, sul mio PC un I7 con 16Gb di Ram e W11 la selezione di 3354 records impiega 2 minuti e 11 sec
Io non saprei cosa dirti, non mi è mai servita una cosa simile.
Però, il tempo che hai indicato mi pare decisamente eccessivo, non vedo un reale motivo dietro a tale scadente prestazione.

Siamo, riflettendo su una linearità di prestazione, a circa 40 ms. a record selezionato, veramente un tempo abissale.

Forse vale la pena di indagare su ciò.

Ciao
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 14, 2024, 05:55:44 pm
sui tempi (lungi e ingiustificati) sono assolutamente d'accordo con te, posto il codice completo, facile che abbia fatto qualche cag...a,

Codice: [Seleziona]
procedure TSDSList.SpeedButtonSelectAllClick(Sender: TObject);
var
  Duration : TDateTime;
begin
  Duration := Now();
  try
    Screen.Cursor := crHourglass;
    try
      DBDataGrid.SelectedRows.Clear;
      with DBDataGrid.Datasource.DataSet do
      begin
        First;
        DisableControls;
        while not EOF do
        begin
          DBDataGrid.SelectedRows.CurrentRowSelected := True;
          Next;
        end;
      end;
    except on E
      : ESQLDatabaseError do MessageDlg( DB_OPENING_ERROR + Self.Caption, mtError, [mbOK], 0);
    end;
  finally
    DBDataGrid.Datasource.DataSet.EnableControls;
    Screen.Cursor:= crDefault;
  end;
  ShowMessage( TASK_COMPLETED + ' in: ' + TimeToStr( Now() - Duration));
end;   

che dici ?
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 14, 2024, 07:15:26 pm
Il tuo codice sembrerebbe a posto.

Ho provato ad inserire in un DB SQLite con qualche colonna cinquemila righe di dati.

Il tuo metodo da me copiato paro paro funziona senza problemi e con tempi che variano tra 70 ms. a 72 ms. e non variano se usi o meno "DisableControls".

EDIT: ... in realtà variano (i tempi arrivano a 250 ms.). Avevo lasciato il disablecontrols attivo durante le prove ....

Ho usato connettore Zeos.
E' vero che ho un I9 serie 14 con 64GB di RAM, ma non ritengo cambi granchè con sistemi come il tuo.

Ne mi aspetto cambiamenti su DB diversi da SQLite, a meno che non siano DB remoti connessi tramite modem analogico a 1200 bit/s.

Stò usando Lazarus 3.6 FPC 3.2.2, Zeos 8.0.
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: bonmario - Dicembre 14, 2024, 07:59:47 pm

Il loop ovviamente funziona, ma è parecchio lento, per darvi un'idea, sul mio PC un I7 con 16Gb di Ram e W11 la selezione di 3354 records impiega 2 minuti e 11 sec


Hai già provato con i classici "DBGrid1.BeginUpdate" prima del ciclo, e "DBGrid1.EndUpdate" a fine ciclo?

Ciao, Mario
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 14, 2024, 08:45:47 pm
Sono convinto anche io che il PC non possa fare tutta questa differenza,

ad ogni modo;

Inserito l'istruzione BeginUpdate ed EndUpdate, in effetti la prestazione migliora del 50% da 2:41 minuti scenda a 1:24 minuti  (vedi picture) grazie !

come componenti utilizzo quelli standard di Lazarus, :

TODBCConnection con TSQLTransaction, TSQLQuery e TDataSource per connessione e accesso ai dati
e come database, MSAccess, il tutto sullo stesso disco SSD dove lavora il programma
Lazarus è la versione 3.0

EDIT: Il fatto che la tabella abbia 52 colonne, non dovrebbe essere influente sulla "marcatura" del record, no?
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: tito_livio - Dicembre 14, 2024, 10:01:35 pm
Ciao, potresti provare ad aumentare il valore della proprietà PacketRecords della query.
Di default è 10, magari se la imposti a 5000 si carica tutti i record in memoria ed è più veloce.
Può darsi però che all'inizio ci stia di più a caricare tutta la dbgrid in memoria, allora bisognerà trovare un valore più basso.
 
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 15, 2024, 12:48:40 am
come componenti utilizzo quelli standard di Lazarus, :

TODBCConnection con TSQLTransaction, TSQLQuery e TDataSource per connessione e accesso ai dati
e come database, MSAccess, il tutto sullo stesso disco SSD dove lavora il programma
Lazarus è la versione 3.0

EDIT: Il fatto che la tabella abbia 52 colonne, non dovrebbe essere influente sulla "marcatura" del record, no?
Diciamo che, come ti accennava @tito_livio, potrebbero esserci altre ottimizzazioni da fare ....

Intanto Access e ODBC non sono sicuramente i mezzi migliori e più performanti con cui lavorare. Però questo è un mio commento, nulla toglie al fatto che così è.

E' necessario verificare che il tuo dataset non venga effettivamente "ricaricato" o riallineato ogni qualvolta che ci accedi. Dai tempi che vengono mostrati, sembra che la tabella Access venga elaborata pesantemente gni volta che esegui un NEXT ... sarebbe necessario un consiglio da chi usa tale DB o ODBC per capire quali sono i settaggi migliori.

I componenti DB standard di Lazarus non sò come operino, quindi non sò dirti se ci siano dei settaggi che possano influire sulle prestazioni. Ho sempre usato ZEOS (e comunque mai in produzione) e non ho riscontrato differenze abissali con i componenti ad esempio di Delphi.

Secondo me le 52 colonne della tabella dovrebbero avere una influenza marginale sulle tempistiche. L'importante che il DB Access sia comunque indicizzato con chiave primaria e che l'accesso alla tabella sia secondo questa chiave (o una delle chiavi secondarie) per velocizzare i tempi.
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: bonmario - Dicembre 15, 2024, 07:57:21 am
Sono convinto anche io che il PC non possa fare tutta questa differenza,

ad ogni modo;

Inserito l'istruzione BeginUpdate ed EndUpdate, in effetti la prestazione migliora del 50% da 2:41 minuti scenda a 1:24 minuti  (vedi picture) grazie !

come componenti utilizzo quelli standard di Lazarus, :

TODBCConnection con TSQLTransaction, TSQLQuery e TDataSource per connessione e accesso ai dati
e come database, MSAccess, il tutto sullo stesso disco SSD dove lavora il programma
Lazarus è la versione 3.0

EDIT: Il fatto che la tabella abbia 52 colonne, non dovrebbe essere influente sulla "marcatura" del record, no?

Ciao,
rileggendo c'è una cosa che non capisco di quello che hai scritto: quando inizi a misurare il tempo.
Io credo di aver capito che fai partire il timer DOPO aver popolato la tabella, e prima di iniziare il ciclo che serve a selezionare le righe.
Se è così, ignora quello che sto per scrivere, se invece inizi prima di popolare la DBGrid, non so se la situazione è la stessa, ma qualche mese fa ho avuto problemi di lentezza estrema nello scaricare alcune tabelle in formato CSV.
Alla fine ero arrivato a questo link: https://wiki.freepascal.org/Working_With_TSQLQuery ed avevo risolto seguendo il consiglio in fondo, di mettere

Codice: [Seleziona]
MySQLQuery.UniDirectional:=True;


Ciao, Mario
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 15, 2024, 09:37:51 am
La tabella è già popolata di dati, di fatto, per i test e gli enhancement uso una copia del DB di produzione, scaricato in locale sul mio laptop,

tutte le tabelle hanno un indice primario numerico univoco,

adesso verifico il discorso dei packet record, anche se credo di aver già tolto il limite

vi aggiorno

EDIT: la proprietà PackedRecords è a -1 (quindi tutti i records presenti), e ad ogni modo, provato per curiosità a 1 o 10 o -1 stesso risultato

EDIT 2: anche il BeginUpdate ed EndUpdate non sono significativi, ieri ho riscontrato un 50% di miglioramento, ma questa mattina sono tornato agli stessi tempi, pur avendo ancora le stesse istruzioni, come dire che la prima volta è lunga ma la seconda migliora
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 15, 2024, 10:47:08 am
EDIT 2: anche il BeginUpdate ed EndUpdate non sono significativi, ieri ho riscontrato un 50% di miglioramento, ma questa mattina sono tornato agli stessi tempi, pur avendo ancora le stesse istruzioni, come dire che la prima volta è lunga ma la seconda migliora
Il fatto che la prima attività sia così lenta (e continui ad essere così lenta senza BeginUpdate / EndUpdate) e la seconda migliori (comunque rimane un tempo non congruo) mi continua a fare pensare che le operazioni effettuate vadano a riflettersi direttamente sul DB.

Il fatto che dimezzi è sintomatico che viene posto in cache qualcosa (probabilmente l'intero DB) e quindi le successive elaborazioni sono un pò più veloci.

Mi dispiace non conoscere meglio l'interazione tra ODBC e Access. Con Access non ci ho mai lavorato, ai tempi (oltre vent'anni fà) usai per la maggiore MSDE200 con il suo SQLServer lite per poi passare a SQL Server Express.
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 15, 2024, 11:10:07 am
Per misurare i tempi con precisione al millisecondo (ma anche meno se vuoi, fino ai 0,1 microsecondi), puoi usare questa unità dove vuoi.
L'istanza è un advanced record, quindi non devi neanche preoccuparti di fare il free o usare il create.

L'unità è quella orginale FREE (supporta Windows e Linux) con qualche mio adattamento, ed è compatibile con quella usata anche in Delphi (migliorata da Embarcadero per lavorare in tutti i suoi target come Mac, Android, Ios etc...).

E' comoda e puoi istanziare quanti timer indipendenti vuoi (io ne uso a decine).
Puoi eseguire lo StartNew sulla stessa variabile quante volte vuoi (è di fatto la sequenza di Reset e Start).

Si usa così:

Codice: [Seleziona]
var Tim1: TStopWatch;
begin
  Tim1 := TStopWatch.StartNew;
  .....
  .....
  .....
  Tim1.Stop;
  //La lettura PUO' ESSERE EFFETTUATA SOLO CON LO STOP.
  //Poi puoi ad esempio:
  //Tim1.Reset      ---> Azzera il conteggio
  //Tim1.Start       ---> riparte il conteggio (si può usare anche prima di un Reset per continuare quello stoppato).
  ShowMessage(Tim1.ElapsedMilliseconds.ToString+' - '+i.ToString);
end;
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 15, 2024, 11:27:35 am
GRAZIE !

per curiosità metterò in piedi un piccolo programma che accede alla stessa tabella utilizzando ZEOS,

vediamo se è il controllo o il DB
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 15, 2024, 01:55:33 pm
Aggiornamento:

con un discreto dispiacere devo ammettere che la differenza più che il tipo di DB (MSAccess nel mio caso) la fà il componente,

quindi:
programmino exnovo, giusto un form con due DBGrid connesse allo stesso DB della applicazione di cui si parlava nei post precedenti,
la prima DBGrid connessa via ODBCConnection e la seconda via TZConnection, eseguo il loop per selezionare tutti i record,

risultati:
- sulla prima sempre 2 minuti e 40,
esco completamente, ricompilo e rientro,
- eseguo la seconda 0:0 secondi

Drago, non ho usato la tua unit, ma lo stesso sistema dell'esempio di codice postato, ma credo che il risultato sia già di per se chiaro  :-\

quello che mi "gira" nel passare tutto l'applicativo da SQLQuery a ZQuery, è che il componente nativo ha come proprietà le SQL di Update, Delete e Create oltre che la solita si Select, in pratica mi è sufficiente scrivere le query e assegnarle a SQLQuery.Update, SQLQuery.Create,  SQLQuery.Delete e nel codice le eseguo semplicemente con Insert e Post....  :)

vedrò .. ???

EDIT: ovviamente il codice per selezionare tutti i record, è lo stesso per entrambi ed è quello postato in precedenza
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 15, 2024, 05:49:16 pm
Guarda che penso che ZEOS sia perfettamente "identico" ai componenti standard in termini di sintassi, le funzioni principali sono quelle in SQL.

Quindi teoricamente non dovresti cambiare codice se inserisci i componenti nuovi e li nomini come i vecchi (magari qualche "virgola" ...., forse sugli eventi ....).

E' più facile da farsi che a dirsi.

Comunque mi fà piacere che tu abbia trovato l'inghippo. Quei tempi erano veramente da "urlo" ... di Munch però ...  ;D

Ciao
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 15, 2024, 10:44:17 pm
purtroppo non è così, ma sicuramente non mi sono spiegato bene io,
intendevo dire che al componente standard TSQLQuery,  si possono assegnare contemporaneamente 4 diversi script SQL, come dicevo Select, Update, Insert e Delete che si eseguono in modo automatico semplicemente chiamando i metodi

Edit;
Post;
e hai aggiornato il record corrente

Insert;
Post;
e lo hai creato

questo diversamente dal componente TZQuery che ha solo una proprietà SQL, che può contenere un solo script SQL alla volta

poi tutto si può aggiustare e adattare.

Resto però perplesso sul perché, esclusivamente sul loop di selezione dei record della DBGrid, ci voglia tutto questo tempo

vorrei capire se effettivamente non c'è via di uscita
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 15, 2024, 11:50:11 pm
purtroppo non è così, ma sicuramente non mi sono spiegato bene io,
intendevo dire che al componente standard TSQLQuery,  si possono assegnare contemporaneamente 4 diversi script SQL, come dicevo Select, Update, Insert e Delete che si eseguono in modo automatico semplicemente chiamando i metodi
Edit;
Post;
e hai aggiornato il record corrente
Insert;
Post;
e lo hai creato
questo diversamente dal componente TZQuery che ha solo una proprietà SQL, che può contenere un solo script SQL alla volta
poi tutto si può aggiustare e adattare.
Non sò se usi quei componenti a Designtime oppure li istanzi a Runtime. Se ti accontenti del runtime (io la stragrande maggioranza dei componenti li istanzio a runtime), li istanzi a runtime, puoi derivare la classe TZQuery e aggiungere tutti i metodi e le proprietà che vuoi.

Però, diciamo che sostituire quelle quattro funzioni non dovrebbe essere un grosso problema, anzi.

Resto però perplesso sul perché, esclusivamente sul loop di selezione dei record della DBGrid, ci voglia tutto questo tempo
vorrei capire se effettivamente non c'è via di uscita

Forse non è "esclusivamente" nel loop di selezione. Tieni presente che una singola operazione veniva effettuata in circa 40 ms., tempo visto singolarmente impercettibile.

Prova a fare 5000 inserimenti, 5000 update e 5000 select, sia con i componenti standard che con ZEOS e misura i tempi, magari scopri che in realtà è il sistema in generale che non è performante non solo la "selezione" (che comunque è composta da più fasi).

Pensa anche ad una sostituzione di Access, l'ultima versione (Access 2021) verrà mantenuta sino al 13/10/2026. Le future versioni saranno supportate solo a pagamento (subscription) tramite un piano 365.
Tutte le versioni precedenti di Access sono andate  in "fine vita" (eccetto 2106 e 2019 per i piani a pagamento (extended) che scadranno ad Ottobre 2025).

Se fai le prove di timing facci sapere i risultati.

Ciao
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 16, 2024, 10:55:19 am
Ecco la descrizione dei test:

1. per calcolare i tempi ho utilizzato la tua unit "Diagnostics" (OTTIMA !) così da poter uniformare i dati e il metodo.
2. creato una piccola applicazione, un form con 2 DBGrid la prima (A) collegata via ODBC e la seconda (B) via ZConnector
3. sempre lo stesso DB MSAccess e la stessa tabella 3350 rec da 52 campi.

I° test con un un loop da inizio a fine senza fare nulla
Result:
A = 330 millisec 
B =   63 millisec

II° test con un un loop da inizio a fine dove leggo un campo stringa e lo assegno ad una var locale
Result:
A = 319 millisec 
B =   57 millisec

III° test con un un loop da inizio a fine dove "marco" ogni record per poter successivamente usare il Bookmark
Result:
A = 160.869 millisec
B = 104 millisec

Visti i risultati, da profano farei questa considerazione;

- Sicuramente il componente ZEOS è più performante di quello nativo ODBC di Lazarus, almeno 5 o 6 volte più veloce
- Pur considerando la differenza di prestazioni tra i due, la funzione di "marcatura" del componente ODBC ha un grosso problema, questo, a meno di non scoprire che esiste un qualche setting da attivare o disattivare.

Tornando a noi,

sì i componeneti li istanzio a runtime, e la tua idea non è male (vedrò più avanti come implementarla), ma ora per poter pensare ad un passaggio a ZEOS, visto che con il componente ZEOS non ho la possibilità di usarlo contemporaneamente per tutte le operazione CRUD, credo che l'unica via (o meglio forse la più spiccia) sia quella di istanziare una seconda ZQuery e assegnargli lo script SQL che di volta in volta serve,

cosa ne pensi... vedi altre soluzioni ?

La sostituzione di Access non è un problema, la ditta che utilizzerà l'applicazione ha già da ora attivo 365 per tutti, e se dovesse essere comunque necessario cambiare in futuro, mi diranno lo cosa usare, anche perchè il porting dei dati lo chiederanno a me.
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 16, 2024, 11:20:34 am
Generalmente funziona come hai detto tu: o si sostituisce la "stringa" di query oppure si usano più ZQuery, diciamo specializzate, per fare diverse operazioni.

Non cambia molto dal fatto che ci possa essere un componente che può essere "preimpostato" per eseguire le quattro funzioni basilari.

Io normalmente uso una o due ZQuery e cambio la stringa. Molte volte, ma dipende ovviamente da come gestisci il tuo DB, lavoro direttamente con le ZTable e imposto il modo corrispondente (EDIT, INSERT, DELETE).

Occhio alle transaction e ai commit. ZEOS, se non sbaglio supporta una sola transaction per connessione.

Anche qui molto spesso io uso la transaction e il commit manuali, così che ho un controllo un pò più "fine" su ciò che accade.

Quello che ho detto si basa sulla poca esperienza su Zeos e Lazarus, in quanto in produzione uso normalmente Delphi e FireDac (che però hanno funzionalità molto simili).

Ciao
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: DragoRosso - Dicembre 16, 2024, 11:44:29 am
Se vuoi informazioni basilari su Commit e Transaction in ZEOS, puoi leggere questo topic (o fare una ricerca): https://www.lazaruspascal.it/index.php?topic=2672.0 (https://www.lazaruspascal.it/index.php?topic=2672.0)
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 16, 2024, 12:17:50 pm
Io normalmente uso una o due ZQuery e cambio la stringa. Molte volte, ma dipende ovviamente da come gestisci il tuo DB, lavoro direttamente con le ZTable e imposto il modo corrispondente (EDIT, INSERT, DELETE).

in passato facevo così, poi smisi giusto per la possibilità offerta dal componente standard, ma non è un problema

Occhio alle transaction e ai commit. ZEOS, se non sbaglio supporta una sola transaction per connessione.
Anche ODBCConnection amette una sola Transaction per connessione

Anche qui molto spesso io uso la transaction e il commit manuali, così che ho un controllo un pò più "fine" su ciò che accade.
io lo stesso ;-)

grazie per l'esempio su ZEOS e l'aiuto

buona giornata

Marco
Titolo: Re:[RISOLTO] DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 21, 2024, 08:44:59 am
Chiudo con un commento e una precisazione, magari può essere di aiuto per altri.

Alla fine ho deciso di seguire il suggerimento di Bonmario e sostituire TODBCConnection con TZConnection, e ho toccato con mano cosa significa una modifica del genere anche se in un programma relativamente piccolo  :-\,

Decisamente il componente TZConnection è più performante del componente TODBCConnection,questo, oltre all'enorme pregio di poter collegare molti DB diversi senza dover poi toccare il codice, ad esclusione della proprietà TZConnection.Databae e Protocol.

Inizialmente avevo erroneamente evidenziato la mancanza, rispetto al componenete TODBCConnection, della possibilità di attribuire direttamente al componente le query CRUD, cosa che obbliga a modificare spesso la proprietà SQL o ad utilizzare un secondo componente TZQuery per le operazioni INSERT, DELETE e UPDATE... mi sbagliavo !

Leggendo il manuale di ZeosLib ho scoperto che TZQuery ha una proprietà chiamata UpdateObject, a cui è possibile assegnare un secondo componente, il TZUpdateSQL a cui a sua volta è possibile assegnare gli script DeleteSQL, UpdateSQL, InsertSQL e RefreshSQL ovviamente parametrizzati !  :)

in questo modo, semplicemente con le chiamate myTZQuery.Edit, e myTZQuery.Post, il componente esegue lo script UpdateSQL .... myTZQuery.Delete esegue DeleteSQL .. e così via per gli altri

Fantastico  ;D






Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: xinyiman - Dicembre 21, 2024, 08:52:03 am
Ciao giacomoarko, il package TZComponent è un ottimo strumento, occhio solo ad una cosa, non è vero che basta cambiare il protocollo per passare da un database all'altro. Spesso tra i vari dbms cambiano i comportamenti, cambiano le sintassi dei dialetti, ad esempio non tutti ti permettono di fare update se ci sono join nella sintassi della query ecc ecc. Quindi il mio consiglio è se cambi db devi ritestare tutte le funzionalità. Quindi occhio. Se davvero in futuro vuoi fare qualcosa dove l'accesso al db è fortemente astratto ti consiglio di passare tutto da codice e non dai componenti visuali, creare delle unit per tenere separate le singole funzionalità e adottare una strategia di sviluppo TDD (qui una guida al riguardo https://www.lazaruspascal.it/index.php?page=tdd ). Altrimenti non ne esci vivo.
Titolo: Re:DBGrid, selezionare tutti i record visibili
Inserito da: giacomarko - Dicembre 21, 2024, 10:01:44 am
Si certamente,

rivedere tutto, e sopratutto ritestare tutto, è un passaggio obbligato, specie dopo un cambiamento di quel genere,

volevo solo dire che poter cambiare protocollo, al posto di sostituire fisicamente tutti i componenti DB, è comunque un bel passo avanti

grazie per il suggerimento  :)