PDA

Visualizza la versione completa : Aiuto!


simomis
28-05-2002, 09:27
Ciao,
io ho una combobox e devo fare in modo che quando l'utente scieglie un'opzione si apre la pag o finestra per inserire alcuni dati. come devo fare?

kiva
28-05-2002, 10:41
Option Explicit


Private cnAdo As ADODB.Connection, m_strConn As String
Private Sub ReLoadCombo()


Dim Sql As String
Dim rsAdo As New ADODB.Recordset

Set cnAdo = New ADODB.Connection
Combo1.Clear

m_strConn = "Data Source= " & App.Path & "\prova.mdb" & ";User ID=Admin;Password=;"
cnAdo.Provider = "Microsoft.Jet.OLEDB.4.0"

Sql = "SELECT * FROM PROVA"

cnAdo.IsolationLevel = adXactCursorStability
cnAdo.Open m_strConn
If cnAdo.State = adStateOpen Then
'********************
With rsAdo
.ActiveConnection = cnAdo
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockReadOnly
.Source = Sql
.Open
End With

If rsAdo.EOF = False Then
rsAdo.MoveFirst
Do While Not rsAdo.EOF
Combo1.AddItem rsAdo!NOME
'MEMORIZZO L'ID DELLA PERSONA CHE è SEMPRE UNIVOCO PERCHè
'è UN CAMPO CONTATORE.
Combo1.ItemData(Combo1.NewIndex) = rsAdo!ID
rsAdo.MoveNext
Loop
End If

rsAdo.Close
Set rsAdo = Nothing


Combo1.Text = txt_nome(0).Text

End If


End Sub

Private Sub RiempiCombo()

Dim Sql As String
Dim rsAdo As New ADODB.Recordset

Set cnAdo = New ADODB.Connection

m_strConn = "Data Source= " & App.Path & "\prova.mdb" & ";User ID=Admin;Password=;"
cnAdo.Provider = "Microsoft.Jet.OLEDB.4.0"

Sql = "SELECT * FROM PROVA"

cnAdo.IsolationLevel = adXactCursorStability
cnAdo.Open m_strConn
If cnAdo.State = adStateOpen Then
'********************
With rsAdo
.ActiveConnection = cnAdo
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockReadOnly
.Source = Sql
.Open
End With

If rsAdo.EOF = False Then
rsAdo.MoveFirst
Do While Not rsAdo.EOF
Combo1.AddItem rsAdo!NOME
'MEMORIZZO L'ID DELLA PERSONA CHE è SEMPRE UNIVOCO PERCHè
'è UN CAMPO CONTATORE.
Combo1.ItemData(Combo1.NewIndex) = rsAdo!ID
rsAdo.MoveNext
Loop
End If

rsAdo.Close
Set rsAdo = Nothing


If Combo1.ListCount > 0 Then
Combo1.ListIndex = 0
End If

End If

End Sub

Private Sub cmd_Elimina_Click()


Dim rsAdo As New ADODB.Recordset, IdPersona As Long, Sql As String

If Combo1.ListCount = 0 Then
MsgBox "Eliminati tutti"
Exit Sub
End If

If MsgBox("Vuoi eliminare " & Combo1.List(Combo1.ListIndex) & "?", vbQuestion + vbYesNo, App.Title) = vbNo Then
Exit Sub
End If

Set cnAdo = New ADODB.Connection
cnAdo.Provider = "Microsoft.Jet.OLEDB.4.0"
'prendo l'id univoco che è nell'itemdata dell'elemento corrente
IdPersona = Combo1.ItemData(Combo1.ListIndex)
'faccio una query per trovarlo oppure puoi usare SEEK se è un campo indicizzato
'o il FINDFIRST.
Sql = "SELECT ID FROM PROVA WHERE ID = " & IdPersona & ""

cnAdo.IsolationLevel = adXactCursorStability
cnAdo.Open m_strConn

If cnAdo.State = adStateOpen Then
'********************
With rsAdo
.ActiveConnection = cnAdo
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Source = Sql
.Open
End With

If rsAdo.EOF = False Then 'SE LO TROVA...
rsAdo.Delete
Combo1.RemoveItem (Combo1.ListIndex)
End If

rsAdo.Close
Set rsAdo = Nothing

If Combo1.ListCount > 0 Then
Combo1.ListIndex = 0
Else
Combo1.ListIndex = -1
End If

End If

End Sub

Private Sub cmd_Inserisci_Click()

Dim rsAdo As New ADODB.Recordset, I As Integer

For I = 0 To 1
If Len(Trim(txt_nome(I).Text)) = 0 Then
MsgBox "Campo obbligatorio"
txt_nome(I).SetFocus
Exit Sub
End If
Next

Set cnAdo = New ADODB.Connection
cnAdo.Provider = "Microsoft.Jet.OLEDB.4.0"

cnAdo.IsolationLevel = adXactCursorStability
cnAdo.Open m_strConn

If cnAdo.State = adStateOpen Then
'********************
With rsAdo
.ActiveConnection = cnAdo
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open ("PROVA"), cnAdo, , , adCmdTable
.AddNew
rsAdo!NOME = txt_nome(0).Text
rsAdo!INDIRIZZO = txt_nome(1).Text
.Update
End With

rsAdo.Close
Set rsAdo = Nothing

ReLoadCombo

End If

End Sub

Private Sub Combo1_Click()

Dim strConn As String
Dim Sql As String
Dim IdCliente As Long
Dim rsAdo As ADODB.Recordset

Set rsAdo = New ADODB.Recordset

IdCliente = Combo1.ItemData(Combo1.ListIndex)

Sql = "SELECT * FROM PROVA WHERE ID = " & IdCliente & ""

cnAdo.IsolationLevel = adXactCursorStability
If cnAdo.State = adStateOpen Then
'********************
With rsAdo
.ActiveConnection = cnAdo
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockReadOnly
.Source = Sql
.Open
End With

If rsAdo.EOF = False Then
rsAdo.MoveFirst
Label1.Caption = rsAdo!NOME
Label2.Caption = rsAdo!INDIRIZZO
rsAdo.MoveNext
End If

rsAdo.Close
Set rsAdo = Nothing

End If

End Sub


Private Sub Form_Load()
RiempiCombo
End Sub



Private Sub Form_Unload(Cancel As Integer)

cnAdo.Close
Set cnAdo = Nothing

Unload Me

End Sub

darkblOOd
28-05-2002, 10:45
:eek:

per la serie: "Lo faccio iiiiiiiiiiiiiiiiiiiiiiiiiiiiiio il prograaaaaaaaaaaaaaaaaaaaamma!"
Oriano Ferrari

kiva
28-05-2002, 11:15
Comunque bisogna saperlo applicare!
E poi..............:confused:.......insomma ho esagerato lo ammetto
la prossima volta mi limiterò a dare dei suggerimenti promesso!:tongue:
Ma perchè poi?:master:

darkblOOd
28-05-2002, 11:34
:p
:smack:
:ciauz:

s_peppe
02-06-2002, 12:36
ciao kiva,

dato ke 6 così 'GENEROSA' nell'elargire codice, mi posteresti qualke piccolo esempio sulla seek in ado (l'argomento non mi è molto chiaro).
secondo te, avere dei campi indicizzati ed effettuare le ricerche con le 'select * bla.. bla... bla..' è efficace?

kiva
03-06-2002, 09:34
Tramite la stringa di SQL (Select.....ecc) seleziono la tabella o le tabelle di un db cui mi interessa tirare sù i dati.
Secondo me e il metodo più semplice ed efficace per poter "giocare" con i dati!

Loading