Da VB6 a NET

Il forum per porre domande e dare risposte su argomenti riguardanti il mondo della programmazione.

Moderatore: Staff forum IlSoftware.it

italo_vb6
Messaggi: 8
Iscritto il: 10 feb 2016 22:11

Da VB6 a NET

Messaggioda italo_vb6 » 30 mar 2016 23:49

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" onclick="window.open(this.href);return false;
https://youtu.be/f-xSW86Muog" onclick="window.open(this.href);return false;

Chi volesse può anche approfondire l' argomento, c' è un altro thread aperto (DBM Player)

Avatar utente
Zen
Advanced Software
Advanced Software
Messaggi: 2964
Iscritto il: 20 mag 2003 14:58
Località: Dalle parti di Ravenna
Contatta:

Re: Da VB6 a NET

Messaggioda Zen » 01 apr 2016 15:04

Volendo potresti importare il riferimento ad ADODB all'interno del progetto (e il tuo codice dovrebbe risultare ancora valido).

italo_vb6
Messaggi: 8
Iscritto il: 10 feb 2016 22:11

Re: Da VB6 a NET

Messaggioda italo_vb6 » 11 apr 2016 21:12

Scusate il ritardo.
Il mio codice e la mia applicazione SONO ancora validi e fuzionano perfettamente. (cliccare sui link per vedere)
Vorrei convertire il tutto in Vb Net per implementare il programma e interfacciarlo al Web in maniera più efficiente.
Ma vedo dura, molto dura

Avatar utente
BRYGER
Advanced Software
Advanced Software
Messaggi: 1054
Iscritto il: 24 set 2004 16:15

Re: Da VB6 a NET

Messaggioda BRYGER » 03 mag 2016 09:36

Gli oggetti per l'accesso ai dati nel .net framework sono notevolmente più efficienti di quelli del vb6 inoltre hai diverse possibilità a disposizione; puoi usare oggetti resultset come hai fatto te oppure oggetti disconnessi come datatable/dataset, dipende cosa vuoi fare; sicuramente se vuoi creare un'applicazione desktop è assurdo aprire e chiudere la connessione al db ogni volta, se invece vuoi creare un'applicazione web è obbligatorio farlo ma in questo caso entrano in gioco tutta una serie di altre problematiche, dipende molto dalla tecnologia che usi, se fai un progetto asp.net web form devi fare in un modo, se usi asp.net mvc in un altro, puoi usare servizi web WCF, insomma di tutto di più; inoltre ultimamente si usano i famosi ORM per accedere ai dati in modo da lavorare ad oggetti con un livello intermedio fra l'applicazione e il database (ad esempio uno è entity framework), insomma il .NET frmework ti da una miriade di possibilità (e purtroppo anche di complessità) in più; forse preliminarmente dovresti spiegare cosa vuoi realizzare in modo che possiamo darti suggerimenti più precisi....

italo_vb6
Messaggi: 8
Iscritto il: 10 feb 2016 22:11

Re: Da VB6 a NET

Messaggioda italo_vb6 » 04 mag 2016 22:30

Quello che vorrei fare è convertire una mia applicazione che come ho già detto e visibile in questi tutorial
https://youtu.be/4SXhPb-ck2s" onclick="window.open(this.href);return false;
https://youtu.be/f-xSW86Muog" onclick="window.open(this.href);return false;

Comunque ci sto lavorando e i problemi non mancano:
Qualcuno sa dirmi perché per far intercettare l'evento in sub GestioneErrori devo premere uno dei due button due volte ???
Questo è il codice:

Private Sub GestioneErrori()
CkErrore = True
Risposta = ""
Beep()
LblMessaggio.Visible = True
BntNo.Visible = True
BntSi.Visible = True
DisabilitaPulsanti()
Do Until CkErrore = False
Thread.Sleep(5)
Application.DoEvents()
Loop
End Sub

Private Sub BntNo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntNo.Click
WsQuestion = False
Risposta = "No"
BntNo.Visible = False
BntSi.Visible = False
LblMessaggio.Text = ""
AbilitaPulsanti()
CkErrore = False
End Sub

Private Sub BntSi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BntSi.Click
WsQuestion = False
Risposta = "Si"
BntNo.Visible = False
BntSi.Visible = False
LblMessaggio.Text = ""
AbilitaPulsanti()
CkErrore = False
End Sub

Avatar utente
BRYGER
Advanced Software
Advanced Software
Messaggi: 1054
Iscritto il: 24 set 2004 16:15

Re: Da VB6 a NET

Messaggioda BRYGER » 05 mag 2016 14:19

Se vuoi rifarla così com'è di sicuro puoi fare un'applicazione windows form o se vuoi studiare puoi usare wpf ma nel tuo caso rimarrei sul classico; per l'accesso ai dati puoi usare oledb utilizzando oggetti come oledbcomand, oledbresultset, oledbconnection; la connessione la apri quando lanci il programma e la chiudi quando lo termini.

La cosa importante è che non devi semplicemente riadattare il programma partendo dal vb6 ma devi proprio modificare la logica con cui scrivi il codice passando da un sistema procedurale/ad eventi verso uno totalmente ad oggetti/eventi previo studio su questo sistema, che ormai non può più nemmeno essere definito nuovo dato che è dai primi anni 2000 che è in voga......

Per quanto riguarda la domanda proprio non l'ho capita, come fai a lanciare la procedura gestioneerrori se nei due pulsanti non c'è il riferimento?