NINGUEM DO FORUM TINHA RESPONDIDO

USUARIO.EXCLUIDOS 19/07/2005 18:38:31
#95058
Amigos e o seguinte uma vez fiz um pergunta aqui no forum, se tinha como eu fazer um execute em duas tabelas de dois banco de dados diferentes.. bd1.mdb e no bd2.mdb

Todos q viram meu topicos disseram q nao tinha jeito , q era melhor eu abrir dois recordset e fazer while para ir atualizando os registros...

Mas descobrir no macoratti q tem como sim fazer isso... e não é complicado, assim fica mais facil qd alguem quiser atualizar tabelas de bancos diferentes..

O unico problema e q esta dando um erro em uma linha aqui no meu micro, se desse para vcs darem uma olhada no projeto.. e me informar qual o problema agradeceria muito

http://www.macoratti.net/vb_join2.htm

a linha é essa .Properties("Jet OLEDB:Link Datasource") = app_path & "Empregados.mdb"

so q mudei os bancos dele para o meu, é o dele é 2000 o meu 97. Será q é isso
USUARIO.EXCLUIDOS 19/07/2005 19:00:26
#95064
Pessoal de uma olhada, nem precisa de muito, vcs q tenha o office 2000 so coloque e teste se funcionar ja sei q é por causa da versao do office

O projeto e muito bom é util
MARCOSAV 19/07/2005 21:28:09
#95080
Resposta escolhida
ADVANCE, dá uma conferida nesta linha, vc está escrevendo

