Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 36 di 43
  • livello principiante
Indice lezioni

Componenti per l'accesso ai database

Tutti i componenti messi a disposizione da Delphi per l'accesso ai database
Tutti i componenti messi a disposizione da Delphi per l'accesso ai database
Link copiato negli appunti

In Delphi l'accesso alle basi di dati è reso molto semplice grazie ai componenti per
l'accesso ai databases che si trovano nella pgina "Data Access" della component
palette.

CP_D_Access.jpg (3080 byte)

Si tratta di otto componenti non visibili a run-time e sono: tdataSource, Ttable,
TQuery, TStoredProc, tdatabase, TSession, TBatchMove, TUpdateSql.

Per accedere ai dati è necessaria una sorgente di dati. Questo non si riferisce
direttamente ai dati ma ad un dataset che può essere una tabella oppure una query, una
stored procedure o altri tipi di dataset come per esempio quelli ADO che possono accedere
anche a fogli di Excel ed altro. Se necessario, i dataset possono essere collegati ad un
database e quest'ultimo ad una sessione.

tdataSource

tdataSource è sostanzialmente una interfaccia tra un dataset ed un componente per la
manipolazione dei dati (data-aware). Attraverso questo componente i controlli data-aware,
possono visualizzare, modificare o navigare tra i dati presenti nel dataset. Se si
vogliono manipolare i dati contenuti in un dataset attraverso i controlli data-aware, è
necessario che ciascun datasource venga ssociato ad un dataset. Allo stesso modo,  
ciascun controllo data-aware deve essere connesso ad un componente datasource. I
componenti datasource sono altresì utilizzati per collegare due dataset in relazioni di
tipo master-detail.

Le principali proprietà del componente tdataSource sono: AutoEdit, Dataset, Enabled,
State. Queste sono tutte accessibili a design-time tranne State, che è read-only e
accessibile solamente a run-time. La proprietà AutoEdit, se impostata a
true, permette di modificare automaticamente il contenuto di un campo del dataset
associato al datasource, nel momento in cui viene modificato il valore visualizzato nel
controllo data-aware associato al campo. La proprietà Dataset permette
di specificare il dataset a cui fa riferimento il datasource. A design-time, l'object
inspector, presenta una lista dei dataset presenti nel modulo corrente e/o in tutti i
moduli collegati al modulo corrente. La proprietà Enabled, stabilisce lo
stato dei controlli data-aware associati al datasource. Se impostata su false i controlli
sono disattivati e non è possibile modificare i loro valori. La proprietà State
riporta lo stato del dataset riferito dal componente datasource ed assume gli stessi
valori della proprietà State del componente tdataSet collegato.

I metodi principali del componente tdataSource sono: Edit, IsLinkedTo. Il metodo Edit
permette di attivare la modalità di edit sul dataset associato. Prima di attivare la
modalità edit, il metodo effettua un controllo sulla proprietà AutoEdit e State del
componente Datasource.

Per il componente DataSource gli eventi disponibili sono tre:
OnDataChange,
OnStateChange, OnUpdateData. Il primo evento, viene
attivato quando il record corrente viene modificato e l'applicazione si sposta da un campo
ad un altro od a un altro record nel dataset associato. I controlli data-aware segnalano
un cambiamento di "data change" nei seguenti casi: spostamento ad un nuovo
record, modifica dei dati di un campo. L'evento OnStateChange viene
attivato quando lo stato del dataset associato al componente DataSource cambia. Si ha un
cambiamento di stato quando si passa per esempio dallo stato dsBrowse (consultazione dei
dati) allo stato dsEdit (per la modifica dei dati). Per controllare lo stato in cui si
trova il dataset sottostante il componente DataSource, controllare all'attivazione
dell'evento OnStateChange il valore della proprietà State del componente DataSource.
L'ultimo evento viene attivato immediatamente prima che i dati vengano salvati nel dataset
collegato.

Ttable

Il componente table incapsula una tabella appartenente ad un database. Il componente
table è utilizzato per accedere ad una tabella di un database attraverso il BDE. Questo
componente permette di accedere direttamente a ciascun record e campo della tabella
associatagli. Attraverso questo componente + anche possibile accedere ad un sottoinsieme
dei dati contenuti nella tabella sottostante, facendo uso dei filtri o degli intervalli.
E' possibile accedere a tabelle di qualsiasi database supportato dal BDE.

Le principali proprietà del componente table sono:
Active, BOF, CanModify, DataSource, Database, DatabaseName, DefaultIndex, Exclusive, Exists, EOF, Filter, Filtered, IndexName, ReadOnly, MasterSource, tableName, tableType, SessionName, State.

La proprietà Active
indica se la tabella è aperta. Per apripre una tabella è necessario, dopo aver assegnato
le proprietà DatabaseName, tableName, eseguire il metodo Open oppure impostare su true il
valore della proprietà Active. Questa proprietà può essere sia letta che scritta ed è
accessibile anche a design-time per attivare la tabella in fase di sviluppo.

