... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Acessando dados da Web - parte 2

De Jefferson Braz

No último artigo, demonstrei como realizar, de modo simples, a conexão entre um front-end Access e uma base de dados MySQL na Web.

Agora, vou refinar um pouco mais a técnica, tornando-a mais eficiente e otimizar a conexão com a base de dados que poderá oscilar em virtude da velocidade e tráfego no servidor.

O objetivo deste artigo não é ensinar a utilização e a configuração do MySQL, mas sim, possibilitar o primeiro contato com o referido banco de dados. Não pretendo me ater a determinados detalhes e conceitos que, a meu ver, são de conhecimento básico de qualquer bom programador em Access. Também não vou me aprofundar nas ferramentas propostas e na questão dos prós e contras em relação aos métodos empregados. Tenho o propósito de me concentrar na criação da base de dados, de forma simples e rápida; na otimização da conexão entre o Access e o MySQL e no modo de colocar o código para trabalhar a nosso favor, fazendo com que tenhamos que digitar a menor quantidade possível de código.

Assim sendo, resumi alguns aspectos e alguns códigos para que este artigo tenha em sua lógica: início, meio e fim. A intenção consiste em concluir o conceito aqui proposto, sem que haja a necessidade de desdobrar este artigo em dois ou três.

Maiores informações sobre o banco de dados MySQL ou das ferramentas utilizadas, poderão ser obtidas diretamente no site do fabricante.

Neste artigo será demonstrado apenas:

1. Como criar uma base de dados no servidor Web.
2. Como criar tabelas na base de dados.
3. Como realizar conexão otimizada à base de dados.

Como criar uma base de dados no servidor Web

A maneira de se criar uma base de dados, em qualquer provedor, é a mesma. O que muda é a disposição dos comandos, dependendo do tipo e da versão do painel de controle.

Você observará que não é muito diferente da logística no próprio Access:

1. Primeiro criamos a base de dados.
2. Definimos usuário e senha.
3. Criamos nossas tabelas e consultas.

Neste exemplo,  utilizo como base, o painel de controle do UOL.

Após acessar o painel de controle, o primeiro passo é clicar no comando Banco de Dados, como mostra na figura abaixo:

R

Em seguida, será aberta uma nova página com a relação de todos os bancos de dados criados.

Banco: nome do banco de dados
Tipo: tipo do banco de dados. MySQL, SQL Server, etc.
Usuário: usuário do banco de dados
Servidor: nome do servidor do banco de dados
Descrição: informações sobre o seu banco de dados
Utilização: espaço utilizado referente ao pacote contratado.

 
Um dos servidores mais rápidos que encontrei na Web foi o do UOL, mas ele tem uma grande desvantagem quanto à sua configuração: você não pode personalizar o nome do banco de dados e o usuário. Ele sempre será a seqüência do nome do seu domínio. Assim, o campo descrição é útil para informações sobre a utilização do banco de dados.

R

Nesta janela vamos clicar no botão Criar Banco de Dados para criar o nosso banco de dados. Será aberta a janela Criar Banco de Dados, na qual serão definidas as seguintes configurações:

Tipo: tipo de banco de dados a ser criado. Neste caso, um banco de dados MySQL
Senha: senha do seu banco de dados
Confirmar a senha: confirmar a senha do seu banco de dados
Descrição: a descrição do seu banco de dados. Ela passa a ser importante no provedor do UOL para identificação do banco de dados, como pode ser observado na imagem anterior.

 
R

O próximo passo consiste em criar tabelas e consultas, em nossa base de dados.

Nota: diferente do painel Plesk, do primeiro artigo, não há necessidade de criar uma DNS para conexão. O provedor UOL suporta a conexão externa, sem a necessidade da criação da DNS.

Como criar tabelas na base de dados

Para trabalhar a estrutura do nosso banco de dados, podemos utilizar o phpMyAdmin, clicando na opção Administrar.

R

Realizando esta operação,  haverá o redirecionamento para o phpMyAdmin, onde será possível administrar através do browser.

R

Particularmente, prefiro uma ferramenta que permita a conexão à banco de dados, diretamente através do desktop, evitando assim, perdas momentâneas da conexão ou time-up de conexão com o servidor.

Existem várias ferramentas no mercado. Em minha opinião, uma das melhores é a SQL Front.

MySQL Front é um gerenciador gráfico de banco de dados MySQL. Oferece uma interface mais refinada do que sistemas construídos em PHP e HTML. A resposta é imediata, pois não há demora alguma para recarregar páginas HTML.

Com este aplicativo, o trabalho com bancos de dados de MySQL ganha muito mais liberdade, pois não esconde a linguagem do usuário.   As informações são apresentadas na tela com bastante clareza. O Editor também permite um uso prático quando se trabalha com scripts e comandos de SQL.

O MySQL Front traz uma interface muito próxima ao MS Access, o que propicia ao usuário, sensação de conforto em sua utilização.

R

Você pode baixar o SQL Front, em sua última versão 5.1, nos links abaixo:

Baixaki: http://www.baixaki.com.br/download/sql-front.htm
SuperDownloads: http://www.superdownloads.com.br/download/100/mysql-front/

 
Criando nossa conexão

O primeiro passo é criarmos a nossa conexão com a nossa base de dados na Web.

Execute o SQL Front.  Por padrão, o aplicativo ao ser iniciado abrirá a janela Open Session que lista todas as conexões criadas ao servidor e permite a criação de uma nova conexão.

R

Para criar uma nova conexão, clique no botão New. Será aberta a janela Properties, onde você definirá a conexão ao seu banco de dados.

Ela é composta por 04 guias básicas:

Geral: definição de um nome e um ícone para sua conexão.

Name: definição de um nome para sua conexão.
Icone: seleção de um ícone para facilitar a identificação da sua conexão.

R

Connection: nessa guia, você informará a rota do seu servidor MySQ e a porta de conexão com o mesmo.

Server: informa o nome do servidor da base de dados. Neste exemplo nossa rota do servidor é dbmy0012.shservidor.com
Port
: a porta de conexão padrão para conexão externa é a 3306.

R

Login: nessa guia você informa o nome do usuário, senha e nome do banco de dados para conexão.

User: nome do usuário criado para gerenciar o banco de dados.
Password
: senha do seu banco de dados.
Database
: nome do banco de dados a ser conectado. Se o banco de dados for informado, a conexão será direcionada para conexão automática à base de dados informada.

R

Uma vez informado os dados da sua conexão, clique no botão OK. Você será redirecionado para a janela Open Session, onde escolherá a conexão criada e clicará no botão ‘Open’ para abrir a conexão com a base de dados selecionada.

R

Vamos conhecer agora as 03 janelas básicas da aplicação:

1. Location Bar: a rota na Web da sua base de dados.
2. Navigator: serão listadas todas as tabelas do seu banco de dados.
3. Object browser: exibe informações sobre o objeto selecionado.

R

