Newsgroup: it.comp.lang.visual-basic
Titolo: Array

Salve.
Il Mio Problema è Questo :
Ho una Tabela, dove Memorizzo Massimo 25/30 Record con un Campo IDCategoria.
Le Categorie dei Mie Prodotti sono 23.
Devo Verificare a Fine PREVENTIVO la Mancanza di Alcune Categorie
Fondamentali.
Dovre fare una cosina del genere Es :
'### Categorie Fondamentali ### :
Dim MyArrayCategory(1 To 23) As Long
        MyArrayCategory(1) = 1   ' Cabinet
        MyArrayCategory(2) = 2   ' SchedeMadri
        MyArrayCategory(3) = 3   ' Cpu
        MyArrayCategory(4) = 3   ' Cpu
        MyArrayCategory(5) = 4   ' Mem Ram
        MyArrayCategory(6) = 5   ' Hard Disk
        MyArrayCategory(7) = 6   ' Svga
        MyArrayCategory(8) = 9   ' Modem
        MyArrayCategory(9) = 10  ' Monitor
        MyArrayCategory(10) = 11 ' Accessori
        MyArrayCategory(11) = 11 ' Accessori
        MyArrayCategory(12) = 13 ' Media
        MyArrayCategory(13) = 22 ' CD/DVD
Ora devo Verificare dalla Mia Tabella quali categorie Fondamentali mancano
Es nella MiaTabella ci sono
IDCAtegoria=1    'Cabinet
IDCAtegoria=2    'Schede Madri
IDCAtegoria=3    'Cpu
IDCAtegoria=4    'Memorie
IDCAtegoria=5    'Hard Disk
IDCAtegoria=6    'Svga
IDCAtegoria=10   'Accessori
IDCAtegoria=13  'Media
Mancano in preventivo : )P.S mi interessa solo sapere il Valore Long
IDCategoria)
MyArrayCategory(4) = 3   ' Cpu
                  MyArrayCategory(8) = 9   ' Modem
                  MyArrayCategory(9) = 10  ' Monitor
                  MyArrayCategory(11) = 11 ' Accessori
                  MyArrayCategory(13) = 22 ' CD/DVD
Sapete Qualche Soluzione ? ( ANche Diversa )
Grazie.

Salve.
Il Mio Problema è Questo :
Ho una Tabela, dove Memorizzo Massimo 25/30 Record con un Campo IDCategoria.
Le Categorie dei Mie Prodotti sono 23.
Devo Verificare a Fine PREVENTIVO la Mancanza di Alcune Categorie
Fondamentali.
Dovre fare una cosina del genere Es :
'### Categorie Fondamentali ### :
Dim MyArrayCategory(1 To 23) As Long
        MyArrayCategory(1) = 1   ' Cabinet
        MyArrayCategory(2) = 2   ' SchedeMadri
        MyArrayCategory(3) = 3   ' Cpu
        MyArrayCategory(4) = 3   ' Cpu
        MyArrayCategory(5) = 4   ' Mem Ram
        MyArrayCategory(6) = 5   ' Hard Disk
        MyArrayCategory(7) = 6   ' Svga
        MyArrayCategory(8) = 9   ' Modem
        MyArrayCategory(9) = 10  ' Monitor
        MyArrayCategory(10) = 11 ' Accessori
        MyArrayCategory(11) = 11 ' Accessori
        MyArrayCategory(12) = 13 ' Media
        MyArrayCategory(13) = 22 ' CD/DVD
Ora devo Verificare dalla Mia Tabella(Preventivo) quali categorie
Fondamentali mancano(Il Valore long IDCAtegoria)
Es nella MiaTabella (Preventivo) ci sono :
IDCAtegoria=1    'Cabinet
IDCAtegoria=2    'Schede Madri
IDCAtegoria=3    'Cpu
IDCAtegoria=4    'Memorie
IDCAtegoria=5    'Hard Disk
IDCAtegoria=6    'Svga
IDCAtegoria=10   'Accessori
IDCAtegoria=13  'Media
dunque dovrò visualizzare : Mancano in preventivo :


incredibile! ti abbiamo risposto scrivendoti  il codice in 2... a che ti
serve chiedere al NG se poi le risposte non le leggi?
--
Fabio Guerrazzi
http://www.sourcecode4free.com/cgt
fab...@libero.it

 serve chiedere al NG se poi le risposte non le leggi?
Scusatemi ma volevo rispiegare meglio il mio Problema :
Con la V.s Ottima Idea pur troppo non riesco a completare L'Opera :
Se ad esempio nel mio prev. ci sono solo 8 record , e faccio una verifica
lui mi cicla solo per 8 volte, non confrontando le restanti 5 CAtegorie del
mio Array.
Per Ora Grazie Comunque e Scusate...

 ha scritto nel messaggio
news:FItN8.32693$5i1.1...@news2.tin.it...

Dim verifica(LBound(MyArrayCategory) To UBound(MyArrayCategory)) As Boolean
Do
'       Ricava la prossima categoria nel preventivo in IDCAtegoria
    IDCAtegoria=...
    If IDCAtegoria = 0 Then Exit Do 'Fine categorie in preventivo
    For n = LBound(MyArrayCategory) To UBound(MyArrayCategory)
        If MyArrayCategory(n) = IDCAtegoria Then
            verifica(n) = 1
            Exit For
        End If
    Next n
Loop
For n = LBound(verifica) To UBound(verifica)
    If verifica(n) = 0 Then
        MsgBox "Categoria assente " & MyArrayCategory(n)
    End If
Next n


Cosě facendo Mi Restituisce le categorie Sbagliate , ti posto il codice
Private Sub VerificaPreventivo()
Dim i As Long
Dim Messaggio As String
Dim Verifica(1 To 23) As Boolean
Dim MyArrayCategory(1 To 23) As Long
    MyArrayCategory(1) = 1   ' Cabinet
    MyArrayCategory(2) = 2   ' SchedeMadri
    MyArrayCategory(3) = 3   ' Cpu
    MyArrayCategory(4) = 3   ' Cpu Acc
    MyArrayCategory(5) = 4   ' Mem Ram
    MyArrayCategory(6) = 5   ' Hard Disk
    MyArrayCategory(7) = 6   ' Svga
    MyArrayCategory(8) = 9   ' Monitor
    MyArrayCategory(9) = 10  ' Modem
    MyArrayCategory(10) = 11 ' Accessori
    MyArrayCategory(11) = 11 ' Accessori
    MyArrayCategory(12) = 13 ' Media
    MyArrayCategory(13) = 22 ' CD/DVD
RsPreventivo.MoveFirst
Do While Not RsPreventivo.EOF
  If RsPreventivo!IDCAtegoria = 0 Then Exit Do
    For i = LBound(MyArrayCategory) To UBound(MyArrayCategory)
        If MyArrayCategory(i) = RsPreventivo!IDCAtegoria Then
            Verifica(i) = 1
            Exit For
          End If
        Next i
         RsPreventivo.MoveNext
    Loop
RsPreventivo.MoveFirst
For i = LBound(Verifica) To UBound(Verifica)
    If Verifica(i) = 0 Then
        Messaggio = Messaggio & MyArrayCategory(i) & vbCrLf
    End If
Next i
Msg "Attenzione, Mancano i seguenti elementi: " & vbCrLf & _
    Messaggio, Attenzione, OK, "Elementi"
Erase MyArrayCategory
Erase Verifica
End sub
Nel Preventivo Creato ci sono queste Categorie :
    3,3,5,9,10,11,13
Procedendo come da codice mi Restituisce che mancano :
1,2,3,4,6,11,13,0,0 ( ma il 3, 11, 13 ci sono)
forse sbaglio in qualcosa

 Sapete Qualche Soluzione ? ( ANche Diversa )
    Riformulando, vuoi verificare che ogni categoria sia presente in
