Bom dia a todos... estou a adaptar um meu banco access para o banco sql server usando tabelas vinculadas. mas na hora de atualizar o estoque ocorre um erro e o mesmo não atualiza como deveria... segue abaixo o modulo que uso para baixar o estoque automaticamente...
tambem estou deixando o banco junto ao iscript do Sql Server que gera as tabelas.
- Código:
Option Compare Database
Option Explicit
'Atributos da Classe
'Atributo de backup e atributo identificador da Classe
'PK - Código que identifica o produto.
Private bkpCodProduto As Variant
Private lngCodProduto As Variant
'Descrição do produto.
Private strDescricao As Variant
'Quantidade mínima desejada no estoque.
Private dblEstoqueMinimo As Variant
'Quantidade atual do estoque.
Private dblQtdEstoque As Variant
'Unidade de comercialização do produto.
Private strUnidade As Variant
'Valor unitário do produto.
Private curValorUnitario As Variant
'Métodos Get, Set e Let da Classe
Property Get codProduto() As Variant
codProduto = lngCodProduto
End Property
Property Let codProduto(argCodProduto As Variant)
lngCodProduto = argCodProduto
If IsEmpty(bkpCodProduto) Then
bkpCodProduto = lngCodProduto
End If
End Property
Property Get descricao() As Variant
descricao = strDescricao
End Property
Property Let descricao(argDescricao As Variant)
strDescricao = argDescricao
End Property
Property Get estoqueMinimo() As Variant
estoqueMinimo = dblEstoqueMinimo
End Property
Property Let estoqueMinimo(argEstoqueMinimo As Variant)
dblEstoqueMinimo = Abs(argEstoqueMinimo)
End Property
Property Get qtdEstoque() As Variant
qtdEstoque = dblQtdEstoque
End Property
Property Let qtdEstoque(argQtdEstoque As Variant)
dblQtdEstoque = Abs(argQtdEstoque)
End Property
Property Get unidade() As Variant
unidade = strUnidade
End Property
Property Let unidade(argUnidade As Variant)
strUnidade = UCase(argUnidade)
End Property
Property Get valorUnitario() As Variant
valorUnitario = curValorUnitario
End Property
Property Let valorUnitario(argValorUnitario As Variant)
curValorUnitario = argValorUnitario
End Property
'Método Existe [Com conhecimento de SQL]
'Verifica a existência do objeto Produto na tabela correspondente no Banco de Dados
Function existe(argCodProduto As Variant) As Boolean
On Error GoTo Err_existe
Dim objCon As New aclConexaoBD
Dim rstExiste As Recordset
Dim strSql As String
existe = False
strSql = "Select * " & _
"From Produto " & _
"Where codProduto = " & objCon.valorSql(argCodProduto)
Set rstExiste = objCon.consulta(strSql)
If rstExiste.RecordCount > 0 Then
existe = True
End If
'Fecha o Recordset existe
rstExiste.Close
Exit_existe:
Set rstExiste = Nothing
Exit Function
Err_existe:
existe = False
GoTo Exit_existe
End Function
'Método Incluir [Com conhecimento de SQL]
'Inclui um novo objeto na tabela correspondente dentro do Banco de dados
Function incluir() As Boolean
On Error GoTo Err_incluir
Dim objCon As New aclConexaoBD
Dim strSql As String
strSql = "Insert Into " & _
"Produto(codProduto,descricao,estoqueMinimo,qtdEstoque,unidade,valorUnitario) " & _
"Values(" & objCon.valorSql(codProduto) & "," & objCon.valorSql(descricao) & "," & _
objCon.valorSql(estoqueMinimo) & "," & objCon.valorSql(qtdEstoque) & "," & _
objCon.valorSql(unidade) & "," & objCon.valorSql(valorUnitario) & ")"
incluir = (objCon.executa(strSql) > 0)
If incluir Then
'Atualiza os campos de backup
bkpCodProduto = codProduto
End If
Exit_incluir:
Exit Function
Err_incluir:
incluir = False
GoTo Exit_incluir
End Function
'Método Excluir [Com conhecimento de SQL]
'Exclui o objeto atual na tabela correspondente dentro do Banco de dados
Function excluir() As Boolean
On Error GoTo Err_excluir
Dim objCon As New aclConexaoBD
Dim strSql As String
strSql = "Delete From Produto " & _
"Where codProduto = " & objCon.valorSql(codProduto)
excluir = (objCon.executa(strSql) > 0)
Exit_excluir:
Exit Function
Err_excluir:
excluir = False
GoTo Exit_excluir
End Function
'Método Obter [Com conhecimento de SQL]
'Recupera o objeto Produto através dos argumentos informados
Function obter(argCodProduto As Variant) As Boolean
On Error GoTo Err_obter
Dim objCon As New aclConexaoBD
Dim rstObter As Recordset
Dim strSql As String
strSql = "Select * " & _
"From Produto " & _
"Where codProduto = " & objCon.valorSql(argCodProduto)
Set rstObter = objCon.consulta(strSql)
If rstObter.RecordCount = 0 Then
obter = False
Exit Function
End If
'Atualiza os campos de backup e os identificadores
codProduto = argCodProduto
bkpCodProduto = argCodProduto
'Atualiza os campos restantes
descricao = rstObter.Fields("descricao")
estoqueMinimo = rstObter.Fields("estoqueMinimo")
qtdEstoque = rstObter.Fields("qtdEstoque")
unidade = rstObter.Fields("unidade")
valorUnitario = rstObter.Fields("valorUnitario")
obter = True
'Fecha o Recordset obter
rstObter.Close
Exit_obter:
Set rstObter = Nothing
Exit Function
Err_obter:
obter = False
GoTo Exit_obter
End Function
'Método Salvar [Com conhecimento de SQL]
'Salva o objeto atual na tabela correspondente dentro do Banco de dados
Function salvar() As Boolean
On Error GoTo Err_salvar
Dim objCon As New aclConexaoBD
Dim strSql As String
If existe(bkpCodProduto) Then
strSql = "Update Produto " & _
"Set codProduto = " & objCon.valorSql(codProduto) & _
", descricao = " & objCon.valorSql(descricao) & _
", estoqueMinimo = " & objCon.valorSql(estoqueMinimo) & _
", qtdEstoque = " & objCon.valorSql(qtdEstoque) & _
", unidade = " & objCon.valorSql(unidade) & _
", valorUnitario = " & objCon.valorSql(valorUnitario) & _
" Where codProduto = " & objCon.valorSql(bkpCodProduto)
salvar = (objCon.executa(strSql) > 0)
Else
salvar = incluir
End If
If salvar Then
'Atualiza as variáveis de backup com o novo valor da chave
bkpCodProduto = codProduto
End If
Exit_salvar:
Exit Function
Err_salvar:
salvar = False
GoTo Exit_salvar
End Function
'Método baixarEstoque()
'Atualiza o estoque diminuindo a quantidade informada como parâmetro
'e devolve um valor booleano que indica o sucesso da operação;
Function baixarEstoque(argQtd As Double) As Boolean
If dblQtdEstoque - Abs(argQtd) < 0 Then
baixarEstoque = False
Else
dblQtdEstoque = dblQtdEstoque - Abs(argQtd)
baixarEstoque = salvar
End If
End Function
'Método subirEstoque()
'Atualiza o estoque acrescentando a quantidade informada como
'parâmetro e devolve um valor booleano que indica o sucesso
'da operação;
Function subirEstoque(argQtd As Double) As Boolean
dblQtdEstoque = dblQtdEstoque + Abs(argQtd)
subirEstoque = salvar
End Function
'Método estoqueBaixo
'Verifica o estoque atual e compara com o valor de estoque mínimo
'cadastrado para produto e devolve um valor booleano que indica
'se o valor atual está abaixo do previsto.
Function estoqueBaixo() As Boolean
If dblQtdEstoque < dblEstoqueMinimo Then
estoqueBaixo = True
End If
End Function
'Fim da classe...
tambem estou deixando o banco junto ao iscript do Sql Server que gera as tabelas.