Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Settembre 27, 2022, 06:59:40 pm

Titolo: [Risolto] Errore Open DB, con modulo dati
Inserito da: petrusic - Settembre 27, 2022, 06:59:40 pm
E' venuto il momento di provare a modificare il contenuto delle tabelle del mio DB.
Ma la prima prova di cancellazione di record da una tabella è fallita.
Riportare qui i dettagli di questa nuova tegola sarebbe troppo lungo ed impegnativo. Ho perciò realizzato un programmino che avrebbe la possibilità di inserire, aggiornare o cancellare record, attraverso il click su uno dei 3 pulsanti presenti nella Form1.
Naturalmente ho provato fino ad ora solamente la cancellazione di un record, ottenendo naturalmente lo stesso errore di prima, nell'altro programma.
L'errore che  mi si manifesta è:
Citazione
Il progetto ProvaSQLexec ha sollevato una eccezione di classe "Exception" con mesaaggio: Can not open a Resultset."
L'istruzione che provoca tale errore è indicata da "<---"
Codice: [Seleziona]
DataModule1.ZConnection1.Database:= dbCorr;
        DataModule1.ZConnection1.Connected:= True;
        DataModule1.ZQuery1.Active:= False;
        sql:= 'DELETE FROM causalifreq WHERE IdCauFreq = (SELECT max(IdCauFreq) FROM causalifreq)';
        WriteLn('sql= "' + sql + '"');
        DataModule1.ZQuery1.SQL.Text:= sql;
        WriteLn('DataModule1.ZConnection1.Database= "' + DataModule1.ZConnection1.Database + '"');
        WriteLn('DataModule1.ZQuery1.SQL.Text= "' + DataModule1.ZQuery1.SQL.Text);
        try
          DataModule1.ZQuery1.Active:= True;        '<---------------------------------------------------- ERRORE'
          except
            on E: Exception do
            msgErro:= 'ERRORE durante la Open del DB "' + dbCorr + '"' + System.lineending + System.lineending + IntToStr(E.HelpContext) + ': ' + E.Message
        end;                                               
Non so se qualcuno ha incontrato una tale difficoltà. Io ci ho lavorato sopra, con le mie modeste conoscenze, per 2 giorni, ma non sono riuscito a capire dove e come intervenire. Spero che mi possiate aiutare.



Titolo: Re:Errore Open DB, con modulo dati
Inserito da: DragoRosso - Settembre 27, 2022, 10:01:45 pm
Invece di usare

Codice: [Seleziona]
DataModule1.ZQuery1.Active:= True; 

usa

Codice: [Seleziona]
DataModule1.ZQuery1.ExecSql; 

Quando l'istruzione SQL non riporta un dataset (come nel caso del DELETE) è necessario usare il metodo "ExecSql".

Ciao
Titolo: Re:Errore Open DB, con modulo dati
Inserito da: petrusic - Settembre 28, 2022, 05:32:18 pm
Invece di usare
Codice: [Seleziona]
DataModule1.ZQuery1.Active:= True; 
usa
Codice: [Seleziona]
DataModule1.ZQuery1.ExecSql; 
Quando l'istruzione SQL non riporta un dataset (come nel caso del DELETE) è necessario usare il metodo "ExecSql".

Grazie, ha funzionato. Dalla tua nota capisco che per eseguire il comando DELETE non occorre eseguire, prima della ".ExecSql", la ".Active=True".
Io avevo capito che il comando ".Active=True". permette di eseguire la Open del DB, invece scopro che non è così. Allora  qual'è la sua funzione?
Titolo: Re:Errore Open DB, con modulo dati
Inserito da: DragoRosso - Settembre 28, 2022, 09:59:05 pm
Codice: [Seleziona]
DataModule1.ZQuery1.Active:= True;
Questo esegue la query contenuta nella porprietà SQL.TEXT di ZQUERY1.
La query DEVE RITORNARE un insieme di dati anche se vuoto (dataset), altrimenti viene generato l'errore che hai evidenziato.

Codice: [Seleziona]
DataModule1.ZQuery1.ExecSql; 
Questo invece esegue il comando presente sempre nella proprietà SQL.TEXT di ZQUERY1.
Deve essere usato quando il comando SQL non ritorna un insieme di dati (come il DELETE o altri comandi SQL come i DDL).

Ciao
Titolo: Re:Errore Open DB, con modulo dati
Inserito da: petrusic - Ottobre 02, 2022, 03:22:51 pm
Capito, grazie.