Jump to content
Fórum Script Brasil
  • 0

SQL - Parâmetros insuficientes - Eram esperados 5.


Welter

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...