La proprietà
BOF (Begin Of File) indica quando il record corrente è il primo presente
nella tabella. Esattamente il contrario indica la proprietà EOF (End Of
File).

La proprietà CanModify indica se i dati contenuti nella tabella
riferita possono essere modificati. Questa proprietà viene impostata automaticamente
quando la tabella viene aperta ed è una proprietà a sola lettura. Se CanModify è false
significa che la tabella è in modalità read-only oppure altri fattori possono impedire
la modifica dei dati, come per esempio un altro utente che sia connesso alla tabella in
modalità esclusiva, oppure non si abbiano i privilegi (ad esempio in un server di
database come SQL server) per accedere a quella tabella in modifica.

La proprietà DataSource
serve ad indicare quale è il datasource che si riferisce alla tabella Master quando si
sta utilizzando una relazione di tipo Master-Detail dove la tabella corrente funge da
dettaglio.

DatabaseName indica il database a cui fa riferimento il
dataset. Questa proprietà indica il nome di un componente tdatabase, oppure il percorso
in cui si trovano le tabelle database, oppure ancora il nome di un alias di database.

DefaultIndex
identifica l'indice che verrà utilizzato per ordinare i record nella tabella quando
questa verrà aperta.

La proprietà Exclusive, modificabile solamente a
tabella chiusa, permette di aprire la tabella in modalità esclusiva, ovvero qualsiasi
altro utente che richiedesse l'accesso a quella stessa tabella sarebbe impedito dal farlo.

Exists è una proprietà che permette di stabilire se esiste
effettivamente la tabella fisica indicata nel componente Ttable. Questa restituisce true
se la tabella esiste, false altrimenti.

Filter è una proprietà che
permette di specificare un criterio in base al quale verra limitata la visibilità dei
record presenti nella tabella. Accetta valori di tipo stringa del tipo: 'Campo1=valore1 or
Campo2=valore2'. Possono anche essere utilizzati caratteri jolly come "*".

Attraverso la proprietà Filtered è possibile attivare o disattivare il
filtraggio dei record in base al filtro precedentemente definito nella proprietà Filter.

IndexName
indica un indice secondario da utilizzare per definire l'ordinamento dei records della
tabella. Se questo valore non viene impostato, i records saranno ordinati in base
all'indice di default oppure, nel caso delle tabelle DBase, in base all'ordine naturale
dei records, ovvero la sequenza con cui i record sono stati aggiunti nella tabella.

La
proprietà ReadOnly, permette di definire l'apertura della tabella come
di sola lettura, percui qualsiasi operazione di scrittura applicata a quella tabella
restituirà un messaggio di errore. Per impostare questa proprietà è necessario
impostare la proprietà Active su false (o chiudere la tabella), impostare il valore
desiderato, quindi reimpostare Active a true (o riaprire la tabella). Impostando ReadOnly
a true, automaticamente la proprietà CanModify assumerà valore False.

MasterSource
contiene un riferimento ad un oggetto DataSource collegato ad una tabella master. Questo
valore va impostato solamente nel caso in cui si lavori con tabelle in relazioni di tipo
master-detail.

tableName è una delle propietà più importanti
dell'oggetto table; essa specifica il nome della tabella fisica a cui è associato
l'oggetto table. tableType è una proprietà che specifica il tipo fisico di tabella a cui
fa riferimento l'oggetto table stesso. Valori validi per questa proprietà sono:
ttdefault, ttParadox, ttdBase, ttFoxPro, ttASCII. Se impostato su ttdefault, il tipo di
tabella viene determinato automaticamente in base all'estenzione del nome del file della
tabella (ex.DB o niente=Paradox, DBF=DBase, TXT=ASCII).

SessionName
identifica il componente Session all'interno del quale agisce la tabella. La proprietà
State riporta lo stato della tabella e valori possibili sono: dsInactive, dsBrowse,
dsEdit, dsInsert, dsSetKey, Setrange, dsCalcFields, dsFilter, dsNewValue, dsOldValue,
dsCurValue, dsBlockRead, dsInternalCalc, dsOpening.

I metodi principali dell'oggetto table sono: Append, AppendRecord, Cancel, Close,
Createtable, Delete, Deletetable, DisableControls, Edit, Emptytable, EnableControls,
FieldByName, FindFirst, FindLast, FindNext, FindPrior, FindNearest, First, Insert,
Insertrecord, IsEmpty, Last, Locate,  Locktable, Lookup, MoveBy, Next, Open, Post,
Prior, Renametable, Unlocktable.

Il metodo Append serve ad aggiungere un
nuovo record vuoto alla fine della tabella e rende record corrente il nuovo record
aggiunto e lascia la tabella in modalità inserimento.

