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.





Conexão com Banco de Dados usando AS2

22 09 2008

Conexão com Banco de Dados usando AS2.

Os arquivos fonte se encontram no final deste tutorial.

A primeira coisa a fazer é colocar todos os objetos no palco e instanciar eles:

# Nomes de instância:

Área de cadastrar:

(1): nome_txt

(2): senha_txt

(3): inserir_btn

Área de deletar:

(4): comboDelete_cb

(5): deletar_btn

Área de atualizar:

(6): comboUpdate_cb

(7): uNome_txt

(8): uSenha_txt

(9): update_btn

Ícone de estado:

(10): icoConect_mc

Campo de “Debug“:

(11): resultado_txt

Conexão:

(12): conectar_btn

(13): desconectar_btn

Obs: Todos os campos de texto, com exeção do resultado_txt, são do tipo imput.

Depois de definido o layout, chega a hora da programação, eu comentei ao máximo o código de ActionScript2 para que você possa entender o que está fazendo.

//Propriedades pré definidas.
//Desabilita os botões.
inserir_btn.enabled = false;
deletar_btn.enabled = false;
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Adiciona um ouvidor de eventos no ComboBox (comboUpdate_cb).
comboUpdate_cb.addEventListener ("change",preencheCamposUpdate);
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Ao precionar o botão (conectar_btn).
conectar_btn.onPress = function ()
{
//Chama a função do {mdm} Zinc que busca e conecta ao seu banco de dados
//se conseguir conectar retorna (true) caso contrario (false).
var estaConectado:Boolean = mdm.Database.MySQL.connect ("localhost", "3306", true, "root", "", "dbZinc");
// A condicional if() testa se uma condição é verdaderia, ou seja se a variavel (estaConectado) for verdadeira...
//...executa um bloco de código
if (estaConectado)
{
//A função do {mdm} Zinc (mdm.Flash.setVar("nomeVariavel", "valorVariavel"), cria uma variavel global no swf.
mdm.Flash.setVar ("conectado","sim");
icoConect_mc.gotoAndStop (2);
inserir_btn.enabled = true;
deletar_btn.enabled = true;
preencheCombo ();
}
else
{
//Se não for possivel conectar mostra uma janela com a seguinte mensagem.
mdm.Dialogs.prompt ("\n" + "Não foi possiveel se conectar ao servidor" + "\n");
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Ao prescionar o botão (desconectar_btn).
desconectar_btn.onPress = function ()
{
//busca no swf pela variavel (conectado), a que foi criada com o {mdm} Zinc
var coneccao = mdm.Flash.getVar ("conectado");
//Se o valor dela for "sim".
if (coneccao == "sim")
{
//Desconecta do MySQL.
mdm.Database.MySQL.close ();
//Avisa que desconectou.
mdm.Dialogs.prompt ("A conexão foi encerrada");
//E seta o valor da variavel (conectado) para "nao".
mdm.Flash.setVar ("conectado","nao");
icoConect_mc.gotoAndStop (1);
inserir_btn.enabled = false;
deletar_btn.enabled = false;
}
else
{
mdm.Dialogs.prompt ("Você não está conectado ainda");
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Aqui nesta função vc vai inserir seu primeiro valor no banco de dados
inserir_btn.onPress = function ()
{
//Cria um variavel Boleana que irá realizar a inserção de valores no banco de dados
//Veja como funciona
//mdm.Database.MySQL.runQuery("(query que vc pretende realizar) (nome da tabela(campos,separados por virgula)) VALUES(campo de texto "nome_txt"),(campo de texto "senha_txt"))
var gravar:Boolean = mdm.Database.MySQL.runQuery ("INSERT INTO teste(nome,senha) VALUES('" + _root.nome_txt.text + "','" + _root.senha_txt.text + "')");
_root.nome_txt.text = "";
_root.senha_txt.text = "";
//Se realizar a QUERY com sucesso
if (gravar)
{
//Mostra na tela a seguinte mensagem
mdm.Dialogs.prompt ("Cadastrado");
}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Aqui nesta função vc vai fazer a sua primeira instrução delete no seu banco de dados
deletar_btn.onPress = function ()
{
//Repare que nesta QUERY a instrução "INSERT INTO" mudou para "DELETE FROM"


//e veja tambem que ela faz a seguinte condição "WHERE id", ou seja deletar pelo ID
//neste caso o ID se encontra no valor do "nome" selecionado no ComboBox (comboDelete_cb)
var deletar:Boolean = mdm.Database.MySQL.runQuery ("DELETE FROM teste WHERE id='" + comboDelete_cb.value + "'");
if (deletar)
{
mdm.Dialogs.prompt ("Deletado");
preencheCombo ();
}
else
{
//Se nao conseguir realizar a tarefa.
mdm.Dialogs.prompt ("Erro ao realizar a tarefa");
}
};


////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Função importante no programa.
//Busca os valores no Banco de dados e coloca num array.
//Acompanhe...
function preencheCombo ()
{
//cria o Array que irá conter os valores vindos do Banco de Dados.
var dados:Array = new Array ();
//O primeiro valor a ser inserido é o texto ("--- Selecione um usuário ---").
//Para mostrar a pessoa que esta mechendo no programa pra que serve aquele comboBox.
dados.push ({label:"--- Selecione um usuário ---"});


//Função do {mdm} Zinc que seleciona todo o valor da tabela (teste).
//e é usada sempre antes de alguma tarefa no banco de dados.
mdm.Database.MySQL.runQuery ("SELECT * FROM " + "teste");
//a variavel (dataSet) contem todo o valor da tabela "teste" chamada logo acima.
var dataSet:Array = mdm.Database.MySQL.getData ();
//faz um loop for para preencher o array (dados)
for (i = 0; i < dataSet.length; i++)
{
//Repare que ele faz({label: "Valor"...)
// e ({, data:"Valor").
// isto quer dizer que LABEL é o que vai aparecer no comboBox.
// e DATA é o valor respectivo daquele LABEL.
dados.push ({label:mdm.Database.MySQL.getField (i, 1), data:mdm.Database.MySQL.getField (i, 0)});
}


//Insere os valores do array (dados) nos comboBox do palco.
comboDelete_cb.dataProvider = dados;
comboUpdate_cb.dataProvider = dados;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Esta função é relativamente simples
//O que ela faz é pegar o id ou seja o valor do nome selecionado
// e fazer uma busca pelo id no Banco de dados
function preencheCamposUpdate ()
{
var tabela:String = "teste";
mdm.Database.MySQL.runQuery ("SELECT * FROM " + tabela + " WHERE id =" + comboUpdate_cb.value);
//Como as variaveis criadas dentro de uma função so existem dentro dela mesmo.
//posso criar uma variavel com o nome (dataSet) sem alterar a variavel da função anterior.
// e (dataSet) irá conter agora somente os valores no banco de dados que corresponderem...
//...à minha consulta feita logo acima com os valores do (comboUpdate_cb).
var dataSet:Array = mdm.Database.MySQL.getData ();
//O loop for agora é usado para distribuir os valores ns campos de textos encontrados no palco
for (i = 0; i < dataSet.length; i++)
{
//Veja a consulta so vai pegar uma linha no Banco de dados...
//...ou seja, "dataSet[linha][coluna]":
_root.uNome_txt.text = dataSet[i][1];
_root.uSenha_txt.text = dataSet[i][2];
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//e finalmente a função que vai atualizar os valores no banco de dados
update_btn.onPress = function ()
{
//Novamente a QUERY, mas desta vez com o comando UPDATE
//veja o esquema, ("UPDATE (tabela) SET(seta "modifica") o campo("nome") de sua tabela pelo valor(uNome_txt.text, campo de texto encontrado no seu palco) e o campo("senha")...
//...de sua tabela pelo valor(uSenha_txt.text, campo de texto encontrado no seu palco) WHERE(condição) id(faz o UPDATE pelo id) que é encontrado no ComboBox...
var atualiza:Boolean = mdm.Database.MySQL.runQuery ("UPDATE teste SET nome='" + uNome_txt.text + "', senha = '" + uSenha_txt.text + "' WHERE id=" + comboUpdate_cb.value);
if (atualiza)
{
_root.uNome_txt.text = "";
_root.uSenha_txt.text = "";
mdm.Dialogs.prompt ("Atualizado");
}
};

Arquivos necessários para estudo:

Database – AS2.fla





Sobre o {mdm} Zinc

22 09 2008

O {mdm} Zinc se encontra na sua versão 3.0, onde muitos recursos foram melhorados, a interface do programa ficou ainda mais amigavel e suas bibliotecas expandiram-se.Mas uma coisa que não mudou e que é muito poderoso no {mdm} Zinc é a posibilidade de criar extenções apartir de “DLL’S”.

Palavras da Multidmedia Limited:

O {mdm} Zinc ™  3.0 foi desenvolvido para ser multi-plataforma. O {mdm} Zinc ™  3.0 teve sua interface toda redesenhada para proporcionar um ambiente intuitivo com diferenças mínimas entre as duas plataformas. A nova interface gráfica também dispõe de uma impressionante WYSIWYG Modo Design, ou seja enquanto você modela o programa já pode ter um preview de como ficará, sem presizar compilar varias vezes.





Primeira publicação!

21 09 2008

Boas,

Quero avisar aos aficcionados por Flash e {mdm} Zinc que amãnha dia 22/09/2008, estarei publicando o primeiro tutorial, com arquivos fontes disponiveis para estudo, o artigo de amanhã será sobre Banco de Dados e iremos ver como trabalhar com ActionScript 2 e 3, para quem ainda está no AS2 e para quem já esta passando para o novo AS3, neste artigo você aprenderá a inserir valores no banco de dados, fazer atualizações e tambem deletar os dados registrados no banco de dados.

Abraços.








Seguir

Obtenha todo post novo entregue na sua caixa de entrada.