<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Andreano Lanusse &#124; Tecnologia e Desenvolvimento de Software &#187; dbExpress</title>
	<atom:link href="http://www.andreanolanusse.com/pt/tag/dbexpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andreanolanusse.com/pt</link>
	<description>Andreano Lanusse blog - acesse artigos, tutoriais e vídeos sobre tecnologia, desenvolvimento de software, técnicas de programação, banco de dados, jogos e mais.</description>
	<lastBuildDate>Thu, 17 May 2012 19:34:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Usando dbExpress Framework no Windows e Mac com C++Builder</title>
		<link>http://www.andreanolanusse.com/pt/usando-dbexpress-framework-no-windows-e-mac-com-cbuilder/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=usando-dbexpress-framework-no-windows-e-mac-com-cbuilder</link>
		<comments>http://www.andreanolanusse.com/pt/usando-dbexpress-framework-no-windows-e-mac-com-cbuilder/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 23:05:41 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[FireMonkey]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1436</guid>
		<description><![CDATA[<p>Nas próximas semanas estarei publicando uma série de exemplos em C++ para demonstrar o uso da VCL, FireMonkey, RTL, dbExpress, etc. Cada exemplo estará focando um recurso, mas você irá aprender sobre outros recursos, pois estes outros recursos serão parte do exemplo. Se tem algum recurso em C++ que você está interessado, me deixe saber, [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Nas próximas semanas estarei publicando uma série de exemplos em C++ para demonstrar o uso da VCL, FireMonkey, RTL, dbExpress, etc. Cada exemplo estará focando um recurso, mas você irá aprender sobre outros recursos, pois estes outros recursos serão parte do exemplo. Se tem algum recurso em C++ que você está interessado, me deixe saber, pois irei tentar incluir estes em dos meus próximos artigos.</p>
<p>Neste primeiro artigo, demonstro como usar dbExpress Framework para executar SQLs em um banco de dados InterBase, meu objetivo é executar a aplicação no Windows e Mac, tendo que escrever uma única aplicação, assim sendo criei um aplicativo console que utilizar <a href="http://www.embarcadero.com/products/firemonkey" target="_blank">FireMonkey</a>.</p>
<p>O assistente (Wizard) para criação de aplicações console em C++ foi atualizado no <a href="http://www.embarcadero.com/products/cbuilder" target="_blank">C++ Builder XE2</a>, este agora contém a opção Target Framework, como você pode ver abaixo.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2012/01/CPPConsoleWizard.png"><img class=" wp-image-764 aligncenter" title="Wizard para criar aplicações console em C++Builder" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2012/01/CPPConsoleWizard.png" alt="" width="253" height="184" /></a></p>
<p>O código abaixo mostra como conectar a uma base de dados <a href="http://www.embarcadero.com/products/interbase" target="_blank">InterBase</a>, executar um SELECT na tabela COUNTRY e exibir os resultados, vale lembrar que você pode usar o dbExpress Framework para interagir com qualquer banco de dados suportado pelo dbExpress, lembrando que alguns drivers dbExpress não estão disponíveis no Mac, como por exemplo, SQL Server e o driver ODBC.</p>
<p>Se você é um desenvolvedor C++ rapidamente irá entender o código abaixo, o qual contém comentários para facilitar o entendimento.</p>
<pre class="brush: cpp">#include &lt;fmx.h&gt;

#pragma hdrstop
#pragma argsused

#include &lt;tchar.h&gt;
#include &lt;stdio.h&gt;
#include &lt;System.SysUtils.hpp&gt;
#include &lt;Data.DBXDynalink.hpp&gt;
#include &lt;Data.DBXCommon.hpp&gt;
#include &lt;Data.DBXInterbase.hpp&gt;
#include &lt;memory&gt;

int _tmain(int argc, _TCHAR* argv[]) {

	// Get database connection instance
	std::auto_ptr&lt;TDBXConnection&gt;conn
		(TDBXConnectionFactory::GetConnectionFactory()-&gt;GetConnection
		("EMPLOYEE", "sysdba", "masterkey"));

	if (conn.get() != NULL) {

		printf("================= Connection Properties ============\n");

		AnsiString s = conn-&gt;ConnectionProperties-&gt;Properties-&gt;Text + "\n";
		printf(s.c_str());

		// create command and transaction objects to execute the query
		std::auto_ptr&lt;TDBXCommand&gt;command(conn-&gt;CreateCommand());

                // initiate a transaction
		TDBXTransaction *transaction =
			conn-&gt;BeginTransaction(TDBXIsolations::ReadCommitted);

		command-&gt;Text = "SELECT * FROM Country";
		command-&gt;Prepare();

		// execute the query and get the cursor (DBXReader)
		std::auto_ptr&lt;TDBXReader&gt;reader(command-&gt;ExecuteQuery());

		// print number of columns and each record
		printf(AnsiString("Number of Columns:" + IntToStr(reader-&gt;ColumnCount) +
			"\n").c_str());

		// display the list of records
		while (reader-&gt;Next()) {
			printf((reader-&gt;Value[reader-&gt;GetOrdinal("COUNTRY")]-&gt;GetAnsiString
				() + "\n").c_str());
		}

		printf("====================================================\n");

		conn-&gt;CommitFreeAndNil(transaction);
	}

	Sleep(5000);
	return 0;
}</pre>
<p>Antes de executar esse código, certifique-se que o alias dbExpress EMPLOYEE está configurado para a conectar ao banco de dados EMPLOYEE.GDB e o cliente do InterBase esteja instalado, a partir do momento em que o ambiente está configurado, compile e execute este aplicativo no Windows e Mac, a imagem a seguir mostra esta aplicação rodando no Mac.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2012/01/CPPDBXConsoleApp-Mac.png"><img class="wp-image-765 aligncenter" title="Aplicação C++ usando dbExpress framework no Mac" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2012/01/CPPDBXConsoleApp-Mac.png" alt="" width="437" height="515" /></a></p>
<p>Existem alguns pontos que você precisa estar ciente quando distribuir e executar suas aplicação no Mac, estou preparando um post onde vou explicar mais sobre este tema.</p>
<p>Até aqui aprendemos como usar DBX Framework, distribuir e executar este tipo de aplicação no Windows e Mac.</p>
<p>Você pode baixar o código fonte <strong><a href="https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/CPP/Database/dbExpress/DBXFramework" target="_blank">aqui</a></strong> ou apenas atualizar suas pasta de exemplos do RAD Studio XE2 a partir do <a href="http://radstudiodemos.svn.sourceforge.net/radstudiodemos/" target="_blank">repositório do RAD Studio no SVN</a>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/bye-bye-embarcadero/" title="Bye Bye Embarcadero">Bye Bye Embarcadero</a></li><li><a href="http://www.andreanolanusse.com/pt/disponibilizado-o-update-4-para-delphi-xe2-e-cbuilder-xe2/" title="Disponibilizado o Update 4 para Delphi XE2 e C++Builder XE2">Disponibilizado o Update 4 para Delphi XE2 e C++Builder XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/desenvolvendo-o-firemonkey-3d-text-editor-para-windows-e-mac/" title="Desenvolvendo o FireMonkey 3D Text Editor para Windows e Mac">Desenvolvendo o FireMonkey 3D Text Editor para Windows e Mac</a></li><li><a href="http://www.andreanolanusse.com/pt/usando-expressoes-regulares-em-aplicacoes-firemonkey-com-cbuilder/" title="Usando expressões regulares em aplicações FireMonkey com C++Builder">Usando expressões regulares em aplicações FireMonkey com C++Builder</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/usando-dbexpress-framework-no-windows-e-mac-com-cbuilder/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</title>
		<link>http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented</link>
		<comments>http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 23:57:19 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1409</guid>
		<description><![CDATA[<p>Se você já utilizou o método TDBXDataSetReader.CopyReaderToClientDataSet provavelmente já se deparou com a mensagem &#8220;Feature not implemented&#8221;, esta exception ocorre porque o método CopyReaderToClientDataSet não suporta a cópia de campos Blob de um DBXReader para um ClientDataSet. A partir do Delphi XE2 Update 2 isso não é mais problema, o suporte a blob no método CopyReaderToClientDataSet [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Se você já utilizou o método TDBXDataSetReader.CopyReaderToClientDataSet provavelmente já se deparou com a mensagem &#8220;Feature not implemented&#8221;, esta exception ocorre porque o método CopyReaderToClientDataSet não suporta a cópia de campos Blob de um DBXReader para um ClientDataSet.</p>
<p>A partir do <a title="Disponibilizado Update 2 para Delphi XE2, C++Builder XE2 e RadPHP XE2" href="http://www.andreanolanusse.com/pt/disponibilizado-update-2-para-delphi-xe2-cbuilder-xe2-e-radphp-xe2/">Delphi XE2 Update 2</a> isso não é mais problema, o suporte a blob no método CopyReaderToClientDataSet foi implementando.</p>
<p>Para saber como utilizar o método CopyReaderToClientDataSet na prática leia o artigo &#8220;<a title="Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010" href="http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/">Copiando estrutura e dados de um DBXReader para ClientDataSet  - DataSnap</a>&#8220;</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/monitoramento-e-controle-de-conexoes-em-datasnap-xe2/" title="Monitoramento e controle de conexões em DataSnap XE2">Monitoramento e controle de conexões em DataSnap XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/implementando-cache-de-dados-em-servidores-datasnap/" title="Implementando cache de dados em servidores DataSnap">Implementando cache de dados em servidores DataSnap</a></li><li><a href="http://www.andreanolanusse.com/pt/exemplos-e-slides-do-delphi-meeting-2011/" title="Exemplos e slides do Delphi Meeting 2011">Exemplos e slides do Delphi Meeting 2011</a></li><li><a href="http://www.andreanolanusse.com/pt/videos-sobre-datasnap-para-2011-o-que-voce-gostaria-de-ver/" title="Vídeos sobre DataSnap para 2011 &#8211; o que você gostaria de ver?">Vídeos sobre DataSnap para 2011 &#8211; o que você gostaria de ver?</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Conectando ao PostgreSQL com dbExpress ODBC driver</title>
		<link>http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=conectando-ao-postgresql-com-dbexpress-odbc-driver</link>
		<comments>http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 07:41:23 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[FireMonkey]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1403</guid>
		<description><![CDATA[<p>dbExpress traz o novo driver ODBC no Delphi XE2 e C++Builder XE2, através este driver você pode conectar a qualquer aplicações FireMonkey e VCL a qualquer base de dados que disponibilize um driver ODBC, este driver é compatível com Windows, estamos avaliando a possibilidade de disponibilizar futuramente para Mac. Para mostrar na prática como funciona, [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>dbExpress traz o novo driver ODBC no <a href="http://www.embarcadero.com/products/delphi" target="_blank">Delphi</a> XE2 e <a href="http://www.embarcadero.com/products/cbuilder" target="_blank">C++Builder</a> XE2, através este driver você pode conectar a qualquer aplicações FireMonkey e VCL a qualquer base de dados que disponibilize um driver ODBC, este driver é compatível com Windows, estamos avaliando a possibilidade de disponibilizar futuramente para Mac.</p>
<p>Para mostrar na prática como funciona, criei uma aplicação <a href="http://www.embarcadero.com/products/firemonkey" target="_blank">FireMonkey</a> que conecta a uma base de dados PostgreSQL.</p>
<p>Como requisito, você precisa instalar na máquina onde a aplicação será executada o driver ODBC do PostgreSQL, que pode ser baixado <a href="http://ftp.postgresql.org/pub/odbc/versions/msi/" target="_blank">aqui</a>. Vale lembrar que aplicações compiladas como 32-bit requerem a versão 32-bit do driver ODBC da base de dados a ser utilizada, para aplicações 64-bit será necessário o driver ODBC 64-bit.</p>
<p>Após instalado o driver, crie e configure o User DSN ou System DSN no ODBC Data Source Administrator (odbcad32.exe):</p>
<p><strong>Instruções para windows 64-bit</strong></p>
<ul>
<li>Para aplicações 32-bit use o c:\Windows\SysWOW64\odbcad32.exe</li>
<li>Para aplicações 64-bit use o c:\Windows\system32\odbcad32.exe</li>
</ul>
<p><strong>Instruções para windows 32-bit</strong></p>
<ul>
<li>Use o c:\Windows\system32\odbcad32.exe</li>
</ul>
<div><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/ODBC-PostgreSQL.png"><img class="aligncenter size-full wp-image-1405" title="Configuração do Data Source ODBC para PostgreSQL" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/ODBC-PostgreSQL.png" alt="" width="291" height="399" /></a></div>
<p>O próximo passe é criar um alias dbExpress ODBC no Data Explorer, onde Database Name é o nome do Data Source criado anteriormente, no meu exemplo este Data Source se chama PostgreSQL35W. Todas as informações relacionada a qual base de dados conectar, usuário e senha já foram configuradas no Data Source, você pode sobrescrever o usuário e senha na conexão dbExpress.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/DataExplorer-PostgreSQL.png"><img class="aligncenter size-full wp-image-1404" title="Data Explorer conectado ao PostgreSQL" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/DataExplorer-PostgreSQL.png" alt="" width="230" height="379" /></a></p>
<p>Supondo que você já saiba como utilizar os componentes SQLConnection, DataSetProvider e ClientDataSet ou SimpleDataSet e DataSource, basta conectá-los da mesma forma que você sempre fez com aplicações que utilizam os componentes dbExpress. A configuração do SQLConnection será configurada conforme abaixo:</p>
<pre>  object SQLConnection1: TSQLConnection
    ConnectionName = 'PostgreSQLOdbc'
    DriverName = 'ODBC'
    LoginPrompt = False
    Params.Strings = (
      'drivername=ODBC'
      'Database=PostgreSQL35W')
  end</pre>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/IDE-ODBC-PostgreSQL.png"><img class="aligncenter size-full wp-image-1407" title="IDE conectando componentes dbExpress" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/IDE-ODBC-PostgreSQL.png" alt="" width="732" height="428" /></a></p>
<p>Além de poder utilizar os componentes dbExpress em aplicações VCL e FireMonkey, você pode utilizar o dbExpress framework para conectar a bancos de dados que não tenham um driver nativo. A figura abaixo mostra a aplicação FireMonkey conectada a PostgreSQL através do dbExpress ODBC driver.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/FMI_dbExpress_ODBC.png"><img class="aligncenter size-full wp-image-1406" title="Aplicação FireMonkey conectada a PostgreSQL com dbExpress ODBC driver" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/FMI_dbExpress_ODBC.png" alt="" width="621" height="410" /></a></p>
<p>Download do código fonte disponível <a href="https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/Delphi/Database/dbExpress/ODBCPostgreSQL" target="_blank">aqui</a>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/bye-bye-embarcadero/" title="Bye Bye Embarcadero">Bye Bye Embarcadero</a></li><li><a href="http://www.andreanolanusse.com/pt/disponibilizado-o-update-4-para-delphi-xe2-e-cbuilder-xe2/" title="Disponibilizado o Update 4 para Delphi XE2 e C++Builder XE2">Disponibilizado o Update 4 para Delphi XE2 e C++Builder XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/desenvolvendo-o-firemonkey-3d-text-editor-para-windows-e-mac/" title="Desenvolvendo o FireMonkey 3D Text Editor para Windows e Mac">Desenvolvendo o FireMonkey 3D Text Editor para Windows e Mac</a></li><li><a href="http://www.andreanolanusse.com/pt/usando-dbexpress-framework-no-windows-e-mac-com-cbuilder/" title="Usando dbExpress Framework no Windows e Mac com C++Builder">Usando dbExpress Framework no Windows e Mac com C++Builder</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/video-delphi-xe2-e-firemonkey-app-no-windows-mac-e-ios/" title="Vídeo: Delphi XE2 e FireMonkey app no Windows, Mac e iOS">Vídeo: Delphi XE2 e FireMonkey app no Windows, Mac e iOS</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Criando tabelas através dos recursos de metadata do dbExpress no Delphi</title>
		<link>http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi</link>
		<comments>http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 18:00:00 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/dbxexpress-metadata-no-delphi-2009/</guid>
		<description><![CDATA[<p>Um dos recursos mais legais do dbExpress é a capacidade de criar tabelas, chaves primárias e chaves estrangeiras (foreign keys) através das classes do dbx metadata. O código abaixo cria 2 tabelas: Country e State, adiciona chave primária em ambas as tabelas e um relacionamento (foreign key) entre as duas, tudo &#8230; procedure CreateSchema(conn: TSQLConnection); [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Um dos recursos mais legais do dbExpress é a capacidade de criar tabelas, chaves primárias e chaves estrangeiras (foreign keys) através das classes do dbx metadata.</p>
<p>O código abaixo cria 2 tabelas: Country e State, adiciona chave primária em ambas as tabelas e um relacionamento (foreign key) entre as duas, tudo &#8230;</p>
<pre class="brush: delphi">procedure CreateSchema(conn: TSQLConnection);
var
  Provider: TDBXDataExpressMetaDataProvider;
  Country, State: TDBXMetaDataTable;
  IdCountryField,
  IdField: TDBXInt32Column;
  StrField : TDBXUnicodeVarCharColumn;
begin
  Provider := DBXGetMetaProvider(conn.DBXConnection);

  // Country
  Writeln('Creating Table - Country ....................');
  Country := TDBXMetaDataTable.Create;
  Country.TableName := 'COUNTRY';

  IdCountryField := TDBXInt32Column.Create('COUNTRYID');
  IdCountryField.Nullable := false;
  IdCountryField.AutoIncrement := true;
  Country.AddColumn(IdCountryField);

  StrField := TDBXUnicodeVarCharColumn.Create('COUNTRYNAME', 50);
  StrField.Nullable := False;

  Country.AddColumn(StrField);

  Provider.CreateTable(Country);

  // Set COUNTRYID as Primary Key
  AddPrimaryKey(Provider, Country.TableName, IdCountryField.ColumnName);

  // Set Unique Index for COUNTRYNAME
  AddUniqueIndex(Provider, Country.TableName, StrField.ColumnName);

  // State
  Writeln('Creating Table - State ....................');
  State := TDBXMetaDataTable.Create;
  State.TableName := 'STATE';

  IdField := TDBXInt32Column.Create('STATEID');
  IdField.Nullable := false;
  IdField.AutoIncrement := true;
  State.AddColumn(IdField);

  StrField := TDBXUnicodeVarCharColumn.Create('SHORTNAME', 2);
  StrField.Nullable := False;
  State.AddColumn(StrField);

  StrField := TDBXUnicodeVarCharColumn.Create('STATENAME', 50);
  StrField.Nullable := False;
  State.AddColumn(StrField);

  State.AddColumn(IdCountryField);

  Provider.CreateTable(State);

  // Set STATEID as Primary Key
  AddPrimaryKey(Provider, State.TableName, idField.ColumnName);

  // Set Unique Index for STATENAME
  AddUniqueIndex(Provider, State.TableName, StrField.ColumnName);

  AddForeignKey(Provider, State.TableName, IdCountryField.ColumnName,
                Country.TableName, IdCountryField.ColumnName);

  FreeAndNil(Provider);
  FreeAndNil(Country);

end;</pre>
<p>Download do código fontes completo <strong><a href="http://cc.embarcadero.com/download.aspx?id=26210" target="_blank">aqui</a></strong>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/" title="Como trabalhar com multiplas transações utilizando dbExpress Framework">Como trabalhar com multiplas transações utilizando dbExpress Framework</a></li><li><a href="http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/" title="Como utilizar parâmetros em dbExpress (DBX) Framework">Como utilizar parâmetros em dbExpress (DBX) Framework</a></li><li><a href="http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/" title="Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010">Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Apresentações do Delphi Conference 2010 disponível para download</title>
		<link>http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=apresentacoes-do-delphi-conference-2010-disponivel-para-download</link>
		<comments>http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 23:54:24 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Delphi Conference 2010]]></category>
		<category><![CDATA[Delphi Prism (.NET)]]></category>
		<category><![CDATA[RadPHP]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[dbExpress]]></category>
		<category><![CDATA[InterBase]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[JSON]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1117</guid>
		<description><![CDATA[<p>Já está disponível o material utilizado nas apresentações do Delphi Conference 2010 Brasil, os slides disponibilizados trazem informações valiosas e link para download dos exemplos utilizados. Para efetuar o download das apresentações você precisa de uma conta no EDN (Embarcadero Developer Network), que é grátis, caso você já a tenha, efetue o login e tenha [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Já está disponível o material utilizado nas apresentações do Delphi Conference 2010 Brasil, os slides disponibilizados trazem informações valiosas e link para download dos exemplos utilizados.</p>
<p>Para efetuar o download das apresentações você precisa de uma conta no EDN (Embarcadero Developer Network), que é grátis, caso você já a tenha, efetue o login e tenha acesso ao melhor conteúdo já apresentado sobre Delphi.</p>
<p>Artigo do EDN com todas as apresentações, <a href="http://edn.embarcadero.com/br/article/41104" target="_blank"><strong>clique aqui</strong></a>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/exemplos-e-slides-do-delphi-meeting-2011/" title="Exemplos e slides do Delphi Meeting 2011">Exemplos e slides do Delphi Meeting 2011</a></li><li><a href="http://www.andreanolanusse.com/pt/teste-nosso-servidor-datasnap-xe-instalado-no-amazon-cloud/" title="Teste nosso servidor DataSnap XE instalado no Amazon Cloud">Teste nosso servidor DataSnap XE instalado no Amazon Cloud</a></li><li><a href="http://www.andreanolanusse.com/pt/datasnap-xe-e-windows-azure-preview-3/" title="DataSnap XE e Windows Azure – RAD Studio XE Preview #3">DataSnap XE e Windows Azure – RAD Studio XE Preview #3</a></li><li><a href="http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/" title="Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010">Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010</a></li><li><a href="http://www.andreanolanusse.com/pt/utilizando-generics-para-transformacao-generica-de-objetos-em-datasnap-2010/" title="Utilizando generics para transformação genérica de Objetos em DataSnap 2010">Utilizando generics para transformação genérica de Objetos em DataSnap 2010</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Como trabalhar com multiplas transações utilizando dbExpress Framework</title>
		<link>http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework</link>
		<comments>http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 00:04:42 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=980</guid>
		<description><![CDATA[<p>Olá pessoal, mais um post sobre dbExpress Framework, desta vez vamos focar em controle de transações. É comum termos situações onde precisamos ter mais de uma transação em uma mesma conexão ao banco de dados, essa tarefa no dbExpress é bem simples. O método TDBXConnection.BeginTransaction inicia uma transação no banco de dados, o tipo desta transação [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, mais um post sobre dbExpress Framework, desta vez vamos focar em controle de transações. É comum termos situações onde precisamos ter mais de uma transação em uma mesma conexão ao banco de dados, essa tarefa no dbExpress é bem simples.</p>
<p>O método TDBXConnection.BeginTransaction inicia uma transação no banco de dados, o tipo desta transação irá depender do parâmetro a ser passado durante a criação da transação, estes tipos podem ser:</p>
<ul>
<li>TDBXIsolations.ReadCommitted</li>
<li>TDBXIsolations.RepeatableRead</li>
<li>TDBXIsolations.DirtyRead</li>
<li>TDBXIsolations.Serializable</li>
<li>TDBXIsolations.SnapShot</li>
</ul>
<p>Você pode consultar a documentação do RAD Studio online e entender cada tipo de isolamente transacional <strong><a href="http://docwiki.embarcadero.com/VCL/en/DBXCommon.TDBXIsolations" target="_self">aqui</a></strong>. Importante lembrar que o isolamento transacional irá variar de banco para banco, verifica quais o seu banco de dados suporta.</p>
<p>Ao iniciar uma transação o método BeginTransaction retornará um objeto do tipo TDBXTransaction onde você poderá efetuar o Commit e Rollback da transação.</p>
<p>No exemplo abaixo temos duas transações onde através de uma efetuamos 5 inserts, o resultado da query mostra que os registros estão no banco de dados e não comitados ainda, a partir dai iniciamos outra transação com o nível de isolamento ReadCommited, que quer dizer trazer todos os registrados que estejam efetivamente &#8220;comitados&#8221; no banco, como ainda não fizemos o commit, o resultados do select virá fazio, ao final efetuamos o Rollback para que os registros não sejam efetivamente gravados na base de dados e depois efetuamos um commit na transação de consulta.</p>
<p>O código ficaria assim:</p>
<pre class="brush: delphi">program MultipleTransaction;
{$APPTYPE CONSOLE}

uses
  SysUtils,
  DBXDynalink,
  DBXCommon,
  DBXInterbase;

Const
  InsertSQL : String = 'Insert Into Country Values ( ''%s'', ''%s'' )';

var
  ConnName: string;
  Conn: TDBXConnection;
  TransSelect,
  TransInsert  : TDBXTransaction;
  Cmd: TDBXCommand;
  Reader: TDBXReader;
  i : integer;

begin

  Conn := TDBXConnectionFactory.GetConnectionFactory.GetConnection
    ('employee ib', 'sysdba', 'masterkey');

  if Conn &lt;&gt; nil then
  begin

    Cmd := Conn.CreateCommand;

    // Start transaction - only inserts
    TransInsert := Conn.BeginTransaction(TDBXIsolations.ReadCommitted);

    for I := 1 to 5 do
    begin
      Cmd.Text := Format(InsertSQL, [ 'Record ' + IntToStr(I), IntToStr(I)]);
      Cmd.Prepare;
      Cmd.ExecuteUpdate;
    end;

    // Prepare and execute the SQL Statement
    Cmd.Text := 'SELECT * FROM Country Where Country Like ''Rec%''';
    Cmd.Prepare;

    Reader := Cmd.ExecuteQuery;

    Writeln('========== First Select including the new 5 records');
    while Reader.Next do
      Writeln(Reader.Value['Country'].GetAnsiString);

    // Start new transaction - doesn't include the inserted record
    TransSelect := Conn.BeginTransaction(TDBXIsolations.DirtyRead);

    Writeln('====================================================');
    Writeln('');

    Reader := Cmd.ExecuteQuery;

    Writeln('========== Second Select based on new transaction');
    while Reader.Next do
      Writeln(Reader.Value['Country'].GetAnsiString);

    // Commit Select transaction and Rollback the Insert transaction
    Conn.CommitFreeAndNil(TransSelect);
    Conn.RollbackFreeAndNil(TransInsert);

    Readln;
    Reader.Free;
    Cmd.Free;
    Conn.Free;

  end;

end.</pre>
<p>Ao executar o código acima, temos o seguinte resultado:</p>
<p><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2010/07/DBXCmdResult.jpg"><img class="alignleft size-full wp-image-981" title="dbExpress result" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2010/07/DBXCmdResult.jpg" alt="" width="677" height="340" /></a></p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/" title="Criando tabelas através dos recursos de metadata do dbExpress no Delphi">Criando tabelas através dos recursos de metadata do dbExpress no Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/" title="Como utilizar parâmetros em dbExpress (DBX) Framework">Como utilizar parâmetros em dbExpress (DBX) Framework</a></li><li><a href="http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/" title="Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010">Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Como utilizar parâmetros em dbExpress (DBX) Framework</title>
		<link>http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-utilizar-parametros-em-dbexpress-dbx-framework</link>
		<comments>http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/#comments</comments>
		<pubDate>Tue, 25 May 2010 18:23:22 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=941</guid>
		<description><![CDATA[<p>Em reposta a dúvida do Rafael e Carlos Gonzaga sobre como criar consultadas parametrizadas com dbExpress Framework resolvi escrever sobre o tema. Para começar, existe uma pequena diferença ao utilizar parâmetros em SQL com DBX Framework e VCL. Enquanto a VCL utiliza &#8220;:PARAMETRO&#8221; para definir parâmetros em uma query, em DBX Framework parâmetro é representado [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Em reposta a dúvida do Rafael e Carlos Gonzaga sobre como criar consultadas parametrizadas com dbExpress Framework resolvi escrever sobre o tema.</p>
<p>Para começar, existe uma pequena diferença ao utilizar parâmetros em SQL com DBX Framework e VCL. Enquanto a VCL utiliza &#8220;:PARAMETRO&#8221; para definir parâmetros em uma query, em DBX Framework parâmetro é representado pelo sinal de &#8220;?&#8221; e não inclui nome.</p>
<p>Como estamos acostumados com a VCL e certamente é muito mais legível codificar utilizando o nome dos parâmetros, você espera trabalhar da mesma forma com DBX Framework e isso é possível criando uma pequena extensão ao DBX Framework.</p>
<p>Para entender melhor, caso você utilize puramente o framework, seu código seria assim:</p>
<pre class="brush: delphi">program DBX4Example;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  DBXDynalink,
  DBXCommon,
  DBXInterbase;

var

  aDBXConn: TDBXConnection;
  aDBXTrans : TDBXTransaction;
  aCmnd: TDBXCommand;
  aReader: TDBXReader;

begin

    aDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection('employee ib','sysdba','masterkey');

    if aDBXConn &lt;&gt; nil then
    begin

      aCmnd := aDBXConn.CreateCommand;

      // Start transaction
      aDBXTrans:= aDBXConn.BeginTransaction(TDBXIsolations.ReadCommitted);

      // Prepare and execute the SQL Statement
      aCmnd.Text := 'SELECT * FROM Country  Where Country = ?';
      aCmnd.Prepare;
      aCmnd.Parameters.Parameter[0].Value.SetAnsiString('USA');
      aReader := aCmnd.ExecuteQuery;

      while aReader.Next do
      begin
        Writeln( aReader.Value['Country'].GetAnsiString );
      end;

      // Commit transaction
      aDBXConn.CommitFreeAndNil(aDBXTrans);

      Readln;
      aReader.Free;
      aCmnd.Free;
      aDbxConn.Free;
    end;
end.</pre>
<p>Veja que a query utiliza interrogação para definir o parâmetro e após o Prepare a longa linha para definir o valor do parâmetro com posição zero.</p>
<p>Esta primeira parte responderia a pergunta do Rafael e do Carlos, mas podemos tornar esse código mais amigável utilizando Class Helpers, recurso este que foi implementado no Delphi 2006 e nos ajuda a extender classes sem utilizar herança.</p>
<p>Assim sendo vou estender a classe TDBXParameterList, o qual irá permitir que eu nomeie os parâmetros e define seus respectivos valores por nome.</p>
<p>O código abaixo estende a classe utilizando a sintaxe <strong>class helper</strong>, veja bem isso não é herança. Esta extensão define os seguintes métodos:<br />
SetParamatersName: este método irá receber uma lista de nomes, o qual será usado para nomear os parâmetros, você deve passar a quantidade de nomes igual a quantidade de parâmetros;<br />
ByName: método que nos permite acessar os parâmetros através do nome, o DBX Framework traz o método GetOrdinal que permite acessar os parâmetros por nome, o ByName irá simplificar este acesso;</p>
<pre class="brush: delphi">unit DBXParameterListHelper;

interface

uses
  DBXCommon, SysUtils;

type
  TDBXParameterListHelper = class helper for TDBXParameterList

  public
    procedure SetParamatersName(aNames: Array of String);
    function ByName( Name : String ) : TDBXWritableValue;
  end;

implementation

{ TDBXParameterListHelper }

function TDBXParameterListHelper.ByName(Name: String): TDBXWritableValue;
begin
  Result := Self.Parameter[Self.GetOrdinal(Name)].Value;
end;

procedure TDBXParameterListHelper.SetParamatersName(aNames: array of String);
var
  i: Integer;
begin

  if Length(aNames) &lt;&gt; Self.Count then
     raise Exception.Create('aNames should have the same number of parameters');

  for i := 0 to Self.Count - 1 do
  begin
    Self[i].Name := aNames[i];
  end;
end;

end.</pre>
<p>Com está extensão esta parte do código:</p>
<pre class="brush: delphi">      // Prepare and execute the SQL Statement
      aCmnd.Text := 'SELECT * FROM Country  Where Country = ?';
      aCmnd.Prepare;
      aCmnd.Parameters.Parameter[0].Value.SetAnsiString('USA');</pre>
<p>Ficaria assim:</p>
<pre class="brush: delphi">      // Prepare and execute the SQL Statement
      aCmnd.Text := 'SELECT * FROM Country  Where Country = ?';
      aCmnd.Prepare;
      aCmnd.Parameters.SetParamatersName(['COUNTRYNAME']);
      aCmnd.Parameters.ByName('COUNTRYNAME').SetAnsiString('USA');</pre>
<p>Caso a query tenha vários parâmetros, ficaria assim:</p>
<pre class="brush: delphi">      // Prepare and execute the SQL Statement
      aCmnd.Text := 'SELECT * FROM Country  Where Country = ? and Currency = ?';
      aCmnd.Prepare;
      aCmnd.Parameters.SetParamatersName(['COUNTRYNAME', 'CURRENCY']);
      aCmnd.Parameters.ByName('COUNTRYNAME').SetAnsiString('USA');
      aCmnd.Parameters.ByName('CURRENCY').SetAnsiString('Dolar');</pre>
<p>Ao final vimos como utilizar consultas parametrizadas com DBX Framework e como utilizar class helper para estender classes.</p>
<p>Download do código fonte <strong><a href="http://cc.embarcadero.com/download.aspx?id=27740" target="_blank">aqui</a></strong>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/" title="Criando tabelas através dos recursos de metadata do dbExpress no Delphi">Criando tabelas através dos recursos de metadata do dbExpress no Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/" title="Como trabalhar com multiplas transações utilizando dbExpress Framework">Como trabalhar com multiplas transações utilizando dbExpress Framework</a></li><li><a href="http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/" title="Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010">Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010</title>
		<link>http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010</link>
		<comments>http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 23:30:31 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=934</guid>
		<description><![CDATA[<p>Aqueles que estão utilizando DataSnap 2010 passam a utilizar o DBXFramework, o qual recomendo muito para operações onde não existe a necessidade de expor e navegação bi-direcional. Existem casos onde será necessário copiar a estrutura e os dados de um DBXReader para ClientDataSet ou Params, pensando nisso no Delphi foi criada a unit DBXDBReaders.pas que [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Aqueles que estão utilizando DataSnap 2010 passam a utilizar o DBXFramework, o qual recomendo muito para operações onde não existe a necessidade de expor e navegação bi-direcional.</p>
<p>Existem casos onde será necessário copiar a estrutura e os dados de um DBXReader para ClientDataSet ou Params, pensando nisso no Delphi foi criada a unit DBXDBReaders.pas que traz algumas classes que permite essa operação.</p>
<p>A classe TDBXDataSetReader possui dois método que permitem copiar para um ClientDataSet já existente ou retorna um novo ClientDataSet, veja o exemplo abaixo.</p>
<pre class="brush: delphi">var
  Reader: TDBXReader;
  DepClient: TDepartmentClient;
begin
  DepClient := TDepartmentClient.Create(DMClientContainer.MyDSServer.DBXConnection, False);

  try
    Reader := DepClient.GetDepartmentsOrderBy;

    try
      if Assigned(Reader) then
      begin
        TDBXDataSetReader.CopyReaderToClientDataSet(Reader, DMClientContainer.CDSCopy);
      end;
    finally
      FreeAndNil(Reader);
    end;

  finally
    DepClient.Free;
  end;</pre>
<p>O ClientDataSet CDSCopy já existe e é parte do DataModule DMClientContainer, caso o ClientDataSet não existe, utilizar o método TDBXDataSetReader.ToClientDataSet e esta irá retornar um novo ClientDataSet.</p>
<p>Meus exemplos sobre DataSnap 2010 foram atualizados e você pode efetuar o <strong><a href="http://cc.embarcadero.com/Item/27391" target="_blank">download aqui</a></strong>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/" title="Disponibilizando métodos de uma classe como Server Methods sem usar TServerModule em DataSnap">Disponibilizando métodos de uma classe como Server Methods sem usar TServerModule em DataSnap</a></li><li><a href="http://www.andreanolanusse.com/pt/exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009/" title="Exemplos DataSnap, dbExpress e outros recursos do Delphi 2009">Exemplos DataSnap, dbExpress e outros recursos do Delphi 2009</a></li><li><a href="http://www.andreanolanusse.com/pt/video-aprenda-como-utilizar-datasnap-connectors-na-pratica/" title="Video: Aprenda como utilizar DataSnap Connectors na prática">Video: Aprenda como utilizar DataSnap Connectors na prática</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Disponibilizando métodos de uma classe como Server Methods sem usar TServerModule em DataSnap</title>
		<link>http://www.andreanolanusse.com/pt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap</link>
		<comments>http://www.andreanolanusse.com/pt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 20:26:45 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=631</guid>
		<description><![CDATA[<p>Hoje certamente você tem diversas classes contendo regras de negócios que poderiam ser melhor aproveitas em uma aplicação multicamada desenvolvida em Delphi. Por meio dos Server Methods é possível fazer isso tranquilamente. Para uma classe ser disponibilizada como Server Methods é necessário: Descender de TPersistent Ter a diretiva {$MethodInfo ON}, esta diretiva permite ao DataSnap [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Hoje certamente você tem diversas classes contendo regras de negócios que poderiam ser melhor aproveitas em uma aplicação multicamada desenvolvida em Delphi. Por meio dos Server Methods é possível fazer isso tranquilamente.</p>
<p>Para uma classe ser disponibilizada como Server Methods é necessário:</p>
<ul>
<li>Descender de TPersistent</li>
<li>Ter a diretiva {$MethodInfo ON}, esta diretiva permite ao DataSnap obter informações da classe a partir da RTTI</li>
<li>Estar registrada através do componente DSServerClass</li>
</ul>
<p>Abaixo exemplo de uma classe que não é descendente de TDSServerModule e sim de TPersistant, podemos assumir que esta classe já existia anteriormente e que agora queremos reusar em nosso servidor DataSnap</p>
<pre class="brush: pascal; highlight: [14, 15]">unit User;

interface

uses
  BaseServerClass,
  Classes,
  DBXCommon,
  SysUtils,
  Dialogs,
  MainServerModule;

type
{$METHODINFO ON}
  TUser = class(TPersistent)
  private

  public
    constructor Create;
    destructor Destroy; override;

    procedure AddUser(FirstLastName, Login, Password: String);

    function IsValidUser(Login, Password: String): Boolean;

    procedure DisableUser(Login: String);
    procedure EnableUser(Login: String);

  end;

implementation

uses
  ServerContainer;

{ TUser }

procedure TUser.AddUser(FirstLastName, Login, Password: String);
var
  Comm: TDBXCommand;
begin

  if (FirstLastName = '') then
    raise Exception.Create('First/Last name is required');

  if (Login = '') then
    raise Exception.Create('Login is required');

  if (Password = '') then
    raise Exception.Create('Password is required');

  Comm := FDbxConnection.CreateCommand;

  Comm.Text :=
    'Insert Into Users (NAME, LOGIN, PASSWORD, ACTIVE ) Values (' + QuotedStr
    (FirstLastName) + ',' + QuotedStr(Login) + ',' + QuotedStr(Password)
    + ', true)';
  Comm.ExecuteQuery;

  FreeAndNil(Comm);

end;

constructor TUser.Create;
begin
  FDbxConnection := DMServerContainer.DataSnap_Server_Log.DBXConnection;
end;

destructor TUser.Destroy;
begin

  inherited;
end;

procedure TUser.DisableUser(Login: String);
var
  Comm: TDBXCommand;
begin

  if (Login = '') then
    raise Exception.Create('Login is required');

  Comm := FDbxConnection.CreateCommand;

  Comm.Text := 'Update Users Set ACTIVE = False Where LOGIN = ' + QuotedStr
    (Login);
  Comm.ExecuteQuery;

  FreeAndNil(Comm);

end;

procedure TUser.EnableUser(Login: String);
var
  Comm: TDBXCommand;
begin

  if (Login = '') then
    raise Exception.Create('Login is required');

  Comm := FDbxConnection.CreateCommand;

  Comm.Text := 'Update Users Set ACTIVE = True Where LOGIN = ' + QuotedStr
    (Login);
  Comm.ExecuteQuery;

  FreeAndNil(Comm);

end;

function TUser.IsValidUser(Login, Password: String): Boolean;
var
  Comm: TDBXCommand;
  Reader: TDBXReader;
begin
  if (Login = '') then
    raise Exception.Create('Login is required');

  if (Password = '') then
    raise Exception.Create('Password is required');

  Comm := FDbxConnection.CreateCommand;

  Comm.Text := 'Select ACTIVE From Users Where LOGIN = ' + QuotedStr(Login)
    + ' and PASSWORD = ' + QuotedStr(Password);

  Reader := Comm.ExecuteQuery;

  if Reader.Next then
  begin
    Result := Reader.Value[0].GetBoolean;
  end
  else
    Result := False;

  Reader.Close;
  FreeAndNil(Reader);
  FreeAndNil(Comm);

end;

end.</pre>
<p>Quer saber mais sobre DataSnap, <a href="http://www.andreanolanusse.com/pt/tag/datasnap/"><strong>clique aqui</strong></a>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/" title="Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010">Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010</a></li><li><a href="http://www.andreanolanusse.com/pt/exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009/" title="Exemplos DataSnap, dbExpress e outros recursos do Delphi 2009">Exemplos DataSnap, dbExpress e outros recursos do Delphi 2009</a></li><li><a href="http://www.andreanolanusse.com/pt/video-aprenda-como-utilizar-datasnap-connectors-na-pratica/" title="Video: Aprenda como utilizar DataSnap Connectors na prática">Video: Aprenda como utilizar DataSnap Connectors na prática</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Utilizando o dbExpress (DBX) Framework em Delphi 2010</title>
		<link>http://www.andreanolanusse.com/pt/utilizando-o-dbexpress-dbx-framework-em-delphi-2010/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=utilizando-o-dbexpress-dbx-framework-em-delphi-2010</link>
		<comments>http://www.andreanolanusse.com/pt/utilizando-o-dbexpress-dbx-framework-em-delphi-2010/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 21:17:52 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=419</guid>
		<description><![CDATA[<p>Tenho recebido muitas perguntas sobre como utilizar do dbExpress Framework para efetuar operações no banco de dados, então resolvi postar este exemplo de uma aplicação console, o exemplo é bem fácil de entender e mostra as opções básicas de conexão, transação e query. Pretende em futuros posts, explicar mais sobre o framework. program DBX4Example; {$APPTYPE [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Tenho recebido muitas perguntas sobre como utilizar do dbExpress Framework para efetuar operações no banco de dados, então resolvi postar este exemplo de uma aplicação console, o exemplo é bem fácil de entender e mostra as opções básicas de conexão, transação e query.</p>
<p>Pretende em futuros posts, explicar mais sobre o framework.</p>
<pre class="brush: pascal">program DBX4Example;
{$APPTYPE CONSOLE}

uses SysUtils, DBXDynalink, Dialogs, DbxInterBaseReadOnlyMetadata, DBXCommon;

var

  aConnName: string;
  aDBXConn: TDBXConnection;
  aDBXTrans: TDBXTransaction;
  aCmnd: TDBXCommand;
  aReader: TDBXReader;
  aColCount: integer;

begin

  aDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection
    ('EMPLOYEE IB', 'sysdba', 'masterkey');

  if aDBXConn &lt;&gt; nil then
  begin

    // Write the all connection parameters
    Writeln('================= Connection Properties ============');
    Writeln(aDBXConn.ConnectionProperties.Properties.Text);
    Writeln('====================================================');
    Writeln('');

    aCmnd := aDBXConn.CreateCommand;

    // Start transaction
    aDBXTrans := aDBXConn.BeginTransaction(TDBXIsolations.ReadCommitted);

    // Prepare and execute the SQL Statement
    aCmnd.Text := 'SELECT * FROM Country';
    aCmnd.Prepare;
    aReader := aCmnd.ExecuteQuery;

    aColCount := aReader.ColumnCount;
    Writeln('Results from Query: ' + aCmnd.Text);
    Writeln('Number of Columns:  ' + IntToStr(aColCount));

    while aReader.Next do
    begin
      Writeln(aReader.Value['Country'].GetAnsiString);
    end;

    Writeln('====================================================');
    Writeln('');

    // Commit transaction
    aDBXConn.CommitFreeAndNil(aDBXTrans);

    Readln;
    aReader.Free;
    aCmnd.Free;
    aDBXConn.Free;

  end;

end.</pre>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/" title="Criando tabelas através dos recursos de metadata do dbExpress no Delphi">Criando tabelas através dos recursos de metadata do dbExpress no Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/" title="Como trabalhar com multiplas transações utilizando dbExpress Framework">Como trabalhar com multiplas transações utilizando dbExpress Framework</a></li><li><a href="http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/" title="Como utilizar parâmetros em dbExpress (DBX) Framework">Como utilizar parâmetros em dbExpress (DBX) Framework</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/utilizando-o-dbexpress-dbx-framework-em-delphi-2010/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Vídeo: Novo driver dbExpress para Firebird no Delphi 2010 e C++Builder 2010</title>
		<link>http://www.andreanolanusse.com/pt/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010</link>
		<comments>http://www.andreanolanusse.com/pt/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 16:26:52 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[dbExpress]]></category>
		<category><![CDATA[Firebird]]></category>
		<category><![CDATA[Vídeo]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=144</guid>
		<description><![CDATA[<p>A comunidade Firebird pediu e agora tem, RAD Studio 2010 traz o novo driver dbExpress para FireBird, além do suporte completo através dbExpress Framework, assista o vídeo e conheça um pouco mais. Caso deseja mais informações sobre o RAD Studio 2010, clique aqui. Também recomendo assistirem o novo sneak peek sobre outras novidades relacionadas com [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-171" href="http://www.andreanolanusse.com/pt/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/dbxfirebird/"><img class="size-full wp-image-171 alignleft" style="border: 0pt none; margin: 3px;" title="dbExpress driver para Firebird" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2009/08/DBXFirebird.jpg" alt="dbExpress driver para Firebird" width="154" height="221" /></a></p>
<p>A comunidade Firebird pediu e agora tem, RAD Studio 2010 traz o novo driver dbExpress para FireBird, além do suporte completo através dbExpress Framework, assista o vídeo e conheça um pouco mais.</p>
<p>Caso deseja mais informações sobre o <strong><a href="http://www.embarcadero.com/rad-studio-2010/">RAD Studio 2010</a></strong>, clique aqui.</p>
<p style="text-align: center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/a3CnagkyBWE&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/a3CnagkyBWE&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Também recomendo assistirem o <a href="http://www.embarcadero.com/rad-studio-2010/">novo sneak peek</a> sobre outras novidades relacionadas com banco de dados e o novo DataSnap 2010.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/apresentacao-de-lancamento-do-delphi-2010/" title="Apresentação de lançamento do Delphi 2010">Apresentação de lançamento do Delphi 2010</a></li><li><a href="http://www.andreanolanusse.com/pt/video-aprenda-como-utilizar-datasnap-connectors-na-pratica/" title="Video: Aprenda como utilizar DataSnap Connectors na prática">Video: Aprenda como utilizar DataSnap Connectors na prática</a></li><li><a href="http://www.andreanolanusse.com/pt/video-desenvolvendo-para-ios-com-firemonkey-e-delphi-xe2/" title="Vídeo: Desenvolvendo para iOS com FireMonkey e Delphi XE2">Vídeo: Desenvolvendo para iOS com FireMonkey e Delphi XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/video-desenvolvimento-para-ios-com-firemonkey/" title="Vídeo: Desenvolvimento para iOS com FireMonkey">Vídeo: Desenvolvimento para iOS com FireMonkey</a></li><li><a href="http://www.andreanolanusse.com/pt/desenvolvendo-o-firemonkey-3d-text-editor-para-windows-e-mac/" title="Desenvolvendo o FireMonkey 3D Text Editor para Windows e Mac">Desenvolvendo o FireMonkey 3D Text Editor para Windows e Mac</a></li><li><a href="http://www.andreanolanusse.com/pt/video-conhecendo-o-banco-de-dados-interbase-xe/" title="Vídeo: Conhecendo o banco de dados InterBase XE">Vídeo: Conhecendo o banco de dados InterBase XE</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Como criar tabelas utilizando o dbExpress Framework</title>
		<link>http://www.andreanolanusse.com/pt/como-criar-tabelas-utilizando-o-dbexpress-framework/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-criar-tabelas-utilizando-o-dbexpress-framework</link>
		<comments>http://www.andreanolanusse.com/pt/como-criar-tabelas-utilizando-o-dbexpress-framework/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 14:55:45 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=122</guid>
		<description><![CDATA[<p>No Delphi 2007 o dbExpress passou por uma grande reformulação que trouxe inúmeras melhoria, uma desta foi a capacidade de interagir com o metadata do banco de dados através do dbExpress Framework, ou seja, através de classes em Delphi. Inúmeras são as funcionalidades e benefícios de se utilizar o dbExpress Framework para este fim, para [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>No Delphi 2007 o dbExpress passou por uma grande reformulação que trouxe inúmeras melhoria, uma desta foi a capacidade de interagir com o metadata do banco de dados através do dbExpress Framework, ou seja, através de classes em Delphi.</p>
<p>Inúmeras são as funcionalidades e benefícios de se utilizar o dbExpress Framework para este fim, para começar vamos ver como criar tabelas utilizando utilizando o framework.</p>
<p>Para começar você precisamos definir a conexão com o banco de dados, geralmente utilizamos o SQLConnection ou o DBXConnection, é a partir da conexão que o dbExpress sabe com que banco de dados está conectado e assim saberá como gerar os scripts de criação da tabela. Definida a conexão instanciamos a classe TDBXDataExpressMetaDataProvider, que será o interlocutor entre as classes de metadata e a conexão.</p>
<pre class="brush: delphi">function DBXGetMetaProvider(const AConnection: TDBXConnection):  TDBXDataExpressMetaDataProvider;
var
   Provider: TDBXDataExpressMetaDataProvider;
begin
  Provider := TDBXDataExpressMetaDataProvider.Create;
  try
    Provider.Connection := AConnection;
    Provider.Open;
  except
    FreeAndNil(Provider);
    raise;
  end;

  Result := Provider;
end;</pre>
<p>Esta função irá receber a conexão, neste caso estamos passando a instância do DBXConnection, no caso de você estar utilizando SQLConnection não tem problema, pois o SQLConnection fornece a sua instância DBXConnection.</p>
<p>Agora basta criamos a tabela utilizando a classe TDBXMetaDataTable e as colunas através da classe TBX&lt;XXX&gt;Column, onde XXX é o tipo da coluna, para cada tipo de coluna no banco de dados o dbExpress Framework terá uma representação. A seguir a criação da tabela PAIS e seus respectivos campos.</p>
<pre class="brush: delphi">var
  Provider: TDBXDataExpressMetaDataProvider;
  Pais     : TDBXMetaDataTable;
  PaisID   : TDBXInt32Column;
  StrField : TDBXUnicodeVarCharColumn;
begin
  Provider := DBXGetMetaProvider(conn.DBXConnection);

  // Pais
  Pais := TDBXMetaDataTable.Create;
  Pais.TableName := 'PAIS';

  // Campo ID do País
  PaisIdField := TDBXInt32Column.Create('PAISID');
  PaisIdField.Nullable := false;
  PaisIdField.AutoIncrement := true;
  Pais.AddColumn(JobIdField);

  // Campo nome do País
  StrField := TDBXUnicodeVarCharColumn.Create('NOME_PAIS', 50);
  StrField.Nullable := False;
  Pais.AddColumn(StrField);

  // Campo sigla do País
  StrField := TDBXUnicodeVarCharColumn.Create('SIGLA', 2);
  StrField.Nullable := False;
  Pais.AddColumn(StrField);

  // Cria a tabela
  Provider.CreateTable(Pais);</pre>
<p>Com a tabela e campos definido o provider executa o método CreateTable para a efetuar a criação da mesma no banco, a partir do momento que mudamos a conexão para outro banco de dados não será necessário atualizar este código, pois o dbExpress é responsável por definir o script de acordo com o banco.</p>
<p>Para criar primary key, foreign key, indices, etc.. disponibilizei um exemplo completo no Embarcadero Code Central, para fazer o download <strong><a href="http://cc.embarcadero.com/Item/26210" target="_blank">clique aqui</a></strong></p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/" title="Criando tabelas através dos recursos de metadata do dbExpress no Delphi">Criando tabelas através dos recursos de metadata do dbExpress no Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/" title="Como trabalhar com multiplas transações utilizando dbExpress Framework">Como trabalhar com multiplas transações utilizando dbExpress Framework</a></li><li><a href="http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/" title="Como utilizar parâmetros em dbExpress (DBX) Framework">Como utilizar parâmetros em dbExpress (DBX) Framework</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/como-criar-tabelas-utilizando-o-dbexpress-framework/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Exemplos DataSnap, dbExpress e outros recursos do Delphi 2009</title>
		<link>http://www.andreanolanusse.com/pt/exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009</link>
		<comments>http://www.andreanolanusse.com/pt/exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009/#comments</comments>
		<pubDate>Sun, 03 May 2009 18:25:11 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=40</guid>
		<description><![CDATA[<p>Está disponível no Code Central (http://cc.codegear.com/Item/26057) o exemplo de uma aplicação DataSnap e dbExpress utilizando Delphi 2009. Este exemplo mostra diversos novos recursos do Delphi 2009, são eles: DataSnap Servidor DataSnap Autenticação através do servidor de aplicação consultando banco de dados Server methodos &#8211; métodos disponibilizados no servidor para acesso através das aplicações cliente Client [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Está disponível no Code Central (<a href="http://cc.codegear.com/Item/26057" target="_blank">http://cc.codegear.com/Item/26057</a>) o exemplo de uma aplicação DataSnap e dbExpress utilizando Delphi 2009.</p>
<p>Este exemplo mostra diversos novos recursos do Delphi 2009, são eles:</p>
<ol>
<li>DataSnap
<ul>
<li>Servidor DataSnap</li>
<li>Autenticação através do servidor de aplicação consultando banco de dados</li>
<li>Server methodos &#8211; métodos disponibilizados no servidor para acesso através das aplicações cliente</li>
<li>Client DataSnap</li>
<li>Execução de server methods a partir do cliente</li>
<li>Utilização de clientdataset no lado cliente, assim como applyupdates e master detail</li>
</ul>
</li>
<li>dbExpress
<ul>
<li>Criando tabelas, primary key e foreign key através de dbExpress framework</li>
</ul>
</li>
<li>Utilização de resources
<ul>
<li>Carregando recursos (images PNG) dinamicamente na aplicação</li>
</ul>
</li>
</ol>
<p>Pretendo atualizar esta aplicação frequentemente, o objetivo é exemplificar a utilização do DataSnap e dbExpress.</p>
<p>Se você tem alguma sugestão do que podemos adicionar nesta aplicação, por favor comente aqui no meu blog.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/" title="Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010">Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010</a></li><li><a href="http://www.andreanolanusse.com/pt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/" title="Disponibilizando métodos de uma classe como Server Methods sem usar TServerModule em DataSnap">Disponibilizando métodos de uma classe como Server Methods sem usar TServerModule em DataSnap</a></li><li><a href="http://www.andreanolanusse.com/pt/video-aprenda-como-utilizar-datasnap-connectors-na-pratica/" title="Video: Aprenda como utilizar DataSnap Connectors na prática">Video: Aprenda como utilizar DataSnap Connectors na prática</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