AppendRecord serve
ad aggiungere alla fine della tabella un nuovo record. Questa funzione permette di passare
tutti i valori dei campi che mompongono il record direttamente e di salvarne il contenuto
con una unica operazione.

Cancel ha lo scopo di annullare lemodifiche
apportate al contenuto dei records prima che queste vengano salvate nella tabella ed
imposta lo stato della tabella a dsBrowse.

Close chiude la tabella
impostando la proprietà Active a false. Speculrmente, il metodo Open
apre la tabella. Quando la tabella è chiusa, non è possibile leggere o scrive dati in
essa.

Createtable è il metodo che permette di creare fisicamente la
tabella su disco basandosi sulle impostazioni contenute nelle proprietà FieldsDef e
IndexDefs. Per ulteriori informazioni a riguardo, consultare la guida in linea.

Delete
permette di eliminare il record corrente. Il metodo Deletetable ha lo
scopo di eleiminare fisicamente dal disco la tabella a cui è collegato l'oggetto table.

DisableControls
disattiva tutti i controlli (edit box, combobox, labels) collegati all'oggetto table; al
contrario il metodo EnableControls li attiva.

Il metodo Edit
permette di impostare la modalità modifica per la tabella. In questa modalità è
possibile modificare il contenuto dei campi dei records della tabella,ovviamente a tabella
aperta.

Emptytable si occupa di eliminare tutto il contenuto di una
tabella.

FieldByName viene utilissato per recuperare un riferimento
all'oggetto TField collegato al campo di una tabella. Questo metodo restituisce un
riferimento all'oggetto TField corrispondente al campo il cui nome viene passato al
metodo.

FindFirst effettua una ricerca tra i records della tabella alla
ricerca del primo record corrispondente ai criteri di ricerca specificati.

FindLast,
agisce in maniera simile al metodo FindFirst solamente che restituisce l'ultimo tra i
records corrispondenti ai criteri di ricerca.

FindNext, FindPrior,
agiscono sulla precedente chiamata di uno dei metodi FindFirst, FindLast: il primo
recupera il record successivo tra quelli corrispondenti ai criteri di ricerca, mentre il
secondo il precedente. Per utilizzare questi metodi occorre prima effettuare una chiamata
ad uno dei metodi FindFirst, FindNext. I criteri di ricerca vengono specificati impostati
assegnando i un valore alla proprietà Filter della tabella.

FindNearest
permette di spostare la posizione corrente della tabella al record che corrisponde il più
possibile ai criteri di ricerca specificati. Questo metodo riceve come parametri un array
di valori rappresentanti il contenuto (che si sta ricercando) dei campi del record.

First
posizione il cursore della tabella al primo record in essa contenuto, mentre Last
lo posiziona sull'ultimo; Next e Prior effettuano uno
spostamento rispettivamente al record successivo o al record precedente.

Insert
predispone la tabella per l'inserimento di un nuovo record nella posizione del cursore
della tabella. Funziona come Append solamente che l'aggiunta del nuovo record avviene
nella posizione corrente della tabella.

Lo stesso dicasi per Insertrecord.

IsEmpty permette di stabilire se la tabella contiene records: restituisce
true se non contiene alcun record, false altrimenti.

Locate è un metodo
che permette di ricercare dei recortds all'interno di una tabella. Accetta come parametri
un array contenente i nomi dei campi in cui effettuare la ricerca, una array di valori da
ricercare nei corrispondenti campi dell'array precendente ed un parametro opzione che
stabilisce la modalità di ricerca. Se il metodo trova un record corrispondente ai criteri
di ricerca specificati, restituisce true e posiziona il cursore della tabella in quella
posizione, altrimenti restituisce false e non effettua alcun spostamento.

Locktable
e Unlocktable sono due metodi che permattono di bloccare la tabella ad
altre applicazioni impedendone l'accesso in lettura o scrittura a seconda del valore del
specificato nel parametro.

Lookup permette di recuperare il contenuto, o
parte, di un record corrispondente a determinati criteri di ricerca. Il funzionamento è
simile al metodo Locate tranne per il fatto che in LookUp va specificato un elenco di
campi di cui verrà restituito il valore e come risultato della chiamata al metodo si
otterrà un variant contenente i valori dei campi speificati nell'array dei campi da
restituire. In ogni caso, sia che il record venga trovato sia no, la posizine corrente
della tabella non cambia.

MoveBy è un metodo che permette di spostarsi
tra i record della tabella relativamente alla posizione corrente. Specificando valori
negativi, si avrà uno spostamento indietro di tanti record quanti indicati dal valore
specificato, specificando valori positivi, lo spostamento avverrà in avanti.

Renametable
permette di rinominare la tabella fisica connessa all'oggetto table aggiornando
automaticamente anche tutti gli altri files connessi alla tabella (es. file di indice).

TQuery

