INSTRU?ÃO DO WHILE ... LOOP OU WHILE ... WEND
Pessoal,
Bom dia!
Converti meu banco de dados de Access para SQL Server 2008 e necessito mudar o código também. Neste caso tenho uma rotina que busca em uma determinada tabela a quantidade de registros que possue e em outra tabela grava as informações de acordo com a primeira. Isto ficaria assim:
Tabela 1: Empresas (18) registros
Tabela 2: Divisao_Mercadoria
O meu código em ACCESS foi escrito desta forma:
On Error GoTo erronovo
Dim mqtde As Integer
Dim msoma, X As Integer
mcodigo = txtproduto
mqtde = InputBox([Ô]Quantidade[Ô], [Ô]Divisão de Mercadorias[Ô], 0)
Ttempdiv.Index = [Ô]IdxTempDiv[Ô]
midseqdivisao = CInt(txtsequencial)
[ô]inicia a divisao
Tempresa.MoveFirst
msoma = 0
Do While Not Tempresa.EOF
[ô]divide mercadoria para as empresas
mpeso = Tempresa([Ô]peso[Ô])
mdivisao = ((mqtde * mpeso))
Tdivisao.AddNew
Tdivisao([Ô]IdSeqDivisao[Ô]) = midseqdivisao
Tdivisao([Ô]idproduto[Ô]) = mcodigo
Tdivisao([Ô]idempresa[Ô]) = Tempresa([Ô]IdEmpresa[Ô])
Tdivisao([Ô]qtde[Ô]) = mdivisao
Tdivisao([Ô]data_divisao[Ô]) = Date
Tdivisao([Ô]Fantasia[Ô]) = Tempresa([Ô]Fantasia[Ô])
Tdivisao([Ô]Sufixo[Ô]) = Tempresa([Ô]Sufixo[Ô])
Tdivisao.Update
msoma = msoma + mdivisao
[ô]pega proxima empresa
Tempresa.MoveNext
Loop
Ttempdiv.AddNew
Ttempdiv([Ô]IdProduto[Ô]) = mcodigo
Ttempdiv([Ô]Qtde[Ô]) = mqtde
Ttempdiv([Ô]Data[Ô]) = Date
Ttempdiv([Ô]IdSeqDivisao[Ô]) = midseqdivisao
Ttempdiv.Update
MsgBox [Ô]Divisão do produto concluÃda.[Ô], vbExclamation, [Ô]Divisão de Mercadorias[Ô]
txtsoma = msoma
btndivide_Click
txtproduto.SetFocus
[ô]GRAVA SEQUENCIA DO REGISTRO
Tsistema.Edit
Tsistema([Ô]Contador[Ô]) = mcontador
Tsistema.Update
erronovo:
If Err Then
MsgBox Err.Description
End If
End Sub
Agora preciso fazer isto usando comandos para SQL, como dizer ao VB ler os registros de uma tabela no SQL Server até o fim?
Att.
Bom dia!
Converti meu banco de dados de Access para SQL Server 2008 e necessito mudar o código também. Neste caso tenho uma rotina que busca em uma determinada tabela a quantidade de registros que possue e em outra tabela grava as informações de acordo com a primeira. Isto ficaria assim:
Tabela 1: Empresas (18) registros
Tabela 2: Divisao_Mercadoria
O meu código em ACCESS foi escrito desta forma:
On Error GoTo erronovo
Dim mqtde As Integer
Dim msoma, X As Integer
mcodigo = txtproduto
mqtde = InputBox([Ô]Quantidade[Ô], [Ô]Divisão de Mercadorias[Ô], 0)
Ttempdiv.Index = [Ô]IdxTempDiv[Ô]
midseqdivisao = CInt(txtsequencial)
[ô]inicia a divisao
Tempresa.MoveFirst
msoma = 0
Do While Not Tempresa.EOF
[ô]divide mercadoria para as empresas
mpeso = Tempresa([Ô]peso[Ô])
mdivisao = ((mqtde * mpeso))
Tdivisao.AddNew
Tdivisao([Ô]IdSeqDivisao[Ô]) = midseqdivisao
Tdivisao([Ô]idproduto[Ô]) = mcodigo
Tdivisao([Ô]idempresa[Ô]) = Tempresa([Ô]IdEmpresa[Ô])
Tdivisao([Ô]qtde[Ô]) = mdivisao
Tdivisao([Ô]data_divisao[Ô]) = Date
Tdivisao([Ô]Fantasia[Ô]) = Tempresa([Ô]Fantasia[Ô])
Tdivisao([Ô]Sufixo[Ô]) = Tempresa([Ô]Sufixo[Ô])
Tdivisao.Update
msoma = msoma + mdivisao
[ô]pega proxima empresa
Tempresa.MoveNext
Loop
Ttempdiv.AddNew
Ttempdiv([Ô]IdProduto[Ô]) = mcodigo
Ttempdiv([Ô]Qtde[Ô]) = mqtde
Ttempdiv([Ô]Data[Ô]) = Date
Ttempdiv([Ô]IdSeqDivisao[Ô]) = midseqdivisao
Ttempdiv.Update
MsgBox [Ô]Divisão do produto concluÃda.[Ô], vbExclamation, [Ô]Divisão de Mercadorias[Ô]
txtsoma = msoma
btndivide_Click
txtproduto.SetFocus
[ô]GRAVA SEQUENCIA DO REGISTRO
Tsistema.Edit
Tsistema([Ô]Contador[Ô]) = mcontador
Tsistema.Update
erronovo:
If Err Then
MsgBox Err.Description
End If
End Sub
Agora preciso fazer isto usando comandos para SQL, como dizer ao VB ler os registros de uma tabela no SQL Server até o fim?
Att.
Pelo que estou vendo, esse código não tem nada de mais, acho que funcionaria perfeitamente com SQL Server. Já experimentou simplesmente mudar a string de conexão e rodar assim mesmo?
Kerplunk,
Segue minha string de conexão.
[ô]Configuração Dados de Acesso
Global MyslqServidor As String
Global MyslqUsuario As String
Global MyslqSenha As String
Global MyslqDatabase As String
[ô]Configuração ADO
Global cn As New ADODB.Connection
Global rs, RsDivisao, RsTempDiv, RsSistema As New ADODB.Recordset
[ô]Dados Para Conexão ao Banco MySQL
Public Function Dados_Servidor()
MyslqServidor = [Ô]MTH09-PC[Ô]
MyslqUsuario = [Ô]divisao[Ô] [ô]admin
MyslqSenha = [Ô]metha2016[Ô] [ô]admin
MyslqDatabase = [Ô]Dbdivisao[Ô]
End Function
Public Function Conexao_Servidor(ByVal ssql As String)
Dados_Servidor [ô]Carrega parametros do servidor
If cn.State = 1 Then [ô]Igual a 1 a conexão esta aberta
Exit Function
End If
cn.Provider = [Ô]SQLOLEDB[Ô]
cn.Properties([Ô]Data Source[Ô]).Value = MyslqServidor
cn.Properties([Ô]Initial Catalog[Ô]).Value = MyslqDatabase
cn.Properties([Ô]User ID[Ô]).Value = MyslqUsuario
cn.Properties([Ô]Password[Ô]).Value = MyslqSenha
cn.ConnectionTimeout = 0
cn.Open
End Function
Segue minha string de conexão.
[ô]Configuração Dados de Acesso
Global MyslqServidor As String
Global MyslqUsuario As String
Global MyslqSenha As String
Global MyslqDatabase As String
[ô]Configuração ADO
Global cn As New ADODB.Connection
Global rs, RsDivisao, RsTempDiv, RsSistema As New ADODB.Recordset
[ô]Dados Para Conexão ao Banco MySQL
Public Function Dados_Servidor()
MyslqServidor = [Ô]MTH09-PC[Ô]
MyslqUsuario = [Ô]divisao[Ô] [ô]admin
MyslqSenha = [Ô]metha2016[Ô] [ô]admin
MyslqDatabase = [Ô]Dbdivisao[Ô]
End Function
Public Function Conexao_Servidor(ByVal ssql As String)
Dados_Servidor [ô]Carrega parametros do servidor
If cn.State = 1 Then [ô]Igual a 1 a conexão esta aberta
Exit Function
End If
cn.Provider = [Ô]SQLOLEDB[Ô]
cn.Properties([Ô]Data Source[Ô]).Value = MyslqServidor
cn.Properties([Ô]Initial Catalog[Ô]).Value = MyslqDatabase
cn.Properties([Ô]User ID[Ô]).Value = MyslqUsuario
cn.Properties([Ô]Password[Ô]).Value = MyslqSenha
cn.ConnectionTimeout = 0
cn.Open
End Function
Me parece ok, não testei seu código, mas me parece ok. Já tentou simplesmente rodar pra ver se algum erro ocorre?
Citação::
Me parece ok, não testei seu código, mas me parece ok. Já tentou simplesmente rodar pra ver se algum erro ocorre?
Deu certo, obrigado.
Tópico encerrado , respostas não são mais permitidas