Invece che incartarti sui problemi del DataGrid ti conviene eliminare tutto in un solo colpo usanod un oggetto ADODB.Command oppure direttamente dalla connessione ADO.
Scegliere poi i record da eliminare utilizzando
numberofrow = DataGrid1.ApproxCount
mi pare quanto meno temerario, ed è comunque inutile se fai come sopra.
Il modo SICURO per eliminare correttamente dei record è riferirsi a questi utilizzando la chiave primaria, visto che c'è e puoi utilizzarle.
Naturalmente il tutto 'condito' all'interno di una transazione. Ovvero:
codice:
Dim bOnTransaction As Boolean
Dim sSQL As String
Dim oCursorLocation As integer
On Error Goto ERR_HANDLER
oCursorLocation = cs.CursorLocation ' prendo nota dell'impostazione esistente
cs.CursorLocation = AdUseServer
cs.BeginTrans
bOnTransaction = True
' prima eliminazione
sSQL = "DELETE FROM tabella1 WHERE ChiavePrimaria = " & pk
cs.Execute(sSQL)
' seconda eliminazione
sSQL = "DELETE FROM tabella2 WHERE ChiavePrimaria = " & pk
cs.Execute(sSQL)
cs.CommitTrans
cs.CursorLocation = oCursorLocation ' rimetto tutto a posto
' se sono qui, tutto è andato bene!
On Error Goto 0
Exit Sub
ERR_HANDLER:
' Qualcosa è andato storto, annullo tutto
If bOnTransaction Then
cs.CursorLocation = oCursorLocation
cs.RollBackTrans
End If
Ho scritto al volo, quindi verifica bene PRIMA
Ovviamente dovrai poi fai il requery dei 2 recordset, distruggere gli oggetti, insomma le solite cose.