Il componente Query è molto simile al componente table tranne per il fatto che i dati
non vengono recuperati direttamente da una tabella, ma tramite una query SQL.
Sia la
classe Ttable che la classe TQuery discendono entrambe dalla classe tdBDataSet.
Il BDE ha
integrato un semplice engine SQL (Local SQL) che permette di effettuare semplici query
anche su database che non siano dei server SQL, come ad esempio delle tabelle dBase o
Paradox. Molte delle proprietà e metodi dell'oggetto Query sono ugualia quelle
dell'oggetto table. In questa sezione vedremo solamente le proprietà ed i metodi per cui
differiscono i due oggetti.

Principalmente le differenze tra gli oggetti table e Query risiedono nelle seguenti
poprietà: Constrained, ParamCheck, Params, RequestLive, SQL, UniDirectional. La
proprietà Constrained riguarda le tabelle Paradox e DBase. Serve ad
indicare se è permesso o no l'inserimento e la modifica dei dati anche se i nuovi dati
non sono conformi con il comando SELECT utilizzato per ottenere i dati. Per maggiori
informazioni su questa proprietà consultare la guida in linea.

La proprietà ParamCheck
indica se la lista dei parametri, utilizzati nel testo della query, va rigenerata se il
testo della query viene modificato a runtime. Ciò è utile quando vengono create query a
runtime utilizzando numero e tipi diversi di parametri.

Params è la
lista dei paramteri utilizzati nel testo SQL definito nella proprietà SQL. Per accedere
ai singoli parametri si utilizza la sintassi degli array indicando l'indice del parametro
che interessa reperire.

Esiste anche una proprietà ParamCount, non
accessibile a design-time che permette di recuperare il numero di parametri presenti nel
testo SQL definito. RequestLive indica se l'oggetto Query
restituirà un dataset modificabile o no. È possibile infatti operare su un oggetto Query
come su un oggetto table, inserendo e modificando i record da esso restituiti.
Se
RequestLive è impostato a false, non sarà possibile inserire o modificare, attraverso i
metodi dell'oggetto stesso, i dati dei records restituiti dalla query. Da notare che non
tutti iresult set restituiti dalle query possono essere trattati in questa maniera; alcuni
costrutti infatti resituiscono comunque un result set read-only, percui per modificare i
valori dei records bisogna ricorrere all'esecuzione di una nuova query.

SQL
è la proprietà più importante dell'oggetto Query. Esso contiene il testo della query
che verrà eseguita. Il tipo di questa proprietà è TStrings; ciò significa per
aggiungere del codice sql bisogna utilizzare il metodo Add della classe TStrings, oppure
assegnare direttamente il testo sql alla proprietà Text della classe TStrings.

La
proprietà UniDirectional stabilisce il tipo di cursore che verrà utilizzato per
spostarsi attraverso i records restituiti dalla query. Impostato su true, lo spostamento
sarà possibile solamente in avanti. Per impostazione predefinita UniDirectional ha valore
false, percui è possibile spostarsi tra i records sia in avanti che in dietro.

Vediamo ora i metodi dell'oggetto Query: ExecSQL, ParamByName, Prepare, UnPrepare.

Il
metodo ExecSQL permette di eseguire il testo sql definito in precedenza
nella proprietà SQL nel caso in cui questo non restituisca un result set, come per
esempio potrebbe essere una query di inserimento dati (INSERT) oppure di eliminazione
(DELETE), oppure di aggiornamento (UPDATE). Queste istruzioni sql infatti non
restituiscono un set di dati, come invece accade per SELECT.

ParamByName
è un metodo che permette di accedere, in lettura o scrittura, ai valori dei parametri
definiti nel testo sql, specificando il nome del parametro. Ad esempio, se nel testo sql
abbiamo definito un parametro "pippo" (ovviamente le virgolette non vanno
indicate), potremmo accedere in scrittura al suo valore con
NomeOggettoQuery.ParamByName('pippo').Value = valore oppure in lettura con
NomeOggettoQuery.ParamByName('pippo').Value. Per definire un parametro nel testo sql è
necessario far precedere il suo nome dal segno ":" (due punti). Una volta
definito il testo contenente la query da eseguire nella proprietà SQL, completo dei
parametri che si volgioni definire, si possono modificare o specificare le proprietà dei
vari parametri agendo sulla proprietà Params. Qui è possibile impostare il tipo di dato
che esso conterrà (String, Integer, Boolean, ...) la direzione del parametro (parametro
di input o di output). Nella maggior parte dei casi non è necessario modificare questi
valori.

I metodi Prepare e UnPrepare servono a
ottimizzare la query prima di essere eseguita. Il primo comunica al BDE o al server remoto
il contenuto della query da eseguire così che il server od il BDE possa predisporre le
risorse necessarie all'effettiva esecuzione della query. Questo permette di migliorare le
performances dell'applicazione. Delphi richiama automaticamente questo metodo se non lo si
è fatto esplicitamente prima di esguire la query. Il metodo UnPrepare agisce in maniera
opposta, liberando le risorse occupate per l'ottimizzazione dell'esecuzione della query.