Nota: observe que foi listada uma série de tabelas com o prefixo jos_.  As tabelas são utilizadas pelo Joomla. Elas não devem ser removidas, renomeadas ou terem a sua estrutura alterada, pois isso fará com que o site deixe de funcionar.

Criando nossa tabela

Vamos iniciar agora o processo de criar tabelas no MySQL Front.

O primeiro passo é clicar sobre o nome do banco de dados desejado. Neste exemplo o banco de dados é o kartoffel_2. Em seguida, clicamos na opção Database e depois em New. Será listada uma série de opções. Clique na opção Table, como mostra a figura abaixo:

R

 

Será exibida a janela Add Table. Ele é a responsável por receber o nome da sua tabela e as configurações referentes ao seu comportamento. Por enquanto vamos nos concentrar em somente dar uma nome para sua tabela.

Na guia General na opção name vamos nomear nossa tabela.

R

Diferente do Access, por padrão, será automaticamente criado um campo chamado ID. Ele será automaticamente uma chave primária e campo auto-numeração.

R

Para confirmar a criação da tabela, basta clicar no botão OK.

Sua nova tabela será salva e automaticamente listada na guia Navigator.  O próximo passo é criar os demais campos da nossa tabela.

R

Para isso, clique no nome da sua tabela e clique na opção Add Field.  Será aberta uma janela aonde você informará o nome e o tipo do seu campo.

R

O campo Type é o nosso Tipo de Dados no Access.

Os campos no Access e no MySQL são diferentes um pouco quanto suas funcionalidades e características, assim, como no SQL Server. Vale ficar atento ao tipo de campo a ser utilizado, para que não haja comprometimento dos dados salvos, em virtude do formato dos dados configurados.

Para um melhor entendimento dos tipos de campos no MySQL, consulte o Manual de Referência do MySQL em: http://dev.mysql.com/doc/refman/4.1/pt/column-types.html

Diferente do Access, no qual criamos todos os campos antes de salvar a nossa tabela, no SQL Front, os campos são criados um a um e vão sendo salvos automaticamente na estrutura da nossa tabela.

RÀ medida que os campos vão sendo criados, eles vão povoando nossa Object Browser.

R

Nota: Para maiores informações sobre MySQL, consulte o seu manual de referência em: http://www.baixaki.com.br/download/mysql-manual.htm

Como realizar conexão otimizada à base de dados

No último artigo, demonstrei como realizar a conexão ao banco de dados.  Neste artigo informei que tratava-se de uma "demonstração de como realizar o procedimento” e que havia formas mais eficientes de conectar-se à uma base de dados.  Vamos agora abordar uma forma mais eficiente de se conectar à base de dados.

No último exemplo, nós abrimos uma conexão com a base de dados e ficamos conectados ao banco de dados.  O método nos favoreceu, visto que pudemos contar com recursos nativos do Access, como salvar e excluir dados, utilizando comandos diretos do Access, através do docmd.

Contudo,  ficamos sensíveis a fatores adversos como: instabilidade na velocidade da conexão, time-up do servidor, que poderia  abortar a nossa conexão ao banco de dados, sem sermos avisados. Sem falar que a forma de conexão limita a quantidade de usuários conectados ao banco de dados, visto que ficamos com a conexão “aberta” para a manipulação de dados.

Vamos trabalhar agora com códigos que evitam esses problemas, permitindo uma conexão mais inteligente ao nosso banco de dados. Para isso vamos usar e abusar do nosso amigo ADO – Access Data Object.

Entendo que muitos programadores em Access evitam utilizar o ADO, principalmente quando temos o JET ao nosso dispor, o que nos poupa de digitarmos grande quantidade de códigos para conexão. Contudo, o ADO nos dá o maior controle da conexão que estamos estabelecendo, sem falar que aceleramos a manipulação de dados e aumentamos, em muito, a quantidade de usuários trabalhando com o banco de dados ao mesmo tempo.

Quando trabalhamos com uma base de dados na Web,  utilizarmos o ADO ,  torna-se imprescindível.

A melhor maneira de fazer essa operação é não criar um vínculo permanente com a base de dados. O certo é abrir a conexão com o banco de dados, carregar os dados desejados e fechar novamente a conexão, liberando, assim, recursos para outro usuário realizar operações. O que conhecemos como forms desvinculados.

Eu trabalho, tu trabalhas e o ADO... deu trabalho

Como dito anteriormente, quando trabalhamos com ADO , a quantidade de dados que temos que digitar é bem maior que quando utilizamos o JET

No JET criamos conexão com a base de dados e o Access faz o resto.

R

Se vamos trabalhar com base de dados desvinculadas, temos que estabelecer a conexão em tempo de execução, abrindo a conexão e alimentando os dados campo a campo.

Vamos supor que tenhamos uma tabela chamada meus_dados. Nesta tabela temos 45 campos e vamos utilizar todos, em nosso formulário.

Dim MyCon
Dim DBase
MyCon = "Select * from meus_dados”
DBase = “c:\MinhaPasta\minha_base.accdb”
Set DB = DBEngine.Workspaces(0).OpenDatabase(DBase)
Set rst = DB.OpenRecordset(MyCon)

Me.controle_1 = rst(1)value
Me.controle_2 = rst(2).value
Me.controle_3 = rst(3).value
Me.controle_4 = rst(4).value
Me.controle_5 = rst(5).value
Me.controle_6 = rst(6).value
Me.controle_7 = rst(7).value
Me.controle_8 = rst(8).value
Me.controle_9 = rst(9).value
Me.controle_10 = rst(10).value
Me.controle_11 = rst(11).value
Me.controle_12 = rst(12).value

(…)

rst.close

E lá vai código…. só de ver a parte do código, já cansou a vista.  Agora vamos imaginar 100 tabelas com 100 formulários na mesma situação.  Já pensou na mão de obra?

Nesta linha de raciocínio é lógico que qualquer programador em Access vai evitar trabalhar com ADO. Imagine o tempo para desenvolver a aplicação e as implicações na escrita do código.

Vai dar trabalho, correto? Errado! Observe o código abaixo:

Dim FormAberto As Form
Dim Controle As Control

Set FormAberto = Forms(ForMy)
For Each Controle In FormAberto

 If Controle.ControlType = acTextBox Then

  FormAberto.Controls(Controle.Name) = rst(Controle.Name).Value

 End If

Next

rst.Close 'Encerra a conexão com o recordeset
cn.Close 'Encerra a conexão com a base de dados

Tecnicamente ele faz a mesma operação que o código anterior, contudo de uma forma dinâmica e inteligente, uma vez que a função pega o campo do seu formulário e carrega o dado correspondente ao campo da tabela.

Existe um ditado que eu aprecio muito: se a vida lhe deu um limão, faça uma limonada.

Vamos trazer essa lição para cá: se o ADO lhe deu um limão, deixa que o VBA faça uma limonada.

Deixando o código trabalhar por você

Preparamos um conjunto de funções básicas que vai fazer todo o trabalho braçal para você. De agora em diante, trabalhar com ADO e Recordeset, vai ser moleza.

Através deles você realizará rapidamente as seguintes etapas:

