Conectar-se ao MSAccess (mdb) usando Actionscript 3 e o {MDM} Zinc 3.0

26 12 2008

Este tutorial pode ser seguido em todas as versões do Flash e do {MDM} Zinc, porém algumas alterações de código serão necessárias.

Arquivos para estudo

Pasta com todos os arquivos para estudo

(Flash, {mdm} Zinc, Banco de dados.MDB, Configurações.zinc e o aplicativo funcionando)

Peço a todos os que lerem este tutorial, ou até mesmo os comentários do Actionscript, que me reportem os erros de ortografia ou outros. Assim os próximos tutoriais ficarão cada vez mais claros.

Segue abaixo as imagens com legendas e descrições sobre cada detalhe.

Configurações do {MDM} Zinc

mdmzinc1

Legenda:

(1) Em Application type, deixe como Desktop, mude para Kiosk se você quiser uma aplicação de tela inteira. Os outros detalhes desta etapa ficam ao seu critério.

(2) Nesta etapa são adicionados os dados do arquivo.exe (seu aplicativo).

(3) Muita atenção nesta parte, se você estiver trabalhando com Actionscript 3 deixe como Flash 9, caso estiver trabalhando em uma versão anterior do Actionscript mude para Flash 8.Caso trabalhe de forma errada com este parâmetro seu programa simplesmente não funcionará, e você corre o risco de ficar achando que é seu Actionscript que está errado, como já aconteceu comigo .

(4) Se você quiser dar um detalhe a mais em seu aplicativo, o Splash Screen funciona como uma tela de introdução do seu programa, onde uma imagem aparece em um determinado tempo. É muito útil em certos programas, e agrada muitos usuários.

(5) Nesta etapa você vai marcar todas as extensões do {MDM} Zinc que seu aplicativo irá usar. Neste caso apenas marque “mdm_dialogs” e “mdm_database”.

(6) Neste lado do {MDM} Zinc fica as propriedades da janela do programa, Desktop Center Irá centralizar sua janela no centro da tela quando o aplicativo iniciar. Os outros parâmetros ficam ao seu critério.

(7) No parâmetro type deixe como Absolute. Os outros parâmetros ficam ao seu critério.

(8) Nesta área apenas modifique o parâmetro Form Name, o valor que você por aqui será o nome de sua janela, será o titulo da janela. Os outros parâmetros ficam ao seu critério.

(9) Esta área só estará habilitada se você, na etapa (8), alterou o valor do parâmetro Style de Standard para qualquer outro valor. Por motivo de “problemas técnicos” (Lê-se BUG), no {MDM} Zinc, é bom que você trabalhe sempre em Style Standard em seus aplicativos.

(10)Nesta área deixe os parâmetros como estão.

Configuração do Adobe Flash CS4

flash1

Legenda:

(1)    Organize os objetos do palco em Layers, assim seu trabalho rende mais.

(2)    Organize também os objetos na biblioteca, e não se esqueça de colocar também o componente do {MDM} Zinc nela.

(3)    No parâmetro Player, deixe como Flash Player 10, em Script deixe como Actionscript 3.0. O restante deixe como está.

(4)    Este é seu Datagrid, altere o parâmetro Editable para true, e coloque seu nome de instância como “dg_cadastros”.

(5)    Nomes de Instância dos campos input:
Nome: nome_txt;
Senha: senha_txt;
Senha*: senhaC_txt (este campo serve para confirmação de que a senha esta realmente correta);
Email: email_txt;

(6)    Nomes de Instância dos botões:
Cadastrar: cadastrar_btn;
Cancelar: cancelar_btn;
Conectar: conectar_btn;
Deletar: deletar_btn;

Acompanhe agora o Actionscript, ele está totalmente separado por comentários que esclarecem ao máximo suas funções, eventos e propriedades.

/////////////////////////////////////////////////////////////////////////////////////////////////////////
//Instruções de Import.
import fl.controls.dataGridClasses.DataGridCellEditor;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.events.DataGridEvent;
import fl.data.DataProvider;
import fl.controls.DataGrid;
import fl.events.ListEvent;
import flash.events.*;
//Ao usar actionscript 3 em conjunto com o {mdm} Zinc é regra importar as classes mdm.*;
import mdm.*;

