Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - ListView1 come si fa un check multiplo su input gia esistenti?
Forum - Visual Basic 6 - ListView1 come si fa un check multiplo su input gia esistenti?

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
mikelinux (Normal User)
Newbie


Messaggi: 8
Iscritto: 23/02/2010

Segnala al moderatore
Postato alle 18:04
Martedì, 23/02/2010
Salve ragazzi vi spiego il mio problema

Codice sorgente - presumibilmente VB.NET

  1. Dim cnviewtransac As New ADODB.connection
  2. Dim rsviewtransac As New ADODB.recordset
  3.  
  4. Dim tot, X
  5.                                  
  6. Call connection(cnviewtransac, App.Path & "\db1.mdb", "rbp")
  7. Call recordset(rsviewtransac, cnviewtransac, "SELECT * FROM listaoperai WHERE nomecognome")
  8.                                                                            
  9.  
  10.                                                                            
  11. ListView1.ListItems.clear
  12.                                        
  13.     With rsviewtransac
  14.         While Not .EOF
  15.             Set X = ListView1.ListItems.Add(, , .Fields!Nomecognome)
  16.                 X.SubItems(1) = .Fields!Nomecognome
  17.                 .MoveNext
  18.         Wend
  19.  
  20.     End With
  21.  
  22.     'Text18.Text = tot
  23.    
  24.  
  25.    
  26. Set cnviewtransac = Nothing
  27. Set rsviewtransac = Nothing



fin qui tutto ok ora arriva il bello perche ora voglio che che carico nel prossimo code siano riconosciuti tra quelli inseriti nel primo code e quindi ceccati

Codice sorgente - presumibilmente VB.NET

  1. Dim cnloadclientz As New ADODB.connection
  2. Dim rsloadclientz As New ADODB.recordset
  3.  
  4. Call connection(cnloadclientz, App.Path & "\db1.mdb", "rbp")
  5. Call recordset(rsloadclientz, cnloadclientz, "SELECT * FROM oreoperai WHERE idg='" & Combo1.Text & "'")
  6.  
  7. With rsloadclientz
  8.     While Not .EOF
  9.  
  10.     '.Fields!Nomecognome ??????????????
  11.  
  12.     'ListView1.ListItems.Add = .Fields!Nomecognome ?????????????? Questo aggiunge nomi creando duplicati
  13.      ListView1.ItemCheck = .Fields!Nomecognome
  14.      
  15.    
  16.     'ListView1.AddItem .Fields!mezzo ??????????????
  17.  
  18.     .MoveNext
  19.     Wend
  20. End With
  21.  
  22. Set cnloadclientz = Nothing
  23. Set rsloadclientz = Nothing



il risultato finale se trovasse solo il valore "michel xxxxx" dovra essere quello in foto

Buon Divertimento :pat: spero di essere la palla che prende le pacche sul testone...