1. Conectar-se ao servidor.
2. Extrair os dados .
3. Alimentar o formulário.

Vamos realizar uma conexão à tabela criada contatos na nossa base de dados, utilizando as funções propostas.

Para não tornar o artigo ainda mais extenso, vamos descrever as funções que serão utilizadas. As funções poderão ser acompanhadas no exemplo disponibilizado.

1. Conectar-se ao servidor

a. MySQL_Server: carrega os dados de conexão com base em uma tabela.
b. Conexao_Open: abre a conexão com a tabela desejada.

2. Carrega dados da conexão aberta

a. Lista_Load: carrega os dados da conexão aberta e alimenta uma caixa de listagem.
b. Lista_Select: popula o formulário com base no registro selecionado na caixa de listagem.

3. Manipula dados

a. Add_MySQL: inclui novos dados na tabela.
b. Updade_MySQL: atualiza os dados selecionados.
c. Limpa_Campos: limpa os campos da tabela.
d. Delete_MySQL: deleta os dados selecionados.

As funções foram criadas para permitir que você preocupe-se apenas com recordeset desejado, bastando que para isso, o nome do controle nos formulários, seja o mesmo nome do campo na tabela. É suficiente abrir a conexão através do ADO, seja ela qual for e utilizar as funções para manipular os dados carregados.

Vejamos o exemplo abaixo:

Add_MySQL(sMySQL, FrMy)

Updade_MySQL: nome da função.
sMySQL
: dados do recordeset a ser processador.
FrMy
: formulário que sofrerá a ação da função.

A função ficaria assim:

Call Add_MySQL(“select * from contatos”, me.form.name)

A função tratará os campos a serem alimentados com base na quantidade e tipo de campos informados no formulário.

Utilizando as funções no seu formulário desacoplado

No nosso arquivo de exemplo, você encontrará o formulário ‘contatos’. Ele possui 06 (seis) controles do tipo caixa de texto, 05 (cinco) botões e uma caixa de listagem.

A nossa função realizará a conexão à base de dados e povoará o formulário, com base no nome dos campos do formulário.

R

 

1. Carregar: receberá a função que recupera todos os registros da tabela.
2. Excluir: será responsável pela exclusão do registro selecionado.
3. Salvar: será responsável por salvar o registro selecionado.
4. Novo: limpará o formulário para receber os novos dados.

Observe que o formulário encontra-se desacoplado da base de dados. A nossa função será responsável por alimentar a caixa de listagem, e posteriormente povoar o formulário.

R

Observe que os nomes dos campos são os mesmos nomes da tabela. Assim tudo que precisamos fazer é configurar corretamente as funções.

A primeira tarefa é alimentar a caixa de listagem presente em nosso formulário. Como a caixa de listagem vai recuperar todos os registros da nossa tabela no servidor, utilizaremos um recordset que recupera todos os registros.

Abaixo, apresentarei códigos de forma resumida para que fique claro o respectivo entendimento. No exemplo para download, os códigos estão devidamente formatados dentro de um contexto para utilização.

O primeiro passo é carregar os dados em nosso formulário. Para isso vamos utilizar a função lista_load no botão carregar:

Private Sub carregar_Click()

   Call Lista_Load("select * from contatos order by nome_contato", Me.Form.Name)

End Sub

Uma vez carregada a caixa de listagem, precisamos carregar os dados selecionados na mesma. Para isso utilizaremos a função lista_select, como abaixo:

Private Sub Lista_Click()

  Call Lista_Select("select * from contatos where Id=" & Me.Lista.Column(0), Me.Form.Name)

End Sub

R

Agora que já sabemos como carregar os dados em nosso formulário, vamos configurar os botões que realizarão a manipulação dos dados.

Para excluir o registro selecionado, vamos utilizar a função Delete_MySQL.

Private Sub Excluir_Click()

 Call Delete_MySQL("select * from contatos where Id=" & Me.Lista.Column(0), Me.Form.Name)

End Sub

O botão ‘novo’ trabalhará em conjunto a o botão ‘salvar’.

O botão novo receberá a função Limpa_Campos, que irá preparar o formulário para receber os novos dados.

Private Sub Novo_Click()

    Limpa_Campos (Me.Form.Name)

End Sub

O botão Salvar será responsável por salvar novos dados e atualizar dados selecionados.

Private Sub Salvar_Click()
 
If IsNull(Me.Id) Then

Call Add_MySQL("select * from contatos", Me.Form.Name)

Else
 
Call Updade_MySQL("select * from contatos where Id=" & Me.Lista.Column(0), Me.Form.Name)
 
End If

End Sub

Com isso, adicionamos em nosso formulário, todos os códigos necessários para realizar o carregamento e a manipulação dos dados relacionados a tabela contatos na nossa base de dados MySQL na Web.

O exemplo disponibilizado foi testado através de uma conexão 2G, com velocidade nominal de 156 Kbps.

Para carregar a caixa de listagem, cronometramos 6,73 segundos um total de 96 registros, e para carregar os dados selecionados 1,37 segundos.

Nos laboratórios da Kartoffel, com conexão nominal de 7 MB, o modelo de conexão e manipulação dos dados foram cronometrados 1,23 segundos para carregar em uma caixa de listagem, aproximadamente 920 registros.

O tempo de resposta com conexão acima de 5 MB foi tão bom, que clientes aderiram ao conceito de trabalhar com aplicações desktop com base de dados totalmente na Web.

Com isso, posso afirmar com certeza que, o Access como front-end em desktops, com conexão em base de dados em servidores HTTP, se tornaram uma realidade cada vez mais presente, uma vez que preservamos toda a flexibilidade e modelagem que o Access nos oferece.

No próximo artigo da série, apresentaremos códigos de conexão mais refinados e dinâmicos para carregamento e manipulação dos dados carregados, bem como maiores detalhes sobre o MySQL Front.

Enquanto isso, sinta-se à vontade para fazer as adaptações necessárias aos códigos para atender ao seu dia a dia.

Segue abaixo, o banco de dados, em Access, para você realizar os testes de conexão.

Antes de rodar o aplicativo, você irá precisar instalar o drive ODBC do MySQL. 

Até o próximo artigo!

Jeferson Braz é programador em MS Access e Visual Basic com mais de 17 anos de experiência. 
 
Diretor de Desenvolvimento da Kartoffel Desenvolvimento de Sistemas Ltda, empresa especializada 
em Microsoft Access e CMS Joomla.  
 
Atua no mercado de desenvolvimento de aplicações customizáveis, realizando integração MS Access 
à base de dados web e a websites, suporte e manutenção. 
 
http://www.kartoffel.com.br

 


 

 


77 comentários

Marcelo David   26/10/2011 22:51:58

Caracas, a parceria "Avelino Sampaio e Jefferson Braz" está fenomenal. Cada dia que passa vejo do que um bom programador é capaz de fazer com Access. Não deixo nnca essa "plataforma" de desenvolvimento!!!!
Parabém pelo site Avelino e parabéns por compartilhar seus conhecimentos Jefferson Braz.

Renato Santos   27/10/2011 00:52:04

Parabéns Jefferson pelo excelente artigo e obrigado por compartilhar os seus conhecimentos.
Grande abraço.

Sergio Franco (Porto Alegre-RS)   27/10/2011 09:24:10

Nossa.... Avelino e Jefferson que trabalho.
Qualquer coisa que se diga, será sempre pouco diante das suas generosidade em compatilhar.
Nossa experiencia demonstra que toda mudança não ocorre individualmente, mas só se
realiza e tem extensão coletivamente e que não é quando alguém está no topo, mas sim
quando todos subiram juntos que nossos esforços se mostram enriquecidos.
Suas experiências só vem alicerçar o trabalho dos demais.
Brigadão....
"Fazer ou morrer tentando é o credo"

Jossua   27/10/2011 09:52:43

Já estou ancioso pelo proximo artigo da serie.

Sobre a qualidade... não precisa nem comentar. O que seria de nos sem o site do Avelino.

Domingos Thiago   27/10/2011 10:03:34

Parabéns, senhores!!! Muitos serão beneficiados pela sabedoria de vocês! Deixo aqui o meu "MUITO OBRIGADO".
Abraços!

Caros Mazucato   27/10/2011 10:38:26

Olá tudo bem Avelino Sampaio, gostei o tutorial acima vou analisar com calma, eu tenho um program para agências de viagesn todo completo em acess, o dificil e mexer nele, com as informações a cima talves possa mudar alguma coisa, voce tem algum tutorial para sites, tenho usado o aspmaker mas par site ele não é bom..


Grato

Carlos Mazucato

JBSR   27/10/2011 12:58:36

Caros, uma das melhores ferramentas que já encontrei e trabelhei com ela foi o CodeCharge Studio 4. Ele é um RAD para desenvolvimento de paginas web, muito melhor que o Visual Studio, não só pela simplicidade, mas pelo modelo de desenovlvimento interno do mesmo (muito parecido com a logistica do Access).

Uma das vantagens do CodeCharge Studio 4 é que vc poderá migra de ASP para PHP em um clique, e ele fará toda a conversão (desde que não escreve nenhum código personalizado seu).

Sds


Rui Sérgio   27/10/2011 13:06:37

Parabéns, excelente trabalho, está fenomenal.
Será que é possivel utilizar este procedimento, com as respectivas alterações, quando a base de dados armazenada na WEB é em SQL Server?

Guilherme Ferreira   27/10/2011 15:05:16

Olá avelino!
Meus parabéns, esta muito bom o conteúdo,
eu estava pensando em fazer um projeto parecido com este, vai me ajudar bastante o teu tuto!

Abraços

Cledson   27/10/2011 17:02:21

Poxa, muito obrigado Jefferson Braz e Avelino era tudo que eu tava querendo. A respeito de relatórios utilizando ADO com MySQL vcs acham que pass-through é a melhor solução na criação de relatórios? Estou fazendo testes com pass-through com ODBC, mas depois de um determinado tempo não consigo visualizar o relatório, fecho e abro a aplicação aí sim consigo.

JBSR   27/10/2011 19:45:49

Cledson, eu tenho "mania de simplificar" as coisas. Procedimentos simples que estão ao alcance de nossas vistas são mais facil de se entender. Eu sou adepto da navalha de occam. Assim, o que eu faço é criar tabelas temporarias dentro do meu projeto, ou arquivos XML para depois carregar o relatório, sendo que a primeira opção ainda é a mais simples de se trabalhar.

Sds


Welson Zeferino de Oliveira Junior   27/10/2011 20:09:09

Maravilho!!! Parabéns aqui é o centro do conhecimento em Access. Obrigado por vcs existirem.

Marcelo Rodrigues   28/10/2011 01:04:29

Muito legal! Parabéns pelo artigo. Fiz alguns testes no aplicativo e foi super rápido para incluir e excluir registros. Obrigado por disponibilizar todas essas informações gratuitamente.

Claudio Franco de Oliveira   28/10/2011 15:42:34

Tenho interesse, inclusive no tutorial anterior, existe a possibilidade de adquirir materias sobre access?
cláudio

Avelino Sampaio   28/10/2011 17:40:32

Claudio Franco,

passe seu email, pela seção contato do site, que lhe forneço os detalhes.

Grato

Elton John   29/10/2011 00:59:06

Uma curiosidade ... você usou campo (Id) autoincremento ... Se tivesse uma chave onde você teria que fazer o controle... o novo seria último + 1 .... etc... como você faria ??

Ex.: Obter o último código (SELECT Max(contatos.id) AS UltimoCodigo FROM contatos;)

JBSR   29/10/2011 10:12:46

Grande Elton.

Simples, você deverá rodar uma consulta que pegue o ultimo ID do registro da tabela, como já e feito no access. A diferença que você vai passar o parametro para a instrução que abre a conexão com o MySQL.

Exemplo:

dim csql
csql="Select Max(seu_campo),0)+1 from sua_abela?"

cn.Open "Driver={MySQL ODBC 5.1 Driver};Server=" & MyslqServidor & ";Database=" & MyslqDatabase & ";User=" & MyslqUsuario & "; Password=" & MyslqSenha & ";Option=3;"
rs.CursorLocation = adUseClient
rs.Open csql, cn, adOpenDynamic, adLockOptimistic

msgbox rs(0).value

rs.closed
cn.closed
Sds

JBSR   29/10/2011 10:26:31

Hoje eu recebi uma pergunta interessante sobre o MySQL, no armazenamento de imagens, postado pelo nosso amigo Welson. É um dos tópicos que vai ser abordados em um dos proximos artigos da serie, mas não poderia deixar de responder nesse primeiro momento, então o farei de uma forma mais rápida.

Quando falamos em armazenamento de imagens, estamos falando simplesmente em armazenar dados binarios. Nada mais é que o Objeto OLE do Access. No MySQL os campos são os Blops. A desvantagem com relação ao Access nesse tipo de controle é que ele exibe apenas imagens no formato .BMP. Outros tipos de arquivos, aparecem como ícone no controle.

Assim, o que normalmente é feito, é a extração do arquivo desse campo, e tratado localmente.

Isso tudo, veremos num proximo artigo.

Para os que acharam interessante trabalhar com o MySQL, vale apena consultar o manual do mesmo. Ele tem aproximadamente 280 paginas, mas vale a pena.

A documentação dele poderá ser encontrada em dev.mysql.com.

Bom estudo a todos.


Cledson   29/10/2011 18:50:26

Jefferson, boa tarde!! Estou eu tentando adaptar o seu projeto em meu sistema e estou tendo dificuldade com a instrução SELECT. É o seguinte tenho uma tabela chamada nucleo_tbl, esta tabela possui 30 campos sendo o campo codnucleo a primary key. Carrego no formulário a caixa de listagem nucleo_list coloquei no evento click do nucleo_list pra chamar o módulo nucleo_select. A sim os nomes dos campos são iguais os da tabela. Este evento está gerando o seguinte erro: Erro em tempo de execução '3265': O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado.

Respondendo ou não essa questão, desde já agradeço pela profissional que vc é e agradeço mais uma vez por esse maravilhoso tutorial. Obrigado de Coração!!!

Cledson   29/10/2011 19:27:55

Jefferson, desculpas!! O problema todo é pq eu tinha um campo texto no formulário que totalizava os registros da caixa de listagem. No formulário só pode ter campos textos iguais aos campos da tabela. Vou vê se consigo outra forma de apresentar o total de registros da caixa de listagem. Obrigado.

Cristian   29/10/2011 22:10:25

Jefferson, muchisimas gracias por tu articulo me sirvio muchisimo ! he montando mi servidor mysql y con no-ip lo tengo funcionando y puedo entrar sin problemas desde mi trabajo al servidor de mi casa. Me gustaria saber si no me podrias pasar el sql para crear la base de datos en mysql de este ejemplo tan bueno para usarlo y hacer experiencia . Desde ya muchisimas gracias. Te dejo mi email test@elricho.com.ar

JBSR   30/10/2011 16:35:05

Estimado Cristian, me alegro de que mis artículos cruzar continentes y unificar más el acceso de la comunidad.

Siéntase libre de explorar el ejemplo y hacer la conexión necesaria con la base de datos. El entorno del sitio ha sido diseñado especialmente para que usted pueda llevar a cabo las pruebas y familiarizarse con la tecnología.

Pregunta, por favor póngase en contacto con nosotros y estaremos encantados de ayudarle.

He de dejar mi sitio y correo electrónico de contacto: WWW.kartoffel.com.br / websuporte@kartoffel.com.br

Abrazos

GILBERTO TEIXEIRA   31/10/2011 09:36:31

baixei o driver de odbc, mas quando fui testar AccessWeb2.mdb deu mensagem de provedor não encontrado

JBSR   31/10/2011 09:50:57

Gilberto, com certeza você fez alguma operação indevida.

Ou baixou o driver incompativel com a sua versão do windows, ou se no win 7, não executou a instalação como "Administrador"

Sds

Jorge Brito   05/11/2011 13:54:51

Como modificar o código para ligar ao servidor wampserver.

cn.Open "Driver={MySQL ODBC 5.1 Driver};Server=" & MyslqServidor & ";Database=" & MyslqDatabase & ";User=" & MyslqUsuario & "; Password=" & MyslqSenha & ";Option=3;"
rs.CursorLocation = adUseClient
rs.Open csql, cn, adOpenDynamic, adLockOptimistic

Instalado numa maquina da minha rede localhost.
se poder dar uma dica desde já agradeço

JBSR   05/11/2011 18:25:11

Jorge,

basta apontar para o seu servidor. Não há necessidade de realizar modificação no código, apenas passar as informações para as variáveis.
sds

Jorge Brito   08/11/2011 09:55:52

Obrigado por ter respondido:
Vamos por partes:
O meu portatil tem instalado o windows 7
Instalei o Drive OBDC, e o MySQL Front, mais o servidor Wampserver.
Esta tudo a rodar bem fiz testes com o Microsoft access ao Drive OBDC esta a trabalhar bem pois liguei uma tabela do Wampserver ao Access e consigo ver os dados e manipular os mesmos.

Criei a base de dados Contatos no meu Wampserver, conforme consta no manual
Modifique o Modelo de ligação conforme junto em anexo


cn.Open "Driver={MySQL ODBC 5.1 Driver};Server=" & localhost & ";Database=" & contatos & ";User=" & root & "; Password=" & "" & ";Option=3;"
rs.CursorLocation = adUseClient
rs.Open csql, cn, adOpenDynamic, adLockOptimistic

Mas o mesmo não liga?
Da erro no modulo de ligação o que tenho de alterar?

Samuel   08/11/2011 09:57:29

Bom dia, excelente tutorial. Gostaria de saber se eu poderia adapta-lo para Firebird, e como poderia fazê-lo?
Parabéns pela excelente qualidade e humildade.

Felipe   08/11/2011 10:15:23

Bom dia, aproveitando a dúvida do colega acima, gostaria de saber porque não estou conseguindo "Salvar" os dados no Firebird, estou tentando adaptar este exemplo, salientando que o BD tem um campo auto-incremento, um generator e uma trigger.
Só não sei como chamar ou capturar o código do próximo registro e inseri-lo na rotina "Salvar", para o campo, por exemplo, ID não ficar com o valor NULL.

Agradeço desde já, a ajuda nesta questão, que acredito será de grande valia para todos.

JBSR   08/11/2011 11:17:51

O processo utilizado é o ADO, senhores. É suficiente alterar o driver de conexão e o parametro do mesmo para o banco de dados desejado, observando apenas, se o banco de dados em questão, suporta os comandos SQL utilizados, o que é praticamente generico.

Sds

JBSR   10/11/2011 14:12:09

Prezados Senhores

A Kartoffel Sustem Developers está disponibilizando pacote de suporte para atender a demandas de usuários que desejam colocar em pratica os conteudos propostos pela Kartoffel, a fim de aplica-los de forma comercial em suas aplicações.

O plano de suporte cobre atendimento via telefone (fixo), e-mail e MSN e é realizado de 2ª as 6ª feiras dentro do horário comercial.

O suporte também cobre o fornecimento de códigos parametrizados segundo o padrão de desenvolvimento da Kartoffel, e ajustes nos mesmos para adequação as necessidades dos usuários.

Interessandos, contatar através do e-mail websuporte@kartoffel.com.br - Planos especiais para usuários do site www.usandoaccess.com.br e www.kartoffel.com.br

Rui Ramos   11/11/2011 15:17:30

Há alguém que possa ajudar um iniciante por msn
Apenas tenho algum conhecimento em access mas não VB
Será possivel aguem ajudar, muito Obrigado

Jossua   12/11/2011 13:02:34

Rui com todo respeito, você está trilhando o caminho errado.

O certo será entender como funciona o VBA antes de tentar fazer qualque implantação que dependa do mesmo.

A titulo de curosidade, alguns artigos postados, como esse, são destinado a usuáros de conhecimento intermediário ao avançado.

Assim, não recomendo tentar implantar gerencialmente artigos desse porte. Comece do zero, vendo o que é e como devo trabalhar com o VBA. Aqui mesmo no site, tem artigos ensinando a trabalhar com o VBA.

Abraços.

Cledson   12/11/2011 22:07:30

Jefferson muito obrigado pelo tutorial. Queria te perguntar como posso interceptar e tratar erros com ADO. Já pesquisei bastante e tô tendo muita dificuldade para tratar erros.

Rui Ramos   13/11/2011 09:09:45

Jossua eu sei que tem razão mas eu gosto muito destas coisas mas o tempo não dá para tudo e o VB leva muito tempo, sou editor de video e estou em transição para mac tenho de estudar o novo final cut e muito mais e trabalhar ao mesmo tempo. Tenho agora o diploma de instalação e reparação de computadores e dei um pouco de access e achei bastante interessante mas de momento queria só saber fazer isto já fiz a ligação á base de dados e deu certo só queria um pouco de ajuda em vb (penso que será pouca coisa) acho que é mais a ligação de access com o SQL-Front.

