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.
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;
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.
- Scrittura del comando tramite l'oggetto SQL;
- Definizione delle condizioni variabili;
- Passaggio dei parametri variabili;
- Compilazione del comando.
Scrittura del comando SQL/WSQL
La scrittura del comando è eseguita mediante l'oggetto SQL di SQLCMD.
1. // ...
2. With WYDM.SqlServices, WYDM Do
3. Begin
4. SqlCMD.Clear;
5. SqlCMD.Sql.Add('SELECT * FROM TABELLA WHERE ...');
6. // ...
7. End;
Definizione delle condizioni variabili
Le condizioni variabili aggiungono condizioni al comando SQL/WSQL in modo dinamico.
SqlCmd.AC('COLONNA1=?1?', ctAND, Condizione1);
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.
SqlCmd.AC('TIPOLOGIA_ALIAS<>1',ctAND,(cb_AliasCheck.Checked = True));
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.
1.SqlCmd.AV(WYAM.GlobalManager.GlobalID);
2.SqlCmd.AV(Valore1);
3.SqlCMD.AN;
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>
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?);
Un altro metodo per passare i valori ai parametri variabili è quello del Fluent Interfaces, ovvero :
SqlCmd.FAV(Valore1).FAV(Valore2).FAV(Valore3);
Vediamo ora un esempio di codice completo per la scrittura del comando.
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;
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.
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;
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.
SqlCMD.BuildSQL('Descrizione comando sql');
Siamo ora pronti ad eseguire il comando.
Nessun commento:
Posta un commento