TStoredProc

Questo oggetto permette di operare con le Stored Procedures, ovvero quelle procedure
che è possibile definire in alcuni server database (come SQL Server). Esse risiedono nel
server e vengono eseguite nel server.

Le proprietà principali dell'oggetto StoredProc sono: ParamBindMode, Params,
StoredProcName.

ParamBindMode determina l'ordine con cui i parametri
vengono assegnati ai parametri contenuti nella stored procedure contenuta nel server.
Possibili valori per questa proprietà sono pbByName o pbByNumber. Nel primo caso viene
seguito la nomenclatura dei parametri. Nel secondo caso viene seguita la posizione.

La
proprietà Params è simile alla atessa proprietà dell'oggetto Query;
permette di definire i parametri in ingresso ed in uscita della stored procedure.
StoredProcedure è simile alla proprietà tableName dell'oggetto table e serve a
specificare il nome della stored procedure presente nel server.

I metodi dell'oggetto StoredProc sono: CopyParams, DescriptionsAvailable, ExecProc,
Getresults, ParamByName, Prepare, UnPrepare.

Il metodo CopyParams
fornisce un metodo rapido per copiare i parametri di una stored procedure ad un'altra.

Il
metodo DescriptionsAvailable serve a determinare se nel server sono
disponibili informazioni riguardo i parametri della stored procedure; questo metodo
ritorna true se le informazioni sono disponibili o false altrimenti.

ExecProc
è il metodo da chiamare per eseguire la stored procedure nel server. Prima di effettuare
la chiamata a questo metodo, occorre specificare i parametri necessari alla stored
procedure ed effettuare una chiamata al metodo Prepare.

Getresults serve
a forzare l'invio dei parametri di output da parte dei server Sybase o MSSql. Questi
server necessitano il raggiungimento dell'ultima posizione nel result set prima di inviare
il contenuto dei parametri di output al client.

ParamByName ha la stessa
funzione del metodo ParamByName dell'oggetto Query. Prepare e UnPrepare,
lo abbiamo già visto, hanno la funzione di assegnare i valori a i parametri della stored
procedure e all'ottimizzazione prima dell'esecuzione della stessa. UnPrepare rilascia le
risorse occupate con il metodo Prepare.

tdatabase

L'oggetto Database permette di avere un controllo totale sulle proprietà della
connessione al database. tramite questo oggetto è possibile gestire il login ai server di
database, controllo sulle transazioni. Delphi crea sempre, quando si utilizzano componenti
per l'accesso alle basi di dati un oggetto Database e un oggetto Session, anche se non
viene richiesto dall'utente.

Le proprietà fondamentali di questo oggetto sono: AliasName, Connected, DatabaseName,
DataSets, DriverName, Exclusive, KeepConnection, Params, SessionName, ReadOnly,
transIsolation, LoginPrompt.

La prima proprietà, AliasName, specifica
l'alias BDE da utilizzare per accedere al database. Connected indica se
la connessione al database è attiva. Impostare a false questa proprietà determina la
disconnessione del database, al contrario impostarla a true ne determina la connessione.

DatabaseName
è il nome del database presente nel server database oppure il percorso fisico dove
sonovisualizzate le tabelle dBase o Paradox. Questa proprietà può essere modificata
solamente a connessione non attivata, pena il sollevamento di una eccezione.

DataSets
è un array contenente l'elenco dei dataset correntemente aperti. Attraverso questa
proprietà è possibile accedere alle proprietà e metodi dei datasets attivi per il
database indicato. DriverName, similmente alla stessa proprietà dell'oggetto table,
indica il nome del driver utilizzato per l'accesso al database. Questa proprietà va
utilizzata quando non viene indicato un alias BDE per l'oggetto Database.

Exclusive
ha la stessa funzione della proprietà Exclusive dell'oggetto table: impedisce l'accesso
al database ad altre applicazioni.

La proprietà KeepConnection serve a
far si che la connessione al database sia attiva anche se non vi sono dataset aperti. Se
KeepConnection è true, la connessione viene mantenuta attiva anche se non si sono dataset
aperti, se ha valore false, la connessione viene chiusa con la chiusura dell'ultimo
dataset. Ciò comporta tempi più lunghi di accesso poichè sarà necessario rieffettuare
la connessione al database.

Params è una proprietà che permette di
specificare dei parametri relativi al database. Ad esempio è possibile indicare tra i
parametri una UserId e Password per l'accesso al database così da non doverli digitare
tutte le volte che si accede al database. I parametri da specificare variano da driver a
driver e i parametri specificati dall'utente vanno a sovrascrivere i parametri di default
assegnati dal BDE.

