Ir para conteúdo
Fórum Script Brasil
  • 0

SQL - Parâmetros insuficientes - Eram esperados 5.


Welter

Pergunta

Recorro, de novo, à prestimosa ajuda dos companheiros.

Estou levando uma "surra" da rotina abaixo.

Explico:

Tenho duas tabelas: TbNDAux e Saldos.

Tenho que encontrar na tabela Saldos, para atualização, cinco campos, todos coincidindo com dados existentes na outra tabela.

Ao executar tenho a resposta " Parâmetros insuficientes - Eram esperados 5.""

Onde posso estar errando?

Todos os campos de ambas as tabelas são inteiros longos

Tentei também com FindFirst, mas houve erro. Devo, neste caso, ter omitido os famigerados aspas ou colchete. Sei lá?

Busquei solução na Internet, mas não tive sorte, ou fui incapaz de identificar a possível solução.

Uso ACCESS 2010.

Será que alguém pode identificar meu erro? Inclusive, para os demais interessados do meu nível de conhecimento, se possível dar também a solução com o FindFirst/NoMatch.

Agradeço antecipadamente.

Private Sub Comando20_Click()

DoCmd.Close acForm, "EntradaND", acSaveYes

Dim Banco As DAO.Database

Set Banco = OpenDatabase("C:\Users\Owner\Documents\Orcamento")

Dim TbND As DAO.TableDef

Dim TbNDAux As DAO.TableDef

Dim Saldos As DAO.TableDef

Dim dyTbND As DAO.Recordset

Dim dyTbNDAux As DAO.Recordset

Dim dySaldos As DAO.Recordset

Set dyTbND = Banco.OpenRecordset("TbND", DB_OPEN_DYNASET)

Set dyTbNDAux = Banco.OpenRecordset("TbNDAux", DB_OPEN_DYNASET)

Dim sqlstr As String

With dyTbNDAux

xUniOr = dyTbNDAux("UniOr")

xPrograma = dyTbNDAux("Programa")

xNatDesp = dyTbNDAux("NatDesp")

xAçao = dyTbNDAux("Açao")

xFonte = dyTbNDAux("Fonte")

xNumND = dyTbNDAux("NumND")

xDatND = dyTbNDAux("DatND")

xValND = dyTbNDAux("ValND")

xDescri = dyTbNDAux("Descri")

End With

sqlstr = "select * from Saldos where Unior=xUnior and Programa=xPrograma and NatDesp = xNatDesp and Fonte=xFonte and Açao=xAçao"

Set dySaldos = Banco.OpenRecordset(sqlstr, DB_OPEN_DYNASET)

With dySaldos

If dySaldos.EOF Then

MsgBox "Erro enquadramento ND.Corrigir"

Else

.Edit

dySaldos("ValCred") = dySaldos("ValCred") + xValND

.Update

End If

End With

Banco.Execute "delete * from TbNDAux"

End Sub

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Parece que resolvi o problema em parte, assim:

sqlstr = "select * from saldos where NatDesp = " & xNatDesp & " And Fonte = " & xfonte & "" _

& " And Programa = " & xPograma & " And Ação = " & xAçao & ";"

Porém tenho a resposta de que falta um operador na consulta.

Pergunto também se a linha seguinte está correta:

Set dySaldos = Banco.OpenRecordset(sqlstr, DB_OPEN_DYNASET)

Win7 - Home Premium - ACCESS2010

Link para o comentário
Compartilhar em outros sites

  • 0

Por favor, não considerem minha mensagem anterior. Havia um erro no nome de um dos campos.

Fiz mais algumas modificações e agora tenho a mensagem de "item não encontrado nesta coleção" para o campo "valcred". cujo nome está correto.

Será que ainda há alguma inconsistência no script do "sqlstr " e, por isso não abre o dynaset?

Private Sub Comando20_Click()

DoCmd.Close acForm, "EntradaND", acSaveYes

Dim Banco As DAO.Database

Set Banco = OpenDatabase("C:\Users\Owner\Documents\Orcamento")

Dim TbND As DAO.TableDef

Dim TbNDAux As DAO.TableDef

Dim Saldos As DAO.TableDef

Dim dyTbND As DAO.Recordset

Dim dyTbNDAux As DAO.Recordset

Dim dySaldos As DAO.Recordset

Set dyTbND = Banco.OpenRecordset("TbND", DB_OPEN_DYNASET)

Set dyTbNDAux = Banco.OpenRecordset("TbNDAux", DB_OPEN_DYNASET)

Dim sqlstr As String

With dyTbNDAux

xUnior = dyTbNDAux("UniOr")

xPrograma = dyTbNDAux("Programa")

xNatDesp = dyTbNDAux("NatDesp")

xAçao = dyTbNDAux("Açao")

xFonte = dyTbNDAux("Fonte")

xNumND = dyTbNDAux("NumND")

xDatND = dyTbNDAux("DatND")

xValND = dyTbNDAux("ValND")

xDescri = dyTbNDAux("Descri")

End With

sqlstr = "SELECT Saldos.[uniOr], Saldos.[Programa], Saldos.[Açao], Saldos.[NatDesp], Saldos.[Fonte]FROM Saldos " _

& " WHERE (((Saldos.[uniOr]) = " & xUnior & ") And ((Saldos.Programa) = " & xPrograma & ") And ((Saldos.[Açao]) = " & xAçao & ") " _

& " And ((Saldos.NatDesp) = " & xNatDesp & ") And ((Saldos.Fonte) = " & xFonte & "));"

Set dySaldos = Banco.OpenRecordset(sqlstr, DB_OPEN_DYNASET)

With dySaldos

If .EOF Then

MsgBox "Erro enquadramento ND.Corrigir"

Else

.Edit

!ValCred = !ValCred + xValND

.Update

End If

End With

Banco.Execute "delete * from TbNDAux"

End Sub

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...