Dim Query As String
Query = "SELECT * FROM tabella WHERE campo = 1"
form.adodb.RecordSource = Query
form.adodb.Refresh
Dim RecordNum As Integer
RecordNum = 1
Dim RecordSet As ADODB.RecordSet
Set RecordSet = frmMainForm.adoCompetitors.RecordSet
Dim Recordcount As Integer
Recordcount = RecordSet.Recordcount
Do While (RecordNum <= Recordcount)
RecordSet.Delete
RecordSet.MoveNext
RecordNum = RecordNum + 1
Loop
il problema è che ogni tanto il codice funziona alla perfezione, altre
volte mi dice una cosa tipo "Informazioni sulla colonna chiave
insufficienti o errate. Troppe righe interessate dall'aggiornamento".
Da ciò ho intuito che gli stavo facendo cancellare troppi record....
non è possibile, sono solo 9!!!! Non penso che 9 record da eliminare
si possano definire troppi...
dov'è che sbaglio??? Altri modi per ottenere ciò che mi serve???
grazie a tutti
perche' ?
> ciao a tutti, sto sviluppando con VB6 una applicazione basata su un db
> access 2000 che uso tramite ADO. Mi sono trovato davanti a questo
> problema: devo eliminare dei record (non pochi, circa 300) da una
> tabella. Dato che non riesco ad usare in un normale RecordSource una
> query DELETE ho pensato di fare una query SELECT e di eliminare uno
> per volta i record del recordset in questo modo:
>
> Dim Query As String
> Query = "SELECT * FROM tabella WHERE campo = 1"
> form.adodb.RecordSource = Query
> form.adodb.Refresh
> Dim RecordNum As Integer
> RecordNum = 1
> Dim RecordSet As ADODB.RecordSet
> Set RecordSet = frmMainForm.adoCompetitors.RecordSet
Non so se il problema sia qui, ma perche' non sostituisci:
> Dim Recordcount As Integer
> Recordcount = RecordSet.Recordcount
> Do While (RecordNum <= Recordcount)
> RecordSet.Delete
> RecordSet.MoveNext
> RecordNum = RecordNum + 1
> Loop
>
con:
while not recordset.eof
recordset.delete
recordset.movenext
wend
(o equivalente con do loop...)
Resta comunque valido l'interrogativo posto da j.
ciao
maxx
--
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!
> il problema è che ogni tanto il codice funziona alla perfezione, altre
> volte mi dice una cosa tipo "Informazioni sulla colonna chiave
> insufficienti o errate. Troppe righe interessate dall'aggiornamento".
> Da ciò ho intuito che gli stavo facendo cancellare troppi record....
No, direi che non sapeva individuare con certezza la singola riga.
Ogni tabella, specialmente con ADO, deve avere almeno un indice con chiave
univoca, anche se la tabella fosse costituita, da progetto, da un singolo
record.
Set myDbDati = New adodb.Connection
myDbDati.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\PIPPO.mdb;Persist Security Info=False"
myDbDati.ConnectionTimeout = 30
myDbDati.Open
myDbDati.Execute "DELETE FROM Numeratori WHERE Cont='001'"
by da Andrea
per quanto riguarda il DELETE, non chiedetemi perchè ma se faccio
dim query as string
query = "DELETE * FROM tabella WHERE campo = 1"
form.adodb.recordsource = query
form.adodb.refresh
va tutto bene, le righe vengono eliminate ma sul refresh mi dice che
non è possibile fare il refresh se l'oogetto è chiuso... non so
spiegarmi il perchè. sono solo alle prime armi con VB
Allora smanettando ho provato ad usare al posto del refresh l'update
nello stesso modo
form.adodb.recordset.update
ma così non mi cancella nemmeno le righe...
Anche se ormai sono arrivato alla soluzione (quella di andt) mi
spiegate perchè mi succede ciò? Cosa devo cambiare???
conosco poco ado e sql, ma a occhio per un delete userei un command, non un
recordset.
ciao, j.
>per quanto riguarda il DELETE, non chiedetemi perchè ma se faccio
>
>dim query as string
>query = "DELETE * FROM tabella WHERE campo = 1"
>form.adodb.recordsource = query
>form.adodb.refresh
>va tutto bene, le righe vengono eliminate ma sul refresh mi dice che
>non è possibile fare il refresh se l'oogetto è chiuso...
A quanto pare stai usando un Data Control ... e ciò è male! :-)
Solitamente un Data Control viene usato per caricare record.
Col metodo Refresh di fatto stai dicendo al controllo Data di riaprire
il proprio Recordset e farsi restituire da capo dei record. Ma dato
che stai usando una query di cancellazione, il refresh esegue il
delete causando la successiva chiusura del recordset.
Di fatto hai spiazzato il Data Control. :-)
> non so
>spiegarmi il perchè. sono solo alle prime armi con VB
>Allora smanettando ho provato ad usare al posto del refresh l'update
>nello stesso modo
>
>form.adodb.recordset.update
>
>ma così non mi cancella nemmeno le righe...
>
>Anche se ormai sono arrivato alla soluzione (quella di andt) mi
>spiegate perchè mi succede ciò? Cosa devo cambiare???
Fai a meno di usare il controllo data, e come andt usa una
ADODB.Connection o un ADODB.Command per eseguire query con Insert,
Update o Delete.
Ciao!