preventivo? Questo potrebbe essere un modo:
Option Explicit
Sub main()
  Dim MyArrayCategory(1 To 23)  As Long
  Dim MyRecords(1 To 8)         As Long
  Dim sRecords                  As String
  Dim sMissing                  As String
  Dim lIndex                    As Long
  Dim lId                       As Long
  MyArrayCategory(1) = 1   ' Cabinet
  MyArrayCategory(2) = 2   ' SchedeMadri
  MyArrayCategory(3) = 3   ' Cpu
  MyArrayCategory(4) = 3   ' Cpu
  MyArrayCategory(5) = 4   ' Mem Ram
  MyArrayCategory(6) = 5   ' Hard Disk
  MyArrayCategory(7) = 6   ' Svga
  MyArrayCategory(8) = 9   ' Modem
  MyArrayCategory(9) = 10  ' Monitor
  MyArrayCategory(10) = 11 ' Accessori
  MyArrayCategory(11) = 11 ' Accessori
  MyArrayCategory(12) = 13 ' Media
  MyArrayCategory(13) = 22 ' CD/DVD
  MyRecords(1) = 1
  MyRecords(2) = 2
  MyRecords(3) = 3
  MyRecords(4) = 4
  MyRecords(5) = 5
  MyRecords(6) = 6
  MyRecords(7) = 10
  MyRecords(8) = 13
  sRecords = ";"
  For lIndex = LBound(MyRecords) To UBound(MyRecords)
    sRecords = sRecords & MyRecords(lIndex) & ";"
  Next
  Debug.Print "sRecords=" & sRecords
  For lIndex = LBound(MyArrayCategory) To UBound(MyArrayCategory)
    lId = MyArrayCategory(lIndex)
    If lId = 0 Then
      ' Categoria non inizializzata.
    Else
      If (InStr(sRecords, ";" & lId & ";") = 0) Then
        sMissing = sMissing & lId & ";"
      End If
    End If
  Next
  Debug.Print "* ESITO *"
  If Len(sMissing) = 0 Then
    Debug.Print "Tutte le categorie sono presenti."
  Else
    Debug.Print _
        "MANCANO: " _
      & Mid$(sMissing, 1, Len(sMissing) - 1) & "."
  End If
End Sub
OUTPUT:
sRecords=;1;2;3;4;5;6;10;13;
* ESITO *
MANCANO: 9;11;11;22.
    (Ma, ripeto, perche' due categorie hanno lo stesso ID?)
    Un'altra cosa: parli di "tabella". Tabella di database? In tal caso
perche' non una query?
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 1,2,3,4,6,11,13,0,0 ( ma il 3, 11, 13 ci sono)
Il programma rispecchia esattamente quello che tu dici, a parte gli
incomprensibili doppioni che anche Maurizio ti segnala (togli Exit For dal
primo Loop e non ti segnalerà i doppini ignorati, ma presenti). Ho dei dubbi
che ti segnali la 13, semmai la 22.

 primo Loop e non ti segnalerà i doppini ignorati, ma presenti).
questi li segnaliamo con sdegno a telecom !

 questi li segnaliamo con sdegno a telecom !
Grande Java (e già cotto Lupo) ;-)))


E' Proprio Questo Il Problema, devo verificare per alcune Categorie(11 e 3 )
se sono stati inseriti almeno 2 articoli per quelle categorie dunque :
MyArrayCategory(3) = 3   ' Cpu
MyArrayCategory(4) = 3   ' Cpu
MyArrayCategory(10) = 11 ' Accessori
MyArrayCategory(11) = 11 ' Accessori
come faccio ad accorgermene ?

 se sono stati inseriti almeno 2 articoli per quelle categorie
?
Giņ, abbi pazienza, ma ti rendi conto di quanto tempo "si perde" per una
domanda mal posta?!
... e, alla fine, del tutto inutilmente?!

 servono a segnalare
Es nella MiaTabella (Preventivo) ci sono :
IDCAtegoria=1    'Cabinet
IDCAtegoria=2    'Schede Madri
IDCAtegoria=3    'Cpu
IDCAtegoria=4    'Memorie
IDCAtegoria=5    'Hard Disk
IDCAtegoria=6    'Svga
IDCAtegoria=10   'Accessori
IDCAtegoria=13  'Media
dunque dovrò visualizzare : Mancano in preventivo :
MyArrayCategory(4) = 3   ' Cpu    **********
                  MyArrayCategory(8) = 9   ' Modem
                  MyArrayCategory(9) = 10  ' Monitor
                  MyArrayCategory(11) = 11 ' Accessori ******
                  MyArrayCategory(13) = 22 ' CD/DVD
SI Capisce  !!

 SI Capisce  !!
