Newsgroup: it.comp.appl.access
Titolo: contare i record con RecordCount

ciao a tutti
ho questa funzione, ma non riesco ad avere il numero
dei reocord con RecordCount
ma solo con DCount, perchè?
e quale dei due è preferibile?
 
Public Function Conf_Carico( _
  ByVal campo1 As Variant) As Boolean
 
  Dim rsCheck As dao.Recordset
  Dim strsCheckQL As String
 
  strsCheckQL = "SELECT * FROM DettaglioCarichi" _
    & " Where nColli=0 And IdCarico =" & fctCriterio_Idc()
  Set rsCheck = CurrentDb.OpenRecordset(strsCheckQL)
 
  If DCount("*", "DettaglioCarichi", "IdCarico =" & fctCriterio_Idc()) = 0 Then
    MsgBox "Attenzione non ci sono Record!!!", vbExclamation, "Attenzione!!!"
    Exit Function
 
  End If
 
gazie


recordcount è più veloce, devi prima spostarti al movelast
MA

 ...
 
http://www.donkarl.com/it?FAQ6.17
 
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 


grazie Karl


grazie MA


Ora se non ci sono record mi da nessun record corrente...
 
la funzione completa è questa:
 
Public Function Conf_Carico( _
  ByVal campo1 As Variant) As Boolean
 
  Dim rsCheck As dao.Recordset
  Dim strsCheckQL As String
 
  strsCheckQL = "SELECT * FROM DettaglioCarichi" _
    & " Where nBancali=0 And nColli=0 And IdCarico =" & fctCriterio_Idc()
  Set rsCheck = CurrentDb.OpenRecordset(strsCheckQL)
 
  If rsCheck.BOF Then 'se non ci sono record nel recordset
    rsCheck.MoveLast
    MsgBox "Attenzione non ci sono Record!!!", vbExclamation, "Attenzione!!!"
    Exit Function
 
  End If
 
  Dim campo2 As Integer
  Dim X As String
 
  X = ""
 
  campo2 = IIf(rsCheck.EOF, 1, 0)
 
  X = IIf(Nz(campo1, 0) = 0, ", data Carico", "") & _
    IIf(Nz(campo2, 0) = 0, ", n°Bancali", "")
 
  If (X) <> "" Then
    MsgBox "Attenzione manca:" & Mid(X, 2), vbExclamation, "Attenzione!!!"
    Exit Function
 
  End If
 
  Set rsCheck = Nothing
 
Conf_Carico = True
End Function
 
dove sbaglio?
grazie

 dove sbaglio?
 
Direi che ci sono troppi punti esclamativi nel testo. ;-)
Prova così:
 
If rsCheck.BOF Then 'se non ci sono record nel recordset
   MsgBox "Non ci sono record.", vbExclamation, "Attenzione!"
   Exit Function
Else
   rsCheck.MoveLast
End If
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
Access Lobby: 
http://www.AccessDevelopers.org
 


ciao Karl
mi riporta lo stesso messaggio anche dove ci sono i record

 mi riporta lo stesso messaggio anche dove ci sono i record
 
Incolla (sempre) il codice che hai provato.



Ciao Karl
 
Public Function Conf_Carico( _
  ByVal campo1 As Variant) As Boolean
 
  Dim rsCheck As dao.Recordset
  Dim strsCheckQL As String
 
  strsCheckQL = "SELECT * FROM DettaglioCarichi" _
    & " Where nBancali=0 And nColli=0 And IdCarico =" & fctCriterio_Idc()
  Set rsCheck = CurrentDb.OpenRecordset(strsCheckQL)
 
  If rsCheck.BOF Then 'se non ci sono record nel recordset
   MsgBox "Non ci sono record.", vbExclamation, "Attenzione!"
   Exit Function
  Else
   rsCheck.MoveLast
  End If
 
  Dim campo2 As Integer
  Dim X As String
 
  X = ""
 
  campo2 = IIf(rsCheck.EOF, 1, 0)
 
  X = IIf(Nz(campo1, 0) = 0, ", data Carico", "") & _
    IIf(Nz(campo2, 0) = 0, ", n°Bancali", "")
 
  If (X) <> "" Then
    MsgBox "Attenzione manca:" & Mid(X, 2), vbExclamation, "Attenzione!!!"
 
  Exit Function
  End If



 



