FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 759.103 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 01-04-2003, 13:31   #1 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão Como acessar BD Access utilizando Access Basic

Pessoal,

Estou com um problema, tenho que acessar de um bd access outro bd que tem senha e não estou conseguindo.
Tentei normalmente com Set dbDestino = OpenDatabase(txtBasePrincipal.Text) mas deu que precisava de senha.
Ai estou tentando com:
Set dbDestino = OpenDatabase(txtBasePrincipal.Text) , False, False, "ODBC; pwd=SENHA")
Mas dá erro de ODBC.
O comando é esse mesmo? Ou tenho que acessar o banco de outro jeito? :? :?
Estou precisando com urgencia saber...
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 01-04-2003, 13:56   #2 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Basta fazer assim:

OpenDatabase("c:\caminho\bd.mdb", False, False, ";pwd=senha")
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 01-04-2003, 14:11   #3 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

Citação:
Postado Originalmente por romulo
Basta fazer assim:

OpenDatabase("c:\caminho\bd.mdb", False, False, ";pwd=senha")
Com o set?
Assim?
Set dbDestino = OpenDatabase(txtBasePrincipal.Text, False, False, "pwd=SENHA")
Já tentei e dá:
Erro em tempo de execução 3151
Conexão ODBC--para 'c:\bdcobcaixa.mdb' falhou.
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 01-04-2003, 14:28   #4 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
Com o set?
Assim?
Set dbDestino = OpenDatabase(txtBasePrincipal.Text, False, False, "pwd=SENHA")
Já tentei e dá:
...
Você esqueceu do ponto e vírgula:

";pwd=SENHA"
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 01-04-2003, 14:45   #5 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

Citação:
Postado Originalmente por romulo
Você esqueceu do ponto e vírgula:

";pwd=SENHA"
Cara, por causa de um ponto e virgula... Ja estou revendo minha opiniao sobre VB...
Funcionou mas ele está travando :lol:
Vc sabe se existe no access algo tipo o trace into do Delphi?
E ai vai o código, caso alguem tenha alguma idéia.
Tenho que copiar os dados de um bd para outro modificando apenas um campo.
PS: Não reparem a redundância do código, é pq não tenho tempo para construir um procedimento...
PS 2: Não reparem tb se o tópico ficar com muitas visualizações, é pq eu estou dando refresh toda hora para ver se alguem respondeu.. :lol:
Código:
Private Sub Comando0_Click() Dim dbOrigem As Database Dim tbOrigem As Recordset Dim dbDestino As Database Dim tbDestino As Recordset Dim CodCedente As String Dim I As Integer txtBasePrincipal.SetFocus Set dbDestino = OpenDatabase(txtBasePrincipal.Text, False, False, ";pwd=SENHA") txtBaseVinculado.SetFocus Set dbOrigem = OpenDatabase(txtBaseVinculado.Text, False, False, ";pwd=SENHA") Set tbDestino = dbDestino.OpenRecordset("tbCedentes") Set tbOrigem = dbOrigem.OpenRecordset("tbCedentes") CodCedente = VerificaCodCedente(tbOrigem!Agencia, tbOrigem!Operacao, tbOrigem!Conta, tbDestino) If StrComp(CodCedente, "0") = 0 Then MsgBox Title:="Erro!", Prompt:="Copie primeiro os dados do convênio (tbCedentes) para a base do convênio principal" Exit Sub End If Set tbDestino = dbDestino.OpenRecordset("tbParCedente") Set tbOrigem = dbOrigem.OpenRecordset("tbParCedente") If Parametros.InSelection Then Do Until tbOrigem.EOF tbDestino.AddNew tbDestino.Fields(0) = CodCedente For I = 1 To 36 tbDestino.Fields(I) = tbOrigem.Fields(I) Next I tbDestino.Update Loop End If Set tbDestino = dbDestino.OpenRecordset("tbSacado") Set tbOrigem = dbOrigem.OpenRecordset("tbSacado") If Sacados.InSelection Then Do Until tbOrigem.EOF tbDestino.AddNew tbDestino.Fields(0) = CodCedente For I = 1 To 64 tbDestino.Fields(I) = tbOrigem.Fields(I) Next I tbDestino.Update Loop End If Set tbDestino = dbDestino.OpenRecordset("tbTitulos") Set tbOrigem = dbOrigem.OpenRecordset("tbTitulos") If Titulos.InSelection Then Do Until tbOrigem.EOF tbDestino.AddNew tbDestino.Fields(0) = CodCedente For I = 1 To 64 tbDestino.Fields(I) = tbOrigem.Fields(I) Next I tbDestino.Update Loop End If Set tbDestino = dbDestino.OpenRecordset("tbRetorno") Set tbOrigem = dbOrigem.OpenRecordset("tbRetorno") If Retornos.InSelection Then Do Until tbOrigem.EOF tbDestino.AddNew tbDestino.Fields(0) = CodCedente For I = 1 To 64 tbDestino.Fields(I) = tbOrigem.Fields(I) Next I tbDestino.Update Loop End If Set tbDestino = dbDestino.OpenRecordset("tbRemessa") Set tbOrigem = dbOrigem.OpenRecordset("tbRemessa") If Remessas.InSelection Then Do Until tbOrigem.EOF tbDestino.AddNew tbDestino.Fields(0) = CodCedente For I = 1 To 64 tbDestino.Fields(I) = tbOrigem.Fields(I) Next I tbDestino.Update Loop End If Set tbDestino = dbDestino.OpenRecordset("tbGrupos") Set tbOrigem = dbOrigem.OpenRecordset("tbGrupos") If Grupos.InSelection Then Do Until tbOrigem.EOF tbDestino.AddNew tbDestino.Fields(0) = CodCedente For I = 1 To 64 tbDestino.Fields(I) = tbOrigem.Fields(I) Next I tbDestino.Update Loop End If dbDestino.Close dbOrigem.Close End Sub Function VerificaCodCedente(Agencia, Operacao, Conta As String, tbDestino As Recordset) As String Result = "0" With tbDestino Do Until ((.EOF) Or (StrComp(Result, "0") <> 0)) .Edit If StrComp(!Agencia, Agencia) = 0 Then If StrComp(!Operacao, Operacao) = 0 Then If StrComp(!Conta, Conta) = 0 Then Result = !CodCedente End If End If End If Loop End With End Function
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 01-04-2003, 14:54   #6 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
Cara, por causa de um ponto e virgula... Ja estou revendo minha opiniao sobre VB...
Funcionou mas ele está trav...
Cara, antes de relacionar os recordsets a outra tabela, é melhor fechar antes. Recomendo que você abra o origem como snapshot e o destino como dynaset.

Nessa função o loop tá infinito, e no VB não existe o Result do Delphi:

Código:
Function VerificaCodCedente(Agencia, Operacao, Conta As String, tbDestino As Recordset) As String Dim Result as String Result = "0" With tbDestino Do Until ((.EOF) Or (StrComp(Result, "0") <> 0)) If StrComp(!Agencia, Agencia) = 0 Then If StrComp(!Operacao, Operacao) = 0 Then If StrComp(!Conta, Conta) = 0 Then Result = !CodCedente End If End If End If .MoveNext '<--!!!!!! Loop End With VerificaCodCedente = Result End Function
Também não precisa do Edit que tinha.
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 01-04-2003, 15:42   #7 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

Citação:
Postado Originalmente por romulo
Cara, antes de relacionar os recordsets a outra tabela, é melhor fechar antes. Recomendo que você abra o origem como ...
Foi mal, esqueci do MoveNext.. :lol:
Fiz as modificações, mas inexplicavelmente ele dá erro no update do primeiro for informando que não pode criar valores duplicados... Mas a tabela so tem uma chave primaria que exatamente o que eu modifico na linha:
tbDestino.Fields(0) = CodCedente
Eu so modifiquei o tipo de CodCedente para long pq no bd está como longo... Já coloquei pontos de interrupção e vi que os dados estão todos sendo copiados corretamente... Esse erro pode significar outra coisa?
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 01-04-2003, 15:54   #8 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
Foi mal, esqueci do MoveNext.. :lol:
Fiz as modificações, mas inexplicavelmente ele dá erro no update do primeiro ...
Na verdade vai dar erro mesmo, pois nesse loop você está incluindo o mesmo registro da tabela de origem na destino com a mesma chave (CodCedente), também é um loop infinito. Mas mesmo que você coloque o MoveNext da tbOrigem, ainda assim vai continuar dando o erro, pois vai continuar inserindo a mesma chave.

Código:
Do Until tbOrigem.EOF tbDestino.AddNew tbDestino.Fields(0) = CodCedente For I = 1 To 64 tbDestino.Fields(I) = tbOrigem.Fields(I) Next I tbDestino.Update Loop
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 01-04-2003, 15:58   #9 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

Já descobri o erro acima, tinha viajado total e botado o update dentro do for... :lol:
Porém no segundo for dá o mesmo erro agora e o update está fora.
Verifiquei no bd que ele so copiou um registro. Tem que usar o movenext depois do update do addnew, ou o addnew já fiz isso automaticamente?
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 01-04-2003, 16:12   #10 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
Já descobri o erro acima, tinha viajado total e botado o update dentro do for... :lol:
Porém no segundo for dá o me...
Cara, atualiza o código colocando as tuas alterações, pra ver como tá agora.
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 01-04-2003, 16:53   #11 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

Citação:
Postado Originalmente por romulo
Cara, atualiza o código colocando as tuas alterações, pra ver como tá agora.
Consegui!
Hehehehehehe
Quando eu ganhar na Mega Sena, 1 milhao vai pra vc! :lol:
Valeu mesmo!

Agora, tem outras questoes, primeiro as linhas com InSelection estão dando o seguinte erro:
Erro em tempo de execução '2187'
Esta propriedade só está disponível em modo Estrutura.
Segundo, como faço para o checkbox ficar desmarcada por padrão? (checked = false no Delphi)
Terceiro, existe alguma função para procurar arquivos no diretório, tipo o FindFirst(*.*', faArchive, Arquivo) do Delphi?

Valeu mais uma vez!
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 01-04-2003, 17:00   #12 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
Consegui!
Hehehehehehe
Quando eu ganhar na Mega Sena, 1 milhao vai pra vc! :l...
Para procurar o arquivo pode usar a função "Dir". Pra marcar e desmarcar a checkbox, basta fazer o value = true ou false. O InSelection até hoje nunca usei...
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 01-04-2003, 18:21   #13 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

Citação:
Postado Originalmente por romulo
Para procurar o arquivo pode usar a função "Dir". Pra marcar e desmarcar a checkbox, basta fazer o value = true ou fa...
Valeu, consegui com o value...
Agora, existe uma função que pegue uma string e verifique se tem outra dentro desta? Não achei no help do Access...
Outra coisa, vi no help que não é aconselhável passar tipos muito complexos para funções.. Entao eu queria saber se posso passar recordset e database e se tem alguma restrição ou posso passar por referencia sem problemas?
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 01-04-2003, 18:41   #14 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
Valeu, consegui com o value...
Agora, existe uma função que pegue uma string e verifique se tem outra dentro desta? ...
Pra verificar se há uma string dentro da outra você pode usar a função "InStr".

O problema de se passar objetos grandes por valor para funções é que eles são copiados novamente na memória, o que além de consumir mais memória é um processo lento. Mas se você passar por referência resolve o problema, desde que você se assegure que não vai modificar os valores dentro da função (se não desejar, é claro).
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 01-04-2003, 19:09   #15 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

Valeu!

A ultima dúvida, vc sabe como utilizar o componente barra de progresso do Access? Não achei absolutamente nada no help sobre ele...
E alguma dica de livro?
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 01-04-2003, 19:45   #16 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
Valeu!

A ultima dúvida, vc sabe como utilizar o componente barra de progresso do Access? Não achei absolutamente n...
Você diz a barra de progresso ActiveX ou a barra de progresso da statusbar? Se for o ActiveX, é só gerenciar as propriedades Min, Max e Value. A da statusbar eu usei muito, mas faz tanto tempo que nem lembro mais... ops:
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 02-04-2003, 13:32   #17 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

É do activex, valeu!
Outra coisa, existe uma funçao que retorno a quantidade de campos de um registro?
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 02-04-2003, 13:45   #18 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
É do activex, valeu!
Outra coisa, existe uma funçao que retorno a quantidade de campos de um registro?
Recordset.Fields.Count
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Antigo 02-04-2003, 18:19   #19 (permalink)
GBastos
Super Participante
 
Avatar de GBastos
 
Registrado em: Sep 2001
Localização: Salvador, Bahia
Idade: 32
Mensagens: 770
Reputação: 22 GBastos está indo no caminho certo
Padrão

Citação:
Postado Originalmente por romulo
Recordset.Fields.Count
Beleza, ja adaptei.

Agora outra coisa, notei que o Dir devolve somente o nome do arquivo, mas eu preciso tb do path para usar o opendatabase, como faço?
__________________
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better.
GBastos está offline   Responder com Quote
Antigo 02-04-2003, 18:30   #20 (permalink)
romulo
Zumbi
 
Registrado em: Dec 2001
Localização: Fortaleza / CE
Mensagens: 7.506
Reputação: 31 romulo está indo no caminho certo
Enviar mensagem via ICQ para romulo
Padrão

Citação:
Postado Originalmente por GBastos
Beleza, ja adaptei.

Agora outra coisa, notei que o Dir devolve somente o nome do arquivo, mas eu preciso tb do pat...
Posta aí a parte do código em que você está usando.
__________________
Minha coleção de jogos (todos originais)
romulo está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 2:49.