Originariamente inviata da
URANIO
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.