Willino Blog

Sono un ingegnere informatico, appassionato di fotografia, chitarra acustica, micologia e Tennis Tavolo. In questo blog cercherò di raccontare eventi ed esperienze che in qualche modo potrebbero risultare utili a tutti.

domenica 19 aprile 2009

Preparazione di comandi WSQL

Questa guida di riferimento è indirizzata agli sviluppatori WY

Il modeler

WY dispone di un oggetto SQLCMD, attributo dell'oggetto WYDM (il modulo dati base per le applicazioni WY) progettato per la creazione di comandi SQL e WSQL.

La struttura essenziale della classe TWYSQLModeler (SQLCMD ne è un'istanza) è la seguente.

• Esempio Object Pascal
  1.  TWYSQLModeler = Class Sealed(TWYObject)
2. Public
3. SQL : TStringList;
4. Procedure Clear;
5. Function FAV(Const aValue : Variant;
6. AddQuotes : Boolean = True): TWYSQLModeler;
7. Function AV (Const aValue : Variant;
8. AddQuotes : Boolean = True): Boolean;
9. Function AN : Boolean;
10. Function AC (Const aCondition : String;
11. ConditionType : TConditionType;
12. DoItOnlyIf : Boolean) : Boolean;
13. Function BuildSQL (aOwner : String = '';
14. AutoClear : Boolean = False): String;
15. End;
Dichiarazione interfaccia TWSQLModeler

Della dichiarazione di cui sopra presteremo particolare attenzione all'oggetto SQL della riga 3, ai metodi FAV,AV,AC,AN e BuildSQL.

Per meglio comprendere l'utilizzo dell'oggetto, è bene proseguire con la descrizione del processo di creazione.


  1. Scrittura del comando tramite l'oggetto SQL;

  2. Definizione delle condizioni variabili;

  3. Passaggio dei parametri variabili;

  4. Compilazione del comando.

Scrittura del comando SQL/WSQL

La scrittura del comando è eseguita mediante l'oggetto SQL di SQLCMD.


• Esempio Object Pascal
  1.  // ...    
2. With WYDM.SqlServices, WYDM Do
3. Begin
4. SqlCMD.Clear;
5. SqlCMD.Sql.Add('SELECT * FROM TABELLA WHERE ...');
6. // ...
7. End;
Immissione del comando SQL da codice tramite la libreria WY

Definizione delle condizioni variabili

Le condizioni variabili aggiungono condizioni al comando SQL/WSQL in modo dinamico.


• Esempio Object Pascal
SqlCmd.AC('COLONNA1=?1?', ctAND, Condizione1);
Inserimento di una condizione variabile

La riga di questo esempio segue la scritta del comando, ovvero va inserita dopo la riga 6 dell'esempio precedente.

Il parametro in cui è inserito come esempio il valore 'COLONNA1=?1?' dovrà contenere la condizione da passare al comando.

Il parametro ctAND specifica che questa condizione va agginuta al comando con AND.

Il parametro Condizione1 è, infine, lo statement delphi che se vero cosentirà di aggiungere la condizione al comando.


• Esempio Object Pascal
SqlCmd.AC('TIPOLOGIA_ALIAS<>1',ctAND,(cb_AliasCheck.Checked = True));
Condizione variabile dipendente da un controllo della finestra attiva dell'applicazione

In questo esempio al comando viene aggiunta in AND la condizione TIPOLOGIA_ALIAS<>1 solo se il checkbox cb_AliasCheck ha la proprietà checked=true. La condizione dinamica prevede che il comaando SQL abbia al suo interno inserita una richiesta di condizione dinamica del tipo @n@.


Definizione dei parametri variabili

I parametri variabili aggiungono parametri al comando SQL/WSQL in modo dinamico.


• Esempio Object Pascal
  1.SqlCmd.AV(WYAM.GlobalManager.GlobalID);
2.SqlCmd.AV(Valore1);
3.SqlCMD.AN;
Passaggio di tre parametri variabili ad un comando SQL

In questo esempio alle righe 1 e 2 vengono passati due parametri di applicazione, sia globali (WYAM.GlobalManager.GlobalID) che locali (IDTabella). Alla riga 3, invece, viene passato NULL.I tre parametri passati in questo esempio prevedono che il comando SQL abbia al suo interno inserite 3 richieste di valori dinamici del tipo ?n?,ovvero che la corrispondente Query sia così composta :/p>

• Esempio SQL/WSQL
  1.SELECT A.ID_AZIENZA, A.DENOMINAZIONE_AZIENZA
2. FROM APP_AZIENDE A
3. WHERE A.ID_AZIENDA=?1? AND A,CODICE_FISCALE=?2? AND
4. COALESCE(A.AZIENDA_CHIUSA,?3?);
Comando WSQL con 3 richieste di parametri variabili

Un altro metodo per passare i valori ai parametri variabili è quello del Fluent Interfaces, ovvero :


• Esempio Object Pascal
SqlCmd.FAV(Valore1).FAV(Valore2).FAV(Valore3);
Utilizzo dei Fluent Interfaces per il passaggio di parametri variabili al comando

Vediamo ora un esempio di codice completo per la scrittura del comando.


• Esempio Object Pascal
  1.  With WYDM.SqlServices, WYDM Do
2. Begin
3. SqlCmd.Clear;
4. SqlCmd.Sql.Add('SELECT *');
5. SqlCmd.Sql.Add('FROM ');
6. SqlCmd.Sql.Add(' APP_AZIENDE A');
7. SqlCmd.Sql.Add('WHERE A.IDAZIENZA=?1? @1@');
8. SqlCmd.AC('A.DENOMINAZIONE_AZIENDA=?2?', ctAND, Condizione1);
9. SqlCmd.AV(WYAM.GlobalManager.GlobalID);
10. SqlCmd.AV(ValoreColonna2);
11. //...
12. End;
Comando WSQL integrato nel codice

Facciamo ora un esempio più chiaro e complesso in cui con una interogazione in WSQL vogliamo conoscere quali utenti sono stati attivati dopo una certa data. Per eseguire questo comando dobbiamo accertarci che l'utente connesso abbia i permessi di amministratore, altrimenti mostreremo solamente i dati relativi all'operatore connesso.


• Esempio Object Pascal
  1.Var
2. lData : TDateTime;
3.Begin
4. lData:=StrToDateTimeDef('01/01/2008',Date);
5. With WYDM,WYDM.SQLServices Do
6. Begin
7. SqlCMD.Clear;
8. SqlCMD.Sql.Add('SELECT');
9. SqlCMD.Sql.Add(' IDOPERATORE,NOMINATIVO_OPERATORE,');
10. SqlCMD.Sql.Add(' DATA_ATTIVAZIONE');
11. SqlCMD.Sql.Add('FROM');
12. SqlCMD.Sql.Add(' WY_OPERATORI O');
13. SqlCMD.Sql.Add('WHERE');
14. SqlCMD.Sql.Add(' O.IDAPPLICATIVO=?1? AND');
15. SqlCMD.Sql.Add(' O.DATA_ATTIVAZIONE>=?2?');
16. SqlCMD.Sql.Add(' @3@');
17. SqlCMD.AC('O.IDOPERATORE=?3?',ctAND,(Not WYAM.AppUserAdmin));
18. SqlCMD.AV(WYAM.ApplicationID);
19. SqlCMD.AV(lData);
20. SqlCMD.AV(WYAM.AppUserID);
21. SQLCMD.BuildSQL('Operatori nuovi');
22. End;
23.End;
Esempio completo di scrittura comando SQL/WSQL, inserimento di condizioni dinamiche e passaggio di parametri variabili

In questo esempio, la verifica della proprietà WYAM.AppUserAdmin è determinante per l'aggiunta della condizione variabile. Condizione che viene aggiunta (vincolando quindi a mostrare la sola riga dell'operatore connesso) solo se l'utente non è amministratore. E' importante prestare attenzione al fatto che l'ordine di aggiunta dei parametri variabili è strettamente connesso al numero di richiesta di valore dinamico ?n?. Questo significa che il valore lData deve essere aggiunto in seconda posizione, avendo nel comando SQL numero di richiesta pari a ?2?. Notare che il metodo AV ha per parametro in ingresso un Variant e pertanto, oltre al vantaggio di una semplice gestione dei dati passati ai comandi, viene semplificata anche la procedura di conversione dati per il DB.


Compilazione del comando

La compilazione del comando genera un comando SQL completo di parametri e condizioni.


• Esempio Object Pascal
SqlCMD.BuildSQL('Descrizione comando sql');
Compilazione del comando e preparazione all'esecuzione

Siamo ora pronti ad eseguire il comando.

Nessun commento:

ANSA.it - Top News