Quantcast
Channel: Visual Basic Tips and Tricks
Viewing all articles
Browse latest Browse all 2212

Vb2010 - Importare dati da mdb a mysql...lento

$
0
0

Ciao a tutti.

Sono disperato!!

Devo migrare i dati da mdb (97) a mysql.

Gli mdb sono più di uno e tutt'insieme hanno 1.600.000 (Anagrafica) e circa 10.000.000 di relativi movimenti...

Ora niente di più facile con un normalissimo programma tipo HeidiSql o Navicat o altri...la cosa avviene in meno di 10/20 minuti ...anche meno.

Ho fatto la mia applicazione con Vb2010.....ho preso i tempi...4 GIORNI!!!

Questo è il mio codice :

Dim NomeArcMysql As String = ""
        If LbNPartizioni.Text <>"" And TxtNomeArchivio.Text <>"" Then
            ' lo scopo è quello di creare un (uno) archivio in mysql a partire da una lista di archivi mdb
            ' il nuovo archivio avrà tante tabelle a seconda di quanti record si decida che le tabelle clienti debbano contenere
            ' quindi avrò un db in mysql con tante tabelle tipo  Clienti1,Clienti2,Movimenti1,Movimenti2...            
            '
            
            'QUINDI creare l'archivio i mysql
            NomeArcMysql = TxtNomeArchivio.Text.ToLower
            Dim Cn As New MySqlConnection("Data Source="& IPSERVER & ";User ID="& USERMYSQL & ";Password="& PASSWORDMYSQL & ";")
            Cn.Open()
            Dim cmd As New MySqlCommand("Create database "& TxtNomeArchivio.Text & ";", Cn)
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            Cn.Close()
            ''archivio creato
            
            Cn.ConnectionString = ("Data Source="& IPSERVER & ";User ID="& USERMYSQL & ";Password="& PASSWORDMYSQL & ";database="& TxtNomeArchivio.Text & ";")
            Cn.Open()

            Dim numtab As Integer = 0
            Dim Tabella As String = ""
            Dim strsql As String = ""
            Dim CodiceClienteNew As Integer = 0
            Dim ProgressivoNew As Integer = 0
            For r = 0 To LstArc.Items.Count - 1 ' ELENCO ARCHIVI MDB
                ' 3 travaso i dati
                Dim conta As Integer = 0
                Dim dtCliMdb As recordTmp = fTrovaGenericoNewMdb(cnstrMdb & LstArc.Items(r), "Select * from Clienti order by Cap")
                Dim dtPerifMdb As recordTmp = fTrovaGenericoNewMdb(cnstrMdb & LstArc.Items(r), "Select * from Periferia")
                If dtCliMdb.NumRecord > 0 Then
                    For recCli = 1 To dtCliMdb.NumRecord
                        If conta < CInt(TxtNumMaxClienti.Text) Then
                            conta = conta + 1
                            If conta = 1 Then
                               'CREO LE TABELLE
                                numtab = numtab + 1
                                Tabella = "Clienti"& (numtab).ToString
                                strsql = "SELECT * FROM "& Tabella & " where 1=2"

                                '2 creare le tabelle e viste
                                Dim cmdTabClienti As New MySqlCommand(sql per creare la tabella clienti, Cn)
                                cmdTabClienti.ExecuteNonQuery()
                                cmdTabClienti.Dispose()

                                Dim cmdTabMovimenti As New MySqlCommand(sql per creare la tabella movimenti, Cn)
                                cmdTabMovimenti.ExecuteNonQuery()
                                cmdTabMovimenti.Dispose()

                                Dim createVista = "CREATE view bla bla..."
                                Dim cmdVistaTotali As New MySqlCommand(sql per creare la vista , Cn)
                                cmdVistaTotali.ExecuteNonQuery()
                                cmdVistaTotali.Dispose()
                            End If

                            Tabella = "Clienti"& (numtab).ToString
                            strsql = "SELECT * FROM "& Tabella & " where 1=2"
                            
                            'CREO GLI OGGETTI PER IL DB
                            Dim myDA = New MySqlDataAdapter(strsql, Cn)
                            Dim myCB = New MySqlCommandBuilder(myDA)
                            Dim myDS = New DataSet
                            'aggiungo in mysql

                            CodiceClienteNew = CodiceClienteNew + 1
                            Dim Row As DataRow

                            myDA.Fill(myDS, Tabella)
                            Row = myDS.Tables(0).NewRow
                            For ncampo = 1 To 52
                                Row(ncampo) = dtCliMdb.dt.Rows(recCli - 1).Item(ncampo)
                            Next
                            Row("Codice Cliente") = CodiceClienteNew ' RIASSEGNO IL NUOVO CODICE CLIENTE CHE E' LO STESSO DELL'ID
                            Row("Codice_Periferia") = numtab
                            Row("VecchioCodice") = dtCliMdb.dt.Rows(recCli - 1).Item("Codice Cliente") & "*"& dtPerifMdb.Record("Codice Periferia") 'CONSERVO CMQ IL VECCHIO CODICE

                            myDS.Tables(0).Rows.Add(Row)
                            myDA.Update(myDS.Tables(Tabella))
                           

                            'ora I Movimenti
                            Tabella = "Movimenti"& (numtab).ToString
                            strsql = "SELECT * FROM "& Tabella & " where 1=2"

                            Dim dtMovMdb As recordTmp = fTrovaGenericoNewMdb(cnstrMdb & LstArc.Items(r), "Select * from Movimenti where [Codice Cliente]="& dtCliMdb.dt.Rows(recCli - 1).Item("Codice Cliente"))
                            If dtMovMdb.NumRecord > 0 Then
                                Dim myDAMov = New MySqlDataAdapter(strsql, Cn)
                                Dim myCBMov = New MySqlCommandBuilder(myDAMov)
                                Dim myDSMov = New DataSet
                                Dim RowMov As DataRow

                                myDAMov.Fill(myDSMov, Tabella)

                                For recMov = 1 To dtMovMdb.NumRecord
                                    ProgressivoNew = ProgressivoNew + 1
                                    RowMov = myDSMov.Tables(0).NewRow
                                    For ncampo = 1 To 22
                                        RowMov(ncampo) = dtMovMdb.dt.Rows(recMov - 1).Item(ncampo)
                                    Next
                                    RowMov("Progressivo") = ProgressivoNew
                                    RowMov("Codice Cliente") = CodiceClienteNew
                                    RowMov("Codice_Periferia") = numtab
                                    RowMov("VecchioCodice") = dtCliMdb.dt.Rows(recCli - 1).Item("Codice Cliente") & "*"& dtPerifMdb.Record("Codice Periferia") ' conservo il vecchio codice
                                    RowMov("VecchioProgressivo") = dtMovMdb.dt.Rows(recMov - 1).Item("Progressivo") & "*"& dtPerifMdb.Record("Codice Periferia") 'conservo il vecchio progressivo
                                    
                                    myDSMov.Tables(0).Rows.Add(RowMov)
                                    myDAMov.Update(myDSMov.Tables(Tabella))
                                Next
                 
                            End If
                         Else
                            conta = 0
                            CodiceClienteNew = 0
                            ProgressivoNew = 0
                        End If

                    Next
                End If
            Next

            Cn.Close()


            MsgBox("ok Finito")



        End If

 

