Fazer conexão no MySQL usando Visual C++ 2005 Express Edition

C++, MySQL, Visual C++ No Comments » Marcelo Korjenioski

Come­cei a me aven­tu­rar no mundo do Visual C++ semana pas­sada e de cara tive difi­cul­dade para fazer uma cone­xão com o que­rido MySQL por este motivo criei este
rápido tutorial.

O pri­meiro passo é bai­xar e ins­ta­lar MySQL .NET e ODBC Con­nec­tors para  cone­xão com .NET

ODBC Dri­ver

.NET Data Pro­vi­der Driver

Depois crie um banco e uma tabela no MySQL para fazer um teste.

Crie um novo pro­jeto no Visual C++ -> CLR -> Win­dows Forms Appli­ca­tion e colo­que um nome.

Com o pro­jeto cri­ado vamos adi­ci­o­nar uma referencia.

Vá no Solu­tion Explo­rer cli­que com o botão direito em cima do nome do pro­jeto e vá em References…

Agora em Com­mon Pro­per­ties -> Refe­ren­ces cli­que no botão Add New Reference…

Cli­que na aba Browse e vá no dire­to­rio onde foi ins­ta­lado o MySQL Con­nec­tor .Net e Add a MySql.Data.dll
O cami­nho padrão é “C:\Arquivos de programas\MySQL\MySQL Con­nec­tor Net 6.1.0\Assemblies”

Com a Refe­rence MySql.Data adi­ci­o­nada basta usar ela no projeto.

No pro­jeto padrão irá ter um arquivo Form1.h vá no modo Form1.h[Design] e abra Tool­box adi­ci­one um but­ton e um DataGrid

O Data­Grid não vai esta ati­vado por padrão para adi­ci­o­nar ele no Tool­box cli­que com o botão direito em cima de um com­po­nente e vá em Cho­ose Items…
Agora mar­que o com­po­nente da coluna Name Data­Grid com names­pace System.Windows.Forms.

Dê um duplo cli­que no but­ton e vai abrir o Form1.h com uma fun­ção para o button.

Adi­ci­one o código abaixo e con­fi­gure con­forme seu ser­vi­dor esta setado.


String^ strcon = "database = test; data source = localhost; user id = root; password =";
MySqlConnection^ mycon = gcnew MySqlConnection(strcon);

String^ sqlquery = "select * from tb_imagem";
MySqlDataAdapter^ myadp = gcnew MySqlDataAdapter(sqlquery, mycon);

DataSet^ myds = gcnew DataSet();

myadp->Fill(myds,"tb_imagem");
dataGrid1->DataSource = myds->Tables["tb_imagem"]->DefaultView;
dataGrid1->SetDataBinding(myds, "tb_imagem");

No ini­cio do arquivo Form1.h você encon­trara varios names­pa­ces adi­ci­o­na­dos inclua agora o names­pace do MySql


using namespace MySql::Data::MySqlClient;

Agora aperte F5 para ini­ciar o Debug.  Se não tiver erro vai com­pi­lar e exe­cu­tar.
Estou come­çando no C++ então se encon­trar alguma difi­cul­dade para fazer algo vou esta pos­tando aqui.

Bibliotecas AJAX que o google fornece diminuem a carga no seu servidor.

Ferramentas, Javascript, Sites No Comments » Marcelo Korjenioski

Para dimi­nuir a carga no seu ser­vi­dor uma dica é uti­li­zar as bibli­o­te­cas que o goo­gle fornece.

As bibli­o­te­cas dis­po­ni­veis hoje são:

jQuery, jQuery UI, Pro­totype, scrip­ta­cu­lous, Moo­To­ols, Dojo, SWFOb­ject e a bibli­o­teca de inter­face do usuá­rio do Yahoo! (YUI).

Para car­re­gar a bibli­o­teca é simples.


<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript"></script>

Neste link Goo­gle Ajax de bibli­o­te­cas do Goo­gle é pos­si­vel encon­trar a docu­men­ta­ção com­pleta do uso.

Em um exem­plo aqui no site sobre  Sis­tema para Cal­cu­lar Frete SEDEX e PAC a par­tir de CEP infor­mado eu faço o uso do pro­totype para res­ga­tar os dados via AJAX.

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apre­sen­ta­dos e aju­dar a comunidade.


Criar Trigger no MySQL.

MySQL, SQL No Comments » Marcelo Korjenioski

É pos­si­vel defi­nir TRIGGERS para serem dis­pa­ra­dos antes (BEFORE) ou depois (AFTER)
de um evento DML(Data Mani­pu­la­tion Lan­guage) INSERT, UPDATE, DELETE ou REPLACE.
Para pegar os valo­res dos cam­pos nas Trig­gers usa­mos OLD.nome_do_campo e NEW.nome_do_campo.
Quando exclui­mos o regis­tro pega­mos o valor usando OLD.nome_do_campo e quando vamos adi­ci­o­nar
um regis­tro usa­mos NEW.nome_do_campo.
Abaixo regra do uso de OLD e NEW:
Delete usa­mos somente OLD.nome_do_campo.
Insert somente NEW.nome_do_campo
UPDATE pode­mos usar OLD.nome_do_campo e NEW.nome_do_campo.

Vou criar duas tabe­las para migrar os dados de uma tabela para outro usando TRIGGERS.


GO
CREATE TABLE IF NOT EXISTS tb_comentario (
pk_comentario    int(11) AUTO_INCREMENT NOT NULL,
tx_comentario    text NULL,
PRIMARY KEY(pk_comentario)
)
GO
CREATE TABLE IF NOT EXISTS tb_comentario_historico (
pk_comentario_historico    int(11) AUTO_INCREMENT NOT NULL,
fk_comentario              int(11) NOT NULL,
tx_comentario              text NULL,
PRIMARY KEY(pk_comentario_historico)

Vamos criar a pri­meira Trig­ger para dis­pa­rar apos fazer o Insert na tabela tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_insert_comentario_historico
go
CREATE TRIGGER  trigger_insert_comentario_historico AFTER INSERT ON tb_comentario
FOR EACH ROW
BEGIN
INSERT INTO tb_comentario_historico SET fk_comentario = NEW.pk_comentario, tx_comentario = NEW.tx_comentario;
END
go
insert into tb_comentario set tx_comentario = 'insert trigger'
go
select * from tb_comentario
go
select * from tb_comentario_historico

Agora vamos criar uma Trig­ger para dele­tar o regis­tro da tb_comentario_historio caso seja dele­tado o regis­tro na tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_delete_comentario_historico
go
CREATE TRIGGER trigger_delete_comentario_historico BEFORE DELETE ON tb_comentario
FOR EACH ROW
BEGIN
DELETE FROM tb_comentario_historico WHERE fk_comentario = OLD.pk_comentario;
END
go
delete from tb_comentario where pk_comentario = 21
go
select * from tb_comentario
go
select * from tb_comentario_historico

A ultima Trig­ger será para fazer o Update na tb_comentario_historio caso seja feita alguma mudança na tb_comentario.


go
DROP TRIGGER IF EXISTS trigger_update_comentario_historico
go
CREATE TRIGGER trigger_update_comentario_historico BEFORE UPDATE ON tb_comentario
FOR EACH ROW
BEGIN
UPDATE tb_comentario_historico SET tx_comentario = NEW.tx_comentario WHERE fk_comentario = NEW.pk_comentario;
END
go
update tb_comentario set tx_comentario = 'teste trigger update 2' where pk_comentario= 22
go
select * from tb_comentario
go
select * from tb_comentario_historico

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Retornar somente números ou letras. Expressão Regular (ER)

Expressões Regulares, PHP No Comments » Marcelo Korjenioski

Duas ERs sim­ples mas que na hora de vali­dar um campo vindo de um GET ou POST podem sal­var sua vida.

Eu usei uma des­tas ER no post Sis­tema para Cal­cu­lar Frete SEDEX e PAC a par­tir de CEP infor­mado. para remo­ver o “-” do CEP e ter cer­teza que ira ape­nas nume­ros na pes­quisa. Exis­tem fun­ções pron­tas em JavaS­cript para fazer este fil­tro do lado do cli­ente mas é sem­pre bom pro­te­ger a vali­da­ção do código no lado do ser­vi­dor para evi­tar ata­ques dos Injec­tion da vida (HTML Injec­tion e SQL Injection).


$string = 'a12AAAZZZAAasd4f6as4d5';
// Retorno somente números.
$filtro = eregi_replace('([^0-9])','',$string);
echo $filtro , '<br />';
// Retorna somente letras.
$filtro = eregi_replace('([^a-z])','',$string);
echo $filtro , '<br />';

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Fazer consulta no MySQL e formatar ResultSet usando PHP e HTML

CSS, HTML, MySQL, PHP, SQL 1 Comment » Marcelo Korjenioski

Dando con­ti­nui­dade ao ultimo post Pegar dados via POST e inse­rir no banco de dados MySQL com PHP.
Agora vamos mos­trar os dados inse­ri­dos. Desta vez usei CSS para que o resul­tado fique um pouco melhor para visu­a­li­zar.
Crie um arquivo com o nome listar.php e insira o código abaixo.

<?php
// Fazendo a conexão com o servidor MySQL
// mysql_pconnect("server", "login", "senha")
$conexao = mysql_pconnect("localhost","root","root") or die('falha ao conectar');
// Seleciona o banco de dados.
mysql_select_db("test",$conexao) or die('falha ao selecionar db');

// Executa Query.
$sql = 'SELECT codigo, nome, preco, quantidade FROM tb_produtos';
$result = mysql_query($sql);
?>
<html>
<head>
<title>Formulario de Produtos</title>
<style type="text/css">
table caption {
color:#1E398D;
padding:5px 0;
text-align:left;
text-transform:uppercase;
}
table thead {
border:1px solid #D2D2D2;
}

table tbody {
border:1px solid #D2D2D2;
}

table thead th {
background:#EEECCC;
border-left:1px solid #F0F0F0;
height:45px;
padding:5px;
text-transform:uppercase;
}

table tbody td, table tbody th {
font-family:Verdana,Arial,Helvetica,sans-serif;
font-size:10px;
padding:5px;
text-transform:uppercase;
}
</style>
</head>
<body>
<table cellspacing="0" summary="Resultados da lista de produtos." >
<caption>Produtos</caption>
<thead>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Preço</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
<?php // Verifico se existe registros no banco.
if(mysql_num_rows($result) > 0) {
// Aqui é feita a busca de cada registro encontrado jogando o resultado em um array por nome de campo da tabela.
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
// É possivel verificar todos os valores do usando a função var_dump($row);
// Basta tirar o comentario # para debugar.
// a tag pre serve para pre formatar o texto - irá manter a quebra de linha e espaços. Facilita na hora de debugar.
#echo '<pre>';
#var_dump($row);
#echo '</pre>';
?>
<tr>
<td><?php echo $row['codigo']; ?></td>
<td><?php echo $row['nome']; ?></td>
<td><?php echo $row['preco']; ?></td>
<td><?php echo $row['quantidade']; ?></td>
</tr>
<?php
}
} else { ?>
<tr>
<td colspan="4"><p>Nenhum registro encontrado.</p></td>
</tr>
<?php
}
// Libera toda a memória associada ao result.
mysql_free_result($result);
?>
</tbody>
</table>
</body>
</html>

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

Pegar dados via POST e inserir no banco de dados MySQL com PHP

HTML, MySQL, PHP 1 Comment » Marcelo Korjenioski

Exem­plo básico para pegar valo­res via POST de um for­mu­lá­rio HTML e inse­rir no banco de dados MySQL. 

<?php
// Verifica se foi postado algo para inserir dados no banco.
if($_POST) {
// Fazendo a conexão com o servidor MySQL
// mysql_pconnect("server", "login", "senha")
$conexao = mysql_pconnect("localhost","root","root") or die('falha ao conectar');
// Verifica se o banco de dados existe antes de criar.
$query = 'CREATE DATABASE IF NOT EXISTS test';

if(!mysql_query($query,$conexao)) {
echo 'falha ao criar banco<br />';
die; // Com o die eu já paro de executar o script caso ocorra erro.
}

mysql_select_db("test",$conexao) or die('falha ao selecionar db');

// Verifica se a tabela existe antes de criar.
$query = "CREATE TABLE  IF NOT EXISTS tb_produtos (
pk_produtos int not null auto_increment primary key,
codigo     varchar(255),
nome       varchar(255),
preco      decimal(12,2),
quantidade int(11))";

if(!mysql_query($query,$conexao)) {
echo 'falha ao criar tabela<br />';
die; // Com o die eu já paro de executar o script caso ocorra erro.
}

// É possivel verificar todos os valores do POST usando a função var_dump($_POST);
// Basta tirar o comentario # para debugar.

// a tag pre serve para pre formatar o texto - irá manter a quebra de linha e espaços. Facilita na hora de debugar.
#echo '<pre>';
#var_dump($_POST); die;
#echo '</pre>';

/*Pego os valores do POST do formulario HTML e seto nas variaveis.
É necessario fazer a validação dos dados para evitar ataques SQL Injection ou HTML Injection quando estiver
em ambiente de produção.
Neste exemplo estou fazendo sem qualquer tipo de validação para simplificar o entendimento.*/
$codigo = $_POST['codigo'];
$nome = $_POST['nome'];
$preco = $_POST['preco'];
$quantidade = $_POST['quantidade'];

$query_insert = "INSERT INTO tb_produtos (codigo,nome,preco,quantidade) VALUES
('$codigo','$nome',$preco,$quantidade)";

if(mysql_query($query_insert,$conexao)) {
echo 'Dados inseridos com sucesso<br />';
} else {
echo 'falha ao inserir dados<br />';
}
// Caso POST false mostra HTML
} else {
?>
<html>
<head>
<title>Formulário de Produtos</title>
</head>
<body>
<form action="cadastrar.php" method="post">
<label for="codigo">
<span >Código</span>
<input id="codigo" class="text" type="text" value="" maxlength="255" title="Código" name="codigo" tabindex="1"/>
</label><br />
<label for="nome">
<span >Nome</span>
<input id="nome" class="text" type="text" value="" maxlength="255" title="Nome" name="nome" tabindex="2"/>
</label><br />
<label for="preco">
<span class="nameField">Preço</span>
<input id="preco" class="text" type="text" value="" maxlength="12" title="Preço" name="preco" tabindex="3"/>
</label><br />
<label for="quantidade">
<span class="nameField">Quantidade</span>
<input id="quantidade" class="text" type="text" value="" maxlength="11" title="Quantidade" name="quantidade" tabindex="4"/>
</label><br />
<label for="cadastrar">
<input type="submit" id="cadastrar" name="cadastrar" tabindex="5" value="cadastrar" />
</label>
</form>
</body>
</html>
<?php
}

?>

Caso tenha alguma duvida deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­rias aqui apresentados.

Designed by NattyWP Wordpress Themes.
Images by desEXign.