|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
Sql per la somma dei dati
Ciao.
in un modulo *.BAS irserisco il questo codice Private DB As Database Private rsVari As Recordset quando mi serve nei vari form del progetto utilizzo questo codice per fare delle determinate somme filtrando i dati dal DB: Set DB = OpenDatabase(App.Path & "\NomeDB.mdb") Set rsVari = DB.OpenRecordset("SELECT Sum(Importo) as Totale, Sum(Importo*aliquotaIVA/100) as Iva FROM TabellaDB WHERE ID=" & Parametro) If IsNull(rsVari("Totale")) = False And IsNull(rsVari("Iva")) = False Then MsgBox rsVari("Totale") MsgBox rsVari("Iva") else 'nessun record che rispecchi i parametri di ricerca end if La cosa funziona tranquillamente, il problema che non riesco ad capire dove possa risiedere e che di tanto in tanto, capita che non mi fà più le somme. In pratica e come se L'SQL non filtri più i nessun dato. Se chiudo il programma ed rietro rifunziona. Sinceramente non capisco cosa possa essere. Per questo chiedo un vostro parere, e se magari se si possa fare la stessa cosa utilizzando invece di un SQL un tipo di ricerca indicizzata. con il SEEK, sempre chè sia migliore rispetto all'SQL sopra citata. spero in un vostro AIUTO!!!!!!!! Carmen ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Che strano... forse è un problema di memoria. Ti sei ricordata di rilasciare la memoria degli oggetti non più utilizzati? Esempio:
Codice:
Dim db As Database Dim rs As Recordset Dim sql As String 'creo oggetti... Set db = OpenDatabase(App.Path & "\NomeDB.mdb") sql = "SELECT Sum(Importo) as Totale, ..." Set rs = db.OpenRecordset(sql) 'utilizzo gli oggetti ... 'in chiusura rilascio la memoria rs.Close db.Close Set rs = Nothing Set db = Nothing |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2001
Messaggi: 367
|
Ciao. Si alla fine chiudevo sia DB.close che rs.Close.
Non avevo messo però: Set rs = Nothing Set db = Nothing Due domande da farti: 1) Ai impostato L'SQL un pò diversa, la cosa può essere rilevante o meno rispetto alla mia versione? 2) Siccome eseguo in diversi punti più o meno queste operazioni penzavo di dichiarare una volta sola in un modulo *.BAS queste variabili: Dim db As Database Dim rs As Recordset Dim sql As String Come: public db As Database public rs As Recordset public sql As String ovviamente subito dopo ogni esecuzione della routine rilascio subito la memoria: rs.Close db.Close Set rs = Nothing Set db = Nothing Cosa ne penzi???. Ciao |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2001
Città: Nordest
Messaggi: 217
|
Risposta 1: nessuna differenza, ho usato la variabile sql solo per migliorare la leggibilità del codice
Risposta 2: nel modo come l'hai descritto non serve a nulla, piuttosto farei così: Codice:
'in un modulo .bas : Public db As Database 'nell'evento Load del form principale: Set db = OpenDatabase(App.Path & "\NomeDB.mdb") 'nell'evento Unload del form principale: db.Close Set db = Nothing 'dentro ad una qualsiasi procedura: Dim rs As Recordset Dim sql As String sql = "SELECT ... " Set rs = db.OpenRecordset(sql, dbOpenDynaset) ... rs.Close Set rs = Nothing ciao |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:22.