SessioneName contiene il nome dell'oggetto Sessione a
cui il database è associato. Utilizzare le sessioni è utile quando è necessario avere
connessioni distinte dalla stessa applicazione verso lo stesso database. Potrebbe essere
il caso di una applicazione server che risponda alle richieste dei client per la fornitura
di informazioni da un database. Lasciando questa proprietà vuota, farà si che Delphi
associ questo database alla sessione di default.

ReadOnly specifica se il
database sarà accessibile in sola lettura, similmente alla stessa proprietà degli
oggetti table e Query.

transIsolation permette di indicare illivello di
isolamento per le transazioni controllate dal BDE. Ogni server di database ha dei
caratteristici livelli di isolamento. Per un elenco consultare la documentazione in linea
riguardante la proprietà TarnsIsolation dell'oggetto Database.

La proprietà LoginPrompt
permette di specificare se prima dell'apertura della connessione al database venga
visualizzata o no una finestra di dialogo per la digitazione delle informazioni di login:
user name e password.

Metodi dell'oggetto Database: CloseDatasets, Commit, RollBack, Starttransaction, Close,
Open.

Il metodo CloseDatasets permette di chiudere tutti i datasets
attivi relativi al database senza disconnettersi dal server.

Commit viene
utilizzato insieme ai metodi Starttransaction e RollBack.
Questi metodi permettono di implementare il controllo delle transazioni. Per avviare una
transazione, ovvero un insieme di operazioni su tabelle, query, che devono necessariamente
essere portati a termine con successo perchè i dati siano validi, utilizzare il metodo
Starttransaction. Se tutte le operazioni intermedie sono state completate con successo, si
può utilizzare il metodo Commit per rendere effettive le modifiche oppure, in caso
contrario, utilizzare il metodo RollBack per annullarle e ripristinare automaticamente lo
stato precedente dei dati.

I metodi Open ed Close sono
utilizzati per aprire e chiudere la connessione al database. Per connettersi al server di
database è anche possibile utilizzare la proprietà Connected impostandola su true per la
connessione e a false per la disconnessione.

TSession

L'oggetto Session permette all'applicazione di gestire gruppi di connessioni a
database. L'oggetto sessione viene utilizzato per accedere a tabelle paradox in rete da
più postazioni contemporaneamente e per gestire più connessioni simultanee allo stesso
database, (ad esempio una applicazione server web che recuperi dati da database su
richiesta dei clients deve gestire una sessione per ogni connessione client richiesta). In
pratica la sessione ha lo scopo di isolare le attività tra sessioni differenti.

Le proprietà principali dell'oggetto Sessione sono: Active, AutoSessionName,
ConfigMode, DatabaseCount, Databases, KeepConnections, NetFileDir, PrivateDir,
SessionName, SQLHourGlass.

La proprietà Active, di tipo boolean, 
indica quando la sessione è attiva oppure no. Essa può anche essere utilizzata per
attivare o disattivare la sessione impostandone il valore.

AutoSessionName
è una proprietà molto utile, non presente nella classe TSession contenuta nelle versioni
precedenti di Delphi. Essa permette di far si che venga generato automaticamente un nome
univoco per la sessione. Ciò è utile quando viene utilizzato l'oggetto Sesisone in
applicazioni multithread dove è richiesta l'univocità del nome della sessione.

La
proprietà ConfigMode definisce il modo in cui vengono gestiti gli alias
all'interno della sessione. DatabaseCount contiene il numero di databases
che si riferiscono alla sessione.

La proprietà Databases è un elenco di
riferimenti ad oggetti Database (tdatabase) che si riferiscono alla sessione.

PrivateDir
indica invece il percorso completo, locale, per l'appoggio di file temporanei generati dal
BDE. Questa proprietà viene utilizzata per settare nella macchina client un percorso
(locale) per la creazione di tabelle temporanee per velocizzare l'accesso ai dati nel
server.

La proprietà SQLHourGlass permette di specificare se il cursore
cambierà forma durante l'attesa di dati dal server SQL. L'impostazione di questa
proprietà va effettuata prima di attivare la sessione.

Molto più lunga è la lista dei metodi dell'oggetto Session. Questi permettono di
operare sugli alias di database, sui drivers di database, sui databases. Essi sono:
AddAlias, AddDriver, AddPassword, AddStandardAlias, Close, CloseDatabase, DeleteAlias,
DeleteDriver, DropConnections, FindDatabase, GetAliasDriverName, GetAliasNames,
GetAliasParams, GetConfigParams, GetdatabasesNames, GetdriverNames, GetdriverParams,
GetPassword, GetStoredProcNames, GettablesNames, IsAlias, ModifyAlias, ModifyDriver, Open,
OpenDatabase, RemoveAllPasswords, RemovePassword, SaveConfigFile.

Attraverso AddAlias,
ModifyAlias, DeleteAlias è possibile rispettivamente
aggiungere, modificare, eliminare un alias di database nella sessione corrente. Il primo
di questi metodi accetta come parametri il nome dell'alias, il nome del driver e una lista
di parametri di tipo TStrings.

