AJUDA SOBRE CONEXOES ADO DAO
Bom dia galera do VbMania..Primeiramente Feliz 2011 a todos =)
Bom minha duvida(na verdade preciso de informações)..trabalho com VB usando DAO, e access 2003. Mas consegui 1 sistema que ja esta quase terminado usando Access como banco de dados. Mas daqui pra frente gostaria de trabalhar com algo mais robusto etc etc...Entao gostaria de saber se a programação com Access e Dao muda muito pra se eu fosse utilizar algo como MySQL que é Free(corrijam-me se estiver errado) usando ADO como conexão(se é preciso mudar a conexao com um banco de dados deste).
Quais as vantagens e desvantagens dessa troca e onde posso encontrar material para começar a migrar meu sistema? Precisarei reescrever todo o meu codigo se quiser fazer algo desse tipo?
Bom por enquanto é isso que gostaria de saber...
Obrigado
Abraços
Bom minha duvida(na verdade preciso de informações)..trabalho com VB usando DAO, e access 2003. Mas consegui 1 sistema que ja esta quase terminado usando Access como banco de dados. Mas daqui pra frente gostaria de trabalhar com algo mais robusto etc etc...Entao gostaria de saber se a programação com Access e Dao muda muito pra se eu fosse utilizar algo como MySQL que é Free(corrijam-me se estiver errado) usando ADO como conexão(se é preciso mudar a conexao com um banco de dados deste).
Quais as vantagens e desvantagens dessa troca e onde posso encontrar material para começar a migrar meu sistema? Precisarei reescrever todo o meu codigo se quiser fazer algo desse tipo?
Bom por enquanto é isso que gostaria de saber...
Obrigado
Abraços
SACOFRITO Feliz ano novo !!!
Quanto a conexão muda pouco coisa, agora quanto a banco muda bastante, pois tem formatação de dados no acess que é diferente no mysql, por exemplo
Data
No acess vc grava assim
[ô]DD/MM/YYYY[ô]
E consulta assim
#MM/DD/YYYY#
No Mysql
Grava assim
[ô]YYYY-MM-DD[ô]
Consulta assim
[ô]DD-MM-YYYY[ô]
Então são essas e outras partilaridades que vc terá que dar uma revisão geral, se vc tiver um módulo de conexão DAO não vai precisa reescrever a parte de conexão, agora se vc fizer do jeito que eu fazia, em cada formulário fazia a conexão com o banco, vc terá um trabalhinho sim, más te digo uma coisa, compensa e muito vc fazer isso, pois se vc tiver várias máquinas na rede com o mysql como banco, vc não terá muito problema, pois ela já é um banco robusto coisa que o acess não é.
Abraço e espero ter te ajudado
Quanto a conexão muda pouco coisa, agora quanto a banco muda bastante, pois tem formatação de dados no acess que é diferente no mysql, por exemplo
Data
No acess vc grava assim
[ô]DD/MM/YYYY[ô]
E consulta assim
#MM/DD/YYYY#
No Mysql
Grava assim
[ô]YYYY-MM-DD[ô]
Consulta assim
[ô]DD-MM-YYYY[ô]
Então são essas e outras partilaridades que vc terá que dar uma revisão geral, se vc tiver um módulo de conexão DAO não vai precisa reescrever a parte de conexão, agora se vc fizer do jeito que eu fazia, em cada formulário fazia a conexão com o banco, vc terá um trabalhinho sim, más te digo uma coisa, compensa e muito vc fazer isso, pois se vc tiver várias máquinas na rede com o mysql como banco, vc não terá muito problema, pois ela já é um banco robusto coisa que o acess não é.
Abraço e espero ter te ajudado
Alvaro, obrigado pela resposta.
Certo.. mas tipo uma query muda muita coisa
Pois estou habituado a fazer da seguinte maneira
set dsVariavel = Banco.openrecordset([Ô]select * from tabela where qualquercoisa[Ô], dbopendynaset ou dbopensnapshot)
essa sentença muda muito?
Gravação no banco
tabela.edit ou addnew
tabela!campo = dados a serem gravados
tabela.update
Criar uma function
function NomeDela()
end funcion
A sintaxe das rotinas e funções muda muita coisa?
Me perdoem se eu estiver usando termos técnicos incorretos para cada uma dos passos que descrevi.
Certo.. mas tipo uma query muda muita coisa
Pois estou habituado a fazer da seguinte maneira
set dsVariavel = Banco.openrecordset([Ô]select * from tabela where qualquercoisa[Ô], dbopendynaset ou dbopensnapshot)
essa sentença muda muito?
Gravação no banco
tabela.edit ou addnew
tabela!campo = dados a serem gravados
tabela.update
Criar uma function
function NomeDela()
end funcion
A sintaxe das rotinas e funções muda muita coisa?
Me perdoem se eu estiver usando termos técnicos incorretos para cada uma dos passos que descrevi.
Bom dia feliz ano novo.. nao muda muita coisa nao.. veja so
Set MyRs = New ADODB.Recordset
StrSql = [Ô]select movclassificacao from movimentoocorrencias where movclassificacao=[ô][Ô] & text1.text & [Ô][ô][Ô]
MyRs.Open StrSql Conexao, adOpenStatic, adLockReadOnly
Uma idéia interessante e que ajuda muito na organização do código fonte da aplicação, é utilizar uma classe de persistência de dados com todas as rotinas de abertura e fechamento de conexão, consultas na base de dados, inserção e manutenção de registros e algo mais.
Segue abaixo um vÃdeo simples, mas que ilustra bem a criação e utilização da classe em questão. O exemplo utiliza ADO com uma base Northwind em Access.
Segue abaixo um vÃdeo simples, mas que ilustra bem a criação e utilização da classe em questão. O exemplo utiliza ADO com uma base Northwind em Access.
VÃdeos VB6
Artigos VB6
Entao essa sentença eu sempre usarei a ultima e a primeira linha fixas para qualquer query que eu deseja consultar?
Para inserir dados ao banco é da mesma maneira?
Desculpem por estar sendo meio folgado rs, estou no serviço agora e arrumo um tempinho para vir aqui ver o tópico
Obrigado a quem esta ajudando
Para inserir dados ao banco é da mesma maneira?
Desculpem por estar sendo meio folgado rs, estou no serviço agora e arrumo um tempinho para vir aqui ver o tópico
Obrigado a quem esta ajudando
Inserir Dados
Alterar Dados
Excluir Dados
StrSql = [Ô]INSERT INTO cadclassificacaoocorrencias([Ô]
StrSql = StrSql & [Ô]classdescricao,classativo)[Ô]
StrSql = StrSql & [Ô] Values ([ô][Ô]
StrSql = StrSql & txtDescricao.Text & [Ô][ô],[ô][Ô]
StrSql = StrSql & chAtivo.Value & [Ô][ô])[Ô]
With Conexao
.BeginTrans
.Execute (StrSql)
.CommitTrans
End With
Alterar Dados
StrSql = [Ô]Update cadclassificacaoocorrencias [Ô] & _
[Ô]SET classdescricao=[ô][Ô] & txtDescricao.Text & [Ô][ô][Ô] & _
[Ô],classativo=[ô][Ô] & chAtivo.Value & [Ô][ô][Ô]
StrSql = StrSql & [Ô] WHERE id=[Ô] & TDBGrid1.TextMatrix(TDBGrid1.Row, 0)
With Conexao
.BeginTrans
.Execute (StrSql)
.CommitTrans
End With
Excluir Dados
StrSql = [Ô]DELETE FROM cadclassificacaoocorrencias where id = [ô][Ô] & TDBGrid1.TextMatrix(TDBGrid1.Row, 0) & [Ô][ô][Ô]
With Conexao
.BeginTrans
.Execute StrSql
.CommitTrans
End With
SACOFRITO
O exemplo que o Tecla deu(alias muito bom exemplo), é exatamente o que eu te falei, se vc tiver uma rotina para abrir a conexão com o banco fica mais fácil e menos complicado a sua migração
Quanto a consulta, estou colocando aqui uma consulta usada por mim, apesa de ter uma consulta no exemplo do Tecla, más essa aqui eu coloquei para vc ver como que fica uma consulta com data, que eu te passei
USANDO ADO NO ACESS
dim Sql as string
dim Banco as Adodb.Recordset
sql = [Ô]select v.data, i.descricao, v.quant, v.valunitario,(v.quant*v.valunitario)-(((v.quant*v.valunitario)* v.desconto)/100) as total,v.desconto, v.funcionario,i.codbarras, v.ncupom from venda V inner join itens i on i.codbarras = v.codbarras where v.vendacancelada = False and v.data between #[Ô] & Format(TxtDataInicial.Text, [Ô]MM/DD/YYYY[Ô]) & [Ô]# and #[Ô] & Format(TxtDataFinal.Text, [Ô]MM/DD/YYYY[Ô]) & [Ô]# order by v.data, i.codbarras[Ô]
Set Banco = New ADODB.Recordset
Banco.Open sql, Db, adOpenKeyset, adLockPessimistic
USANDO ADO NO MYSQL
dim Sql as string
dim Banco as Adodb.Recordset
sql = [Ô]select v.data, i.descricao, v.quant, v.valunitario,(v.quant*v.valunitario)-(((v.quant*v.valunitario)* v.desconto)/100) as total,v.desconto, v.funcionario,i.codbarras, v.ncupom from venda V inner join itens i on i.codbarras = v.codbarras where v.vendacancelada = False and v.data between [ô][Ô] & Format(TxtDataInicial.Text, [Ô]YYYY-MM-DD[Ô]) & [Ô][ô] and [ô][Ô] & Format(TxtDataFinal.Text, [Ô]YYYY-MM-DD[Ô]) & [Ô][ô] order by v.data, i.codbarras[Ô]
Set Banco = New ADODB.Recordset
Banco.Open sql, Db, adOpenKeyset, adLockPessimistic
Como vc pode ver, não muda muita coisa em relação a sua consulta, apenas detalhes.
Quanto a gravação, vc pode sim usar o addnew, porém não existe o edit. Para vc fazer uma edição do registro 5 por exemplo, vc tem que fazer um select dele, antes de vc passar a alteração para ele, ficaria algo assim:
Set Banco = New ADODB.Recordset
Banco.Open [Ô]Select * from tabela where codigo = 5[Ô], Db, adOpenKeyset, adLockPessimistic
banco!descricao=[ô]Alterando a descrição[ô]
banco.update
Para usar o addnew fica a mesma coisa, porém aconcelho a usar o sql para fazer isso, Insert Into e o Update tabela set ....., fica uma coisa mais direta.
O exemplo que o Tecla deu(alias muito bom exemplo), é exatamente o que eu te falei, se vc tiver uma rotina para abrir a conexão com o banco fica mais fácil e menos complicado a sua migração
Quanto a consulta, estou colocando aqui uma consulta usada por mim, apesa de ter uma consulta no exemplo do Tecla, más essa aqui eu coloquei para vc ver como que fica uma consulta com data, que eu te passei
USANDO ADO NO ACESS
dim Sql as string
dim Banco as Adodb.Recordset
sql = [Ô]select v.data, i.descricao, v.quant, v.valunitario,(v.quant*v.valunitario)-(((v.quant*v.valunitario)* v.desconto)/100) as total,v.desconto, v.funcionario,i.codbarras, v.ncupom from venda V inner join itens i on i.codbarras = v.codbarras where v.vendacancelada = False and v.data between #[Ô] & Format(TxtDataInicial.Text, [Ô]MM/DD/YYYY[Ô]) & [Ô]# and #[Ô] & Format(TxtDataFinal.Text, [Ô]MM/DD/YYYY[Ô]) & [Ô]# order by v.data, i.codbarras[Ô]
Set Banco = New ADODB.Recordset
Banco.Open sql, Db, adOpenKeyset, adLockPessimistic
USANDO ADO NO MYSQL
dim Sql as string
dim Banco as Adodb.Recordset
sql = [Ô]select v.data, i.descricao, v.quant, v.valunitario,(v.quant*v.valunitario)-(((v.quant*v.valunitario)* v.desconto)/100) as total,v.desconto, v.funcionario,i.codbarras, v.ncupom from venda V inner join itens i on i.codbarras = v.codbarras where v.vendacancelada = False and v.data between [ô][Ô] & Format(TxtDataInicial.Text, [Ô]YYYY-MM-DD[Ô]) & [Ô][ô] and [ô][Ô] & Format(TxtDataFinal.Text, [Ô]YYYY-MM-DD[Ô]) & [Ô][ô] order by v.data, i.codbarras[Ô]
Set Banco = New ADODB.Recordset
Banco.Open sql, Db, adOpenKeyset, adLockPessimistic
Como vc pode ver, não muda muita coisa em relação a sua consulta, apenas detalhes.
Quanto a gravação, vc pode sim usar o addnew, porém não existe o edit. Para vc fazer uma edição do registro 5 por exemplo, vc tem que fazer um select dele, antes de vc passar a alteração para ele, ficaria algo assim:
Set Banco = New ADODB.Recordset
Banco.Open [Ô]Select * from tabela where codigo = 5[Ô], Db, adOpenKeyset, adLockPessimistic
banco!descricao=[ô]Alterando a descrição[ô]
banco.update
Para usar o addnew fica a mesma coisa, porém aconcelho a usar o sql para fazer isso, Insert Into e o Update tabela set ....., fica uma coisa mais direta.
Ok
Uma ultima coisinha..
Entao de DAO com access para ADO mudam-se apenas detalhes?
No meu caso do DAO no meu projeto, eu abro o banco todo em uma variavel global ao abrir a tela de Login, entao ele fica aberto o tempo todo
Ai só vou abrindo tabelas pra consultar, inserçao etc..
Abro o banco de access assm
set db = opendatabase(app.path & [Ô]
omedobanco.mdb[Ô])
Entao as tabelas sao abertas dentro da variavel que abriu o banco..
Como fica isso no caso com mysql?(galera estou começando a ir mais adiante com o assunto.. pois aqui na empresa onde trabalho vejo muitos problemas bobos de banco de dados corrompendo e tal, e isso enxe os patová hehehe...e queria saber de mais funcionalidades de bancos melhores, e estou pensando no MySQl pois até onde sei ele é gratuido, certo?)
Essa linha
MyRs.Open StrSql Conexao, adOpenStatic, adLockReadOnly
A palavra chave Conexao seria equivalente ao meu DB?
Valeu mesmo pessoas
Uma ultima coisinha..
Entao de DAO com access para ADO mudam-se apenas detalhes?
No meu caso do DAO no meu projeto, eu abro o banco todo em uma variavel global ao abrir a tela de Login, entao ele fica aberto o tempo todo
Ai só vou abrindo tabelas pra consultar, inserçao etc..
Abro o banco de access assm
set db = opendatabase(app.path & [Ô]
omedobanco.mdb[Ô])
Entao as tabelas sao abertas dentro da variavel que abriu o banco..
Como fica isso no caso com mysql?(galera estou começando a ir mais adiante com o assunto.. pois aqui na empresa onde trabalho vejo muitos problemas bobos de banco de dados corrompendo e tal, e isso enxe os patová hehehe...e queria saber de mais funcionalidades de bancos melhores, e estou pensando no MySQl pois até onde sei ele é gratuido, certo?)
Essa linha
MyRs.Open StrSql Conexao, adOpenStatic, adLockReadOnly
A palavra chave Conexao seria equivalente ao meu DB?
Valeu mesmo pessoas
SACOFRITO, sim a palavra conexao é equivalente a seu db e ao meu banco
Quanto ao abrir o banco lembre de usar o provider que esta no exemplo do Tecla e segue um link que me ajudou bastante para migrar para o mysql
http://dev.mysql.com/doc/refman/4.1/pt/reference.html
Apenas mais um detalhem quanto a valores, eu particulamente, gravo no tipo double e al invés de vÃrgula para separa os centavos é ponto
E realmente enche o saco os erros de banco do Acess
Quanto ao abrir o banco lembre de usar o provider que esta no exemplo do Tecla e segue um link que me ajudou bastante para migrar para o mysql
http://dev.mysql.com/doc/refman/4.1/pt/reference.html
Apenas mais um detalhem quanto a valores, eu particulamente, gravo no tipo double e al invés de vÃrgula para separa os centavos é ponto
E realmente enche o saco os erros de banco do Acess
Nao entendi.. vc grava isso porque precisa no mySQL ou por opção sua ??
Tem como voce me passar seu msn? Ai nas horas que eu estiver na minha casa conversamos melhor para nao transformar o vbmania em um chat..
Em casa vejo o Link que o Tecla postou se tiver alguma duvida pergunto a voces...
Tem como voce me passar seu msn? Ai nas horas que eu estiver na minha casa conversamos melhor para nao transformar o vbmania em um chat..
Em casa vejo o Link que o Tecla postou se tiver alguma duvida pergunto a voces...
Tópico encerrado , respostas não são mais permitidas