ciao Karl
 
io vorrei sostituire questo questa parte di codice:
 
If DCount("*", "DettaglioCarichi", "IdCarico =" & fctCriterio_Idc()) = 0 Then
  MsgBox "non ci sono record!!!", vbExclamation, "Attenzione!!!"
  Exit Function
 
End If 
 
con recordsetcount o rsCheck.BOF
 
questo è il codice completo 
 
Public Function Conf_Carico( _
  ByVal campo1 As Variant) As Boolean
 
  Dim rsCheck As dao.Recordset
  Dim strsCheckQL As String
 
  strsCheckQL = "SELECT * FROM DettaglioCarichi" _
    & " Where nBancali=0 And nColli=0 And IdCarico =" & fctCriterio_Idc()
  Set rsCheck = CurrentDb.OpenRecordset(strsCheckQL)
 
  If DCount("*", "DettaglioCarichi", "IdCarico =" & fctCriterio_Idc()) = 0 Then
    MsgBox "Non ci sono Record!!!", vbExclamation, "Attenzione!!!"


 con recordsetcount o rsCheck.BOF
 
Se ti basta il BOF prova cosa ti ho scritto:
...lasciare perdere la parte Else
 
Cioè:
 
If rsCheck.BOF Then 'se non ci sono record nel recordset
    MsgBox "Non ci sono record.", vbExclamation, "Attenzione!"
    Exit Function
End If
 
Se sempre viene un errore scrivi il suo numero e messaggio e soprattutto 
in quale riga succede.



ciao Karl
non ti ho risposto alla domanda a cosa serve questa funzione;
se manca la data carico oppure il numero dei bancali è "0" o entrambi,
me lo segnala.
 
Con l'ultimo tuo suggerimento, ho questo risultato:
1-se manca la 'data carico' oppure il 'numero dei bancali' è =0 o entrambi,
me lo segnala correttamente;
 
2-se mancano i record.
me lo segnala correttamente;
 
3- ma anche se ci sono i record e non manca la data carico e il numero dei
bancali e <>0 mi da che "non ci sono record",
ma non ho nessun messaggio d'errore.


 
Come descritto nell'articolo FAQ (e nella documentazione di DAO) BOF 
immediamente dopo OpenRecordset significa che non ci sono record nel 
recordset.
 
Aggiungi la riga:
debug.print strsCheckQL
 
e copia la stringa SQL dalla finestra immediata in una query per vedere 
il risultato.



ciao Karl
è proprio strano, questa è la query copiata della finestra immediata
SELECT * FROM DettaglioCarichi Where nBancali=0 And nColli=0 And IdCarico =3999
e da il risultato corretto
 
 


ho provato anche con
Debug.Print rsCheck.RecordCount
ed ho notato che mi conta solo i record
dove nBancali=0 And nColli=0 e non l'effetivo numero di record.


ho fatto in questo modo:
 
Public Function Conf_Carico( _
  ByVal campo1 As Variant) As Boolean
 
  Dim rsCheck As dao.Recordset
  Dim strsCheckQL As String
 
  strsCheckQL = "SELECT * FROM DettaglioCarichi" _
    & " Where IdCarico =" & fctCriterio_Idc()
  Set rsCheck = CurrentDb.OpenRecordset(strsCheckQL)
 
  If rsCheck.BOF Then 'se non ci sono record nel recordset
    MsgBox "Non ci sono record.", vbExclamation, "Attenzione!"
    Exit Function
  End If
 
  rsCheck.FindLast "nBancali=0 And nColli=0"
 
  Dim campo2 As Integer
  Dim X As String
 
  X = ""
 
  campo2 = IIf(rsCheck.NoMatch, 1, 0)
 
  X = IIf(Nz(campo1, 0) = 0, ", data Carico", "") & _
    IIf(Nz(campo2, 0) = 0, ", n°Bancali", "")
 
  If (X) <> "" Then
    MsgBox "Attenzione manca:" & Mid(X, 2), vbExclamation, "Attenzione!!!"
 
  Exit Function
  End If
