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.





Enquetes úteis

16 12 2008

Como percebi que os desenvolvedores que lêem este blog usam diferentes versões do Flash e do {mdm} Zinc,resolvi fazer algumas enquetes, peço que vocês respondam elas, não custa nada e so beneficia a vocês mesmo pois irei saber em que versão explicar os tutoriais.

Versão do Flash

Versão do {MDM} Zinc

Outras





Conexão com o MS Access usando actionscript 2.0

15 10 2008

A pedido do nosso amigo Augusto estou disponibilizando este mini tutorial com arquivos fontes para estudo.

Através deste tutorial você poderá interagir com um Banco de Dados MS Access, usando o Adobe Flash (ActionScript 2.0) e o {MDM} Zinc.

Deixarei o código à disposição dos que preferem apenas ver como funciona o ActionScript.

Arquivos para estudo:

Exemplo de conexão Flash e MS Access





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.





Adobe acaba de anunciar o Flash CS4

23 09 2008

Veja na integra as caracteristicas do novo Adobe Flash CS4.





Preparando o Flash para usar o ActionScript 3 com o {mdm} Zinc 3.0

22 09 2008

Para permitir o Flash CS3 compreender as classes de “MDM” temos de importar o arquivo “mdm.swc” que vem junto com seu {mdm} Zinc 3.0, para dentro da pasta componentes do seu Flash CS3. Isto aumenta a velocidade de codificação e torna o trabalho mais facil.
Veja como encontrar e onde colocar o arquivo “mdm.swc” :

O arquivo “mdm.swc” (que está localizado em [C]:[Arquivos de programas]\MDM.Zinc.3.0 \swc\cs3) e copiá-lo para o caminho a seguir (talvez seja necessário alterar este caminho, se você não tiver instalado o Flash CS3 na localização predefinida):

C:\Documents and Settings\[NomeDoUsuario]\Local Settings (ou Configurações locais)\Application Data (ou Dados de aplicativos)\Adobe\Flash CS3\en\Configuration\Components

Pronto agora você ja está pronto para desenvolver em AS3 e {mdm} Zinc 3.0.





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.