Conexão com Banco de Dados usando AS3

23 09 2008

Conectando-se no Banco de Dados com ActionScript 3 e {mdm} Zinc:

Antes de Acompanhar este tutorial você deve ver uma rápida explicação que eu dou sobre o componente “SWC” que acompanha o novo {mdm} Zinc 3.0 que faz com que o Adobe Flash CS3 reconheça as classes do {mdm} Zinc 3.0.

Tutorial: Preparando o Flash para usar o Actionscript 3 com o {mdm} Zinc 3.0.

Bom, agora que seu Adobe Flash CS3 já “aceita” as classes do {mdm} Zinc 3.0, chegou a hora de baixar os arquivos fontes deste tutorial.

DataBase – AS3.

Este tutorial assim como o anterior não vai ter muita firula, toda a explicação eu deixei para o código AS3, apenas mostrarei o código aqui pois se alguém estiver com pressa de ver algum exemplo poderá ver no código.

///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Instruções de Import.
import mdm.*;
import flash.events.*;
import flash.display.*;
import fl.controls.ComboBox;
import fl.data.DataProvider;
//Fim dos Imports.
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Inicia o gerenciamento do {MDM} Zinc, e passa como parametro este swf.
mdm.Application.init (this);
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Algumas propriedades pré-definidas.
this.cadastrar_btn.enabled = false;
this.alterar_btn.enabled = false;
this.deletar_btn.enabled = false;
this.desconectar_btn.enabled = false;
this.cadastrados_btn.enabled = false;
this.comboAltera_cb.enabled = false;
this.comboDeleta_cb.enabled = false;
//fim das propriedades pré-definidas.
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Eventos.
this.apagar_btn.addEventListener (MouseEvent.CLICK, apagarCampos);
this.cancelar_btn.addEventListener (MouseEvent.CLICK, apagarCampos);
this.conectar_btn.addEventListener (MouseEvent.CLICK, conMySQL);
this.desconectar_btn.addEventListener (MouseEvent.CLICK, exitMySQL);
this.cadastrar_btn.addEventListener (MouseEvent.CLICK, cadastrar);
this.cadastrados_btn.addEventListener (MouseEvent.CLICK, getAll);
this.deletar_btn.addEventListener (MouseEvent.CLICK, deletar);
this.alterar_btn.addEventListener (MouseEvent.CLICK, updateUser);
this.comboAltera_cb.addEventListener (Event.CHANGE,preencheUpdates);
//Fim eventos.
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Esta função apaga os campos da área de Update ou de Cadastramento de acordo com o botão que é precionado.
function apagarCampos (evt:MouseEvent):void
{
if (evt.target.name == “apagar_btn”)
{
this.nome_txt.text = “”;
this.senha_txt.text = “”;
}
else if (evt.target.name == “cancelar_btn”)
{
this.uNome_txt.text = “”;
this.uSenha_txt.text = “”;
this.comboAltera_cb.selectedIndex = 0;
}
}
//Fim da função.
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Para quem acompanhou o tutorial de conecção com banco de dados, já percebeu que não mudou nada.
//A unica coisa que muda é os eventos do AS3.
function conMySQL (evt:MouseEvent):void
{
//Variavel Booleana para conectar, ela só vai retornar FALSE caso o…
//…{mdm} Zinc não consiga se conectar ao MySQL.
var conectou:Boolean = mdm.Database.MySQL.connect (“localhost”, “3306”, true, “root”, “”, “dbZinc”);
if (conectou)
{
preencheCombo (evt);

//Função do {mdm} Zinc que cria uma variavel global no flash.
//mdm.Flash.setVar(“nome da variavel”, “valor”);
mdm.Flash.setVar (“conectado”,”sim”);
this.resultado_txt.text = “Conectado”;

//Desebilita alguns Botões.
this.conectar_btn.enabled = false;

//Habilita alguns Botões.
this.comboAltera_cb.enabled = true;
this.comboDeleta_cb.enabled = true;
this.cadastrar_btn.enabled = true;
this.alterar_btn.enabled = true;
this.deletar_btn.enabled = true;
this.desconectar_btn.enabled = true;
this.cadastrados_btn.enabled = true;
}
else
{
//Se retornar false…
this.resultado_txt.text = “Não foi possivel se conectar ao servidor.” + “\n”;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Função que desconecta do MySQL.
function exitMySQL (evt:MouseEvent):void
{
//cria uma variavel que irá conter o valor que foi criado na função anterior…
//…usando a função do {mdm} Zinc (mdm.Flash.setVar(“nome da variavel”, “valor”)).
var coneccao = mdm.Flash.getVar (“conectado”);
//Verifica se a variavel tem o valor (“sim”);
if (coneccao == “sim”)
{
//se for “sim”, desconecta do MySQL.
mdm.Database.MySQL.close ();
//Preenche o campo de texto resultado_txt com o seguinte valor.
this.resultado_txt.text = “A conexão foi encerrada”;
//usa a mesma função do {mdm} Zinc para setar a variavel “conectado” para “nao”.
mdm.Flash.setVar (“conectado”,”nao”);

//Habilita alguns objetos.
this.conectar_btn.enabled = true;

//Desebilita alguns objetos.
this.cadastrar_btn.enabled = false;
this.alterar_btn.enabled = false;
this.deletar_btn.enabled = false;
this.desconectar_btn.enabled = false;
this.cadastrados_btn.enabled = false;
this.comboAltera_cb.enabled = false;
this.comboDeleta_cb.enabled = false;
}
else
{
//Se não estiver conectado…
this.resultado_txt.text = “Você não está conectado ainda”;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Função para cadastrar valores no Banco de Dados.
function cadastrar (evt:MouseEvent):void
{
//Verifica se não esta sendo cadastrado valores em branco.
if (this.nome_txt.text == “” && this.senha_txt.text == “”)
{
//Se os valores forem em branco…
this.resultado_txt.text = “Você deve preencher os campos antes de cadastrar um usuario.”;
}
else
{
//Se os campos estiverem preenchidos faz uma QUERY na tabela “teste” com os valores dos…
//…campos de texto nome_txt e senha_txt.
var gravar:Boolean = mdm.Database.MySQL.runQuery (“INSERT INTO teste(nome,senha) VALUES(‘” + this.nome_txt.text + “‘,'” + this.senha_txt.text + “‘)”);
if (gravar)
{
//Se conseguir cadastrar.
preencheCombo (evt);
this.nome_txt.text = “”;
this.senha_txt.text = “”;
this.uNome_txt.text = “”;
this.uSenha_txt.text = “”;
this.resultado_txt.text = “Cadastrado!”;
}
else
{
//Se não conseguir cadastrar.
this.resultado_txt.text = “Erro ao cadastrar.”;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
function preencheCombo (evt:MouseEvent):void
{
//Faz uma “ligação” com o Banco de dados.
mdm.Database.MySQL.runQuery (“SELECT * FROM ” + “teste”);

//Criar uma variavel do tipo (dataProvider).
var dados:DataProvider = new DataProvider();
//Adiciona um valor à variavel dados.
dados.addItem ({label:”Lista de usuários”});

//Adiciona à variavel dataSet todos os valores que estiverem registrados no banco de dados.
var dataSet:Array = mdm.Database.MySQL.getData ();
//Faz um loop FOR para iserir valores na variavel dados.
for (var i:Number = 0; i < dataSet.length; i++)
{
//O valor do tipo LABEL é a parte “visivel” de quando se usa um ComboBox…
//… o valor DATA é os valores que o programador vai precisar futuramente para fazer futuras QUERIES…
dados.addItem ({label:mdm.Database.MySQL.getField (i, 1), data:mdm.Database.MySQL.getField (i, 0)});
}

//Preenche dois combobox com os valores da variavel “dados”.
this.comboAltera_cb.dataProvider = dados;

this.comboDeleta_cb.dataProvider = dados;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//A função preencheUpdates é um exemplo de uso da propriedade “DATA” do combobox, mas aqui é citada como “VALUE”.

function preencheUpdates (event:Event):void
{
//Faz uma QUERY na tabela “teste” com o valor do item selecionado no ComboBox.
var buscaMySQL:Boolean = mdm.Database.MySQL.runQuery (“SELECT * FROM teste WHERE id =” + this.comboAltera_cb.value);
//Se conseguiu encontrar a tabela…
if (buscaMySQL)
{
//Cria novamente uma variavel e preenche ela com os valores pegos do Banco de dados.
var dados:Array = mdm.Database.MySQL.getData ();

//E com o LOOP FOR coloca os valores que vieram do Banco de dados nos respectivos campos do palco.
for (var i:Number = 0; i < dados.length; i++)
{
this.uNome_txt.text = dados[i][1];
this.uSenha_txt.text = dados[i][2];
}
}
else
{
//Se nã conseguiu encontrar a tabela…
this.resultado_txt.text = “Erro na conexão, ou sua busca não teve exito.”;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Agora uma QUERIE com a instrução DELETE
function deletar (evt:MouseEvent):void
{
//Se o comboDeleta_cb estiver com o valor padrão selecionado…
if (this.comboDeleta_cb.selectedIndex == 0)
{
//Mostra este aviso no campo de texto “resultado_txt”.
this.resultado_txt.text = “Primeiro selecione um usuário para deletar.”;
}
else
{
//Se tiver algum item selecionado e que não seja o valor padrão…
//Cria uma variavel que irá conter uma função do {mdm} Zinc que retorna um valor booleano.
//Se este valor for TRUE, significa que teve sucesso na QUERIE
var deletar:Boolean = mdm.Database.MySQL.runQuery (“DELETE FROM teste WHERE id='” + this.comboDeleta_cb.value + “‘”);
if (deletar)
{
this.resultado_txt.text = “Tarefa realizada com sucesso.”;
preencheCombo (evt);
}
else
{
//Se for FALSE, significa que ouve um erro de conecção por parte do {mdm} Zinc.
this.resultado_txt.text = “A tarefa não pode ser realizada com sucesso.”;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Função para execuar um UPDATE na tabela “teste”
function updateUser (evt:MouseEvent):void
{
//Se o comboAltera_cb estiver com o valor padrão selecionado…
if (this.comboAltera_cb.selectedIndex == 0)
{
//Mostra este aviso no campo de texto “resultado_txt”.
this.resultado_txt.text = “Primeiro selecione um usuário para alterar.”;
}
else
{
//Se tiver algum item selecionado e que não seja o valor padrão…
//Cria uma variavel que irá conter uma função do {mdm} Zinc que retorna um valor booleano.
//Se este valor for TRUE, significa que teve sucesso na QUERIE
//Esquema do comando UPDATE (UPDATE “tabela” SET “campo1” = “valor1”, “campo2” = “valor2” condição WHERE que atualiza pelo valor “id” que provem do item selecionado no combobox.
var atualiza:Boolean = mdm.Database.MySQL.runQuery (“UPDATE teste SET nome='” + this.uNome_txt.text + “‘, senha = ‘” + this.uSenha_txt.text + “‘ WHERE id=” + this.comboAltera_cb.value);
if (atualiza)
{
preencheCombo (evt);
this.uNome_txt.text = “”;
this.uSenha_txt.text = “”;
this.resultado_txt.text = “Tarefa realizada com sucesso.”;
}
else
{
//Se for FALSE, significa que ouve um erro de conecção por parte do {mdm} Zinc.
this.resultado_txt.text = “A tarefa não pode ser realizada com sucesso.”;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//Esta função pega todos os valores da tabela “teste” e mostra no campo de texto “resultado_txt”.
function getAll (evt:MouseEvent):void
{
//Variavel que contem o nome da tabela.
var tableName:String = “teste”;
//Função do {mdm} Zinc que faz o SELECT na tabela.
mdm.Database.MySQL.runQuery (“SELECT * FROM “+tableName);
//Variavel que como o nome já diz vai conter todos os valores vindos da tabela.
var tudo:Array = mdm.Database.MySQL.getData();
//Uma variavel que vai organizar os valores
var texto:String = “”;
//Muito cuidado nesta parte, este LOOP FOR lida com uma Array BIDIMENSIONAL…
//Onde a variavel (“i”) vai representar uma linha…
//… e a variavel (“n”) vai representar uma coluna.
for (var i:Number = 0; i<tudo.length; i++)
{
for (var n:Number = 0; n<tudo[0].length; n++)
{
texto += int(i+1) +” = “+(n+1)+” = “+tudo[i][n]+”|”;
}
texto += “\n”;
}
this.resultado_txt.text = texto;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

Bom, a principio seria isso, se tiver alguma duvida não deixe de comentar na área dos Usuários.


Ações

Information

9 responses

9 01 2009
Geucimar

Vc sabe me dizer como poderia armazenar os dados no DataProvider sem precisar de um projeto .fla com o componenete datagrid, apenas com a classe .as AS3?

10 01 2009
jefersonvargas

Bom se você já tem o arquivo de classe.as, e não deseja abrir o flash para criar um “.swf”, acredito que esta é sua duvida, você pode usar o eclipse, codedrive, flashDevelop, SEPY e outras ferramentas do genero, são todas “free” e todas tem plugin para compilar um “.swf” apartir de um arquivo.as.
Para complementar aqui tem um tutorial que eu usei para aprender mais sobre o componente DataGrid Site Linha de Código

10 01 2009
Geucimar

Então, eu fiz esta classe usando o flex builder, sem nenhuma dependência específica do flex ou do flash. Mas, agora que preciso manipular dados, observei que o DataProvider tem uma dependência direta do componente DataGrid no flash, ou seja, preciso de um arquivo .fla com o DataGrid na library do flash. Queria saber se tem algo como arraylist ou collection do java que não dependesse nem do flex e nem do flash?

10 01 2009
jefersonvargas

Olá Geucimar,
Bom acho que entendi melhor sua duvida, se você está usando o AS3 no flex builder, você não precisa, não tem necessidade de ter o componente na biblioteca, mas no flash você é obrigado a ter ele na biblioteca, para poder fazer o import via actionscript.Se seu caso for o Flex você pode buscar mais informações neste blog, porém se seu caso for no flash, pelo meu conhecimento nunca vi importar algo que não existisse na biblioteca.

10 01 2009
Geucimar

Jeferson, obrigado pelas respostas!

Para resolver sem o datagrid/dataprovider eu criei on array de objetos, dai não precisei dos componentes. Isso resolveu pra min, estou publicando para o caso de alguem precisar:

var sql:String = “select * from SedeCursos where
(diaEvento between #03/01/2009# and #03/30/2009#)”;

mdm.Database.MSAccess.select(sql);

var totalRegistros:Number = mdm.Database.MSAccess.getRecordCount();
var dadosAccess:Array = mdm.Database.MSAccess.getData();
var dados:Object;
var _dadosEventos:Array = new Array();

for (var i:int = 0; i < dadosAccess.length; i++)
{
dados = {};
dados.diaEvento = parseInt(dadosAccess[i][0]);
dados.codigo = dadosAccess[i][1];
dados.local = dadosAccess[i][2];
_dadosEventos.push(dados);
}

10 01 2009
jefersonvargas

Olá Geucimar,
Apenas para complementar sua idéa, de mostrar outras formas de organizar os dados do Banco de Dados sem usar algum complemento, pode-se usar as seguintes linhas de códigos:

//Use a linha abaixo para direcionar as proximas linhas a sua tabela.
mdm.Database.MSAccess.select(“SELECT * FROM suaTabela”);

var meuXML:String = mdm.Database.MSAccess.getXML();
// Converter à um objeto XML
var dados:XML = new XML();
dados.parseXML(meuXML);

Com elas você pega todos os valores do Banco de dados, e transforma em um XML.
Apartir disto fica por conta de sua imaginação como usar estes dados.

27 09 2009
Cristian

OLá, parabens pela explicação… só queria tirar uma dúvida, você sabe alguma forma (crack, plugin free, configuração) para tirar a logomarca do ZINC, mas sem ter que comprar a licença ?????

27 05 2010
Romulo

Nao consegui baixar os tutoriais.
Como proceder?

20 08 2010
Mauricio

Olá não consegui baixar os arquivos do Banco de Dados e Tabela.

DataBase – AS3. tem como vc ver isso pra mim?

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: