Esempio di conversione dell'applicazione MastApp da BDE a InstantBDExpress

(C) 2005-2015 Ethea

Premessa

Nella cartella Demos di Delphi è contenuta l'applicazione MastApp. L'applicazione è in grado di accedere tramite BDE a due database diversi, uno in formato Paradox e l'altro in formato InterBase. Questo documento intende elencare i passi necessari a convertire l'applicazione all'uso della tecnologia dbExpress attraverso InstantBDExpress. Anche se la conversione di applicazioni reali si presenta di norma più complessa, questo è comunque un esempio indicativo.

Le cose possono variare leggermente da una versione di Delphi all'altra.

Prerequisiti

Prima di procedere occorre verificare di aver installato nell'IDE di Delphi i componenti InstantBDExpress e di aver configurato in modo corretto l'alias di accesso al database MASTSQL attraverso InstantBDExpress Administrator. L'alias dovrebbe già essere presente nel file di configurazione IBDXConnections.ini, con questi valori:

[MASTSQL]
GetDriverFunc=getSQLDriverINTERBASE
LibraryName=dbexpint.dll
VendorLib=gds32.dll
Database=C:\Program Files (x86)\Common Files\Borland Shared\Data\MASTSQL.GDB
RoleName=RoleName
User_Name=sysdba
Password=masterkey
ServerCharSet=
SQLDialect=1
BlobSize=-1
CommitRetain=False
WaitOnLocks=True
ErrorResourceFile=
LocaleCode=0000
Interbase TransIsolation=ReadCommited
Trim Char=False
DriverName=Interbase

Verificate il percorso del database e provate ad effettuare la connessione.

Pulizia sorgenti ed eliminazione supporto Paradox

Prima di procedere alla conversione dell'applicazione occorre fare pulizia e togliere il supporto a Paradox (se partite da MastApp per Delphi 2006 o successivo, alcune delle modifiche che proponiamo sono già state effettuate).

Dalla unit Main.pas:

Dalla unit DataMod.pas:

Togliere la uses DbTables in tutte le unit tranne DataMod: sono uses che non servono effettivamente. La unit DbTables va eliminata dalle clausole uses di queste unit: Main, BRPARTS, EDPARTS, BrCstOrd, EDCUST, EDORDER, SrchDlg. A seconda della tecnica che sceglieremo di applicare nel seguito, questo passaggio potrebbe non essere necessario; tuttavia, eliminare dalle clausole uses le unit non effettivamente usate è comunque una buona pratica da seguire.

A questo punto abbiamo una applicazione BDE "pulita" che fa uso di componenti TQuery e TTable per accedere ai dati e di TDatabase per la connessione. Volendo procedere con la tecnica della unit interposer, leggete la prossima sezione; altrimenti saltatela e procedete con la successiva, che illustra l'approccio di sostituzione dei componenti.

Nota: a partire da Delphi 2009 occorre aggiungere ad una clausola uses dell'applicazione la unit relativa al driver DBExpress che usate. In questo caso, si può aggiungere DBXInterbase alla clausola uses della unit DataMod. Da Delphi 2010, si può anche optare per DBXFirebird in alternativa (a seconda di come avete definito la connessione MastSQL nel file di configurazione).

La tecnica della unit interposer

Come abbiamo visto nel documento  Strategie di conversione, ci sono diversi modi alternativi per applicare questa tecnica.

  1. Aggiungere una nuova unit al progetto, e cercare IBDXInterposer.pas nella cartella samples di IBDX. Si può lasciare la unit dove sta oppure, dopo averla aggiunta al progetto, salvarla con un altro nome di propria scelta. Il nome di questa nuova unit andrà aggiunto alla clausola uses della sezione interface della unit DataMod, dopo la unit DbTables.
  2. Aggiungere la stessa unit e salvarla con nome DbTables, preferibilmente nella cartella del progetto. Non serve fare altro.
  3. Aggiungere la stessa unit, salvarla con un nome di propria scelta e definire un alias "DbTables=<nome della unit interposer>" nelle Project Options.

La prima alternativa è quella che funziona meglio in questa particolare applicazione. Perché possano funzionare le opzioni 2 e 3, infatti, occorre ricompilare tutte le unit che usano DbTables. In questo caso (almeno con Delphi 7) si tratta delle unit DBLookup e QuickRpt. La prima può essere semplicemente rimossa dalle clausole uses in cui compare, dato che è solo un relitto del passato, mentre della seconda (la unit principale di Quick Reports) di solito non si ha il sorgente.

Quindi, applichiamo l'opzione 1 e avremo un'applicazione che usa il BDE a design time ma DBExpress a run time. Lanciamo l'applicazione per verificare che tutto continui a funzionare correttamente.

La tecnica della sostituzione dei componenti

Questa tecnica prevede la sostituzione dei componenti BDE con componenti IBDX. Si tratta della soluzione più laboriosa, con modifiche effettuate manualmente per mostrare nei dettagli il procedimento.

Procediamo con la sostituzione dei componenti BDE con i relativi componenti InstantBDExpress.

1) Usare TIBDXDatabase al posto di TDatabase:

2) Usare TIBDXQuery e TIBDXTable

Nota: in realtà per questa applicazione non è necessario sostituire tutte le classi dei campi; basterebbe solamente la classe TIBDXDateTimeField, in quanto derivata da TSQLTimeStampField, che è il campo usato da dbExpress per le date. L'operazione serve a mostrare quali sono i passaggi da effettuare con altre applicazioni BDE. Inoltre i componenti TIBDXQuery e TIBDXTable creano dei campi di tipo TIBDX...Field, quindi è preferibile procedere in questo modo per omogeneità.

Il Search & Replace può anche essere affidato a GReplace, ma in questo caso banale si può operare anche a mano come descritto sopra.

Eliminare completamente i riferimenti al BDE

Nella unit DataMod.pas occorre a questo punto eliminare tutti i riferimenti al BDE:

Test dell'applicazione

Volendo, si può aggiungere alla main form un'opzione per la connessione al database. Ora occorre lanciare l'applicazione e provare ad utilizzarla.

Risoluzione dei problemi

Se non riuscite a riprodurre tutti questi passi, sono disponibili nella cartella demos di IBDX due versioni dell'applicazione MastApp già convertite: nella cartella MastAppInterposer trovate un'applicazione convertita tramite la tecnica della unit interposer, e in MastAppIBDX una convertita mediante sostituzione di componenti. Questi esempi vi aiuteranno a confrontare il vostro lavoro e verificare che cosa non ha funzionato.