/////////////////////////////////////////////////////////////////////////////////////////////////////////
//Inicia o gerenciamento do {MDM} Zinc, e passa como parametro este swf.
mdm.Application.init (this);

/////////////////////////////////////////////////////////////////////////////////////////////////////////
//Propriedades pré definidas.
this.deletar_btn.enabled = false;
var nomeU:String;
var senhaU:String;
var emailU:String;

/////////////////////////////////////////////////////////////////////////////////////////////////////////
//Eventos para o programa.
this.conectar_btn.addEventListener (MouseEvent.CLICK, conectar);
this.cadastrar_btn.addEventListener (MouseEvent.CLICK, cadastrar);
this.cancelar_btn.addEventListener (MouseEvent.CLICK, apagarCampos);
this.deletar_btn.addEventListener (MouseEvent.CLICK, deletar);
this.dg_cadastros.addEventListener (ListEvent.ITEM_CLICK, selecionarCad);
this.dg_cadastros.addEventListener (DataGridEvent.ITEM_EDIT_END, alterar);

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//FUNÇÕES……………………………………………………………………………………..
///////////////////////////////////////////////////////////////////////////////////////////////////////////
/* CONECTAR */

function conectar (event:MouseEvent):void
{
//Local onde se encontra o BancoDeDados.MDB…
//usei o (mdm.Application.path) + o nome do arquivo “mdb” pois o banco de dados se encontra junto do programa.
var BancoDeDados:String = mdm.Application.path + “Banco_de_Dados.mdb”;
mdm.Database.MSAccess.connectAbs (BancoDeDados, “”);

//Verifica se conectou…
var bd_conectado:Boolean = mdm.Database.MSAccess.success();
if (bd_conectado)
{
preencheDG (event);
}
else
{
//se não conectou…
mdm.Dialogs.prompt (“Não possivel conectar-se ao Banco de Dados”+”\n”+BancoDeDados);
}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////
/*PREENCHER DATAGRID */

function preencheDG (evt:MouseEvent):void
{
//Define os nomes das Colunas do Datagrid…
this.dg_cadastros.columns =
[ “Nome”,
“Email”,
“Senha”];

//define a largura das colunas…
this.dg_cadastros.columns[0].width = 120;
this.dg_cadastros.columns[1].width = 240;
this.dg_cadastros.columns[2].width = 180;

//Aqui foi necessário refazer uma conecção com o bancoDeDados.mdb.
var BancoDeDados:String = mdm.Application.path + “Banco_de_Dados.mdb”;
mdm.Database.MSAccess.connectAbs (BancoDeDados, “”);

//Esta função do {mdm} Zinc apenas serve como um “focalizador” para o {mdm} Zinc…
//… pois quando você for fazer alguma busca ou query no banco de dados….
//… a referencia de qual tabela lidar virá desta função.
mdm.Database.MSAccess.select (“SELECT * FROM usuarios”);

//esta função do {mdm} Zinc retorna um Array com todos os dados da tabela selecionada anteriormente.
var dataSize:Array = mdm.Database.MSAccess.getData();

//Criamos um data provider para fornecer os dados mais tarde ao dataGrid.
var contr:DataProvider = new DataProvider();

//Um simples “for” que irá preencher todas as colunas do dataGrid com os dados vindos do Banco de dados.
for (var i:Number = 0; i < dataSize.length; i++)
{
//Adiciona um valor ao data provider a cada vez que o “for” faz um “loop”.
contr.addItem ({
“Nome”:mdm.Database.MSAccess.getField (i, 1), data:mdm.Database.MSAccess.getField (i, 0),
“Email”:mdm.Database.MSAccess.getField (i, 2), data:mdm.Database.MSAccess.getField (i, 0),
“Senha”:mdm.Database.MSAccess.getField (i, 3), data:mdm.Database.MSAccess.getField (i, 0)});
}

//Depois de “pegar” todos os valores do Banco de dados, popularemos o dataGrid com eles.
this.dg_cadastros.dataProvider = contr;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////
/* SELECIONAR CADASTRO */

//Esta função será chamada sempre que ouver um evento de datagrid, mais especificamente…
//…quando ouver a seleção de uma linha no datagrid.
function selecionarCad (event:ListEvent):void
{
senhaU = event.item[“Senha”];
nomeU = event.item[“Nome”];
emailU = event.item[“Email”];

//habilitaremos o botão deletar.
this.deletar_btn.enabled = true;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////
/* CADASTRAR */

//Função simples que cadastra novos dados no banco de dados.
function cadastrar (evt:MouseEvent):void
{
//Verifica se está conectado.
var bd_conectado:Boolean = mdm.Database.MSAccess.success();
if (bd_conectado)
{
//Verifica se no momento de cadastrar, os campos de nome e senha estão preenchidos.
if (this.nome_txt.text == “” && this.senha_txt.text == “”)
{
mdm.Dialogs.prompt (“Você deve preencher os campos antes de cadastrar um usuario.”);
}
//Verifica se o campo de senha é igual ao campo de confirmação de senha.
else if (this.senha_txt.text != this.senhaC_txt.text)
{
mdm.Dialogs.prompt (“As senha não correspondem”+”\n”+”\n”+”Senha 1 = “+this.senha_txt.text +”\n”+”Senha 2 = “+ this.senhaC_txt.text);
}
else
{
//Se estiver tudo nos conformes …🙂
//Iniciamos o processo de gravação dos dados no banco de dados.
/////////////////////////////////////////////////////////////////////////////////
//Estas funções server para verificar se o cadastro teve sucesso.
//
//Verifica a quantidade de cadastros feitas antes deste novo cadastro
mdm.Database.MSAccess.select (“SELECT * FROM usuarios”);
var cadAnterior:Number = mdm.Database.MSAccess.getRecordCount();
//
//Cadastramos os dados….
mdm.Database.MSAccess.runQuery (“INSERT INTO usuarios(nome,email,senha) VALUES(‘” + this.nome_txt.text + “‘,'” + this.email_txt.text + “‘,'” + this.senha_txt.text + “‘)”);
//
//Agora verifica novamente a quantidade de cadastros…
mdm.Database.MSAccess.select (“SELECT * FROM usuarios”);
var cadPosterior:Number = mdm.Database.MSAccess.getRecordCount();
/////////////////////////////////////////////////////////////////////////////////
//Se a quantidade da cadastros atuais forem maior qua a quantidade de cadastro anteriores, nosso cadastro teve sucesso.
if (cadPosterior > cadAnterior)
{
preencheDG (evt);
this.nome_txt.text = “”;
this.senha_txt.text = “”;
this.senhaC_txt.text = “”;
this.email_txt.text = “”;
this.pq_nome_txt.text = “”;
mdm.Dialogs.prompt (“Item cadastrado com sucesso!”);
}
//Se não, então houve um erro.
else
{
//Então mostramos o erro.
var erro:String = mdm.Database.MSAccess.errorDetails;
mdm.Dialogs.prompt (“Ocorreu um erro, acompanhe o log de erros abaixo.”+”\n”+erro);
}
}
}
else
{
//Caso não esteja conectado.
mdm.Dialogs.prompt (“Você está desconectado!”);
}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////
/* APAGAR TODOS OS CAMPOS */
//Para facilitar o trabalho de quem lida com o programa…
//… criamos uma função que apaga os campos “imput”.
function apagarCampos (evt:MouseEvent):void
{
this.nome_txt.text = “”;
this.senha_txt.text = “”;
this.senhaC_txt.text = “”;
this.email_txt.text = “”;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////
/* APAGAR CADASTRO */
//Função que deletará do banco de dados um cadastro escolhido.
function deletar (evt:MouseEvent):void
{
//Verifica se está conectado…
var taConectado:Boolean = mdm.Database.MSAccess.success();
//Se estiver conectado
if (taConectado)
{
//Iniciamos o processo de remoção dos dados no banco de dados.
/////////////////////////////////////////////////////////////////////////////////
//Estas funções server para verificar se a remoção teve sucesso.
//
//Verifica a quantidade de cadastros feitas antes desta remoção.
mdm.Database.MSAccess.select (“SELECT * FROM usuarios”);
var Anterior:Array = mdm.Database.MSAccess.getData();
//
//Removemos os dados….
mdm.Database.MSAccess.select (“SELECT * FROM usuarios”);
mdm.Database.MSAccess.runQuery (“DELETE * FROM usuarios WHERE nome='” + nomeU + “‘”);
//
//Agora verifica novamente a quantidade de cadastros…
mdm.Database.MSAccess.select (“SELECT * FROM usuarios”);
var Posterior:Array = mdm.Database.MSAccess.getData();
/////////////////////////////////////////////////////////////////////////////////
//Se a quantidade da cadastros atuais forem menor qua a quantidade de cadastro anteriores, nossa remoção teve sucesso.
if (Anterior.length > Posterior.length)
{
mdm.Dialogs.prompt (“Tarefa realizada com sucesso.”);
preencheDG (evt);
}
else
{
//Caso contrario, houve um erro e precisamos reportálo ao utilizador…
var erro:String = mdm.Database.MSAccess.errorDetails;
mdm.Dialogs.prompt (“Ocorreu um erro, acompanhe o log de erros abaixo.”+”\n”+erro);
}
}
else
{
//Se não estiver conectado não faz nada disso, apenas mostra a seguinte mensagem…
mdm.Dialogs.prompt (“Não está conectado.”);
}
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////
/* ALTERAR CADASTRO */
//Alterando os cadastros já feitos…
function alterar (event:ListEvent):void
{
//Muito facil. Repare que quando selecionamos uma linha no datagrid, preenchemos alguams variaveis com os…
//… valores dos respectivos campos desta linha.
//Para alterar basta fazer a query, e passar estes valores como novos dados a alterar…
//Neste caso usei o “nome” como indentificador, então o nome não deve ser editado quando for fazer um …
//… “UPDATE” nos valores do banco de dados
mdm.Database.MSAccess.runQuery (“UPDATE usuarios SET nome='” + nomeU + “‘, senha = ‘” + senhaU +”‘, email = ‘” + emailU + “‘ WHERE nome='” + nomeU +”‘”);
}
Qualquer duvida comente, como ainda não sei uma forma melhor de postar os códigos do Actionscript no post, aconselho a estudar nos arquivos fonte.


Ações

Information

7 responses

2 02 2009
Luiz

Tuto interessante estarei fazendo +++ tarde!!!

2 02 2009
jefersonvargas

Opa, qualquer coisa pode dar um chega aqui!!

22 04 2009
Fernando Marcos

exelente tutorial, muito bom mesmo, me ajudou muito em um projeto que estou fazendo, agora se nao for muito encomodo, é possivel adcionar um campo de busca? tentei algumas coisas mais nao consegui, tenho muito pouco conhecimento em mdm zinc, se puder me ajudar ficarei grato.

abraços

Fernando.

6 01 2010
jp

Como faço pra usar uma dll em C++ que eu criei ? ha como convertê-la pra um mdm?

13 06 2010
Sandro Mueller

Bom dia
estou com um problema estranha aqui, baixei o Zinc3 instalei, peguei o msm.swc e coloquei na pasta li de um projeto de teste em Flash Builder 4 e nas classes AS3 consigo “encontrar” o , mas não tem os metodos conect, nem select nem runQuery, não tem nenhum dos métodos mostrados no seu eemplo, vc poderia me ajudar?

Desde já, Obrigado.
Sandro Mueller

13 06 2010
Sandro Mueller

Bom dia
estou com um problema estranha aqui, baixei o Zinc3 instalei, peguei o msm.swc e coloquei na pasta li de um projeto de teste em Flash Builder 4 e nas classes AS3 consigo “encontrar” o , mas não tem os metodos conect, nem select nem runQuery, não tem nenhum dos métodos mostrados no seu eemplo, vc poderia me ajudar?

Desde já, Obrigado.

Sandro Mueller

8 09 2010
Norton

Olá, lembro me perfeitamente de um dia ter baixados os arquivos e estavam funcionando, mas agora testei os que tinha aqui e não conecta.

Tentei baixa-los novamente mas o link está OFF, se pudesse arrumar ficaria grato.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s




%d blogueiros gostam disto: