Comandi query parametrizzati

di il
5 risposte

Comandi query parametrizzati

Buongiorno a tutti,
posso parametrizzare comandi query?

mi spiego meglio, allegando righe di codice

in alternativa a alle righe esposte sotto, potrei pensare di avere una tabella, dove all'interno di un campo avere:
SELECT m.cd_tag, m.id_doc, m.cd_itm, m.dta_mvt, t.stock, t.cd_loc, l.erp

ed invece che scriverlo, passarglielo come parametro?

così anche per il comando FROM, INNER JOIN, WHERE ecc… 

UniDoc.Close;
     UniDoc.SQL.Clear;
     UniDoc.SQL.Add('     SELECT m.cd_tag, m.id_doc, m.cd_itm, m.dta_mvt, t.stock, t.cd_loc, l.erp ');
     UniDoc.SQL.Add('       FROM x2qtr.x9doc AS m                                                  ');
     UniDoc.SQL.Add(' INNER JOIN x2qtr.x9tag AS t ON (m.cd_tag = t.cd_tag)                         ');
     UniDoc.SQL.Add(' INNER JOIN x2qtr.x9loc AS l ON (l.cd_loc = t.cd_loc)                         ');
     UniDoc.SQL.Add('      WHERE m.cd_itm=:Articolo                                                ');
     UniDoc.SQL.Add('        AND m.cd_mvt= ''S.CLI''                                               '); 
     UniDoc.SQL.Add('        AND t.stock > 0                                                       '); 
     UniDoc.SQL.Add('        AND l.erp = ''01''                                                    '); 
     UniDoc.SQL.Add('   ORDER BY m.dta_mvt DESC LIMIT 1                                          '); 
     UniDoc.ParamByName('Articolo').AsString := ('CodArt');
     UniDoc.Open;

5 Risposte

  • Re: Comandi query parametrizzati

    Non ho capito dove vuoi arrivare ma in un DB (tabella/campo) puoi avere quello che vuoi.

    Lo leggi con una apposita query e lo passi come stringa per formare un'altra query.

    Ma mi sembra un “accrocchio” strano e senza senso.

    (P.S. Se tu avessi avuto veramente chiara la differenza tra stringa variabile e costante, non avresti fatto questa domanda)

  • Re: Comandi query parametrizzati

    Tipo:

    tabQuery.sql.clear

    Tabquery.sql.loadfromfile(…)

    Così?

  • Re: Comandi query parametrizzati

    05/04/2023 - Robert59 ha scritto:


    in alternativa a alle righe esposte sotto, potrei pensare di avere una tabella, dove all'interno di un campo avere:
    SELECT m.cd_tag, m.id_doc, m.cd_itm, m.dta_mvt, t.stock, t.cd_loc, l.erp

    Ignoro completamente i motivi di una simile scelta, che richiederebbe letteralmente di eseguire una query per poter ottenere la query da eseguire, e posso dire per esperienza che non abbia alcun senso, ma se questo è l'obiettivo si può fare tranquillamente: così come ora stai facendo la SELECT dei campi che ti servono dalla tabella finale, indirizza la tua SELECT alla tabella che contiene la query da eseguire per ottenere il suo testo, salvalo in una variabile (es. QueryText) e poi impostalo come statement SQL della query finale che ottiene i dati.

    Ad esempio,

    UniDoc.Close();
    UniDoc.SQL.Text := QueryText; // qui lo statement SQL precedentemente caricato
    UniDoc.Active();

    Potrebbe invece avere più senso definire le query come risorse, almeno parziali, con poco codice e usando poi TResourceStream per recuperare lo script SQL incorporato nell'eseguibile.

    Ciao! :)

  • Re: Comandi query parametrizzati

    Grazie

    risposte molto interessanti

    prometto di approfondire la proposta di Alka

  • Re: Comandi query parametrizzati

    Sono d'accordo con alka sul “non senso”

Devi accedere o registrarti per scrivere nel forum
5 risposte