DICA SOBRE OPTIMIZACAO
pessoal, eu aqui dnovo..
dessa vez para pedir opnial sobre uma conexao com mysql.
1º . a conexao: no modulo
Public Sub ConnectMySQL() [ô]Conecta no MySQL
Try
myCON = New MySql.Data.MySqlClient.MySqlConnection([Ô]server=[Ô] & MySQLHost & [Ô];User id=[Ô] & MySQLUsuario & [Ô];password=[Ô] & MySQLSenha & [Ô];database=[Ô] & MySQLDataBase)
myCON.Open()
Catch ex As Exception
MsgBox([Ô]Erro ao conectar[Ô], vbCritical, [Ô]Atenção![Ô])
Exit Sub
End Try
End Sub
Public Sub SetNew(ByVal NUM As String, ByVal IDPROD As String, ByVal DESC As String, ByVal EMB As String, ByVal QT As String, ByVal DT As String, ByVal NUMEMPRESA As String)
Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & NUM & [Ô][ô],[ô][Ô] & IDPROD & [Ô][ô],[ô][Ô] & DESC & [Ô][ô],[ô][Ô] & EMB & [Ô][ô],[ô][Ô] & QT & [Ô][ô],[ô][Ô] & DT & [Ô][ô],[ô][Ô] & NUMEMPRESA & [Ô][ô])[Ô], myCON)
myDRR = myCMD.ExecuteReader()
myDRR.Close()
myCMD.Dispose()
Catch ex As Exception
End Try
End Sub
2º . agora no form:
Public Sub Gravar()
Dim codempresa As String = Trim(FrmMenu.lblcodempr.Text)
For i = 0 To FrmCot.DGVCOT.Rows.Count - 1
SetNew(Trim(FrmCot.lblNUMPED.Text), FrmCot.DGVCOT.Rows(i).Cells(0).Value, FrmCot.DGVCOT.Rows(i).Cells(1).Value, FrmCot.DGVCOT.Rows(i).Cells(2).Value, FrmCot.DGVCOT.Rows(i).Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))
Next i
DisconnectMySQL()
MsgBox([Ô]Enviando com sucesso![Ô], vbInformation, [Ô]Enviando dados p/ web[Ô])
Me.Close()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Cursor = Cursors.WaitCursor
Gravar
Me.Cursor = Cursors.Arrow
End Sub
essa gambi, faz todo processo que deve
porem fiz um teste com 1500 itens (praticamente e isso que precisarei), demorou aprox. 6 minutos e 30 segundos.
tem como deixa-lo mais rapido?
dessa vez para pedir opnial sobre uma conexao com mysql.
1º . a conexao: no modulo
Public Sub ConnectMySQL() [ô]Conecta no MySQL
Try
myCON = New MySql.Data.MySqlClient.MySqlConnection([Ô]server=[Ô] & MySQLHost & [Ô];User id=[Ô] & MySQLUsuario & [Ô];password=[Ô] & MySQLSenha & [Ô];database=[Ô] & MySQLDataBase)
myCON.Open()
Catch ex As Exception
MsgBox([Ô]Erro ao conectar[Ô], vbCritical, [Ô]Atenção![Ô])
Exit Sub
End Try
End Sub
Public Sub SetNew(ByVal NUM As String, ByVal IDPROD As String, ByVal DESC As String, ByVal EMB As String, ByVal QT As String, ByVal DT As String, ByVal NUMEMPRESA As String)
Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & NUM & [Ô][ô],[ô][Ô] & IDPROD & [Ô][ô],[ô][Ô] & DESC & [Ô][ô],[ô][Ô] & EMB & [Ô][ô],[ô][Ô] & QT & [Ô][ô],[ô][Ô] & DT & [Ô][ô],[ô][Ô] & NUMEMPRESA & [Ô][ô])[Ô], myCON)
myDRR = myCMD.ExecuteReader()
myDRR.Close()
myCMD.Dispose()
Catch ex As Exception
End Try
End Sub
2º . agora no form:
Public Sub Gravar()
Dim codempresa As String = Trim(FrmMenu.lblcodempr.Text)
For i = 0 To FrmCot.DGVCOT.Rows.Count - 1
SetNew(Trim(FrmCot.lblNUMPED.Text), FrmCot.DGVCOT.Rows(i).Cells(0).Value, FrmCot.DGVCOT.Rows(i).Cells(1).Value, FrmCot.DGVCOT.Rows(i).Cells(2).Value, FrmCot.DGVCOT.Rows(i).Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))
Next i
DisconnectMySQL()
MsgBox([Ô]Enviando com sucesso![Ô], vbInformation, [Ô]Enviando dados p/ web[Ô])
Me.Close()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.Cursor = Cursors.WaitCursor
Gravar
Me.Cursor = Cursors.Arrow
End Sub
essa gambi, faz todo processo que deve
porem fiz um teste com 1500 itens (praticamente e isso que precisarei), demorou aprox. 6 minutos e 30 segundos.
tem como deixa-lo mais rapido?
1 - Não use ExecuteReader se vai somente inserir e não buscar o resultado da inserção.
2 - Você pode usar um stringbuilder para criar um único parâmetro de valores e inserir todos os valores com um só comando, mais ou menos assim:
dim valores As New StringBuilder
dim valor As string
For i = 0 To FrmCot.DGVCOT.Rows.Count - 1
With FrmCot.DGVCOT.Rows(i)
valor = string.Format([Ô]({0},{1},{2},{3},{4},{5},{6}),[Ô], .Cells(0).Value, .Cells(1).Value, .Cells(2).Value, .Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))
valores.Append(valor)
Next i
valor = valores.ToString().Substring(1, valores.ToString().Length - 1)
Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & valor & [Ô])[Ô], myCON)
myDRR = myCMD.ExecuteNonQuery()
myDRR.Close()
myCMD.Dispose()
Catch ex As Exception
End Try
2 - Você pode usar um stringbuilder para criar um único parâmetro de valores e inserir todos os valores com um só comando, mais ou menos assim:
dim valores As New StringBuilder
dim valor As string
For i = 0 To FrmCot.DGVCOT.Rows.Count - 1
With FrmCot.DGVCOT.Rows(i)
valor = string.Format([Ô]({0},{1},{2},{3},{4},{5},{6}),[Ô], .Cells(0).Value, .Cells(1).Value, .Cells(2).Value, .Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))
valores.Append(valor)
Next i
valor = valores.ToString().Substring(1, valores.ToString().Length - 1)
Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & valor & [Ô])[Ô], myCON)
myDRR = myCMD.ExecuteNonQuery()
myDRR.Close()
myCMD.Dispose()
Catch ex As Exception
End Try
KERPLUNK, coloquei este codigo mas nao deu certo..
o correto e colocar tudo isso ai em uma sub ?
ou cria-la separadamente?
esta parte aqui nao da certo, o vb diz que este tipo é integer e nao pode ser convertido para string.
myDRR = myCMD.ExecuteNonQuery()
... se voce tiver mas dicas ai... ficarei agradecido.
obrigado, desde ja
o correto e colocar tudo isso ai em uma sub ?
ou cria-la separadamente?
esta parte aqui nao da certo, o vb diz que este tipo é integer e nao pode ser convertido para string.
myDRR = myCMD.ExecuteNonQuery()
... se voce tiver mas dicas ai... ficarei agradecido.
obrigado, desde ja
Dicas:
1 - Aprenda o que são cada um dos comandos, simplesmente copiar e colar código não serve, você precisa entender o que está acontecendo
O que eu passei é uma sugestão, escrevi o código direto aqui no tópico e nem testei é só pra você entender a idéia.
O correto mesmo é fazer um modelo orientado à objetos e usar. Tem vários artigos e tópicos aqui mesmo no fórum sobre o assunto.
1 - Aprenda o que são cada um dos comandos, simplesmente copiar e colar código não serve, você precisa entender o que está acontecendo
O que eu passei é uma sugestão, escrevi o código direto aqui no tópico e nem testei é só pra você entender a idéia.
Citação:o correto e colocar tudo isso ai em uma sub ?
ou cria-la separadamente?
O correto mesmo é fazer um modelo orientado à objetos e usar. Tem vários artigos e tópicos aqui mesmo no fórum sobre o assunto.
KERPLUNK, mais 1 vez me ajuda ai por favor.. pois nao consegui nao tenho conhecimento neste assunto.
tentei diversas formas mais o que recebo e a mensagem:
traduzida: dados muito longo para a coluna cotnumped na linha 1
o codigo ta assim:
Public Sub NovoCmd()
Dim valores As New StringBuilder
Dim valor As String
Dim codempresa As String = Trim(FrmMenu.lblcodempr.Text)
Dim numped As String = Trim(FrmCot.lblNUMPED.Text)
For i = 0 To FrmCot.DGVCOT.Rows.Count - 1
With FrmCot.DGVCOT.Rows(i)
valor = String.Format([Ô]({0},{1},{2},{3},{4},{5},{6}),[Ô], Trim(numped), .Cells(0).Value, .Cells(1).Value, .Cells(2).Value, .Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))
valores.Append(valor)
End With
Next i
valor = valores.ToString().Substring(1, valores.ToString().Length - 1)
Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & valor & [Ô][ô])[Ô], myCON)
myDRR = myCMD.ExecuteReader()
myDRR.Close()
myCMD.Dispose()
DisconnectMySQL()
Label2.Text = [Ô][Ô]
Button2.Enabled = True
Button3.Enabled = False
MsgBox([Ô]Enviando com sucesso![Ô], vbInformation, [Ô]Enviando dados p/ web[Ô])
Catch ex As Exception
DisconnectMySQL()
MsgBox([Ô]Erro [Ô] & vbCrLf & ex.ToString, MsgBoxStyle.Critical, [Ô]Erro na gravação[Ô])
End Try
End Sub
agradeço ajuda, desde ja.
agora vou dormir com essa... rsrsssrs ja sao 02:28:00 (madruga)
tentei diversas formas mais o que recebo e a mensagem:
traduzida: dados muito longo para a coluna cotnumped na linha 1
o codigo ta assim:
Public Sub NovoCmd()
Dim valores As New StringBuilder
Dim valor As String
Dim codempresa As String = Trim(FrmMenu.lblcodempr.Text)
Dim numped As String = Trim(FrmCot.lblNUMPED.Text)
For i = 0 To FrmCot.DGVCOT.Rows.Count - 1
With FrmCot.DGVCOT.Rows(i)
valor = String.Format([Ô]({0},{1},{2},{3},{4},{5},{6}),[Ô], Trim(numped), .Cells(0).Value, .Cells(1).Value, .Cells(2).Value, .Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))
valores.Append(valor)
End With
Next i
valor = valores.ToString().Substring(1, valores.ToString().Length - 1)
Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & valor & [Ô][ô])[Ô], myCON)
myDRR = myCMD.ExecuteReader()
myDRR.Close()
myCMD.Dispose()
DisconnectMySQL()
Label2.Text = [Ô][Ô]
Button2.Enabled = True
Button3.Enabled = False
MsgBox([Ô]Enviando com sucesso![Ô], vbInformation, [Ô]Enviando dados p/ web[Ô])
Catch ex As Exception
DisconnectMySQL()
MsgBox([Ô]Erro [Ô] & vbCrLf & ex.ToString, MsgBoxStyle.Critical, [Ô]Erro na gravação[Ô])
End Try
End Sub
agradeço ajuda, desde ja.
agora vou dormir com essa... rsrsssrs ja sao 02:28:00 (madruga)
Pessoal, por favor alguem pra me da uma luz
alguem por favor...
Obrigado!
alguem por favor...
Obrigado!
me ajude por favor....
Tópico encerrado , respostas não são mais permitidas