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 è:
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 "<---"
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.
Invece di usare
DataModule1.ZQuery1.Active:= True;
usa
DataModule1.ZQuery1.ExecSql;
Quando l'istruzione SQL non riporta un dataset (come nel caso del DELETE) è necessario usare il metodo "ExecSql".
Ciao
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.
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