23/02/10 17:04
mikelinux
Salve ragazzi vi spiego il mio problema
Dim cnviewtransac As New ADODB.connection
Dim rsviewtransac As New ADODB.recordset
Dim tot, X
Call connection(cnviewtransac, App.Path & "\db1.mdb", "rbp")
Call recordset(rsviewtransac, cnviewtransac, "SELECT * FROM listaoperai WHERE nomecognome")
ListView1.ListItems.clear
With rsviewtransac
While Not .EOF
Set X = ListView1.ListItems.Add(, , .Fields!Nomecognome)
X.SubItems(1) = .Fields!Nomecognome
.MoveNext
Wend
End With
'Text18.Text = tot
Set cnviewtransac = Nothing
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
Dim cnloadclientz As New ADODB.connection
Dim rsloadclientz As New ADODB.recordset
Call connection(cnloadclientz, App.Path & "\db1.mdb", "rbp")
Call recordset(rsloadclientz, cnloadclientz, "SELECT * FROM oreoperai WHERE idg='" & Combo1.Text & "'")
With rsloadclientz
While Not .EOF
'.Fields!Nomecognome ??????????????
'ListView1.ListItems.Add = .Fields!Nomecognome ?????????????? Questo aggiunge nomi creando duplicati
ListView1.ItemCheck = .Fields!Nomecognome
'ListView1.AddItem .Fields!mezzo ??????????????
.MoveNext
Wend
End With
Set cnloadclientz = Nothing
Set rsloadclientz = Nothing
il risultato finale se trovasse solo il valore "michel xxxxx" dovra essere quello in foto
Buon Divertimento
spero di essere la palla che prende le pacche sul testone...
Ultima modifica effettuata da mikelinux 25/02/10 16:26
aaa
23/02/10 18:58
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 ...
24/02/10 11:32
mikelinux
ti invio un altra immagine per capire meglio il database
aaa
24/02/10 12:09
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) ...
24/02/10 18:20
mikelinux
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
Public Sub viewlistaoperai()
Dim lst As ListItem 'dim a listitem
Dim i As Integer 'loop
With Me.ListView1 'reference
.Checkboxes = True 'show with check boxes
.MultiSelect = True 'allow multi-selection
.HideSelection = False 'keep selection when lost focus
.FullRowSelect = True 'select the full row
.GridLines = True 'show grid lines
.View = lvwReport 'show details
'.Icons = Me.ImageList1(1) 'use this for large icons
'.SmallIcons = Me.ImageList1(0) 'for small ones
.ColumnHeaders.Add 'add a couple columns
.ColumnHeaders.Add
.ColumnHeaders(1).Text = "Nome e Cognome" 'name the columns
.ColumnHeaders(1).Width = .Width * 0.98 'column width based on width of list view
.ColumnHeaders(2).Text = ""
.ColumnHeaders(2).Width = .Width * 0
'.Arrange = lvwAutoLeft
For i = 1 To 30 'add some sample items
.ListItems.Add 1, "K" & i, "Some Text " & Format$(i, "00")
Set lst = .ListItems("K" & i) 'now work with the item
With lst
If i Mod 2 Then 'alternate the text and icons
'.Icon = "ie icon"
'.SubItems(1) = "Internet Explorer " & Format$(i, "00")
Else
'.Icon = "computer icon"
'.SubItems(1) = "Computer " & Format$(i, "00")
End If
'.SmallIcon = .Icon
End With
Next
.SortKey = 0 'first column
.Sorted = True 'sort it
.ListItems(1).Selected = True 'select the first one
.ListItems(1).EnsureVisible 'make sure it is visible
.ListItems(1).Checked = True 'check this one as well
'Text4 = Val(Text4.Text) + Val(1)
End With
'For Each itm In Me.ListView1.ListItems
' itm.Checked = bValue
'Next
'--inizio listaoperai access-------------------------------------------------------------------------
Dim cnviewtransac As New ADODB.connection
Dim rsviewtransac As New ADODB.recordset
Dim tot, X
Call connection(cnviewtransac, App.Path & "\db1.mdb", "rbp")
Call recordset(rsviewtransac, cnviewtransac, "SELECT * FROM listaoperai WHERE nomecognome")
ListView1.ListItems.clear
With rsviewtransac
While Not .EOF
Set X = ListView1.ListItems.Add(, , .Fields!Nomecognome)
X.SubItems(1) = .Fields!Nomecognome
.MoveNext
Wend
End With
'Text18.Text = tot
Set cnviewtransac = Nothing
Set rsviewtransac = Nothing
'---fine listaoperai access --------------------------------------------------------------------------
End Sub
Private Sub wievoreoperai()
Dim cnloadclientz As New ADODB.connection
Dim rsloadclientz As New ADODB.recordset
Call connection(cnloadclientz, App.Path & "\db1.mdb", "rbp")
'Call recordset(rsloadclientz, cnloadclientz, "SELECT * FROM oreoperai ORDER BY IDg ASC")
Call recordset(rsloadclientz, cnloadclientz, "SELECT * FROM oreoperai WHERE idg='" & Combo1.Text & "'")
With rsloadclientz
While Not .EOF
'.Fields!Nomecognome
'ListView1.ListItems.Add = .Fields!Nomecognome
ListView1.ItemCheck = .Fields!Nomecognome
.MoveNext
Wend
End With
Set cnloadclientz = Nothing
Set rsloadclientz = Nothing
End Sub
ti allego altra foto...
Ultima modifica effettuata da mikelinux 25/02/10 16:32
aaa
24/02/10 18:57
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 ...
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 24/02/10 18:58
25/02/10 9:18
mikelinux
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
Dim cnloadclientz As New ADODB.connection
Dim rsloadclientz As New ADODB.recordset
Call connection(cnloadclientz, App.Path & "\db1.mdb", "rbp")
'Call recordset(rsloadclientz, cnloadclientz, "Select * FROM oreoperai ORDER BY IDg ASC")
Call recordset(rsloadclientz, cnloadclientz, "Select * FROM oreoperai WHERE id='" & Combo1.Text & "'")
With rsloadclientz
While Not .EOF
ListView1.ItemCheck = .Fields!id
' il problema rimane non è questo il comando per ceccare id gia esistenti...
.MoveNext
Wend
End With
Set cnloadclientz = Nothing
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?
ListView1.deviceccamaledettastringa .Fields!id :rofl:
Ultima modifica effettuata da mikelinux 25/02/10 15:00
aaa
25/02/10 16:25
mikelinux
Dim cnloadclientz As New ADODB.connection
Dim rsloadclientz As New ADODB.recordset
Call connection(cnloadclientz, App.Path & "\db1.mdb", "rdf")
Call recordset(rsloadclientz, cnloadclientz, "SELECT * FROM oreoperai WHERE idg='" & Combo1.Text & "'")
With rsloadclientz
While Not .EOF
For Each ListItem In Me.ListView1.ListItems
If .Fields!id= ListView1.Checkboxes Then
ListItem.Checked
End If
Next
.MoveNext
Wend
End With
Set cnloadclientz = Nothing
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?
Ultima modifica effettuata da mikelinux 25/02/10 17:38
aaa