mikelinux ha allegato un file: Immagine.JPG (5817 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da mikelinux il 25/02/2010 alle 17:26
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:58
Martedì, 23/02/2010
Scusa ... ma quali dati devi estrarre dal tuo DB ?

E come è fatto il DB ? E' normalizzato ?

Le frasi SQL che usi non sono chiare ... questo tipo di problemi si affrontano con una corretta impostazione del DB e con le corrette interrogazioni ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
mikelinux (Normal User)
Newbie


Messaggi: 8
Iscritto: 23/02/2010

Segnala al moderatore
Postato alle 12:32
Mercoledì, 24/02/2010
ti invio un altra immagine per capire meglio il database


mikelinux ha allegato un file: Immagine2.JPG (128975 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:09
Mercoledì, 24/02/2010
Il DB non è normalizzato e questo è un grosso problema per il tuo programma.

Nella tabella delle "orelavorate" non ci va il "Cognome e Nom" ma l'ID corrispondente presente nella tabella "listaoperai".

Fatto questo, quale risultato vorresti ottenere (intendo come dati visualizzati a chi utilizza il programma) ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
mikelinux (Normal User)
Newbie


Messaggi: 8
Iscritto: 23/02/2010

Segnala al moderatore
Postato alle 19:20
Mercoledì, 24/02/2010
ti ringrazio per avermi risposto cmq non credo che tu abbia capito il problema e in parte credo sia colpa mia almeno spero....

il fatto è che in listview1 sono presenti dei nomi gia immessi da una tabella che sarebbero gli opreai dell azienda e se fossero 10 ce ne sarebbero 10 presenti con come e cognome... detto cio io voglio che il programma mi selezioni sono quelli che in quella data quindi idg erano presenti ceccandoli....

esempio se michel era presente quel giorno il programma deve ceccarmi sono michel nella lista dei 10 operai presenti

il codice del form modifica giornaliera
Codice sorgente - presumibilmente VB.NET

  1. Public Sub viewlistaoperai()
  2.     Dim lst As ListItem     'dim a listitem
  3.     Dim i As Integer        'loop
  4.    
  5.     With Me.ListView1       'reference
  6.         .Checkboxes = True          'show with check boxes
  7.         .MultiSelect = True         'allow multi-selection
  8.         .HideSelection = False      'keep selection when lost focus
  9.         .FullRowSelect = True       'select the full row
  10.         .GridLines = True           'show grid lines
  11.         .View = lvwReport           'show details
  12.         '.Icons = Me.ImageList1(1)   'use this for large icons
  13.         '.SmallIcons = Me.ImageList1(0)  'for small ones
  14.         .ColumnHeaders.Add          'add a couple columns
  15.         .ColumnHeaders.Add
  16.         .ColumnHeaders(1).Text = "Nome e Cognome"     'name the columns
  17.         .ColumnHeaders(1).Width = .Width * 0.98     'column width based on width of list view
  18.         .ColumnHeaders(2).Text = ""
  19.         .ColumnHeaders(2).Width = .Width * 0
  20.         '.Arrange = lvwAutoLeft
  21.        
  22.         For i = 1 To 30             'add some sample items
  23.             .ListItems.Add 1, "K" & i, "Some Text " & Format$(i, "00")
  24.             Set lst = .ListItems("K" & i)   'now work with the item
  25.             With lst
  26.                 If i Mod 2 Then     'alternate the text and icons
  27.                     '.Icon = "ie icon"
  28.                     '.SubItems(1) = "Internet Explorer " & Format$(i, "00")
  29.                    
  30.                 Else
  31.                     '.Icon = "computer icon"
  32.                     '.SubItems(1) = "Computer " & Format$(i, "00")
  33.                 End If
  34.                 '.SmallIcon = .Icon
  35.             End With
  36.         Next
  37.         .SortKey = 0    'first column
  38.         .Sorted = True  'sort it
  39.         .ListItems(1).Selected = True   'select the first one
  40.         .ListItems(1).EnsureVisible     'make sure it is visible
  41.         .ListItems(1).Checked = True    'check this one as well
  42.        
  43.         'Text4 = Val(Text4.Text) + Val(1)
  44.     End With
  45.     'For Each itm In Me.ListView1.ListItems
  46.     '    itm.Checked = bValue
  47.     'Next
  48. '--inizio listaoperai access-------------------------------------------------------------------------
  49. Dim cnviewtransac As New ADODB.connection
  50. Dim rsviewtransac As New ADODB.recordset
  51.  
  52. Dim tot, X
  53.                                  
  54. Call connection(cnviewtransac, App.Path & "\db1.mdb", "rbp")
  55. Call recordset(rsviewtransac, cnviewtransac, "SELECT * FROM listaoperai WHERE nomecognome")
  56.                                                                            
  57.  
  58.                                                                            
  59. ListView1.ListItems.clear
  60.                                        
  61.     With rsviewtransac
  62.         While Not .EOF
  63.             Set X = ListView1.ListItems.Add(, , .Fields!Nomecognome)
  64.                 X.SubItems(1) = .Fields!Nomecognome
  65.  
  66.                 .MoveNext
  67.         Wend
  68.  
  69.     End With
  70.  
  71.     'Text18.Text = tot
  72.    
  73.  
  74.    
  75. Set cnviewtransac = Nothing
  76. Set rsviewtransac = Nothing
  77. '---fine listaoperai access --------------------------------------------------------------------------
  78.  
  79. End Sub
  80.  
  81. Private Sub wievoreoperai()
  82. Dim cnloadclientz As New ADODB.connection
  83. Dim rsloadclientz As New ADODB.recordset
  84.  
  85. Call connection(cnloadclientz, App.Path & "\db1.mdb", "rbp")
  86. 'Call recordset(rsloadclientz, cnloadclientz, "SELECT * FROM oreoperai ORDER BY IDg ASC")
  87. Call recordset(rsloadclientz, cnloadclientz, "SELECT * FROM oreoperai WHERE idg='" & Combo1.Text & "'")
  88.  
  89. With rsloadclientz
  90.     While Not .EOF
  91.  
  92.    
  93.    
  94.     '.Fields!Nomecognome
  95.     'ListView1.ListItems.Add = .Fields!Nomecognome
  96.      ListView1.ItemCheck = .Fields!Nomecognome
  97.      
  98.    
  99.  
  100.     .MoveNext
  101.     Wend
  102. End With
  103.  
  104. Set cnloadclientz = Nothing
  105. Set rsloadclientz = Nothing
  106. End Sub




ti allego altra foto...


mikelinux ha allegato un file: Immagine3.JPG (222274 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da mikelinux il 25/02/2010 alle 17:32
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:57
Mercoledì, 24/02/2010
Testo quotato

Postato originariamente da mikelinux:

ti ringrazio per avermi risposto cmq non credo che tu abbia capito il problema e in parte credo sia colpa mia almeno spero....



Invece ho capito ma forse non mi sono spiegato a sufficienza ...

Testo quotato

il fatto è che in listview1 sono presenti dei nomi gia immessi da una tabella che sarebbero gli opreai dell azienda e se fossero 10 ce ne sarebbero 10 presenti con come e cognome... detto cio io voglio che il programma mi selezioni sono quelli che in quella data quindi idg erano presenti ceccandoli....



Questo tipo di problemi si affrontano con opportune query (in genere delle SELECT con dei JOIN) tramite cui chiedere al DBMS esattamente e direttamente le informazioni che ti servono. Ma per porterlo fare è necessario che il database sia correttamente progettato, cosa che non è per il tuo DB.

Da questo derivano tutti i problemi che hai (e ne potranno nascere tanti altri ...).


Ultima modifica effettuata da nessuno il 24/02/2010 alle 19:58


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
mikelinux (Normal User)
Newbie


Messaggi: 8
Iscritto: 23/02/2010

Segnala al moderatore
Postato alle 10:18
Giovedì, 25/02/2010
ho seguito il tuo consiglio nell ottimizzazione del database mettendo Nella tabella delle "orelavorate" l'ID corrispondente presente nella tabella "listaoperai". il fatto pero rimane che il problema è rimasto non so la stringa per ceccare

Codice sorgente - presumibilmente VB.NET

  1. Dim cnloadclientz As New ADODB.connection
  2. Dim rsloadclientz As New ADODB.recordset
  3.  
  4. Call connection(cnloadclientz, App.Path & "\db1.mdb", "rbp")
  5. 'Call recordset(rsloadclientz, cnloadclientz, "Select * FROM oreoperai ORDER BY IDg ASC")
  6. Call recordset(rsloadclientz, cnloadclientz, "Select * FROM oreoperai WHERE id='" & Combo1.Text & "'")
  7.  
  8. With rsloadclientz
  9.     While Not .EOF
  10.  
  11.  
  12.      ListView1.ItemCheck = .Fields!id
  13.     ' il problema rimane non è questo il comando per ceccare id gia esistenti...  
  14.    
  15.  
  16.     .MoveNext
  17.     Wend
  18. End With
  19.  
  20. Set cnloadclientz = Nothing
  21. Set rsloadclientz = Nothing



l'unica cosa che ora penso a questo punto è che sia sbagliato il ragionamento a livello programmazione... al che riformulo la domanda come faccio a ceccare id gia esistenti?

Codice sorgente - presumibilmente Plain Text

  1. ListView1.deviceccamaledettastringa .Fields!id :rofl:


Ultima modifica effettuata da mikelinux il 25/02/2010 alle 16:00
PM Quote
Avatar
mikelinux (Normal User)
Newbie


Messaggi: 8
Iscritto: 23/02/2010

Segnala al moderatore
Postato alle 17:25
Giovedì, 25/02/2010
Codice sorgente - presumibilmente VB.NET

  1. Dim cnloadclientz As New ADODB.connection
  2. Dim rsloadclientz As New ADODB.recordset
  3.  
  4. Call connection(cnloadclientz, App.Path & "\db1.mdb", "rdf")
  5. Call recordset(rsloadclientz, cnloadclientz, "SELECT * FROM oreoperai WHERE idg='" & Combo1.Text & "'")
  6.  
  7. With rsloadclientz
  8.     While Not .EOF
  9.  
  10.     For Each ListItem In Me.ListView1.ListItems
  11.     If .Fields!id= ListView1.Checkboxes Then
  12.     ListItem.Checked
  13.     End If
  14.     Next
  15.  
  16.     .MoveNext
  17.     Wend
  18. End With
  19.  
  20. Set cnloadclientz = Nothing
  21. Set rsloadclientz = Nothing



ho fatto in questo modo ma non funziona ancora :( sono fermo da 2 giorni credo che il ListView1 non sia ottimale per questo genere di cose voi che ne pensate?:grr:

Ultima modifica effettuata da mikelinux il 25/02/2010 alle 18:38
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:48
Giovedì, 25/02/2010
Facci capire bene ...

Hai modificato il DB come ?  Adesso quali sono le tabelle ? Descrivi anche il significato dei campi che hai inserito in ogni tabella coinvolta (mi sembra che siano due le tabelle) ...

E cosa vuoi ottenere dai dati che stanno in quelle tabelle ?

Perchè nella lista inserisci "tutti" gli operai per poi selezionare quelli che ti servono ? Perchè non inserisci solo gli operai che ti servono ?



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo