07/12/2022 - DanieleG ha scritto:
riporto il pezzo di codice dove cancello la targa:
If Open_Connection("SELECT * FROM Tab_Pannello WHERE Targa = '" & sTarga & "'") = True Then
With rsPiazzola ----? (recordset inizializzato nella Open_Connection)
If .RecordCount Then
.Delete
eventLog "TERMINALE PESA - Eliminazione Targa da Pannello: " & sTarga
End If
End With
chiudiConnessione 8
End If
Io onestamente non gestirei la cancellazione in questo modo, ossia sfruttando il cursore del record acquisito in fase di lettura e verificando il numero di record, che tra l'altro non è una informazione che viene sempre restituita (a volte basta un SET NOCOUNT ON per bloccarla).
Dovresti predisporre dei metodi per le operazioni CRUD sul tuo database che siano indipendenti tra loro, ovvero scrivere una procedura che - data una targa in ingresso - recuperi tutti i dati relativi tramite la SELECT, magari verificando anche quanti sono i record caricati (non ho capito se la targa è anche una chiave univoca o se ci possono tendenzialmente essere più targhe con stesso valore nella tabella).
In secondo luogo, non cablerei il valore all'interno dello statement SQL usando la concatenazione di stringhe, ma farei sempre e solo uso dei parametri, una tematica spesso incontrata su questo forum e caldamente suggerita per evitare effetti collaterali facilmente aggirabili, oltre a SQL Injection e altre vulnerabilità.
Alla funzione che individua la targa tramite SELECT ne affiancherei un'altra che effettua la cancellazione usando lo statement SQL appropriato, ossia scrivendo una query del tipo “DELETE FROM Tab_Pannello WHERE Targa = @Targa” da lanciare quando è necessario eliminare questa targa dal database.
Ad ogni operazione su DB, deve corrispondere una procedura/funzione che faccia le seguenti cose:
- apertura di una nuova connessione al DB SQL Server,
- valorizzazione dei parametri richiesti (es. targa),
- esecuzione dello statement SQL (es. INSERT, SELECT, DELETE, UPDATE),
- trasferimento di eventuali risultati e valori di ritorno, se richiesti,
- chiusura della connessione (forzata, ovvero garantita in qualsiasi contesto, anche in caso di errore).
Prova a rivedere la tua implementazione con questi suggerimenti e aggiornaci sull'esito.
Ciao! :)