AJUDA SOBRE CONEXOES ADO DAO

SACOFRITO 03/01/2011 08:55:08
#360908
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
ALVAROVB2009 03/01/2011 09:23:52
#360913
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
SACOFRITO 03/01/2011 09:43:12
#360916
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.










XXXANGELSXXX 03/01/2011 10:01:32
#360917
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
TECLA 03/01/2011 10:04:57
#360918
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.


Vídeos VB6
Artigos VB6
SACOFRITO 03/01/2011 10:05:27
#360919
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
XXXANGELSXXX 03/01/2011 10:18:30
#360921
Inserir 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
ALVAROVB2009 03/01/2011 10:39:16
#360926
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.
SACOFRITO 03/01/2011 10:49:16
#360928
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
ALVAROVB2009 03/01/2011 11:08:21
#360932
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
SACOFRITO 03/01/2011 11:12:44
#360933
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...


Página 1 de 3 [21 registro(s)]
Tópico encerrado , respostas não são mais permitidas