Parametro alla query

di il
11 risposte

Parametro alla query

Buongiorno a tutti,
chiedo il vostro aiuto

leggo una cartella Excel, recupero il codice articolo (CodArt) che poi passo come parametro alla query (Articolo)
La procedura non va in errore, termina correttamente, però non passo correttamente il parametro quindi la query è sempre vuota

sono ore che ci sbatto la testa ma non ne esco
Grazie 

    IF xls.GetCellValue(r,c).ToString <> ' ' THEN
    BEGIN
    CodArt := xls.GetCellValue(r,c);
    
     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;

11 Risposte

  • Re: Parametro alla query

    01/04/2023 - Robert59 ha scritto:


    UniDoc.ParamByName('Articolo').AsString := ('CodArt');

    Questa istruzione non ha molto senso, almeno che tu non voglia passare la stringa ‘CodArt’ come valore così com'è, invece del valore che si trova nella variabile CodArt.

  • Re: Parametro alla query

    Io voglio passare il contenuto di CodArt

  • Re: Parametro alla query

    Quindi CodArt

  • Re: Parametro alla query

    Esatto

  • Re: Parametro alla query

    Ecco… quindi cosa scriverai?

  • Re: Parametro alla query

    UniDocRTAG.ParamByName('Articolo').AsString := CodArt;

  • Re: Parametro alla query

    Capito la differenza tra una stringa costante e una variabilr? 

    ‘Roberto’ e Roberto

    in un programma non sono la stessa cosa.

    Sono le basi del linguaggio che andrebbero studiate prima di programmare sui libri, non sul forum.

  • Re: Parametro alla query

    Hai ragione, ma credimi so la differenza tra costante e variabile

    quello che manda in confusione sono comandi come questo:

    xls.SetCellValue(r,13,UniDoc.Fieldbyname('cod_loc').AsString);

    vedi in questo caso utilizzo la variabile ma però devo metterla tra parentesi ed apice

    Grazie mille

  • Re: Parametro alla query

    Tra parentesi il parametro si attende una stringa.

    Può comunque essere una costante o una costante

    Sono comunque dubbi che indicano che non hai chiare le nozioni di base

  • Re: Parametro alla query

    01/04/2023 - Robert59 ha scritto:


    vedi in questo caso utilizzo la variabile ma però devo metterla tra parentesi ed apice

    No, non stai usando una variabile solo scrivendola in altro modo, ma stai passando un parametro sottoforma di stringa a un metodo.

    Se io scrivo

    var
      CodLoc: string;
    begin
      CodLoc := UniDoc.Fieldbyname('cod_loc').AsString;
    end;

    il codice funziona, ma funzionerebbe anche se io scrivessi

    var
      MioCodice: string;
    begin
      MioCodice := UniDoc.Fieldbyname('cod_loc').AsString;
    end;

    Il nome della variabile lo puoi cambiare a tuo piacimento, e rappresenta il contenitore dove intendi salvare un valore, specificato in modo letterale o recuperato da un funzione, da un metodo, da una proprietà, ecc.

    Se invece scrivo questo:

    var
      MioCodice: string;
    begin
      MioCodice := UniDoc.Fieldbyname('MioCodice').AsString;
    end;

    non funzionerà mai, perché il valore ‘MioCodice’ non è la variabile MioCodice: si tratta di una stringa che, passata come parametro, indica al DataSet (UniCod) e in particolare al suo metodo FieldByName che vuoi recuperare il valore del campo che si chiama “MioCodice”, in particolare come stringa (AsString), e quel campo nella tabella non esiste!

    In sintesi, un conto è il nome della variabile che usi, e quello lo definisci a tuo piacere perché si tratta di un'area di memoria etichettata come preferisci dove vai a salvare un valore, un conto è un valore stringa che passi a una funzione per identificare in modo specifico un campo (ma vale per qualsiasi altro valore/oggetto) del quale vuoi recuperare il valore.

    Il fatto che il nome fosse uguale tra stringa e variabile è puramente incidentale.

    Detto questo, non si può esimersi dal sottolineare che tutta questa roba è l'ABC della sintassi e delle nozioni che si devono conoscere prima di scrivere programmi. Se persistono questi dubbi, sicuramente avanzare nella scrittura di altro codice porterà a incontrare ben altri problemi e ulteriori ostacoli, in quanto è notorio che prima di correre si impara a camminare.

    Ciao! :)

  • Re: Parametro alla query

    Roberto, il succo della questione è in questa frase di Alka

    …non si può esimersi dal sottolineare che tutta questa roba è l'ABC della sintassi e delle nozioni che si devono conoscere prima di scrivere programmi…

    Anche se in un forum possono starci delle domande di base, si parte dal presupposto che l'ABC si conosca altrimenti non si può neanche intavolare un discorso.

    E' come “imparare a scrivere” prima di discutere di cosa mettere in un tema …

    Tu hai scritto

    credimi so la differenza tra costante e variabile

    ma credimi tu, non l'hai chiara.

Devi accedere o registrarti per scrivere nel forum
11 risposte