MIGRANDO DE DAO PARA ADO - PARTE 1

WEBIER 21/02/2012 00:11:35
#395153
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:
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?
LLAIA 21/02/2012 01:36:35
#395157
Resposta escolhida
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.
WEBIER 21/02/2012 10:29:34
#395163
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
WEBIER 21/02/2012 11:19:19
#395168
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?
WEBIER 21/02/2012 11:29:38
#395173
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:
[ô]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?
WEBIER 21/02/2012 11:55:37
#395177
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:
        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?
WEBIER 21/02/2012 12:12:10
#395179
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?
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas