<?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>Wed, 25 Jan 2012 11:00:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<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>3</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[dbExpress]]></category>
		<category><![CDATA[FireMonkey]]></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://wwwmaster.postgresql.org/download/mirrors-ftp/odbc/versions/msi/psqlodbc_09_00_0310.zip" 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/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><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/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/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis 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/conectando-ao-postgresql-com-dbexpress-odbc-driver/feed/</wfw:commentRss>
		<slash:comments>1</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>10</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>10</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/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/publicando-providers-durante-o-registro-dinamico-de-datasnap-server-class/" title="Publicando providers durante o registro dinâmico de DataSnap Server Class">Publicando providers durante o registro dinâmico de DataSnap Server Class</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>17</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/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/publicando-providers-durante-o-registro-dinamico-de-datasnap-server-class/" title="Publicando providers durante o registro dinâmico de DataSnap Server Class">Publicando providers durante o registro dinâmico de DataSnap Server Class</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>31</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/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/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><li><a href="http://www.andreanolanusse.com/pt/video-webinar-o-que-voce-pode-fazer-com-rad-studio-xe/" title="Vídeo: Webinar o que você pode fazer com RAD Studio XE">Vídeo: Webinar o que você pode fazer com RAD Studio XE</a></li><li><a href="http://www.andreanolanusse.com/pt/video-serializacao-de-objetos-json-delphi-conference-2010-brasil/" title="Vídeo: Serialização de objetos JSON &#8211; Delphi Conference 2010 Brasil">Vídeo: Serialização de objetos JSON &#8211; Delphi Conference 2010 Brasil</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/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/publicando-providers-durante-o-registro-dinamico-de-datasnap-server-class/" title="Publicando providers durante o registro dinâmico de DataSnap Server Class">Publicando providers durante o registro dinâmico de DataSnap Server Class</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>

