Salve a tutti.
Ho un problema da un paio di giorni e non riesco a risolverlo.
Programmo in ambiente VB.6
La mia applicazione deve gestire alcune tabelle in un DB SQL Server.
Precisamente deve dare la possibilità di aggiungere righe, modificarle e cancellarle.
Lavora sa due tabelle una contiene vari dati e per ogni riga esiste una chiave primaria, autoincrementale e non duplicabile, contenente il progressivo del cliente.
L'altra contiene descrizioni utili per lanciare delle store procedure e anche qui una chiave primaria autoincrementale e non duplicabile.
Il mio problema è questo.
In un datagrid collego le due tabelle in base al progressivo e l'utente una volta selezionata una riga nella 1° tabella deve poterla eliminare, fino qui nessun problema, ma automaticamente tutte le righe della 2° tabella con quel progressivo devono essere eliminate in maniera corretta per tenere il DB pulito in un altro datagrid.
Se ad esempio esistono tre righe con lo stesso progressivo, la prima la elimina correttamente, ma appena chiamo la delete sulla 2° riga mi visualizza a video il seguente messaggio: "impossibile individuare la riga specificata per l'aggiornamento, E' possibile che alcuni valori siano stati modificati dopo l'utlima operazione di lettura."
Vi posto il codice che non funziona e la connessione al DB:
QUI POPOLO I DUE DATAGRIDnessun problema)
'Imposto le variabili cs e rs come istanze degli oggetti Connection e Recordset'
Set cs = New ADODB.Connection
Set csDesMod = New ADODB.Connection
Set rs2 = New ADODB.Recordset
Set rsflag = New ADODB.Recordset
cs.Open Stringa
cs.CursorLocation = adUseClient
rs2.Open "SELECT * FROM XXX_Analisi_Skipper", cs, adOpenKeyset, adLockPessimistic
Set DataGrid1.DataSource = rs2
DataGrid1.Refresh
csDesMod.Open Stringa
csDesMod.CursorLocation = adUseClient
'********INNER JOIN SQL
sql = "SELECT dbo.XXX_Analisi_Skipper_Flags.id, dbo.XXX_Analisi_Skipper.id AS Expr1, dbo.XXX_Analisi_Skipper_Flags.flag1, dbo.XXX_Analisi_Skipper_Flags.desflag1, " & _
"dbo.XXX_Analisi_Skipper_Flags.flag2 , dbo.XXX_Analisi_Skipper_Flags.desflag2 " & _
"FROM dbo.XXX_Analisi_Skipper_Flags INNER JOIN " & _
"dbo.XXX_Analisi_Skipper ON dbo.XXX_Analisi_Skipper_Flags.id = dbo.XXX_Analisi_Skipper.id " & _
"ORDER BY dbo.XXX_Analisi_Skipper_Flags.id"
rsflag.Open sql, csDesMod, adOpenKeyset, adLockPessimistic
Set DataGrid3.DataSource = rsflag
DataGrid3.Refresh
QUI AVVIO L'ELIMINAZIONE:
numberofrow = DataGrid1.ApproxCount
numberofrow3 = DataGrid3.ApproxCount
If (numberofrow > 1) Then
If (rs2.Supports(adDelete) And rsflag.Supports(adDelete)) Then
If MsgBox("Confermi cancellazione riga?", vbYesNo) = vbYes Then
Cancella = True
controllo = 0
Do While (controllo <> numberofrow3)
DataGrid3.Row = controllo
If (LTrim(RTrim(DataGrid1.Columns(8).Text)) = LTrim(RTrim(DataGrid3.Columns(0).Text)))
Then
rsflag.Delete
rsflag.Update
controllo = -1
numberofrow3 = numberofrow3 - 1
rsflag.Update
DataGrid3.Refresh
End If
controllo = controllo + 1
Loop
......
.....
.....
L'errore come potete immaginare si presenta quando viene chiamato per la 2° volta rsflag.delete
Vi prego illuminatemi