Vb.net gli sviluppatori con mente perversa

martedì 29 giugno 2010 - 10.22

ste.chi Profilo | Newbie

Ciao raga ho da pochissimo iniziato ad usare vb.net è stò impazzendo con i database, dopo una miriade di tempo per capire come fare per usarli ( forse sono io che non capisco ma con il vb6 era tutto molto più facile...) ora non capisco come potermi posizionare su un determinato record.
da quello che ho capito devo usare l'istruzione objCurrencyManager.Position = (indice della riga) ma come posso fare per trovare l'indice della riga ????. appena inserito un nuovo record come posso saperlo ???
Mi date una mano GRAZIE...

Carlik Profilo | Junior Member

>Ciao raga ho da pochissimo iniziato ad usare vb.net è stò impazzendo
>con i database, dopo una miriade di tempo per capire come fare
>per usarli ( forse sono io che non capisco ma con il vb6 era
>tutto molto più facile...) ora non capisco come potermi posizionare
>su un determinato record.
>da quello che ho capito devo usare l'istruzione objCurrencyManager.Position
>= (indice della riga) ma come posso fare per trovare l'indice
>della riga ????. appena inserito un nuovo record come posso saperlo
>???
>Mi date una mano GRAZIE...


Si , ma cosa stai utilizzando ? Il datareader?
Hai studiato ADO ? I vantaggi sono pazzeschi nell'uso di ADO..per non parlare poi di LINQ...

ste.chi Profilo | Newbie

Io uso questo tipo di connessione al database


Imports System.Data
Imports System.Data.OleDb

Public Class Clienti


Dim objConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\database\cliente.mdb;Persist Security Info=False")
Dim objDataAdapter As New OleDbDataAdapter("SELECT * from medico", objConnection)
Dim objDataSet As DataSet
Dim objDataView As DataView
Dim objCurrencyManager As CurrencyManager
Dim newedit As String
Dim KIAVE As String


Private Sub FillDataSetAndView()

' Initialize a new instance of the DataSet object...
objDataSet = New DataSet()

' Fill the DataSet object with data...
objDataAdapter.Fill(objDataSet, "medico")

' Set the DataView object to the DataSet object...
objDataView = New DataView(objDataSet.Tables("medico"))

' Set our CurrencyManager object to the DataView object...
objCurrencyManager = CType(Me.BindingContext(objDataView), CurrencyManager)
'DgViewAllCustomers.DataSource = objDataView

End Sub

Carlik Profilo | Junior Member

In base al tuo codice non capisco a che ti serve l'indice della riga.
A prescindere da questo devi esplorare la datatable 0esima del tuo dataset e accedi direttamente alla riga interessata.
Per esempio se vuoi accedere alla 4°riga della tabella del dataset

ds.tables(0).rows(3)

e così via...

ste.chi Profilo | Newbie

ti spiego quando salvo un nuovo record e faccio il refresh mi si posiziona sul primo record io volevo che si posizionasse sul record appena inserito, se uso rowfilter, da quello che ho capito vi attiva un filtro e visualizzo solo quelli o quello che soddisfa la condizione.

Carlik Profilo | Junior Member

>ti spiego quando salvo un nuovo record e faccio il refresh mi
>si posiziona sul primo record io volevo che si posizionasse sul
>record appena inserito,

Chi si posiziona?

>se uso rowfilter, da quello che ho capito
>vi attiva un filtro e visualizzo solo quelli o quello che soddisfa
>la condizione.

rowfilter mi pare poi sia un metodo del bindingsource , non della datatable...

ste.chi Profilo | Newbie

ti posto il pezzo del programma così forse capisci come uso i database
quello che non capisco e se devo posizionarmi su un particolare record (in vb6 usavo findfirst <criterio di selezione>) come posso fare ... usando l'istruzione position devo passare id della riga come faccio a reperirlo ?
scusami ma trovo complicato il passaggio da vb6 al net

Imports System.Data
Imports System.Data.OleDb

Public Class Clienti


Dim objConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\database\cliente.mdb;Persist Security Info=False")
Dim objDataAdapter As New OleDbDataAdapter("SELECT * from medico", objConnection)
Dim objDataSet As DataSet
Dim objDataView As DataView
Dim objCurrencyManager As CurrencyManager
Dim newedit As String
Dim KIAVE As String


Private Sub FillDataSetAndView()

objDataSet = New DataSet()
objDataAdapter.Fill(objDataSet, "medico")
objDataView = New DataView(objDataSet.Tables("medico"))
objCurrencyManager = CType(Me.BindingContext(objDataView), CurrencyManager)

End Sub
Private Sub BindFields()

TextBox3.DataBindings.Clear()
TextBox2.DataBindings.Clear()
TextBox4.DataBindings.Clear()
TextBox5.DataBindings.Clear()
TextBox3.DataBindings.Add("Text", objDataView, "codice")
TextBox2.DataBindings.Add("Text", objDataView, "ragsoc")
TextBox4.DataBindings.Add("Text", objDataView, "piva")
TextBox5.DataBindings.Add("Text", objDataView, "cf")
End Sub

Private Sub ShowPosition(ByVal tipo As String, ByVal CERCAIL As String)
' Display the current position and the number of records
Select Case tipo
Case "TROVA"

Case "REFRESH"
End Select
Label29.Text = objCurrencyManager.Position + 1 & _
" of " & objCurrencyManager.Count()
End Sub

Private Sub Clienti_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FillDataSetAndView()
ShowPosition("REFRESH", "")
BindFields()
End Sub

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
' Move to Next Record
objCurrencyManager.Position -= 1
ShowPosition("REFRESH", "")
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
' Move to Next Record
objCurrencyManager.Position += 1
ShowPosition("REFRESH", "")
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
newedit = "NUOVO"
Button3.Visible = True
Button1.Enabled = False
TextBox3.Focus()
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If newedit = "NUOVO" Then

Dim objCommand As OleDbCommand = New OleDbCommand()

objConnection.Open()
objCommand.Connection = objConnection

objCommand.CommandText = "INSERT INTO medico (ID,CODICE, RAGSOC,PIVA,CF) VALUES(@id,@CODICE,@RAGSOC,@PIVA,@CF);"
' Dim gk As String = GENERAKIAVE
KIAVE = Format(DateTime.Parse(Now), "dd/MM/yyyy") + Format(DateTime.Parse(Now), "hh:mm:ss")
objCommand.Parameters.AddWithValue("@id", KIAVE)
objCommand.Parameters.AddWithValue("@CODICE", TextBox3.Text)
objCommand.Parameters.AddWithValue("@RAGSOC", TextBox2.Text)
objCommand.Parameters.AddWithValue("@PIVA", TextBox4.Text)
objCommand.Parameters.AddWithValue("@CF", TextBox5.Text)
Try
objCommand.ExecuteNonQuery()
Catch OleDbExceptionErr As OleDbException
MessageBox.Show(OleDbExceptionErr.Message)
End Try
objConnection.Close()
FillDataSetAndView()
BindFields()
ShowPosition("TROVA", KIAVE)
newedit = ""
Button3.Visible = False
Button1.Enabled = True
Else
End If
End Sub


Private Sub ComboBox4_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox4.SelectedIndexChanged
Dim strval As String
strval = Me.ComboBox4.Text
Select Case UCase(strval)
Case "CODICE"
strval = "CODICE"
Case "RAGIONE SOCIALE"
strval = "RAGSOC"
End Select
objDataView.Sort = strval
ShowPosition("REFRESH", "")
End Sub

Private Sub Button20_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button20.Click
Select Case UCase(Me.ComboBox1.Text)
Case "[ TUTTI ]"
objDataView.RowFilter = ""
Case "CODICE CLIENTE"
objDataView.RowFilter = "CODICE LIKE '" & TextBox1.Text & "*'"
Case "RAGIONE SOCIALE"
objDataView.RowFilter = "RAGSOC LIKE '" & TextBox1.Text & "*'"
End Select
ShowPosition("REFRESH", "")
End Sub
End Class

Carlik Profilo | Junior Member

>ti posto il pezzo del programma così forse capisci come uso i
>database
>quello che non capisco e se devo posizionarmi su un particolare
>record (in vb6 usavo findfirst <criterio di selezione>)
>come posso fare ... usando l'istruzione position devo passare
>id della riga come faccio a reperirlo ?
>scusami ma trovo complicato il passaggio da vb6 al net

Diciamo che se devi reperire informazioni riguardo alla riga 3 fai così :
dim r as datarow = objDataSet.Tables(0).rows(2)

e poi accedi ai campi che ti interessano così

r("NomeCampo")

Se invece , per esempio sai che devi accedere alla riga con Id = 413 puoi fare così
dim r as datarow = objDataSet.Tables(0).Select("ID=413")(0)

ste.chi Profilo | Newbie

Grazie per l'aiuto ho provato ad usare l'istruzione

Dim R As DataRow = objDataSet.Tables(0).Select("ID='25/06/201006:59:59'")(0)

però il puntatore non mi si posiziona sul record con ID=25/06/201006:59:59 devo aggiungere qualche altra istruzione per posizionarmi sul record

.Tables(0) lo 0 è la tabella del database ? e lo 0 alla fine della riga cosa indica ?

ho provato a cercare in giro ma non ho torvato o non ho capito molto

Grazie ancora per l'aiuto

Carlik Profilo | Junior Member

>Grazie per l'aiuto ho provato ad usare l'istruzione
>
>Dim R As DataRow = objDataSet.Tables(0).Select("ID='25/06/201006:59:59'")(0)

Sei sicuro che come Id della tua tabella hai una data?ricorda che id è un mio esempio che in realtà indica il nome di una colonna.
E inoltre '25/06/201006:59:59' , sei sicuro che non ci siano spazi tra 2010 e 06 ?

>però il puntatore non mi si posiziona sul record con ID=25/06/201006:59:59
>devo aggiungere qualche altra istruzione per posizionarmi sul
>record

Ricorda che non hai puntatori qui!!!

>.Tables(0) lo 0 è la tabella del database ? e lo 0 alla fine
>della riga cosa indica ?

Siccome tables è una collezione di tabelle del dataset tu accedi alla prima tabella del ds...
Ma ti consiglierei di studiare un po' ado....

ste.chi Profilo | Newbie

si io ho un campo del database che si chiama id e il codice l'ho copiato direttamente daldatabase per verificare se si posiziona sul record che desidero

dove posso trovare un semplice manuale che mi faccia capire in maniera semplice come funzionano le ADO
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5