[txt-color=#0000ff].Properties("Jet OLEDB:Link Datasource") = app_path & "Empregados.mdb"[/txt-color]

Tente deste jeito

[txt-color=#ff0000]Conexao.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Banco.mdb")[/txt-color]

PS: Vi a página que vc mencionou no post, mas não testei o código pq uso o office 2003... Vou fazer a conversão, depois te digo se funciona, ok ???

Abraço.
USUARIO.EXCLUIDOS 20/07/2005 08:37:49
#95110
VALEU MARCOS , VOU TENTAR

Na minha opiniao esse codigo do macoratti, vai ajudar muito, pois vc pode fazer uma atualização de dois bancos de dados com um Update. vai deixar o progrma mais rapido e mais seguro..


Marcos tem uma coisa, como disse anteriormente meu access é o 97.
USUARIO.EXCLUIDOS 20/07/2005 08:44:01
#95113
Marcos tentei assim :
.Properties("Provider=Microsoft.Jet.OLEDB.3.51:Datasource") = "C:\Meus documentos    este\bd2.mdb"
.Properties("Provider=Microsoft.Jet.OLEDB.3.51:Link Datasource") = "C:\Meus documentos    este\bd2.mdb"
.Properties ("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Meus documentos    este\bd2.mdb")

Nenhuma das opcoes deu certo o errro é oseguinte:

O item nao pode ser encontrado na colecao correspondente ao nome ou ao ordinal solicitado
ICHIHARA 20/07/2005 09:39:51
#95126
isso é problema de nome de campo

Abraco!
USUARIO.EXCLUIDOS 20/07/2005 09:41:19
#95128
Ichihara

Mas qual Campo... , vc deu uma olhada no projeto do macoratti ??????
USUARIO.EXCLUIDOS 20/07/2005 11:02:25
#95154
VOU POSTAR O CODIGO TODO, ASSIM VC NAO PRECISAM SAIR DO VBMANIA
VAMOS Là PESSOAL. ACHO Q NÃO é COMPLICADO DESCOMBRIR POR QUE DO ERRO PARA OS VBMANIACOS

Private Sub cmdExecute_Click()
Dim app_path As String
Dim Arq_DB As String
Dim conn As ADODB.Connection
Dim adox_catalog As ADOX.Catalog
Dim adox_table As ADOX.Table
Dim rs As ADODB.Recordset
Dim i As Integer
Dim txt As String

' Encontra o caminho da aplicação
app_path = App.Path
If Right$(app_path, 1) <> "\" Then app_path = app_path & "\"

' Abre o banco de dados Departamentos
Arq_DB = app_path & "Departamentos.mdb"
Set conn = New ADODB.Connection
conn.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Arq_DB & ";" & _
"Persist Security Info=False"
conn.Open

' Cria um link para a tabela funcionarios no banco de dados Funcionarios
Set adox_catalog = New ADOX.Catalog

' Liga a tabela vinculada com conexão aberta
Set adox_catalog.ActiveConnection = conn

Set adox_table = New ADOX.Table
With adox_table
Set .ParentCatalog = adox_catalog
.Name = "LinkedTable"
.Properties("Jet OLEDB:Link Datasource") = app_path & "Empregados.mdb"
.Properties("Jet OLEDB:Link Provider String") = "MS Access"
.Properties("Jet OLEDB:Remote Table Name") = "Funcionarios"
.Properties("Jet OLEDB:Create Link") = True
End With

' Inclui a tabela na coleção Tables
adox_catalog.Tables.Append adox_table

' Realiza a consulta
Set rs = conn.Execute( _
"SELECT * " & _
"FROM Setores, LinkedTable " & _
"WHERE Setores.SetorId = LinkedTable.SetorId", , adCmdText)

' Mostra o resultado
Do While Not rs.EOF
txt = txt & rs.Fields(0).Value
For i = 1 To rs.Fields.Count - 1
txt = txt & ", " & rs.Fields(i).Value
Next i
txt = txt & vbCrLf

rs.MoveNext
Loop
rs.Close
txtResults.Text = txt

' Exclui o link do banco de dados Departamentos
adox_catalog.Tables.Delete "LinkedTable"

' Fecha a conexao
conn.Close
End Sub

MARCOSAV 21/07/2005 02:04:45
#95264
ADVANCE, testei no Access 2003 e não funcionou !!! Bom, mas é o 2003, né...
Então converti o bd eeeeeeeeee................ cara, não funcionou tbm !?!?!
Vou tentar de novo (devo ter citado alguma coisa de errado, ou sei lá...)

Mas no seu caso (vc está usando o Access 97, correto ?)
o "Jet 3.51" não é prá dar erro - o provedor do 97 é esse

Falei do Jet 4.0 para Access 2000 / 2003
Dá uma olhada nos nomes dos campos, ou em qualquer tipo de erro (escreva as SQL's e Strings de conexão, tudo em uma só linha - evita erros de interpretação)

Eu, vou tentar de novo (2003), se não der, tento no 2000, senão no 97...
QQer coisa te aviso, vlw ???

Abraço e T+
USUARIO.EXCLUIDOS 21/07/2005 09:13:22
#95279
Meu codigo ficou assim ....

Dim app_path As String
Dim Arq_DB As String
Dim conn As ADODB.Connection
Dim adox_catalog As ADOX.Catalog
Dim adox_table As ADOX.Table
Dim rs As ADODB.Recordset
Dim i As Integer
Dim txt As String

' Encontra o caminho da aplicação
app_path = App.Path
If Right$(app_path, 1) <> "\" Then app_path = app_path & "\"

' Abre o banco de dados Departamentos
Arq_DB = "C:\Meus documentos    este\bd1.mdb"
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & Arq_DB & ";"
conn.Open

' Cria um link para a tabela funcionarios no banco de dados Funcionarios
Set adox_catalog = New ADOX.Catalog

' Liga a tabela vinculada com conexão aberta
Set adox_catalog.ActiveConnection = conn

Set adox_table = New ADOX.Table
With adox_table
Set .ParentCatalog = adox_catalog
.Name = "LinkedTable"
.Properties("Jet OLEDB:Link Datasource") = "C:\Meus documentos    este\bd2.mdb"
.Properties("Jet OLEDB:Link Provider String") = "MS Access"
.Properties("Jet OLEDB:Remote Table Name") = "bd1"
.Properties("Jet OLEDB:Create Link") = True
End With

' Inclui a tabela na coleção Tables
adox_catalog.Tables.Append adox_table

' Realiza a consulta
Set rs = conn.Execute( _
"SELECT * " & _
"FROM tabela1, LinkedTable " & _
"WHERE tabela1.c1 = LinkedTable.tabela2.c1", , adCmdText)

' Mostra o resultado
Do While Not rs.EOF
txt = txt & rs.Fields(0).Value
For i = 1 To rs.Fields.Count - 1
txt = txt & ", " & rs.Fields(i).Value
Next i
txt = txt & vbCrLf

rs.MoveNext
Loop
rs.Close
Text1.Text = txt

' Exclui o link do banco de dados Departamentos
adox_catalog.Tables.Delete "LinkedTable"

' Fecha a conexao
conn.Close



AGORA A DUVIDA ( COMO O MACORATTI FEZ???????????)
ALGUEM SABE.....................
NENHUM VB MANIACO CONSEGUE SOLUCINAR ESTE MISTERIO............
MARCOSAV 21/07/2005 13:40:02
#95359
ADVANCE, FUNCIONOU NO 2003 - 2000 - E 97...

Agora como ele fez ??? (hehehe - naum sei, mas vou descobrir !!!)

Abraço.
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas