--- Citazione da: DragoRosso - Settembre 27, 2021, 05:02:51 pm ---A parte che dopo l'aperitivo ero un pò fuori io ... eventualmente era ErrorCode ::)
--- Termina citazione --- Non cambia niente, perchè, già in fase di scrittura, dopo avere digitato " IntToStr(E.E", prermendo |CTRL|+|Barra Spazio| si apre la finestra d'aiuto dove compare un solo termine che inizia con "E" (Equals), quindi qualsiasi altro termine non viene riconosciuto.
Ho provato l'ultimo tuo codice di suggerimento:
--- Codice: --- try Form1.ZQuery1.Open; except on e: exception do begin if e is EExternal then begin ShowMessage(inttostr((E as EExternal).ExceptionRecord^.ExceptionCode)); end; end; end;
Anche alla riga [i]ShowMessage[/i] il compilatore da Errore [quote] utilmiedb.pas(62,47) Error: identifier idents no member "ExceptionRecord"[/quote]
--- Termina codice ---
DragoRosso:
--- Citazione da: petrusic - Settembre 27, 2021, 06:51:25 pm ---Anche alla riga ShowMessage il compilatore da Errore
--- Citazione ---utilmiedb.pas(62,47) Error: identifier idents no member "ExceptionRecord" --- Termina citazione ---
--- Termina citazione ---
Mi sono dimenticato di riportare che quel record è definito solo x Win ....
Rimane solo la verifica di cui al precedente post.
Ciao
petrusic:
Nel mio piccolo mondo di esperienza ho fatto una prova, comandando una open che mi producesse una condizione di nessun record trovato, ottenendo così zero record letti:
--- Codice: --- var . . . tot: Integer = 0; sql:= 'SELECT DtCoMovg FROM riepmovg WHERE StaDtMovg = "K" ORDER BY DtCoMovg'; // StaDtMovg = "K" (valore impossibile) try Form1.ZQuery1.Open; except on E: Exception do begin WriteLn('ERRORE nella OPEN della tabella "ContabFamdb.riepmovg" - ' + IntToStr(E.HelpContext) + ': ' + E.Message); swdbOpenErro:= True; end; end; tot:= Form1.ZQuery1.RecordCount; . . .
--- Termina codice --- Ho avviato il programma, ma ... ho incassato due sorprese. - La prima mi andrebbe bene perchè la Open non ha prodotto errori. - La seconda invece mi ha lasciato di stucco perchè ho trovato la variabile "tot", dopo l'esecuzione dell'istruzione RecordCount, valorizzata a 9, come se la Open avesse trasferito nel buffer di lettura 9 record. Pur essendo sicuro dell'inesistenza di record con StaDtMovg = "K", ho eseguito la select in ambito DBBrowser che, a conferma di quanto ricordo, mi ha fornito la seguente risposta:
--- Citazione ---Risultato: 0 righe ritornate in 11ms Alla riga 1: SELECT DtCoMovg FROM riepmovg WHERE StaDtMovg = "K" ORDER BY DtCoMovg --- Termina citazione ---
petrusic:
Chiedo scusa per avere postato una risposta inutile. Nel mio codice manca una riga:
--- Codice: --- sql:= 'SELECT StaDtMovg FROM riepmovg WHERE StaDtMovg = "K" ORDER BY DtCoMovg'; Form1.ZQuery1.SQL.Text := sql; // <-- Avevo dimenticato Questa try Form1.ZQuery1.Open; . . .
--- Termina codice --- La open ora funziona sempre, cioè, come prima non produce Errore, ma sono in grado di capire che non c'è alcun record che risponda ai parametri impostati nella Select.
Posso dire che, alla fine, il risultato ottenuto risponde alle mie necessità e posso evitare di comandare la lettura di record inesistenti. Eseguo una Select in più ed allungo un pochino il programma, ma può andare bene lo stesso.