Questa è la struttura che restituisce  fTrovaGenericoNewMdb

Public Structure recordTmp
        Dim NumRecord As Integer
        Dim Record As Data.DataRow
        Dim dt As DataTable

End Structure 

Questa è la funzione fTrovaGenericoNewMdb che restituisce recordTmp

Public Function fTrovaGenericoNewMdb(ByVal ConnessioneStr As String, ByVal SqlString As String) As recordTmp

        fTrovaGenericoNewMdb = Nothing

        Dim conn As New OleDb.OleDbConnection

        If Not conn Is Nothing Then conn.Close()
        conn.ConnectionString = ConnessioneStr
        conn.Open()

        Dim cmd As New OleDbCommand
        cmd.Connection = conn

        Dim adp As OleDbDataAdapter = New OleDbDataAdapter(SqlString, conn)
        adp.SelectCommand.CommandTimeout = 600000
        Dim dt As DataTable = New DataTable()
        adp.Fill(dt)

        conn.Close()
        fTrovaGenericoNewMdb.NumRecord = 0
        fTrovaGenericoNewMdb.Record = Nothing
        fTrovaGenericoNewMdb.dt = dt
        If dt.Rows.Count > 0 Then
            fTrovaGenericoNewMdb.NumRecord = dt.Rows.Count
            fTrovaGenericoNewMdb.Record = dt.Rows(0)
        End If

    End Function 

Dove sbaglio ??

Perchè è così lento ?


Viewing all articles
Browse latest Browse all 2212

Trending Articles


HOY PANGIT, MAGBAYAD KA!


Henry el monstruo feliz para colorear e imprimir


Dama y vagabundo para pintar


Girasoles para colorear


Good Morning Quotes


RE: Mutton Pies (jameskoiman)


Hagibis (1946) by Francisco V. Coching


Ka riam ka beit bad ka por riam


Vimeo Create - Video Maker & Editor 1.6.0 by Vimeo Inc


Vimeo 3.42.1 by Vimeo Inc