NINGUEM DO FORUM TINHA RESPONDIDO
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
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
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
O projeto e muito bom é util
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.
[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.
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.
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.
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
.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
isso é problema de nome de campo
Abraco!
Abraco!
Ichihara
Mas qual Campo... , vc deu uma olhada no projeto do macoratti ??????
Mas qual Campo... , vc deu uma olhada no projeto do macoratti ??????
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
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
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+
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+
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............
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............
ADVANCE, FUNCIONOU NO 2003 - 2000 - E 97...
Agora como ele fez ??? (hehehe - naum sei, mas vou descobrir !!!)
Abraço.
Agora como ele fez ??? (hehehe - naum sei, mas vou descobrir !!!)
Abraço.
Tópico encerrado , respostas não são mais permitidas