Perché usare Powerbuilder? DataWindow!

Perché usare Powerbuilder? DataWindow!

Le DataWindow sono una tecnologia brevettata da Sybase per la gestione dei dati, viene effettuato un binding fra i dati visualizzati e le query SQL, in questo modo si aumentano le prestazioni riducendo i tempi per il recupero dei dati e astraendo la visualizzazione dalla base dati sottostante è possibile utilizzare diversi DBMS senza la necessità di modificare il codice sorgente.

L’oggetto datawindow funziona grazie a 4 diversi buffer:
Il buffer primario “primary buffer” contiene i dati restituiti dal DB e le righe inserite mediante l’utilizzo della funzione InsertRow(), i dati contenuto in questo buffer sono quelli che può visualizzare l’utente finale.
Il “Filter Buffer” invece contiene i dati filtrati che non soddisfano le condizioni di selezioni applicati al buffer primario
Il “Delete Buffer”DataWindow Buffers contiene i dati cancellati dalla datawindow ma che non sono ancora stati eliminati dal DB, i dati che si trovano in questo buffer sono stati inseriti tramite l’istruzione DeleteRow()
Il buffer originale “Original Buffer” che contiene i dati così come sono stati recuperati la prima volta dal DB senza nessuna modifica

E’ possibile accedere ai dati contenuti in una DataWindow usando espressioni o funzioni.
Si può avere accesso ad una singola colonna della DataWindow, a più colonne, a blocchi di dati, a righe oppure solo ad una selezione dei dati.
Si può accedere a tutti i buffer visti prima e fare confronti tra i dati originali “Original Buffer” e gli altri tre buffer.

Una volta selezionati i dati di interesse questi si possono assegnare a variabili semplici, a variabili del tipo dato corrispondente, a variabili di tipo ANY, a User object e a strutture.

La sintassi per accedere ai dati una un Datawindow è la seguente:

nome del data window control . Object . Nome colonna . Buffer . Sorgente . [riga e/o colonna]

facciamo degli esempi imamigniamo di avere una tabella con due colonne di nome: “codice” e “articolo”, associate ad un controllo Datawindow di nome DWC

variabile = DWC.Object.codice[1] //recupera il valore che si trova nella prima riga della colonna “codice”

variabile = DWC.Object.Data[1,1] //recupera il valore che si trova nella prima riga della colonna “codice” equivalente alla istruzione sopra

array = DWC.Object.codice.Current //memorizzo i valori che si trovano nel buffer corrente della colonna “codice” all’interno di un array

variabile = DWC.Object.codice.Filter[1] //recupera il valore che si trova nella prima riga della colonna “codice” del buffer Filter

array = DWC.Object.Data[1,1,5,1] //memorizzo i valori che si trovano dalla 1 alla 5 riga della colonna “codice” all’interno di un array

DWC2.Object.Data = DWC.Object.Data.Selected //copia le righe selezionate nella datawindow DWC nel buffer primario della datawindow DWC2

Esistono anche altri metodi per accedere ai dati di una Datawindow, usando le funzioni messe a disposizioni per leggere e scrivere i dati:
SetItem() : assegna un valore ad un elemento del buffer GetItemString(), GetItemNumber(), GetItemDecimal(), GetItemTime(), GetItemDate(),GetItemDateTime() leggono I valori dal buffer.

La sintassi per scrivere i dati: SetItem(riga, colonna, valore)
Per leggere i dati: GetItem…(riga, colonna, {buffer, valore originale opzionali})

Sono fornite anche molte altre istruzioni per modificare o avere informazioni sui dati contenuti nella DataWindow:

Retrieve() :Legge i dati dal DB e li memorizza nel buffer primario
InsertRow() :Inserisce una riga vuota nel buffer primario
DeleteRow() :cancella una riga nel buffer primario e la sposta nel buffer “Delete Buffer”
Filter() :filtra il buffer secondo i criteri impostati
Reset() :pulisce tutti i dat contenuti nella DataWindow, non ha effetto sui dati del DB
RowsMove() :permette di spostare righe da un buffer ad un altro
RowsCopy() :copie le righe da un buffer ad un altro
RowsDiscard() :scarta le righe da un buffer, non ha effetto sui dati memorizzati nel DB
RowCount() :restituisce il numero di righe memorizzate nel buffer primario
ModifiedCount() :restituisce il numero di righe modificate nel buffer primario e del “Filter Buffer”
FilteredCount() :restituisce il numero di righe memorizzate nel “Filter buffer”
DeletedCount() :restituisce il numero di righe memorizzate nel “Delete Buffer”