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 ?