Attraverso la proprietà ConfigMode
dell'oggetto Sessione è possibile indicare se gli alias creati all'interno della sessione
saranno visibili da altre sessioni. Il secondo accetta il nome dell'alias da modificare e
la lista contenente i parametri da moficiare ed i nuovi valori. L'ultimo accetta solamente
il nome dell'alias da eliminare.

Stesse funzioni hanno i metodi AddDriver,
ModifyDriver, DeleteDriver. Il primo permette di
aggiungere un driver di database ed accetta come parametri il nome del driver ed una lista
di parametri di configurazione. ModifyDriver accetta come parametri il nome del driver da
modificare ed una lista (TStrings) dei parametri di configurazione da modificare.
DeleteDriver accetta il solo nome del driver da eliminare.

AddPassword
viene utilizzato per aggiungere una password di accesso a tabelle paradox cifrate. Se si
accede ad una tabella paradox cifrata e non è stata definita una password a livello di
sessione o non viene fornita una password nell'evento OnPassword Delphi visualizza
automaticamente una finestra di dialogo che richiede l'inserimento di una password valida.
Per eliminare una password aggiunta utilizzare il metodo RemovePassword specificando la
password da eliminare. Per eliminare tutte le password specificate utilizzare il metodo
RemoveAllPassword.

AddStandardAlias è simile al metodo AddAlias tranne
per il fatto che permette di agiungere solamente alias per tabelle paradox, dbase o ASCII.

I metodi Open e Close permettono di attivare o
disattivare la sessione. La chiusura di una sessione comporta la disconnessione di tutti i
databases attivi.

OpenDatabase permette di attivare la connessione ad un
database, appartenente alla sessione corrente, specificandone il nome. Se il nome del
database non esiste nell'elenco dei databases appartenenti alla sessione viene creato un
database temporaneo e restituito un riferimento a questo come risultato. Per disconnettere
ad un database appartenente alla sessione corrente, si può utilizzare il metodo CloseDatabase
fornedogli un riferimento al database che si intende disconnettere.

Il metodo DropConnections
ha lo scopo eliminare tutti i database temporanei creati dalla sessione. Questo metodo è
necessario perchè se la proprietà KeepConnections è true, i database temporanei creati
durante la sessione, non vengono eliminati automaticamente quando vengono chiusi.

FindDatabase
ricerca nell'elenco dei database appartenenti alla sessione corrente il database
specificato e ne restituisce un riferimento.

Il metodo GetAliasDriverName
restituisce il nome del driver utilizzato da un particolare alias di database il nome
viene passato come parametro al metodo stesso.

GetAliasNames fornisce un
elenco (TStrings) di nomi di alias di database disponibili nella configurazione del BDE.

GetAliasParams,
restituisce in una lista di tipo TStrings un elenco dei parametri impostati per l'alias di
database specificato. La lista è in formato PARAMEtrO=VALORE.

Il metodo GetConfigParams
ha lo scopo di recuperare l'elenco dei parametri con i rispettivi valori dalla
configurazione del BDE. Il metodo prende in ingresso un percorso (corrispondente al ramo
della configurazione di cui si vogliono i parametri) un nome di sessione ed un riferimento
ad una lista di stringhe (TStrings) che verrà riempita con i parametri recuperati.

GetdatabaseNames
restituisce un elenco di tutti gli alias di database definiti nella cinfigurazione del BDE
e tutti i database conosciuti dalla sessione corrente.

In maniera simile agisce il metodo GetdriverNames
che restituisce un elenco di tutti i driver di database disponibili nella sessione.

GetdriverParams,
in maniera simile al metodo GetAliasParams, restituisce in una lista di stringhe di tipo
TStrings, un elenco dei parametri associati al driver di database specificato.

Il metodo GetPassword
permette di recuperare una password per l'accesso ad un database. Effettuando una chiamata
al metodo, viene prima attivato l'evento OnPassword e, nel caso in cui non fosse definito
un gestore di evento, visualizzata la finestra di dialogo standard per la richiesta della
password.

Il metodo restituisce true se viene recuperata una password, false altrimenti. GetStoredProcNames
al pari di altri metodi già visti, restituisce un elenco delle stored procedure presenti
in database appartenente alla sessione corrente.

GettableNames
restituisce l'elenco delle tabelle appartenenti ad un database, specificato, appartenente
alla sessione. Alcuni parametri passati a questo metodo, permettono di filtrare l'elenco
delle tabelle in base al nome, all'estenzione (tabelle paradox, dbase), di indicare se
resituiture anche le tabelle di sistema del database (SQL servers databases).

Il metodo IsAlias
permette di determinare se un determinata stringa passatagli, corrisponde ad un alias di
database conosciuto dalla sessione.

Il metodo SaveConfigFile è
importante quando si vogliono rendere persistenti le modifiche apportate alla
configurazione del BDE, ovvero agli alias di datbase o ai drivers. Alcune modifiche non
verrano salvate se il parametro ConfigMode dell'oggetto Session è impostato su cmSession.

