Autore Topic: [risolto]sqlite eliminare record  (Letto 3431 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[risolto]sqlite eliminare record
« il: 12 Dicembre 2009, 00:02:08 »
ciao raga

mi sono impantanato e mi mi serve una mano.

devo realizzare una query che mi elimina dal database tutti i record uguali in un campo numerico.

a tutti i clienti provenienti da un certo agente assegno un codice numerico identico (esempio n. 102)

ora voglio realizzare una query che mi trovi tutti i clienti con il n. 102 e li elimini.

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: sqlite eliminare record
« Risposta #1 il: 12 Dicembre 2009, 00:29:36 »
Ciao, io farei all'incirca così
Codice: [Seleziona]

   PUBLIC MyRS AS Result
   PUBLIC MyRS1 AS Result

PUBLIC SUB tbelimina_Click()
DIM i2 AS Integer
DIM sql AS String
DIM myidcliente AS String
    sql = "SELECT * FROM clienti WHERE agente = 102"
           MyRS = MODMain.$conn.Exec(sql)
           IF MyRS.Available = TRUE THEN
            MyRS.MoveFirst
                FOR i2 = 0 TO Myrs.count - 1
                    myidcliente = MyRS!idcliente
                    MyRS1 = MODMain.$conn.Edit("clienti", "idcliente=" & myidcliente)                    
                    MyRS1.Delete
                    MODMain.$conn.Commit                    
                    MyRS.movenext
                NEXT            
           ENDIF
 

END


Ti dico all'incirca perchè non l'ho provata
Fammi sapere, ciao

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: sqlite eliminare record
« Risposta #2 il: 13 Dicembre 2009, 01:16:36 »
risolto

grazie golia

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: sqlite eliminare record
« Risposta #3 il: 13 Dicembre 2009, 16:47:23 »
Hai fatto così ho hai trovato un'altra soluzione, perchè interessa anche a me.
Come va col tuo progetto? Ciao

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #4 il: 13 Dicembre 2009, 21:40:17 »
ho preso spunto dal tuo codice e l'ho adattato alle mie esigenze

il codice che uso è questo:
Codice: [Seleziona]
'elimina i riferimenti
     sqlEL = "SELECT * FROM rifcontratti WHERE idcontratti = " & CodEc
           MyRSEL = MODMain.MyConn.Exec(sqlel)
           IF MyRSEL.Available = TRUE THEN
            MyRSEL.MoveFirst
                FOR i2 = 0 TO MyRSEL.count - 1
                    myidcont = MyRSEL!idrifcontratti
                    MyRS1 = MODMain.MyConn.Edit("rifcontratti", "idrifcontratti=" & myidcont)                    
                    MyRS1.Delete
                    MyRSEL.movenext
                NEXT            
           ENDIF      
                    MyRS = MODMain.MyConn.Edit("contratti", "idcontratti=" & CodCoEl)                    
                    MyRS.Delete

      Message.Info(M1.MyNamA & " Record eliminato")


in pratica mi serve per eliminare i riferimenti a un contratto, un pò come quello che devo fare con le fatture, e cioè nella prima tabella tutti i dati della fattura (data cliente pagamenti ecc..) nella seconda tabella i riferimenti ( quantità U/M oggetto prezzo)

il progetto và avanti e ogni giorno apporto qualcosa, ma se guardo la fine la vedo molto lontana.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: [risolto]sqlite eliminare record
« Risposta #5 il: 14 Dicembre 2009, 00:02:22 »
Tutti i grandi programmi iniziano con un nucleo solido e funzionante. Se ciò che hai scritto fin ora funziona guarda alla fine con più soddisfazione perchè sai che prima o poi ci arriverai...;-)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #6 il: 14 Dicembre 2009, 10:15:50 »
Citazione

Ceskho ha scritto
   
Tutti i grandi programmi iniziano con un nucleo solido e funzionante. Se ciò che hai scritto fin ora funziona guarda alla fine con più soddisfazione perchè sai che prima o poi ci arriverai...


Vero, ricordo che io sono partito da zero, anche come esperienza. Sapevo solo un pò (poco) di Visual Basic, e sono arrivato fino in fondo. Non sarà un progetto ottimale e scritto correttamente ma per quello che devo fare io è ok. Poi sono sicuro che usandolo continuerò ad evolverlo, fino ad arrivare alla perfezione :-)  :-D

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #7 il: 14 Dicembre 2009, 23:16:02 »
un proverbio cinese dice: la strada più lunga intrapresa diventa ogni giorno più corta.

