Da VB6 a Net

mercoledì 30 marzo 2016 - 22.34

Italo_vb6 Profilo | Newbie

Da qualche giorno ho installato visual studio 2010 per convertire uma mia applicazione da vb6 a vbNet.

Sinceramente credevo che la cosa fosse meno complessa.

Praticamente devo rivedere tutto il codice; e fin qui poco male (anche se si tratta di decine di migliaia di righe), ma il problema secondo me è l'accesso ai database. L'approccio credo sia totalmente diverso e per una gestione dei dati sul proprio PC, inutilmente macchinoso e lento (dai primi tentativi fatti).
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Con il vecchio VB6 dopo aver aperto il database con:

Set dbsMusica = OpenDatabase(PathDB & "\Musica.mdb")

Leggo la tabella rstAlbum e con l' istruzione Seek punto subito al recordo che cerco e leggo e trattto tutti i campi che voglio . Inoltre possso disporre delle istruzioni AddNew Delete Update ecc.
Inoltre con un loop Do While True posso continuare a scorrere i record fino a che voglio. L' accesso al record è praticamente immediato e l' applicazione, nonostante centinaia di letture non ne risente.

Private Sub LeggiBrano()
Trovato = False
Set rstBrani = dbsMusica.OpenRecordset("Brani", dbOpenTable)
With rstBrani
.Index = "IDBra"
.Seek "=", KeyBrano
If .NoMatch Then Exit Sub
Trovato = True
NomeBrano = !BraTitolo
BraNumBrano = !BraNumBra
.Close
End With
End Sub
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Questo il tentativo fatto in vb2010.

Private Sub TrovaConExecuteReader2()
Dim PercorsoDB As String =(PathDB & "\Musica.mdb")
Dim ConnString As String = "Provider= Microsoft.Jet.OLEDB.4.0; " & "Data Source =" & PercorsoDB
Dim Cn As New OleDbConnection(ConnString)
Dim dr As OleDbDataReader
Dim cmd As OleDbCommand
Dim SqlString As String

Cn.Open()
SqlString = "SELECT [BraTitolo] FROM Brani WHERE IDBra = 1"
cmd = New OleDb.OleDbCommand(SqlString, Cn)
dr = cmd.ExecuteReader()
If dr.Read() Then
NomeBrano = dr.Item("BraTitolo").ToString()
End If
Cn.Close()
End Sub


Funziona, ma è sicuramente più lento. Forse perchè la connessione col DB viene chiusa ogni volta?
Il metodo ExecuteReader è corretto?
Considerando che i programmi dell' applicazione necessitano di continui accessi alle diverse tabelle si può tenere aperta una connessione fino alla chiusura dell'applicazione?


P.S.
L'applicazione su cui dovrei lavorare è visibile in questi due link di presentazione

https://youtu.be/4SXhPb-ck2s
https://youtu.be/f-xSW86Muog

Chi volesse può anche approfondire l' argomento, magari aprirò un' altro thread.



ridaria Profilo | Expert

>Da qualche giorno ho installato visual studio 2010 per convertire
>uma mia applicazione da vb6 a vbNet.
>
>Sinceramente credevo che la cosa fosse meno complessa.
>
>Praticamente devo rivedere tutto il codice; e fin qui poco male
>(anche se si tratta di decine di migliaia di righe), ma il problema
>secondo me è l'accesso ai database. L'approccio credo sia totalmente
>diverso e per una gestione dei dati sul proprio PC, inutilmente
>macchinoso e lento (dai primi tentativi fatti).
>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>Con il vecchio VB6 dopo aver aperto il database con:
>
>Set dbsMusica = OpenDatabase(PathDB & "\Musica.mdb")
>
>Leggo la tabella rstAlbum e con l' istruzione Seek punto subito
>al recordo che cerco e leggo e trattto tutti i campi che voglio
>. Inoltre possso disporre delle istruzioni AddNew Delete Update
>ecc.
>Inoltre con un loop Do While True posso continuare a scorrere
>i record fino a che voglio. L' accesso al record è praticamente
>immediato e l' applicazione, nonostante centinaia di letture
>non ne risente.
>
>Private Sub LeggiBrano()
> Trovato = False
>Set rstBrani = dbsMusica.OpenRecordset("Brani", dbOpenTable)
> With rstBrani
> .Index = "IDBra"
> .Seek "=", KeyBrano
> If .NoMatch Then Exit Sub
> Trovato = True
> NomeBrano = !BraTitolo
> BraNumBrano = !BraNumBra
> .Close
> End With
>End Sub
>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> Questo il tentativo fatto in vb2010.
>
> Private Sub TrovaConExecuteReader2()
> Dim PercorsoDB As String =(PathDB & "\Musica.mdb")
>Dim ConnString As String = "Provider= Microsoft.Jet.OLEDB.4.0;
>" & "Data Source =" & PercorsoDB
> Dim Cn As New OleDbConnection(ConnString)
> Dim dr As OleDbDataReader
> Dim cmd As OleDbCommand
> Dim SqlString As String
>
> Cn.Open()
>SqlString = "SELECT [BraTitolo] FROM Brani WHERE IDBra = 1"
> cmd = New OleDb.OleDbCommand(SqlString, Cn)
> dr = cmd.ExecuteReader()
> If dr.Read() Then
> NomeBrano = dr.Item("BraTitolo").ToString()
> End If
> Cn.Close()
> End Sub
>
>
>Funziona, ma è sicuramente più lento. Forse perchè la connessione
>col DB viene chiusa ogni volta?
esatto se chiudi la connessione ogni volta, è chiaro che avrai maggiore lentezza.


>Il metodo ExecuteReader è corretto?
certo è il metodo per leggere dati

>Considerando che i programmi dell' applicazione necessitano di
>continui accessi alle diverse tabelle si può tenere aperta una
>connessione fino alla chiusura dell'applicazione?
Dipende, non puoi certo tenerla aperta sempre devi aprirla quando occorre.

su che DB sei?
Access Immagino? allora di sicuro è un pò più lento

>
>
>P.S.
>L'applicazione su cui dovrei lavorare è visibile in questi due
>link di presentazione
>
>https://youtu.be/4SXhPb-ck2s
>https://youtu.be/f-xSW86Muog
>
>Chi volesse può anche approfondire l' argomento, magari aprirò
>un' altro thread.
>
>
>
>

Riccardo D'Aria

Italo_vb6 Profilo | Newbie

Scusa il ritardo ridaria ho avuto diversi problemi ..........

Tu dici che la connessione col DB va aperta solo quando occorre e sicuramente questo è vero per sistemi con più PC
che accedeono agli stessi archivi.
Per un applicazione che gira solo in 'locale' che bisogno c'è di chiuderla se non alla fine del programma stesso?

Per quanto riguarda il tipo di DATABASE Access è lo stesso che uso con VB6 dove ti garantisco come ho già detto,
che i tempi di attesa per ricerche ( anche su campi non indicizzati ) in tabelle con decine di migliaia di record ,
sono trascurabili.

Puoi verificarlo se clicchi sui link che ho postato dove ho pubblicato due tutorial.

Grazie e credo che non mancherò di approfittare della tua disponibilità ; di dubbi e incertezze ne ho in abbondanza.
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