TBatchMove

L'oggetto BatchMove ha lo scopo di permettere alle applicazioni di effettuare
operazioni batch (spostamenti, eliminazioni, trasformazioni, etc) su gruppi di records o
su intere tabelle. Questo oggetto opera su due tabelle, una sorgente ed una di
destinazione. Possiede una gestione dei problemi riguardanti violazioni di chiave od altri
prolemi durante l'esecuzione della procedura batch. Nel caso vi siano errori, questi
vengono riportati in due tabelle.

Ecco l'elenco delle sue proprietà: AbortOnKeyViol, AbortOnProblem, ChangedCount,
ChangedtableName, CommitCount, Destination, KeyViolCount, KeyVioltableName, Mappings,
Mode, MovedCount, ProblemCount, ProblemtableName, RecordCount, Source, transliterate.

AbortOnKeyViol
e AbortOnProblem sono due proprietà che definiscono il comportamento
dell'oggetto nel caso si verifichino errori. Impostando una o entrambe queste proprietà a
true l'operazione batch verrà annullata.

ChangedCount riporta il numero
di record che sono stati modificati.

ChangedtableName specifica il nome
della tabella paradox che conterrà una copia dei records originali che sono stati
modificati.

CommitCount permette di specificare quanti records devono
essere modificati prima che le modifiche vengano applicate effettivamente.

Destination
e Source specificano i nomi degli oggetti table che verranno utilizzati
rispettivamente come tabella sorgente e come tabella di destinazione.

KeyViolCount
riporta il numero di violazioni di chiave incontrati durante l'esecuzione della procedura
batch.

La proprietà KeyVioltableName indica il nomefile di una tabella
paradox utilizzata per contenere i records che hanno generato una violazione di chiave.

Mappings
è una proprietà di tipo TStrings che permette di specificare la corrispondenza dei campi
tra la tabella sorgente e quella di destinazione. Il formato da utilizzare è del tipo
NOMECAMPODESTINAZIONE=NOMECAMPOSORGENTE. Per far si che il contenuto di un campo nella
tabella sorgente vada in un campo con lo stesso nome nella tabella di destinazione,
indicarne solamente il nome.

La proprietà Mode determina il tipo di
operazione batch da effettuare. Valori validi per questa proprietà sono: batAppend,
batUpdate, batAppendUpdate, batCopy, batdelete. La modalità di funzionamento predefinita
è batAppend. Consultare la guida in linea per un approfondimento sulle funzioni dei
valori indicati.

MovedCount riporta il numero di records che sono stati
processati e trasferiti nella tabella di destinazione.

ProblemCount
indica il numero di records che non sono stati aggiunti alla tabella di destinazione per
il verificarsi di problemi.

ProblemtableName specifica il nomefile di una
tabella parado che conterrà i records che non sono stati aggiunti alla tabella di
destinazione a causa di errori.

RecordCount indica il numero massimo di
record che verranno spostati dalla tabella sorgente a quella di destinazione.

La
proprietà transliterate specifica se durante l'operazione batch deve
essere effettuata una conversione in base al linguaggio del driver utilizzato per la
tabella di destinazione.

L'unico metodo rilevante per questo oggetto è il metodo Execute che
avvia la procedura batch.

TUpdateSQL

L'oggetto UpdateSQL permette di specificare degli scripts SQL per la modifica,
l'inserimento e l'eliminazione di records in dataset di sola lettura di tipo TQuery o
TStoredProc.

Le proprietà di questo oggetto sono: DataSet, DeleteSQL, InsertSQL, ModifySQL, Query,
SQL.

La proprietà Dataset indica il componente TQuery o TStoredProc che
utilizzerà l'oggetto UpdateSQL. DeleteSQL, InsertSQL, ModifySQL,
sono tre proprietà di tipo TStrings che conterranno gli scripts SQL per, rispettivamente,
eliminare, inserire, modificare il contenuto del dataset collegato.

La proprietà Query
restituisce, in base all'indice specificato, l'oggetto TQuery utilizzato per eliminare,
inserire o modificare i dati del dataset. Valori di indice validi sono: ukDelete,
ukInsert, ukModify. In maniera simile alla proprietà precedente, SQL
resituisce la stringa SQL utilizzata per eliminare, inserire, modificare il dataset.

I metodi dell'oggetto UpdateSQL sono: Apply, ExecSQL, SetParams.

Il metodo Apply
permette di assegnare i parametri alla stringa SQL corrispondente all'indice specificato e
di eseguirla per aggiornare il record.

ExecSQL in maniera simile ad Apply
esegue il codice SQL in base all'ndice specificato. Da notare però che se il codice SQL
specificato contiene dei parametri, occorre chiamare prima il metodo SetParams.

Ti consigliamo anche