Con tutta la disponibilità di questo mondo, ci sono due punti esclamativi di
troppo. Bye.

 troppo. Bye.
scusami se ti ho offeso !!! ma non volevo

 ha scritto nel messaggio
news:xION8.37021$5i1.1...@news2.tin.it...

assegna un numero diverso (ID, non indice) ai doppioni e, magari con qualche
aggiustamento, vedrai che funziona.
Per esempio:
    MyArrayCategory(1) = 1   ' Cabinet
    MyArrayCategory(2) = 2   ' SchedeMadri
    MyArrayCategory(3) = 3   ' Cpu
    MyArrayCategory(4) = 31   ' Cpu Acc
    MyArrayCategory(5) = 4   ' Mem Ram
    MyArrayCategory(6) = 5   ' Hard Disk
    MyArrayCategory(7) = 6   ' Svga
    MyArrayCategory(8) = 9   ' Monitor
    MyArrayCategory(9) = 10  ' Modem
    MyArrayCategory(10) = 11 ' Accessori
    MyArrayCategory(11) = 111 ' Accessori generici
    MyArrayCategory(12) = 13 ' Media
    MyArrayCategory(13) = 22 ' CD/DVD
... e la prossima volta ... scrivi con esattezza i termini del problema.

 come faccio ad accorgermene ?
    Lascia perdere, non e' cosa.
    Piuttosto, indica *chiaramente* l'organizzazione dei *dati*:
    TABELLA CATEGORIE: nome della tabella
    CAMPI: nomi dei campi significativi ai fini della soluzione
    VALORI DEI CAMPI
    TABELLA PREVENTIVO: nome della tabella
    CAMPI: nomi dei campi significativi ai fini della soluzione
    VALORI DEI CAMPI: relativi ad un preventivo


     VALORI DEI CAMPI: relativi ad un preventivo
non servono
Rivedendo un pò il codice sono riuscito a verificare tutte le categorie, ma
ed esempio ,se mi dimentico
di inserire 1 Prodotto di IDCAtegoria 1  o 11 mi dice lo stesso che è Tutto
OK.
Invece mancano Le Due , o una delle Due Categorie...
In poche parole vedendo che almeno un valore di IDcategoria 1 o 11 esiste ,
il seguente non me lo
evidenza come Mancante.
Ti Posto Il Codice :
Private Function VerificaPreventivo() As Boolean
Dim i As Long
Dim Messaggio As String
Dim Verifica(1 To 23) As Boolean
Dim MyArrayCategory(1 To 13) As Long ' Tot delle Mie Categorie
  MyArrayCategory(1) = 1   ' Cpu
  MyArrayCategory(2) = 1   ' Cpu
  MyArrayCategory(3) = 2   ' SchedeMadri
  MyArrayCategory(4) = 3   ' Cabinet
  MyArrayCategory(5) = 4   ' Mem Ram
  MyArrayCategory(6) = 5   ' Hard Disk
  MyArrayCategory(7) = 6   ' Svga
  MyArrayCategory(8) = 9   ' Monitor
  MyArrayCategory(9) = 10  ' Modem
  MyArrayCategory(10) = 11 ' Accessori
  MyArrayCategory(11) = 11 ' Accessori
  MyArrayCategory(12) = 13 ' Media
  MyArrayCategory(13) = 22 ' CD/DVD
RsPreventivo.MoveFirst    ' è il mio Recordset della Tabella Preventivo
Do While Not RsPreventivo.EOF
  If RsPreventivo!IDCategoria = 0 Then Exit Do
    For i = LBound(MyArrayCategory) To UBound(MyArrayCategory)
        If MyArrayCategory(i) = RsPreventivo!IDCategoria Then
            Verifica(i) = 1
          End If
        Next i
      RsPreventivo.MoveNext
    Loop
For i = LBound(Verifica) To UBound(Verifica)
    If Verifica(i) = 0 Then
        If MyArrayCategory(i) > 0 Then
            Messaggio = Messaggio & " - " & xPCategorie.ItemTesto("" &
MyArrayCategory(i) & "") & vbCrLf
        End If
    End If
Next i
If Len(Messaggio) = 0 Then
    VerificaPreventivo = True
        debug.print  " Preventivo Corretto"
Else
    VerificaPreventivo = False
        debug.print "Nel Preventivo Corrente, Mancano Le Seguenti Categorie:
" & vbCrLf &  Messaggio
End If
Erase MyArrayCategory
Erase Verifica
Exit Function
ErrVerifica:
Exit Function
End Function
Grazie di Tutto per Il Momento

 Ti Posto Il Codice :
    Fermo la'. Non serve. Concentrati sui dati. A proposito: che database
usi? Access? Se e' cosi' considera la query seguente:
SELECT Categorie.IDCategoria AS IDCategoria, Categorie.Categoria AS
Categoria, Categorie.NumeroPezziObbligatori AS Previsti,
Count(Preventivo.IDCategoria) AS Effettivi
FROM Preventivo RIGHT JOIN Categorie ON Preventivo.IDCategoria =
Categorie.IDCategoria
GROUP BY Categorie.IDCategoria, Categorie.Categoria,
Categorie.NumeroPezziObbligatori
HAVING (((Categorie.NumeroPezziObbligatori)>0 And
(Categorie.NumeroPezziObbligatori)>Count([Preventivo].[IDCategoria])));
    Se non sbaglio fa tutto quel che ti occorre. O no?


ci provo e ti faccio sapere !!!

     Se non sbaglio fa tutto quel che ti occorre. O no?
e se mi dimentico di inserire alcune categorie come faccio a sapere se
mancano ???
come posso confrontare le Categorie Indispensabili con le categorie presenti
nel preventivo ??
Grazie in anticipo !

 nel preventivo ??
    Cosi', per esempio:
SELECT Categorie.IDCategoria AS IDCategoria, Categorie.Categoria AS
Categoria, Categorie.NumeroPezziObbligatori AS Previsti,
Count(Preventivo.IDCategoria) AS Effettivi
FROM Preventivo RIGHT JOIN Categorie ON Preventivo.IDCategoria =
Categorie.IDCategoria
GROUP BY Categorie.IDCategoria, Categorie.Categoria,
Categorie.NumeroPezziObbligatori
HAVING (((Categorie.NumeroPezziObbligatori)>0 And
(Categorie.NumeroPezziObbligatori)>Count([Preventivo].[IDCategoria])));
    >:-]


 >
Potresti Proceder In Questo Modo :
Private Function VerificaEsistenzaProdotti() As Boolean
Dim Messaggio As String
Dim RS As ADODB.Recordset
Set RS = New ADODB.Recordset
    RS.CursorLocation = adUseClient
    RS.Open "SELECT Categorie.IDCategoria AS IDCategoria,
Categorie.Categoria AS " & _
            "Categoria, Categorie.NumeroPezziObbligatori AS Previsti, " & _
            "Count(Preventivo.IDCategoria) As Effettivi " & _
            "FROM Preventivo RIGHT JOIN Categorie ON Preventivo.IDCategoria
= " & _
            "Categorie.IDCategoria GROUP BY Categorie.IDCategoria,
Categorie.Categoria, " & _
            "Categorie.NumeroPezziObbligatori HAVING
(((Categorie.NumeroPezziObbligatori)>0 And " & _
"(Categorie.NumeroPezziObbligatori)>Count([Preventivo].[IDCategoria])));",
Connect, adOpenForwardOnly, adLockReadOnly
Do While Not RS.EOF
      If (RS!Previsti) - (RS!Effettivi) > 0 Then
            Messaggio = Messaggio & RS!Categoria & vbCrLf
      End If
    RS.MoveNext
Loop
RS.Close: Set RS = Nothing
If Len(Messaggio) = 0 Then
    VerificaEsistenzaProdotti = True
debug.print  "Preventivo Corretto !"
else
    VerificaEsistenzaProdotti = False
    Msgbox "Nel Preventivo Corrente, Mancano Le Seguenti Categorie: " &
vbCrLf & vbCrLf & _
        Messaggio,vbOKOnly + vbCritical ,"Categorie Mancanti ...."
End If
End Function
Semplice Nè !!
By Utente Win2k

 ha scritto nel messaggio
news:9VMO8.48403$5i1.1...@news2.tin.it...

Grazie Mille A Tutti e Due : (Mitici)