Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135

    [Delphi] - Query parametriche, moooolto parametriche

    problemozzo che mi blocca temporaneamente..

    ho una funzione, questa funzione esegue una query.. ogni volta che richiamo questa funzione gli passo alcuni parametri... parametri che poi vengono usati x eseguire la query.. ve la mostro..

    Function tform1.LeggiCampoChar(Tabella:String;chiave:string ;Camporit:string;ValChiave:Variant):String;

    Begin
    If (ValChiave = '') Or (valchiave = null) Then
    LeggiCampoChar := '';

    qleggicampochar.Close;

    qleggicampochar.SQL.Add('SELECT :chiave,:Camporit');
    qleggicampochar.SQL.Add(' FROM :tabella');
    qleggicampochar.SQL.Add(' WHERE :chiave = :ValChiave');

    qleggicampochar.ExecSQL;
    qleggicampochar.Open;
    If qleggicampochar.RecordCount > 0 Then
    begin
    qleggicampochar.First;
    // qleggicampochar.FieldDefList.Add ;
    // LeggiCampoChar := qleggicampocharcamporit.value;
    end
    Else
    LeggiCampoChar:= 'Elemento non codificato!'

    End;

    (lasciate perdere le 2 righe di codice escluse, quelle le devo guardare dopo, prima devo riuscire a far partire la query)

    prima di richiamare la funzione assegno ovviamente ai paramer della query i vari parametri che passo nella funzione..

    solo che non la esegue..

    se il codice sql lo scrivo nelle strings della query, mi da un errore nella proposizione from (non gli sta bene che metto un parametro nella from)..

    c'è una soluzione? vorrei evitare di fare 4 query diverse quando posso usarne 1 sola...

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    nessuno ha mai fatto query parametriche?

  3. #3
    codice:
     
    qleggicampochar.SQL.Add('SELECT :chiave,:Camporit'); 
    qleggicampochar.SQL.Add(' FROM :tabella'); 
    qleggicampochar.SQL.Add(' WHERE :chiave = :ValChiave');
    Corretto:

    codice:
     
    qleggicampochar.Close;
    
    qleggicampochar.SQL.Clear;
    qleggicampochar.SQL.Add(' SELECT ' + chiave  + ' , '+ Camporit +'); 
    qleggicampochar.SQL.Add(' FROM   ' + tabella + ' ); 
    qleggicampochar.SQL.Add(' WHERE  ' + chiave  + '= :ValChiave_In'); 
    
    qleggicampochar.ParamByName ('ValChiave_In').asVariant :=ValChiave; 
    
    qleggicampochar.Open;
    Fai attenzione alla distinzione tra "passaggio di parametri ad una funzione" e "passaggio di parametri ad una query".

    Attraverso il metodo ParamByName assegni alla variabile ValChiave_In' il valore desiderato .

    Ricordati che una query o la esegui (ExecSQL) o la apri (Open), usare entrambe le chiamate é uno spreco di lavoro per il server.


  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    Molto brevemente, lo scopo dei parametri in una query SQL è quello di poter definire (ed eventualmente "preparare") una query affinchè sia possibile eseguirla più volte (ottimizzando il processo) sostituendo volta per volta i parametri con i valori interessati.

    Non puoi utilizzare i parametri se non al di fuori della problematica che ti ho descritto sopra.

    Tieni comunque a mente che lo statement SQL non è altro che una stringa, quindi puoi definire tale stringa come vuoi, ad esempio creando una procedura in Delphi che identifichi i campi da utilizzare, magari ispezionando le selezioni visuali dell'utente, e poi in base a tali selezioni costruisca nel modo opportuno la stringa SQL che verrà poi memorizzata nella proprietà Query.SQL.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    Ottimo, grazie raga ora funge..

    un'altra mia perplessità.

    siccome le stringhe sql le scrivo da codice e non dal tstring dell'adoquery non posso addare i campi della query..

    come faccio?

    mi spiego meglio..

    se usi una query, scrivi una select.poi vai sui fields della query e fai add... ti carica automaticamente tutti i campi che vengono usati nella query.
    ora io ho bisogno del valore del campo descrizione che carico nella query, come faccio a addare i fields della query per prenderlo?

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,333
    Originariamente inviato da Oasis81
    siccome le stringhe sql le scrivo da codice e non dal tstring dell'adoquery non posso addare i campi della query..
    Certo che il tuo "slang" non è di facile comprensione...

    Purtroppo devi avere una query valida all'interno del componente se vuoi che sia possibile ottenerne la struttura (i campi) risultante.

    Inserisci una query di esempio nel componente in modo da avere tutti i campi che generalmente vengono utilizzati a disposizione per associarvi, a designtime, i Data Control che desideri; a runtime, lo statement SQL della query viene poi ridefinito tramite il codice opportuno.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    Originariamente inviato da alka
    Certo che il tuo "slang" non è di facile comprensione...

    Purtroppo devi avere una query valida all'interno del componente se vuoi che sia possibile ottenerne la struttura (i campi) risultante.

    Inserisci una query di esempio nel componente in modo da avere tutti i campi che generalmente vengono utilizzati a disposizione per associarvi, a designtime, i Data Control che desideri; a runtime, lo statement SQL della query viene poi ridefinito tramite il codice opportuno.

    Ciao!
    mi scuso x lo slang

    ci son gia riuscito cosi

    qleggicampochar.FieldByName ('Descrizione').Value

    than lo stesso

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.