Acess conta record particolare con recordset

lunedì 27 febbraio 2012 - 17.27

torbace Profilo | Newbie

Ciao ragazzi,

ho due tabelle così composte:

TABELLA (RDA_T)
• IDRDA [COLOR="#A9A9A9"]NUMERAZIONE AUTOMATICA[/COLOR]
• NUMERORDA [COLOR="#A9A9A9"]TESTO[/COLOR]
• REVISIONE [COLOR="#A9A9A9"]TESTO[/COLOR]
• IDCOMMESSA [COLOR="#A9A9A9"]NUMERICO[/COLOR]
• OGGETTO [COLOR="#A9A9A9"]TESTO[/COLOR]
• DESCRIZIONE [COLOR="#A9A9A9"]MEMO[/COLOR]
• DATA [COLOR="#A9A9A9"]DATA[/COLOR]
• COMPILATODA [COLOR="#A9A9A9"]TESTO[/COLOR]
• EMESSA [COLOR="#A9A9A9"]BOOLEANO (SI,NO)[/COLOR]

TABELLA (RDAMAT_T)
• IDRDAMAT [COLOR="#A9A9A9"]NUMERAZIONE AUTOMATICA[/COLOR]
• IDRDA [COLOR="#A9A9A9"]NUMERICO[/COLOR]
• POSIZIONE [COLOR="#A9A9A9"]TESTO[/COLOR]
• DESCRIZIONE [COLOR="#A9A9A9"]TESTO[/COLOR]
• NOTE [COLOR="#A9A9A9"]MEMO[/COLOR]
• MAG [COLOR="#A9A9A9"]ELENCO VALORI (SI, NO, INPARTE)[/COLOR]
• ORDINATO [COLOR="#A9A9A9"]ELENCO VALORI (SI, NO, INPARTE)[/COLOR]
• ARRIVATO [COLOR="#A9A9A9"]ELENCO VALORI (SI, NO, INPARTE)[/COLOR]

Devo creare una maschera a visualizzazioni continue della tabella (RDA_T) dove devo aggiungere quattro textbox, ognuna delle quali deve contare i campi come descritto qui:

textbox1: deve contare i record dove ([MAG]="SI")
textbox2: deve contare i record dove ([MAG]=<>"SI" AND [ORDINATO]="SI")
textbox3: deve contare i record dove ([ORDINATO]="SI" AND [ARRIVATO]="NO")
textbox4: deve contare i record dove ([ORDINATO]="SI" AND [ARRIVATO]="SI")

Non credo che possa fare tutto questo tramite SQL anche perchè verrebbe fuori del codice piuttosto sporco.

Dovrò sicuramente usare DAO oppure ADO. Ho provato a fare da solo ma non so come fare ad assegnare ad ogni riga il numero esatto.

Posto del codice che è sicuramente sbagliato ma magari qualcuno lo saprà correggere al meglio :D

[QUOTE]Private Sub Form_Load()

Dim dbcorrente As DAO.Database
Dim MAG As DAO.Recordset
Dim NOARRIVATO As DAO.Recordset
Dim ARRIVATO As DAO.Recordset
Dim ORDINARE As DAO.Recordset

Dim contaMAG As Integer
Dim contaNOARRIVATO As Integer
Dim contaARRIVATO As Integer
Dim contaORDINARE As Integer

Set dbcorrente = CurrentDb
Set MAG = dbcorrente.OpenRecordset("?????????????") 'Mettere il codice SQL per filtrare dove mag=si
Set NOARRIVATO = dbcorrente.OpenRecordset("?????????????") 'Mettere il codice SQL per filtrare [MAG]=<>"SI" AND [ORDINATO]="SI"o
Set ARRIVATO = dbcorrente.OpenRecordset("?????????????") 'Mettere il codice SQL per filtrare ([ORDINATO]="SI" AND [ARRIVATO]="NO")
Set ORDINARE = dbcorrente.OpenRecordset("?????????????") 'Mettere il codice SQL per filtrare ([ORDINATO]="SI" AND [ARRIVATO]="SI")

Me.Dirty = False

Do While Not MAG.EOF
contaMAG = contaMAG + 1
MAG.MoveNext
Loop

Do While Not NOARRIVATO.EOF
contaNOARRIVATO = contaARRIVATO + 1
NOARRIVATO.MoveNext
Loop

Do While Not ARRIVATO.EOF
contaARRIVATO = contaARRIVATO + 1
ARRIVATO.MoveNext
Loop

Do While Not ORDINARE.EOF
contaORDINARE = contaORDINARE + 1
ORDINARE.MoveNext
Loop

Testo1.Value = contaMAG
Testo2.Value = contaNOARRIVATO
Testo3.Value = contaARRIVATO
Testo4.Value = contaORDINARE

End Sub[/QUOTE]

Quello che voglio ottenere è questo:

[URL=http://www.imagebam.com/image/0b2cac177056980][IMG]http://thumbnails44.imagebam.com/17706/0b2cac177056980.jpg[/IMG][/URL]

Qualcuno mi può aiutare??

Grazie :)

renarig Profilo | Expert

Forse mi sfugge qualcosa nella tua domanda.
Stai facendo tanto lavoro ma ci sono delle funzioni apposite semplicissime


Io userei semplicemente la funzione "DCount" ( la trovi nell'help )

_____________________________________________________________________________________

Il primo valore potrebbe essere dato da una casella di testo ( textbox ) nella
maschera con dentro questa formula
___ =DCount("[IDRDAMAT]";"[RDAMAT_T]";"[MAG] = 'SI'") ___


Il terzo valore invece
___ =DCount("[IDRDAMAT]";"[RDAMAT_T]";"[ORDINATO] = 'SI' AND [ARRIVATO] = 'NO'") ___

_____________________________________________________________________________________


Primo NB __ Se preferisci generare la funzione non in maschera ma con VBA
devi sostituire i puntievirgola (;) con delle virgole (,)

______________________________________________________________________________________



Secondo NB ___ Io ho interpretato i tuoi SI e NO come testo ..... giusto ???
perche se fossero invece campi booliani devi scrivere -1 e 0 ( senza apici )

_______________________________________________________________________________

Terzo NB __ Io ho supposto che il campo [IDRDAMAT] sia il campo chiave
quindi sempre assolutamente compilato.
Se non hai questa certezza sostituiscilo semplicemente con un asterisco (*)





Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5