Rui Ramos   13/11/2011 10:08:15

Consegui fazer a base de dados e agora queria só saber se com o download da base de dados do accessWeb2.mdb do download abaixo e configurar os dados de entrada é possivel ter tudo ok.
Se sim por favor digam como configurar os dados.
Penso que será aqui:

MyslqServidor = DLookup("[Valor]", "_Parametros","[ID]=8") servidor web

Se for só isto para fazer esta tarefa por favor digam com se mete os dados.

Eu sei que não devia ir por este caminho como diz o Jossua mas por favor se for só isto para fazer este toturial respondam.
Obrigado a todos.


Jefferson e Avelino (pessoal)   25/11/2011 09:34:21

fiz uma consulta passagem, mas ela só abre uma vez, qndo tento abrir pela segunda vez dá falha no odbc aí só consigo um vez novamente reabrindo o sistema. Isso é uma configuração no servidor ou o q? muito obrigado!!

JBSR   25/11/2011 10:28:39

Prezado de cara sei que você vinculo a tabela do MySQL ao seu front-end Access. Você não está trabalhando de forma correta. O processo de vinculação de tabelas do JET já não é eficiente no Access, ainda mais realizando a conexão em uma base de dados robusta.

O correto é fazer o processo todo através de ADO, onde a conexão e aberta, a informação processada, e depois a conexão é fechado.

O problema informado está relacionado ao time-up de conexão entre o driver ODBC e o seu front-end. Se observar no parametro de configuração do ODBC, verificará que o tempo de conexão é de 30 segundos. Você ate poderia alterar essa parametro, mas isso tornaria a conexão permanente, e tornaria o seu banco e sua rede lentos.

Quando você fecha e abre sua aplicação, você "renova" a conexão com o banco de dados.

Para trabalhar com MySQL, SLQ Server, Oracle, etc, você dever utilizar conexão através do ADO, onde o parâmetro da conexão é passado no exato momento da conexão.

Assim, revise seu projeto para realizar a conexão da forma correta.

A Kartoffel possui duas ferramentas para conexão a banco de dados para facilitar o processo de conexão através do ADO: VBA Access Collection e o VBA MySQL Conector.

Tambem possuimos pacote de suporte para auxilio no desenvolvimento.

Sds

Mateus   25/11/2011 17:58:41

sei que é difícil mas vcs saberia como faço para criar uma tabela temporária, a partir de um recordset aberto através do ado. Queria após criar essa tabela temporaria dá origens aos meus relatórios.
Desde já obrigado!!

JBSR   25/11/2011 18:17:45

Mateus, o ideal é você ter uma "copia" da tabela deseja localmente dentro da sua aplicação, e alimenta-la através de recordeset.

Você abre o recordeset, alimenta a tabela e fecha o recordeset.

Assim poderá trabalhar os dados localmente para os seus relatórios.

Sds

Mateus   25/11/2011 18:21:12

JBSR é isso que estou precisando. Vc poderia me dizer como alimentar essa tabela através do recordset.

josemar   06/12/2011 15:13:35

olá,
tem como gravar no banco local em access e na internet em mysql de uma só vez?
obrigado

JBSR   07/12/2011 08:30:11

Sim, basta passar os parametros do ADO para salvar local e no servidor MySQL.

Para o usuários que tiverem dificuldades nos procedimentos, disponibilizamos pacote de suporte.

Sds a todos

Idenilton Freitas Cardoso   04/02/2012 04:24:35

Olá, muito bom... descobre vocês por acaso, mas agora não vou larga-los....
Tenho alguns projetos em Acess, e vou brevimento solicitar a ajuda de vocês... Um abraço obrigado pelo material.

Cledson   10/03/2012 23:10:09

Avelino,
vc sabe pq em alguns computadores, ocorre o seguinte erro:

Can't connect to MySQL server on 'dbmy0051.whservidor.com' (10060)

isso ocorre somente em poucos computadores, pois a maioria consigo acessar o mysql com esse método ado.

abs,

Cledson

Avelino Sampaio   13/03/2012 08:19:32

Cledson,

sem investigar a causa no ambiente, fica difícil responder.

Causas prováveis:

1. Time up do servidor e virtude da demora da resposta da rede
2. Trafego da rede intenso
3. Alguma configuração no Firewall
4. Problemas com relação ao driver

Sucesso!

Maicon    04/04/2012 02:17:49

Alguém pode me esclarecer estas dúvidas :
Há limites de tabelas a serem vinculadas ? Pelo que entendi cada formulário chama uma tabela é isso e isso no caso de haver algum limite já resolve ?

Abraços

Gilberto   03/05/2012 00:33:11

Amigo, fantástico, mudei para o UOL somente para fazer isto já que o antigo servidor não havia essa possibilidade.
Dúvidas:
1) Como ficaria a navegação para o próximo registro (Anterior etc.)?
2) Como saber se um nome já existe na tabela MySql?

Abraço

Edson Miranda   17/01/2013 14:14:35

Preciso de criar um form para digitação de notas de avaliação em uma pesquisa. Atualmente uso algumas combo box para que o usuário selecione os dados a serem exibidos em um grid (subform em folha de dados). Como fazer isso com a conexão desacoplada? Poderia carregar uma tabela temporária e atualizar via update? Ou teria alguma outra solução?

Edson Miranda   17/01/2013 14:16:10

Complementando: No subform é exibida uma lista de quesitos e ao lado de cada quesito o campo para digitar a nota de avaliação.

Avelino Sampaio   18/01/2013 09:10:12

Edson,

SubForm, ListBox e Combox foram projetados para se trabalhar com vínculos.

A opção de se criar tabela temporária, em tempo de execução, para carregar o subform é uma ótima escolha.

Acredito que um listbox ficasse melhor neste caso que um subform. Crie então um listbox e abaixo crie campos sincronizados com a linha seleciona para poder realizar as atualizações.

Sucesso!

Edson   18/01/2013 19:35:36

Ok, obrigado Avelino. Me permita mais uma pergunta: o meu provedor usa o CPANEL e eu preciso definir no item RemoteMySQL os IPs que irão acessar o banco de dados. Como a aplicação será distribuída para professores digitarem notas em casa, como poderei saber o IP de cada professor? E como eles usam notebooks, poderão acessar de qualquer local. Tem alguma idéia de como posso resolver isso? Abraço!

Daniel   08/03/2013 14:22:39

Prezados, boa tarde!

