Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326

    [delphi] da IBQuery a IBDataset

    Ciao a tutti,

    eseguo una IBQuery premendo un pulsante e ne visualizzo il suo risultato in una DBGrid.
    codice:
        IBQuery1.Close;
        IBQuery1.SQL.Clear;
        IBQuery1.SQL.add('SELECT *');
        IBQuery1.SQL.add(' from Movimenti');
    
        if DBEdit1.Text <> '' then
         begin
         IBQuery1.SQL.add(' where');
         IBQuery1.SQL.add(' fornitore like :PARAM1 ');
         IBQuery1.ParamByName('Param1').AsString:= DBEdit1.Text ;
         end;
    
        IBQuery1.SQL.Add(' ORDER BY data');
    
        IBQuery1.Open ;
    questo codice funziona bene, se DBEdit1.Text e' = '' vengono visualizzati tutti i record della tabella Movimenti, se invece DBEdit1.Text e' = '13' vengono visualizzati solo i record del fornitore '13'......qui e' tutto ok!

    ...e' nata l'esigenza di poter modificare i valori di questa query, quindi ho sostituito l'oggetto IBQuery con un Oggetto IBdataset.
    codice:
        IBDataset1.Close;
        IBDataset1.SelectSQL.Clear;
        IBDataset1.SelectSQL.add('SELECT *');
        IBDataset1.SelectSQL.add(' from Movimenti');
    
        if DBEdit1.Text <> '' then
         begin
         IBDataset1.SelectSQL.add(' where');
         IBDataset1.SelectSQL.add(' fornitore like :PARAM1 ');
         IBDataset1.ParamByName('Param1').AsString:= DBEdit1.Text ;
         end;
    
        IBDataset1.SelectSQL.Add(' ORDER BY data');
    
    //    mia:= IBdataset1.selectsql.text;
    
        IBDataset1.Open ;
    con questo codice se DBEdit1.Text e' = '' vengono visualizzati tutti i record della tabella Movimenti, se invece DBEdit1.Text e' = '13' non viene ottenuto alcun risultato! IBdataset e' vuoto!

    come se avesse problema con il parametro che gli passo.
    ho controllato con il debugger il valore IBdataset1.selectsql.text e questo era = 'select * from fornitori where fornitore like :PARAM1 ORDER BY data'

    a voi e' capitato mai?

    grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    I Params usati da IBDataSet non sono i parametri standard che si trovano in tutti gli altri componenti, ma sono tipi specifici pensati per InterBase.

    Ho lavorato pochissimo con IBDataSet, quindi non vorrei dire un'eresia, ma trattandosi di un'implementazione particolare spero che il reperimento del parametro attraverso il nome non distingua tra maiuscole e minuscole ('Param1' <> 'PARAM1').

    Inoltre, il componente che utilizzo abbastanza spesso (SimpleDataSet) per rappresentare un DataSet esegue una "pulizia" dei valori dei parametri (probabilmente perchè li ricrea) quando lo statement SQL cambia.
    Nel tuo codice, vedo che prima definisci un parametro, poi li assegni un valore e successivamente modifichi di nuovo lo statement SQL aggiungendo la clausola ORDER BY: sei sicuro che in quel momento, il parametro ha ancora il valore precedentemente assegnato?

    Per entrambi i casi, puoi verificare in fretta usando la finestra di Evaluate di Delphi inserendo una chiamata alla funzione ParamByName e, in caso positivo, cercando di ispezionarne il valore per vedere se è stato mantenuto.

    Purtroppo non mi viene in mente altro.

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

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Per entrambi i casi, puoi verificare in fretta usando la finestra di Evaluate di Delphi inserendo una chiamata alla funzione ParamByName e, in caso positivo, cercando di ispezionarne il valore per vedere se è stato mantenuto
    scuasami, da dove devo aprire questa finestra Evaluate?...non e' la finestra whach list?

    ho gia provato a cambiare in minuscolo...ma non cambia nulla.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Facendo clic con il tasto destro sul codice (a runtime), puoi richiamare la finestra di Evaluate attraverso la voce di menu [Debug|Evaluate/Modify].

    Nella finestra viene copiata l'espressione "puntata" nel codice, ma può essere modificata a piacimento per conoscere il valore di una determinata espressione (chiamata a funzione, valore di una proprietà, riferimento ad un oggetto, ecc.).
    Nel caso di variabili e campi, i valori possono anche essere modificati.

    L'uso degli strumenti di debugging è essenziale per poter verificare a fondo il funzionamento di un programma ed individuare le cause di eventuali problemi.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    bene,...ho imparato quest'altra cosa! un altro prezioso suggerimento! grazie.


    sono riuscito a risalire al problema. la causa era (come avevi diagnosticato) l'aggiunta della successiva riga

    IBDataset1.SelectSQL.Add(' ORDER BY data');


    eliminando questa riga funziona bene.

    quindi ho risolto assegnando il valore ai vari parametri subito dopo la composizione della query.

    grazie

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 © 2025 vBulletin Solutions, Inc. All rights reserved.