che ci arrivero alla fine ne sono sicuro, visto la mia caparbietà. e che a volte sono troppo maniacale e pignolo perdo giornate solo per risolvere piccoli problemi che forse altri sorvolerebbero. ma io sono fatto cosi, prima deve piacere a me, poi, agli altri non importa.

i programmi fatti su misura sono i migliori ma anche i più complicati e laboriosi, ma tanto visto che odio grande fratello e le trasmissioni frivole che girano in tv, meglio stare al pc.

e poi in rete e sui forum si incontrano persone simpatiche  :-)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #8 il: 15 Dicembre 2009, 12:03:29 »
Concordo :pint:

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #9 il: 15 Dicembre 2009, 13:25:21 »
@desadex

Sto facendo anch'io la funzione per passare i dati (mysql) da una sede all'altra.
Intanto stò facendo la funzione che mi copia i dati in un file sqlite.
Praticamente al comando creo il database e copio il cliente selzionato.
Copio il cliente, tutti i preventivi (possono essere uno o più) e a ogni preventivo tutti i dettagli.
Per quanto riguarda la copia nessun problema, copio tutto compresi gli id come stanno.

Il problema è quando si va a riversarlo, gli id devono essere cambiati per non andare in conflitto con gli id già presenti.

Tu come faresti? mi basta la teoria

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: [risolto]sqlite eliminare record
« Risposta #10 il: 15 Dicembre 2009, 14:18:45 »
Potresti incrementare l'id e confrontarlo con l'ultimo del database in cui riversare....

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #11 il: 15 Dicembre 2009, 17:33:20 »
Si, quando si va a riversare l'id si incrementa. il problema è questo
Ho il cliente rossi (ID = 50)
  Rossi ha preventivo banane (Il preventivo ha idcliente = 50) ok?

Quando riverso rossi l'id cambierà diventerà es. 78
Riverso anche il preventivo che a sua volta cambierà id, solo che il preventivo banane non avrà più il proprietario rossi perchè cerca idcliente 50 mentre rossi adesso ha 78.. :-?
Si può memorizzare il vecchio id prima di riversare, e poi aggiornare il preventivo che ha lo stesso valore con il dato salvato. Però volevo vedere se c'è un sistema meno macchinoso di questo
Ciao grazie

Offline claudio

  • Gambero
  • **
  • Post: 57
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #12 il: 16 Dicembre 2009, 00:24:39 »
Per eliminare un gruppo di record puoi usare direttamente l'istruzione DELETE
nella stringa SQL:

elimina i riferimenti      
sqlEL = "DELETE FROM rifcontratti WHERE idcontratti = " & CodEc
MyRSEL = MODMain.MyConn.Exec(sqlel)            


L'ultimo Id si ricava con la funzione last_insert_rowid()

hResult = hConn.Exec("SELECT last_insert_rowid() AS id")
RETURN CInt(hResult["id"])

oppure con

hResult = hConn.Exec("SELECT MAX(IdCliente) as UltimoID FROM Clienti")
RETURN hResult!UltimoId

Per passare i record dei preventivi potresti copiarli con un IdCliente = 9999999
e poi con una funzione tipo questa metterli a posto:

sqlEL = "UPDATE Preventivi SET IdCliente = " & UltimoId & " WHERE IdCliente = 9999999"
MyRSEL = MODMain.MyConn.Exec(sqlel)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #13 il: 16 Dicembre 2009, 00:59:45 »
ho avuto un problema simile con dei contratti, dovevo per forza avere dei numeri sequenziali.
con gli id mi bastava cancellare un record che perdevo la sequenza, allora mi sono autocreato dei numeri sequenziali con la funzione che ti ho chiesto in un'altro post

in un campo numerico leggo il valore massimo e lo incremento di 1.

potresti usare lo stesso metodo, quando vai a riversare gli id cambiano ma i valori che tu hai inserito no.

ps. interessava anche a me usare mysql per una maggiore sicurezza, ma poi, proprio per il fatto della portabilità ho optato per sqlite, comunque ho visto che sqlite occupa pochissimo spazio e per la sicurezza penso di inserirlo in un contenitore cifrato con truecrypt (il massimo per la sicurezza).

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: [risolto]sqlite eliminare record
« Risposta #14 il: 16 Dicembre 2009, 01:07:09 »
Codice: [Seleziona]
Per eliminare un gruppo di record puoi usare direttamente l'istruzione DELETE
nella stringa SQL:

elimina i riferimenti
sqlEL = "DELETE FROM rifcontratti WHERE idcontratti = " & CodEc
MyRSEL = MODMain.MyConn.Exec(sqlel)


funziona e il codice è molto più pulito

grazie  cbsoft