Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    28

    Semplificazione di una query di cancellazione

    Il seguente codice svolge il suo lavoro ma è tremendamente lento. Esso ricava dapprima tutti i record in cui TabIm.ImpIDEn<>759 e poi cancellla tutti i record della tabella TabPa in cui il suo campo ID è il risultato della query.
    In pratica se ci sono 10000 record devo fare 10000 cnn.execute !

    codice:
       Query = "SELECT TabPa.ID"
       Query = Query & " FROM TabPa INNER JOIN (TabIm INNER JOIN TabPaIm ON TabIm.ID = TabPaIm.ID) "
       Query = Query & " ON TabPa.ID = TabPaIm.ID WHERE TabIm.ImpIDEn<>759
       rsQ.Open Query, cnn
       Do Until rsQ.EOF
          cnn.Execute "DELETE FROM TabPa WHERE ID=" & CStr(rsQ(0))
          rsQ.MoveNext
       Loop
    La domanda è: si può fare un solo cnn.execute ? Qualcosa del genere :
    codice:
    cnn.execute "DELETE FROM TabPa WHERE (SELECT ...........)
    Grazie per l'attenzione.

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Puoi fare così (non serve nemmeno aprire un recordset):

    codice:
    cnn.Execute "DELETE FROM TabPa WHERE ID IN (Query)
    Dove Query è proprio la tua "SELECT TabPa.ID FROM TabPa INNER JOIN ...."

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    28
    Perfetto. Grazie !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.