Quote Originariamente inviata da URANIO Visualizza il messaggio
O spezzare la query in parti più piccole.
Come ho detto, si tratta di Query di "Creazione Tabella" e non mi risulta che possano essere spezzate.
Posso Creare Query vuote e poi accodare i dati, cosa che ho già provato a fare, ma il risultato non cambia perchè sono proprio i dati ad essere pesanti. Quanto al come eseguo le Query, di seguito un esempio:
codice:
            Dim rcrdst As New ADODB.Recordset()
            Dim sSQL As String
            Dim OggiAIC As Long = DateSerial(Year(Now), Month(Now), Giorno)         
            Dim OggiAP As Long = DateSerial(Year(Now) - 1, Month(Now), Giorno)      

            sSQL = "SELECT Corrisp, Sum(Vendite.QMov) AS SommaDiQMov INTO VenditeAnnoStat_1 FROM Vendite GROUP BY Corrisp, Data, CarScar HAVING (((Data) Between #" & OggiAP & "# And #" & OggiAIC & "#) AND ((CarScar)='s')) ORDER BY Corrisp;"
            rcrdst.Open(sSQL, CnDBLocale, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
La sola soluzione che io ho ipotizzato è di lavorare diversamente, cioè così:
codice:
            Dim rsFornitori As New ADODB.Recordset()
            Dim rsPicam As New ADODB.Recordset()
            Dim sSQLPicam As String, sSQLAccess As String

            sSQLPicam = "SELECT Forcom.foc_cod_for, Forcom.foc_rag_soc_1, Forcom.foc_rag_soc_2, Forcom.foc_ind, Forcom.foc_cap, Forcom.foc_loc, Forcom.foc_pro, Forcom.foc_par_iva, Forcom.foc_cod_fis, Forcom.foc_naz, Forcom.foc_tel, Forcom.foc_fax, Forcom.foc_tlx, Forcom.foc_tip_pae, Forcom.foc_cod_val, Forcom.foc_tip_for, Forcom.foc_dat_cre, Forcom.foc_e_mail, Forcom.foc_web From Forcom WHERE (((Forcom.foc_tip_for)=20))"
            rsPicam.Open(sSQLPicam, CnPicam, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

            sSQLAccess = "DELETE Fornitori.* FROM Fornitori"
            rsFornitori.Open(sSQLAccess, CnDBServer, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

            sSQLAccess = "SELECT Fornitori.IDFor, Fornitori.RsF, Fornitori.Indirizzo, Fornitori.CAP, Fornitori.Citta, Fornitori.Prov, Fornitori.P_IVA, Fornitori.CodFis, Fornitori.Naz, Fornitori.Tel, Fornitori.Fax, Fornitori.Cell, Fornitori.I_E, Fornitori.Valuta, Fornitori.Tipologia, Fornitori.DtCre, Fornitori.Email, Fornitori.Web FROM Fornitori"
            rsFornitori.Open(sSQLAccess, CnDBServer, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)

            rsPicam.MoveFirst()

            Do Until rsPicam.EOF

                If Trim(rsPicam("foc_tip_for").Value) = 20 Then

                    'If Trim(rsPicam("foc_tip_for").Value) = 20 Or Trim(rsPicam("foc_tip_for").Value) = 21 Or Trim(rsPicam("foc_tip_for").Value) = 22 Then
                    rsFornitori.AddNew()
                    rsFornitori("IDFor").Value = Trim(rsPicam("foc_cod_for").Value)
                    rsFornitori("RsF").Value = Trim(rsPicam("foc_rag_soc_1").Value) '& " " & Trim(rsPicam("foc_rag_soc_2"))
                    rsFornitori("Indirizzo").Value = Trim(rsPicam("foc_ind").Value)
                    rsFornitori("CAP").Value = rsPicam("foc_cap").Value
                    rsFornitori("Citta").Value = Trim(rsPicam("foc_loc").Value)
                    rsFornitori("Prov").Value = rsPicam("foc_pro").Value
                    rsFornitori("P_IVA").Value = rsPicam("foc_par_iva").Value
                    rsFornitori("CodFis").Value = rsPicam("foc_cod_fis").Value
                    rsFornitori("Naz").Value = rsPicam("foc_naz").Value
                    rsFornitori("Tel").Value = rsPicam("foc_tel").Value
                    rsFornitori("Cell").Value = rsPicam("foc_tlx").Value
                    rsFornitori("Fax").Value = rsPicam("foc_fax").Value
                    rsFornitori("I_E").Value = rsPicam("foc_tip_pae").Value

                    If rsFornitori("I_E").Value = "E" Then
                        rsFornitori("Valuta").Value = rsPicam("foc_cod_val").Value
                    Else
                        rsFornitori("Valuta").Value = "EUR"
                    End If

                    rsFornitori("Tipologia").Value = rsPicam("foc_tip_for").Value
                    rsFornitori("DtCre").Value = rsPicam("foc_dat_cre").Value
                    rsFornitori("Email").Value = rsPicam("foc_e_mail").Value
                    rsFornitori("Web").Value = rsPicam("foc_web").Value
                    rsFornitori.Update()
                End If
                rsPicam.MoveNext()
                Application.DoEvents()
            Loop

            rsFornitori.AddNew()
            rsFornitori("IDFor").Value = 9999
            rsFornitori("RsF").Value = "SISTEMAX"
            rsFornitori("I_E").Value = "I"
            rsFornitori("Valuta").Value = "EUR"
            rsFornitori("Tipologia").Value = 20
            rsFornitori.Update()

            If rsPicam.State <> ConnectionState.Closed Then
                rsPicam.Close()
                rsPicam.ActiveConnection = Nothing
                Application.DoEvents()
            End If

            If rsFornitori.State <> ConnectionState.Closed Then
                rsFornitori.Close()
                rsFornitori.ActiveConnection = Nothing
                Application.DoEvents()
            End If
ma questo vuol dire, ammesso che in tuttii i casi si possa fare, scrivere qualche nMila stringhe in più, con la possibilità di fare mMila errori in più.
Ecco perchè sto cercando una soluzione che direttamente mi faccia proseguire la routine SOLO quando la Query in esecuzione ha finito.