MIGRANDO DE DAO PARA ADO - PARTE 1
Comecei a migra hoje um programa meu de DAO para ADO:
Surgiram 02 duvidas:
Conecto a minha base de dados via arquivo INI... entao no INI fica o caminho para meu banco de dados
em um modulo (usando DAO) eu faço assim:
[ô]só dar certo quando eu coloco o caminho:
Onde tô errando?
SEGUNDA DUVIDA:
Em cada formulario eu seto a tabela(s) que desejo trabalhar assim:
Como ficaria essa consulta usando ADO?
Surgiram 02 duvidas:
Conecto a minha base de dados via arquivo INI... entao no INI fica o caminho para meu banco de dados
em um modulo (usando DAO) eu faço assim:
Sub Abrir_BancodeDados()
[ô]Leio a função e preenxo a variavel
DBPath = ReadINI(App.Path & [Ô]\config.ini[Ô], [Ô]DADOS_PROGRAMA[Ô], [Ô]path[Ô])
[ô]agora aqui eu seto (DAO)........................ FUNCIONANDO!
Set BD = OpenDatabase(DBPath, False, False, [Ô];pwd=190106[Ô])
[ô]tentei fazer assim usando ADO e deu erro:
BD_ADO.Open [Ô]Provider = Microsoft.Jet.OLEDB.4.0;Data Source = CDBPath;[Ô]
End Sub
[ô]só dar certo quando eu coloco o caminho:
BD_ADO.Open [Ô]Provider = Microsoft.Jet.OLEDB.4.0;Data Source = C:\Arquivos de programas\Online Commerce\Cyberbase.mdb;[Ô]
Onde tô errando?
SEGUNDA DUVIDA:
Em cada formulario eu seto a tabela(s) que desejo trabalhar assim:
Call Abrir_BancodeDados
SQL = [Ô]SELECT * FROM FUNCIONARIO WHERE (CODIGO = [Ô] & cboUsuario.ItemData(cboUsuario.ListIndex) & [Ô])[Ô]
Set RS = BD.OpenRecordset(SQL)
[ô]ai faço o q desejo com o resultado daquela consulta
Como ficaria essa consulta usando ADO?
1 - DBPath tem que ser concatenado à string de conexão:
2 -
Essa é uma das formas de fazer. Se vc reparar ao digitar o método Open, vc poderá passar o Source e a ActiveConection na mesma linha.
BD_ADO.Open [Ô]Provider = Microsoft.Jet.OLEDB.4.0;Data Source =[Ô] & DBPath
2 -
Set RS.ActiveConection = suaConexaoADO
RS. Source = [Ô]SELECT * FROM FUNCIONARIO WHERE (CODIGO = [Ô] & cboUsuario.ItemData(cboUsuario.ListIndex) & [Ô])[Ô]
RS.Open
Essa é uma das formas de fazer. Se vc reparar ao digitar o método Open, vc poderá passar o Source e a ActiveConection na mesma linha.
Citação::
1 - DBPath tem que ser concatenado à string de conexão:BD_ADO.Open [Ô]Provider = Microsoft.Jet.OLEDB.4.0;Data Source =[Ô] & DBPath
2 -Set RS.ActiveConection = suaConexaoADO
RS. Source = [Ô]SELECT * FROM FUNCIONARIO WHERE (CODIGO = [Ô] & cboUsuario.ItemData(cboUsuario.ListIndex) & [Ô])[Ô]
RS.Open
Essa é uma das formas de fazer. Se vc reparar ao digitar o método Open, vc poderá passar o Source e a ActiveConection na mesma linha.
essa parte deu erro:
Set RS.ActiveConection = Abrir_BancodeDados
RS.Source = [Ô]SELECT * FROM FUNCIONARIO WHERE (CODIGO = [Ô] & cboUsuario.ItemData(cboUsuario.ListIndex) & [Ô])[Ô]
RS.Open
Esse [Ô]Abrir_BancodeDados[Ô] é onde eu indico o caminho do meu banco de dados... tá funcionando!
ai quando vou abrir a tabela, ele dar esse erro:
Copile error:
Expexted Function or variable
quando debugo, ele seleciona Abrir_BancodeDados
se eu uso MODULO para ler o caminho do banco de dados.
Desses codigos que você colocou, quais ficariam no modulo e quais ficariam no form?
Desses codigos que você colocou, quais ficariam no modulo e quais ficariam no form?
pessoal, fiz assim e DEU CERTO!
Vejam se tem alguma coisa errada ou algo que posso fazer para melhorar a velocidade de acesso aos dados.
NO MODULO:
NO FORM
Funcionou!
Tem mais algo para acrescentar?
Vejam se tem alguma coisa errada ou algo que posso fazer para melhorar a velocidade de acesso aos dados.
NO MODULO:
[ô]declaration
Public BD_ADO As New ADODB.Connection
Sub Abrir_BancodeDados()
[ô]Leio a função e preenxo a variavel
DBPath = ReadINI(App.Path & [Ô]\config.ini[Ô], [Ô]DADOS_PROGRAMA[Ô], [Ô]path[Ô])
[ô]agora aqui eu seto (ADO)
BD_ADO.Open [Ô]Provider = Microsoft.Jet.OLEDB.4.0;Data Source =[Ô] & DBPath
End Sub
NO FORM
[ô]declaration
Dim RS As New ADODB.Recordset
Private sub Preencher_Funcionarios()
Call Abrir_BancodeDados
Set RS.ActiveConnection = BD_ADO
RS.Source = [Ô]SELECT * FROM FUNCIONARIO[Ô]
RS.Open
Do Until RS.EOF
If Not IsNull(RS([Ô]NOME[Ô])) Then cboUsuario.AddItem RS([Ô]NOME[Ô])
cboUsuario.ItemData(cboUsuario.NewIndex) = RS([Ô]CODIGO[Ô])
RS.MoveNext
Loop
End If
Funcionou!
Tem mais algo para acrescentar?
continuando meus codigo aqui...
Coloquei mais um objeto no form e fui abrir outra tabela e surgiu a seguinte msg:
Operação não permitida quando o objeto está aberto
Então após (toda vez) que usar o:
sempre que abrir o banco de dados e a tabela vou ter q fechar (BD_ADO.CLOSE)?
tenho que fechar a tabela tambem ou só o banco de dados?
Se num forma eu abrir 10 tabelas, terei q abrir-fechar uma antes da outra?
Coloquei mais um objeto no form e fui abrir outra tabela e surgiu a seguinte msg:
Operação não permitida quando o objeto está aberto
Então após (toda vez) que usar o:
Call Abrir_BancodeDados
Set RS.ActiveConnection = BD_ADO
RS.Source = [Ô]SELECT * FROM FUNCIONARIO WHERE ACESSO = TRUE AND ATIVO = TRUE AND NIVEL <> 4 ORDER BY NOME[Ô]
RS.Open
[ô]meu comando aqui
sempre que abrir o banco de dados e a tabela vou ter q fechar (BD_ADO.CLOSE)?
tenho que fechar a tabela tambem ou só o banco de dados?
Se num forma eu abrir 10 tabelas, terei q abrir-fechar uma antes da outra?
mudei todos os BD_ADO.CLOSE para RS.CLOSE
ou seja, inves de fechar o banco de dados apos cada abertura, ele fecha somente a tabela
Só que ele dar erro ao abrir o banco de dados pela segunda vez...
Operação não permitida quando o objeto está aberto
e ai?
ou seja, inves de fechar o banco de dados apos cada abertura, ele fecha somente a tabela
Só que ele dar erro ao abrir o banco de dados pela segunda vez...
Operação não permitida quando o objeto está aberto
e ai?
Tópico encerrado , respostas não são mais permitidas