Ir para conteúdo
Fórum Script Brasil

Welter

Membros
  • Total de itens

    39
  • Registro em

  • Última visita

Sobre Welter

  • Data de Nascimento 24/11/1940

Perfil

  • Gender
    Male
  • Location
    Brasília

Welter's Achievements

0

Reputação

  1. 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
  2. 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
  3. 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
  4. Welter

    Problema com comando SQL

    Ainda estou aprendendo, apesar de ter 70 anos. A propósito, como faço referência a uma combobox em procedimento de outro formulário? Algo assim: forms!formuláriotal.combo...???? Grato a todos
  5. Welter

    Problema com comando SQL

    Caso resolvido. Possivelmente o comando não funciona porque no formulário base tenho também um sub-formulário, onde estão os dados que trato no procedimento. O botão que acessa este procedimento está fora do sub-formulário, porque preciso dos dados da combobox(que está no formulário), para o processamento. Assim, para resolver, criei um campo status na tabela e, no procedimento, marco o record para deleção em rotina posterior. Sofrendo, aprendendo e passando experiência para os demais colegas. Muito grato a todos.
  6. Welter

    Problema com comando SQL

    Já fiz o teste no modo debug. Fiz também uma transação para verificar se o dynaset está ativo e ele está. A extensão do meu BD é accdb. O interessante de se notar é que em outro procedimento consigo deletar todos os registros de uma tabela, mas neste não. Muito estranho. Grato pelo interesse em resolver meu problema, que, infelizmente, ainda persiste.
  7. Estou de volta, abusando da boa vontade e paciência dos amigos. Ao executar o procedimento a seguir, na instrução Banco.Execute "Delete from dyTbNE where NumNE=enúmero ocorre erro, com a mensagem de que não foi possível localizar a tabela/consulta dyTbNE. Tentei também informar o nome da tabela TbNE, mas ocorre o mesmo erro. Eis o procedimento: Private Sub Comando7_Click() ecódigo = Comb0.Column(0) enúmero = Comb0.Column(1) dCódigo = Comb0.Column(2) eValor = Comb0.Column(3) DoCmd.Close acTable, "TbNE", acSaveYes DoCmd.Close acForm, "AcertosNE", acSaveYes Dim Banco As DAO.Database Set Banco = OpenDatabase("c:\Orcamento") Dim TbND As DAO.TableDef Dim TbNE As DAO.TableDef Dim dyTbND As DAO.Recordset Dim dyTbNE As DAO.Recordset Set dyTbND = Banco.OpenRecordset("TbND", DB_OPEN_DYNASET) Set dyTbNE = Banco.OpenRecordset("TbNE", DB_OPEN_DYNASET) Banco.Execute "delete from dyTbNE where NumNE=enúmero" With dyTbND arg = "código=" & dCódigo dyTbND.FindFirst arg .Edit dyTbND("SdoND") = dyTbND("SdoND") + eValor dyTbND("Valor") = dyTbND("Valor") + eValor dyTbND("ValOld") = dyTbND("ValOld") + eValor .Update End With End Sub Ah, sim, faltou dizer que uso o ACCESS 2007
  8. Resolvi! Nas propriedades do formulário inseri, no contexto "ao sair" os comandos de "salvar registro" e "atualizar". A partir daí, não mais ocorreu o problema de os procedimentos de evento não serem processados na íntegra. Grato àqueles que se interessaram pelo tema.
  9. há! Falha minha! Faltou informar que uso o ACCESS2007
  10. Consegui resolver o problema. Criei uma nova sub, que contém os procedimentos necessários a atualização da tabela. Acontece, porém que só há atualização quando executo no modo interativo PF8. O que pode estar havendo? Alguém pode analisar o procedimento a seguir, para verificar onde posso estar errando? Quero adicionar à tabela TbNE, dados das tabelas TbNEAux e TbND. Private Sub Comando58_Click() CódigoND = Comb2.Column(0) DoCmd.Close acTable, "TbND", acSaveYes DoCmd.Close acTable, "TbNEAux", acSaveYes DoCmd.Close acForm, "EntradaNE", acSaveYes Call CriaNE End Sub Sub CriaNE() Dim Banco As DAO.Database Set Banco = OpenDatabase("c:\Orcamento") Dim TbND As DAO.TableDef Dim TbNE As DAO.TableDef Dim TbNEAux As DAO.TableDef Dim dyTbND As DAO.Recordset Dim dyTbNE As DAO.Recordset Dim dyTbNDAux As DAO.Recordset Set dyTbND = Banco.OpenRecordset("TbND", DB_OPEN_DYNASET) Set dyTbNE = Banco.OpenRecordset("TbNE", DB_OPEN_DYNASET) Set dyTbNEAux = Banco.OpenRecordset("TbNEAux", DB_OPEN_DYNASET) arg = "código=" & CódigoND dyTbND.FindFirst arg With dyTbND XPrograma = dyTbND("Programa") XNatdesp = dyTbND("NatDesp") xAçao = dyTbND("Açao") xFonte = dyTbND("Fonte") XNumND = dyTbND("NUmND") xUnior = dyTbND("UniOR") XCódigo = dyTbND("Código") End With With dyTbNEAux Do While Not .EOF xNumne = dyTbNEAux("NumNE") xDatne = dyTbNEAux("DatNE") xValor = dyTbNEAux("Valor") xEntgest = dyTbNEAux("EntGest") xEntFornec = dyTbNEAux("EntFornec") xNumProc = dyTbNEAux("NumProc") xTipoProc = dyTbNEAux("TipoProc") xNumContr = dyTbNEAux("NumContr") xVigContr = dyTbNEAux("VigContr") xSubDesp = dyTbNEAux("SubDesp") With dyTbNE .AddNew dyTbNE("Programa") = XPrograma dyTbNE("NatDesp") = XNatdesp dyTbNE("Açao") = xAçao dyTbNE("Fonte") = xFonte dyTbNE("Unior") = xUnior dyTbNE("NumNE") = xNumne dyTbNE("DatNE") = xDatne dyTbNE("Valor") = xValor dyTbNE("EntGest") = xEntgest dyTbNE("EntFornec") = xEntFornec dyTbNE("NumProc") = xNumProc dyTbNE("TipoProc") = xTipoProc dyTbNE("NumContr") = xNumContr dyTbNE("VigContr") = xVigContr dyTbNE("SubDesp") = xSubDesp dyTbNE("NDBase") = CódigoND dyTbNE("SdoNE") = xValor dyTbNE("StatNE") = 0 .Update End With .MoveNext Loop End With With dyTbND .Edit dyTbND("SdoND") = dyTbND("SdoND") - xValor .Update End With DoCmd.Close acTable, "TbNE", acSaveYes Call Fim End Sub Sub Fim() Dim stDocName As String Dim stLinkCriteria As String stDocName = "Principal" DoCmd.OpenForm stDocName, , , stLinkCriteria End Sub
  11. Boa noite, pessoal Estou de volta com mais um pequeno problema, pedindo ajuda. Após entrar com dados, tenho inseri-los numa outra table, juntamento com os de uma terceira. Porém, quando há apenas um registro na primeira table, que é transitória, ocorre erro com a mensagem "sem registro atual". Fecho o formulário de entrada logo no início do código de tratamento dos dados. Mesmo assim, o erro acontece. Noto que a primeira table, para a qual o sistema diz não haver registro atual, contém o registro que devo tratar. Existe algum comando - ou rotina - que possibilite superar esse erro? Grato, mais uma vez, pela ajuda de todos.
  12. Mais algumas informações, que poderão ajudar no deslinde do imbróglio (escrevendo assim, ainda vou para a Academia Brasileira de Letras): São duas tabelas, como disse: Mutuário e Lote. Na primeira tenho o nome e o código do mutuário, este gerado pelo sistema. Na segunda apenas o código (cod), que relaciona a tabela lote com a mutuário, para efeito de consultas e relatórios. Gostaria que no form lote pudesse entrar com os detalhes do lote, inserindo o registro na tabela lote.
  13. Achei no forum do Ativo.Access o seguinte código a ser inserido no botão de abertura do formulário lote, depois das devidas alterações, óbvio: DoCmd.SetWarnings False 'Desabilita Alertas DoCmd.RunSQL "Insert Into Tabela2(Nome,Data,Local) Values ('" & Me.Nome & "','" & Me.Data & "','" & Me.Local & "')" 'Insere MsgBox "Registro " & Me.Nome & " inserido com sucesso!", vbInformation, "Aviso" DoCmd.SetWarnings True 'Habilita Alertas Novamente Acredito que vá funcionar. Fiz algumas alterações, sem sucesso. Pergunto: com ficaria, com a inserção do código (inteiro longo) e do nome (texto)? O ', o " , o & e a virgula, sempre judiam de mim. Humm, Obrigado pelo interesse. O formulário mutuário tem muitos campos, por isso preferi usar outro para cadastrar os lotes. Gostaria de trabalhar com os dois e não fazer tudo num só com subformulário. Grato pelo interesse em ajudar-me.
  14. Estou de volta! Peço desculpas por abusar da paciência dos nobres confrades. Tenho algum conhecimento do ACCESS, que dá para desenvolver aplicações bem simples. No entanto, como sou um perfeccionista, em algumas situações tento alcançar a melhor qualidade possível nos meus projetos. Estou desenvolvendo um sistema para cadastramento de lotes para um amigo, sem qualquer interesse financeiro. Tenho dois formulários: a) cadastramento de mutuário e B) cadastramento do lote. Estão funcionando sem problemas. Após o cadastramento do mutuário, abro, com um botão, o formulário de lote e seleciono o mutuário numa combo, para incluir a identificação do imóvel. Gostaria, porém, de, ao encerrar o cadastramento do mutuário, abrir o formulário lote com as informações do mutuário, sem ter que selecioná-las numa combo. Seria uma ação mais rápida e mais segura. Alguém pode me passar os pressupostos básicos dessa rotina? Ficarei, como sempre, admirador e agradecido.
  15. Pessoal, Tenho que inserir num relatório tempo transcorrido em anos e meses. Já pesquisei na Internet e encontrei o seguinte formato: =DifData("yyyy";[DtOcup];Data())+(Data()<DataSerial(Ano(Data());Mês([DtOcup]);Dia([DtOcup]))) onde "DTOcup" tem a data base para o cálculo. Porém não está funcionando. O que pode estar dando errado? Obrigado pela ajuda de todos.
×
×
  • Criar Novo...