Baixei o exemplo e é realmente incrível, porém não consegui fazer funcionar.
Ao baixar o ODBC 5.2a Driver, fiz a adequação no VB (cn.Open "Driver={MySQL ODBC 5.2a Driver};...)
Quando tento executar o formulário, erro:
Erro em tempo de execução '3078',
O mecanismo de banco de dados do Microsoft Access não encontrou a tabela de entrada ou consulta 'mysql.braslink.com'. Verifique se ela existe e se seu nome esta digitado corretamente.

Usei esse BD (mysql.braslink.com) no exemplo 1 e funcionou perfeitamente.

Alguém saberia o motivo, pela qual não conseguir agora?

Grande abraço a todos!

JBSR   08/03/2013 15:35:22

O servidor é Linux ou Windows?

Se for Linux lembre que ele é case sensitive, ou seja select * from MinhaTAbela é diferente de select * from minhatabela. O nome tem que ser o mesmo que está no servidor.

Ainda se for linux, passe os parâmetros todos em minúsculos e em SLQ puro, não igual o Access formata.

Outro detalhe. Você abriu a porta no servidor?

Em hospedagens Windows é a opção 'Criar DNS ODBC'
Em hospedagem Linux é a opção 'Conexão MySQL Servidor Externo'

Você também pode tentar uma conexão ODBC,que se configurada corretamente, mesmo na web, é como se fosse uma conexão local.


Att

Daniel   08/03/2013 16:55:36

Boa tarde JBSR, agradeço a atenção em responder.

Caro amigo, sim, meu servidor é linux e sim, o case sensitive está ok!

Quando tento executar o formulário, o mesmo me seta no VB:

Public Sub MySQL_Server()

MyslqServidor = DLookup("[Value]", "mysql.braslink.com", "[ID]=8") 'Servidor Web


Meu caro, em relação a porta, fiz o teste no exemplo 1 e deu certo. Acho que ela está aberta? certo?

Tentei várias possibilidades, porém, seu sucesso!

Abraços,

Helio Machado   24/03/2013 19:20:17

Obrigado pelo tutorial, vou precisar muito em breve.
Helio

Hephraim BF   22/04/2013 08:28:09

Olá Jefferson Braz!

Existe alguma forma de transferir os dados de um banco Access para a base de dados de um site qualquer?

Jairo Luz de Souza   23/05/2013 16:45:42

Legal o artigo,
Mas como fazer um botão no form que abra um relatório?

Eduardo Sousa   31/05/2013 12:55:47

Em 1º lugar obrigado por estes tutoriais. Grande ajuda. Tenho um problema ao tentar usar o seguinte código com o objectivo de popular um formulário no Access 2007
Dim FormAberto As Form
Dim Controle As Control

Set FormAberto = Forms(ForMy)
For Each Controle In FormAberto

If Controle.ControlType = acTextBox Then

FormAberto.Controls(Controle.Name) = rst(Controle.Name).Value

End If

Next

rst.Close 'Encerra a conexão com o recordeset
cn.Close 'Encerra a conexão com a base de dados

Acontece que o formulário exibe o 1º registo do recordset repetidamente quando declaro Me.Recordset= rs. Se houver 100 registos o formulário exibe os dados do 1º registo 100 vezes.
Já pesquisei em muitas fontes e não consigo dar a volta a este problema.
Se alguém tiver alguma sugestão para resolver fico grato.

Marcelo   06/10/2013 10:29:40

Olá Avelino.

fiz diversas tentativas inclusive com drive que esta no site, só consigo acessar utilizando o drive mysql versão 5.1.9 win32, veja que engraçado meu computador é de windows 7 - 64 bytes.

Talvez seja útil para outros usuários.

Mais uma vez obrigado por todas essas informações.

Avelino Sampaio   07/10/2013 07:09:42

Marcelo,

Muito obrigado pela dica oferecida!

Sucesso!

Edson ss   09/10/2013 10:30:11

Olá Avelino
Muito obrigado pelo Tutorial

Estou tendo o mesmo problema que o Eduardo?

Em 1º lugar obrigado por estes tutoriais. Grande ajuda. Tenho um problema ao tentar usar o seguinte código com o objectivo de popular um formulário no Access 2007
Dim FormAberto As Form
Dim Controle As Control

Set FormAberto = Forms(ForMy)
For Each Controle In FormAberto

If Controle.ControlType = acTextBox Then

FormAberto.Controls(Controle.Name) = rst(Controle.Name).Value

End If

Next

rst.Close 'Encerra a conexão com o recordeset
cn.Close 'Encerra a conexão com a base de dados

Acontece que o formulário exibe o 1º registo do recordset repetidamente quando declaro Me.Recordset= rs. Se houver 100 registos o formulário exibe os dados do 1º registo 100 vezes.
Já pesquisei em muitas fontes e não consigo dar a volta a este problema.
Se alguém tiver alguma sugestão para resolver fico grato.

Marcelo   24/02/2014 19:49:34

Olá Avelino.

No caso de eu querer passar os dados de uma tabela DAO para uma tabela ADO?
Eu estou rachando a cabeça aqui mas não estou conseguindo.

Marcelo   24/02/2014 19:50:55

Desculpe, escrevi na ordem errada.

No caso seria de uma tabela ADO (web) para uma DAO (local)

Abraço

Marcio Melo - RJ   21/08/2014 21:43:05

Olá! JBSR ou Avelino.

Consegui abrir conectar o programa MySQL-Front em um BD MySQL que tenho em uma hospedagem na internet; estou com dificuldade de fazer o mesmo com exemplo AccessWeb2... da erro de (mysql odbc 5.1 access denied for user) acesso negado para usuário... as mesmas configurações que tem na tabela de parametros copiei e passei para o MySQL-Front e funcionou perfeito

Tenho uma conta Linux que roda server MySQL e PHP e tomei os cuidados com sensitive...

Há.. um detalhe instalei os drivers do mysql no meu note e não reinicie... vou fazer agora se der certo... já posto em seguida, se não fico no aguardo... se poder me orientar...

Sou mais Brasil!

Forte abraço;

JBSR   22/08/2014 06:36:47

Servidores Linux, devem ser feita uma configuração para que o database seja acessado externamente.

Verifique se essa configuração foi realizada.

Sds

Marcio Melo - RJ   23/08/2014 20:28:50

Consegui... comparei com outras string de conexão e cheguei a essa:
cn.Open "driver={MySQL ODBC 5.1 driver};server=" & MyslqServidor & ";database=" & MyslqDatabase & _
";uid=" & MyslqUsuario & "; pwd=" & MyslqSenha
Um detalhe que tem na configuração do BD MySQL é uma opção de remotos, tem que ter o IP do computador que vai acessar o BD eu já tinha colocado e tirei para testar e não conecta..
Agradeço a todos... Avelino achei essa string pelo site: http://maximoaccess.maisforum.com/ no código de Plínio Mabesi no Módulo ControleVinculo - Conexão com Mysql ; JBSR valeu por proporcionar segurança na forma que nos auxilia e o Avelino João com os conhecimentos do mysql.
Deixo aqui o script do SQL para montar a extrutura da tabela no Mysql:
CREATE TABLE IF NOT EXISTS `tblContatos` (
`Id` int(6) unsigned zerofill NOT NULL AUTO_INCREMENT,
`nome_contato` varchar(50) NOT NULL,
`end_contato` varchar(50) NOT NULL,
`bairro_contato` varchar(30) NOT NULL,
`cidade_contato` varchar(30) NOT NULL,
`uf_contato` varchar(20) NOT NULL,
`tel_contato` varchar(20) NOT NULL,
`idade_contato` int(3) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
Testei nos servidores do www.hoteldaweb.com.br com hospedagem Linux cPanelX MySQL + PHP; fiquei super feliz com o resultado e experimento; aconselho a todos a ter esse contato do access interagindo com base de dados MySQL na internet.
Resumindo: o exemplo AccessWeb2 funciona perfeito no server windows e para linux basta trocar por essa mais simplificada...

Sou mais Brasil! D+

Forte abraço... :)

joao cruz   14/03/2016 22:09:06

Prezado! gostei do exemplo, gostaria de saber como fazer o relatório, pois nos modulos aborda a coleção Forms e as reports como seriaW

JBSR   15/03/2016 08:01:29

O processo de manipulação do objeto Report é feito da mesma forma que o objeto Form.

Porem para essa forma de conexão (pois há outras formas) o ideal é carregar os dados em uma tabela temporária e carregar o relatório a parir dessa tabela.

Sds

Damasceno Júnior   30/04/2016 22:34:54

Estou iniciando uma migração (montando a estrutura) da minha base de dados para MySql utilizando este exemplo. Até agora um sucesso com todos os forms desvinculados e todas as funções implementadas. Masss... assim como o exemplo, estou a utilizar MyISAM com Engine para as tabelas.

Considerando que:
1. MyISAM faz o bloqueio da tabela utilizada durante uma operação (SELECT, INSERT, UPDATE, DELETE...);

2. Não tenho um vínculo permanente com a base de dados;

3. Um ambiente multiusuário (uns 30), e uma conexão com uma determinada tabela aberta enquanto (sei que é rapidinho) popula-se um form, por exemplo, e uma operação de inserção ou atualização for solicitada.

As dúvidas são:
1. Acontece um erro ou a segunda operação aguarda?

2. Notei que há o sleep disponível neste exemplo. No caso de um erro, o sleep é uma sugestão para que se possa utilizá-lo e chamar de novo o procedimento após alguns segundos?

3. MyISAM ou InnoDB?

Gratos...

JBSR   02/05/2016 10:35:01

Prezado somente as suas perguntas não ficaram claras, mas segue com base no que entendi..

1. Acontece um erro ou a segunda operação aguarda? o quis dizer com isso?

2. Notei que há o sleep disponível neste exemplo. No caso de um erro, o sleep é uma sugestão para que se possa utilizá-lo e chamar de novo o procedimento após alguns segundos? Não. Se observar o sleep está ai para dar uma pausa no código. Não há nenhum tratamento para a falha de conexão.

3. MyISAM ou InnoDB? De uma olhada aqui: http://pt.stackoverflow.com/questions/41672/quais-as-diferen%C3%A7as-entre-myisam-e-innodb

Damasceno Júnior   02/05/2016 13:53:11

Antes de tudo, meu caro JBSR, obrigado por responder!

Realmente não fui muito claro... rsrs... vou tentar de novo.

Estudando sobre as engines para as tabelas no mysql, vi que MyISAM tem problemas para escritas concorrentes (inclusive no link indicado tem essa comparação com InnoDB) pois bloqueiam a tabela afetada por completo durante a operação solicitada (a conexão aberta enquanto popula-se uma tabela temporária por exemplo).

Mesmo com formulários desvinculados (como o do exemplo), temo que para um USUÁRIO A, ao tentar adicionar ou atualizar um registro em uma determinada tabela, apareça um erro pois um outro USUÁRIO B acabou de solicitar também que um novo registro fosse adicionado na mesma tabela.

Sei que o tempo das operações solicitadas é rápido, afinal, os forms estão desvinculados e a conexão para a tabela no mysql é aberta apenas para o necessário e fechada logo em seguida. Então, em um ambiente de uns 20 ou 30 usuários, preciso me preocupar com erro de tabela (engine MyISAM) bloqueada ou o número de usuários planejados é pequeno demais para que este tipo de erro possa ocorrer?

Agradeço novamente...

JBSR   02/05/2016 15:09:28

Tudo depende como configurou o driver, como está fazendo as conexões. E muito genérico.

Sobre o bloqueio ou não das tabelas, em seus estudos deve ter observado que o que controla a forma com que os dados são manipulados é o CursorLocation. Tudo vai depender de como está passando o mesmo.

A opção que utilizo é o adUseServer, pois ai o controle de edições fica por conta do servidor.

De resto, só conectando, analisando para verificar o que é melhor e o que mais atender. Lembrando que há inúmeras formas de se fazer a conexão via ADO.

Sds


Damasceno Júnior   02/05/2016 15:24:12

Obrigado pelos esclarecimentos, JBSR.

Marcos   12/08/2016 00:16:48

Olá Avelino!

Instalei recentemente o Access 2016 (64bits) juntamente com o Windows 10 (64bits)

Não consigo conectar a outro bd para usar front e back end com VBA, pode me ajudar?

Como criar a função com a conexão neste caso?

Avelino Sampaio   15/08/2016 08:43:06

Marcos,

se inscreva no nosso fórum sobre Access e por lá nos ofereça mais detalhes, mostrando o código utilizado.

http://www.redeaccess.com.br

Aguardamos

jbcotrim   11/02/2017 10:45:13

Olá JBSR e Avelino.
Já faz tempo que vocês postaram este excelente artigo, mas só agora eu estou testando. Explico: Tenho uma aplicação em access que uso internamente no trabalho para administração de condomínios. As tabelas de lançamentos e de mensalidades estão ficando muito grandes, então resolvi testar o uso do back-end no MYSQL. Estou testando o AccessWeb2 disponibilizado neste artigo, mas ao carregar o formulário "Contatos" de exemplo, o sistema está dando erro: "Operação não permitida quando o objeto está fechado". Este erro é apresentado na linha: "While (Not rs.EOF)" do código abaixo.


Public Sub Lista_Load(csql, ForMy)

Call Conexao_Open(csql)

Dim FormAberto As Form 'Recebe o nome do formulário atual
Set FormAberto = Forms(ForMy)

FormAberto.Lista = Null 'Limpa seleção do registro
FormAberto.Lista.RowSource = "" 'Limpa os dados da caixa de listagem
FormAberto.Lista.Requery 'atualiza dados da caixa de listagem

While (Not rs.EOF)

FormAberto.Lista.AddItem rs.Fields(0).Value & ";" & rs.Fields(1).Value
rs.MoveNext 'vai para o proximo registro

Wend

rs.Close 'fecha o recorset
cn.Close 'fecha o banco de dados


End Sub

Acontece que as únicas alterações que fiz foi na tabela __Parametros, onde alterei o Servidor para "localhost" e o nome do banco de dados.

Pode me ajudar a resolver esse problema?
Desde já agradeço a atenção de sempre.


Envie seu comentário: