dbExpress – Andreano Lanusse | Tecnologia e Desenvolvimento de Software http://www.andreanolanusse.com/pt Andreano Lanusse blog - artigos, tutoriais e vídeos sobre tecnologia, desenvolvimento de software (Delphi XE4, C#, PHP, .NET) e técnicas de programação Tue, 04 Mar 2014 05:02:55 +0000 pt-BR hourly 1 https://wordpress.org/?v=6.5.8 Dica – MySQL com dbExpress no Delphi 2010/XE – evitando problemas http://www.andreanolanusse.com/pt/dicas-mysql-com-dbexpress-no-delphi-2010xe-evitando-problemas/ http://www.andreanolanusse.com/pt/dicas-mysql-com-dbexpress-no-delphi-2010xe-evitando-problemas/#respond Wed, 16 Jan 2013 15:28:03 +0000 http://www.andreanolanusse.com/pt/?p=4207 Desde que o Delphi suporta MySQL através do driver dbExpress é comum ver desenvolvedores com certa dificuldade para conectar ao MySQL, vejo isso acontecer mais com aqueles que usam a versão do Delphi ou C++Builder 2010 e XE, isso poderia ser evitado ao ler o arquivo readme.html que está localizado no diretório de instalação do […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

Desde que o Delphi suporta MySQL através do driver dbExpress é comum ver desenvolvedores com certa dificuldade para conectar ao MySQL, vejo isso acontecer mais com aqueles que usam a versão do Delphi ou C++Builder 2010 e XE, isso poderia ser evitado ao ler o arquivo readme.html que está localizado no diretório de instalação do Delphi.

Este arquivo documenta todas as versões de banco suportada pelo dbExpress, incluindo o MySQL que tem uma particularidade, a combinação de versões de DLL que podem ser feita, isso acontece porque o MySQL muda com frequência sua API e assim dificulta para qualquer fornecedor manter a compatibilidade, por isso essa combinação.

Abaixo informações que você deve saber e que estão no readme.html

Versões de servidores MySQL oficialmente suportadas e testadas pelo Delphi e C++Builder

MySQL 5.1, 5.0.27, 4.1 (Todas) (Driver dbxMYS.dll, Client libmysql.dll)

Combinação das versões de servidores e clientes MySQL que foram testados, ou seja, veja bem as versões de DLL que devem ser usadas no server e client

  • LibMySQL.dll (5.1.XX) Client  – DBXMys.dll MySQL 4.0.XX Server
  • LibMySQL.dll (5.1.XX) Client  – DBXMys.dll MySQL 5.0.XX Server
  • LibMySQL.dll (5.1.XX) Client  – DBXMys.dll MySQL 5.1.XX Server

Sendo objetivo, instale a versão do cliente do MySQL 5.1.xx para que sua aplicação cliente possa conectar a servidores MySQL 4.0.XX, 5.0.XX e 5.1XX.

Lembre-se de instalar o cliente do  MySQL 32-bits, se você instalar o cliente 64-bits jamais irá funcionar com o Delphi 2010 e XE.

Caso você tenha mais de uma versão Delphi instalada na mesma máquina, faça o seguinte?

Duas versões de IDE na mesma máquina pode fazer com que uma  das versões antigas do driver dbExpress para MySQL seja carregado, isso irá acontecer por causa da variável de sistema PATH, coloque o diretório bin da versão do Delphi que você quer executar a frente na variável de sistema PATH, você pode fazer isso através do menu Tools -> Options -> Environment Variables. Faça este procedimento se você desejar usar outra versão do Delphi.

Uma dica simples, mas que pode ajudar a economizar um tempinho.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/dicas-mysql-com-dbexpress-no-delphi-2010xe-evitando-problemas/feed/ 0
dbExpress Framework no Windows e Mac com C++Builder e FireMonkey http://www.andreanolanusse.com/pt/dbexpress-framework-no-windows-e-mac-com-cbuilder-e-firemonkey/ http://www.andreanolanusse.com/pt/dbexpress-framework-no-windows-e-mac-com-cbuilder-e-firemonkey/#comments Sat, 12 Jan 2013 05:34:57 +0000 http://www.andreanolanusse.com/pt/?p=4234 O objetivo deste artigo é demonstrar o uso do dbExpress Framework para executar SQLs em um bancos de dados InterBase ou Firebird, através uma aplicação FireMonkey Console em C++ que poderá ser executa em Windows e Mac, desta forma teremos um único código para as duas plataformas. A aplicação FireMonkey Console usada como exemplo foi […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

O objetivo deste artigo é demonstrar o uso do dbExpress Framework para executar SQLs em um bancos de dados InterBase ou Firebird, através uma aplicação FireMonkey Console em C++ que poderá ser executa em Windows e Mac, desta forma teremos um único código para as duas plataformas.

A aplicação FireMonkey Console usada como exemplo foi criada através do Wizard do IDE e irá efetuar as seguintes operações:

  • Conectar ao banco de dados, que aqui usado foi InterBase e Firebird, mas você pode usar qualquer banco suportado pelo dbExpress Framework; alguns drivers do dbExpress não são suportados em Mac, como é o caso do SQL Server e ODBC driver;
  • Executar um SELECT na tabela COUNTRY e mostrar os resultados percorrendo os cursor retornado.

O código abaixo é simples e de fácil leitura e traz uma série de comentários para facilitar o entendimento.

#include <fmx.h>

#pragma hdrstop
#pragma argsused

#include <tchar.h>
#include <stdio.h>
#include <System.SysUtils.hpp>
#include <Data.DBXDynalink.hpp>
#include <Data.DBXCommon.hpp>
#include <Data.DBXInterbase.hpp>
#include <memory>

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

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

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

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

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

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

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

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

		// execute the query and get the cursor (DBXReader)
		std::auto_ptr<TDBXReader>reader(command->ExecuteQuery());

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

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

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

		conn->CommitFreeAndNil(transaction);
	}

	Sleep(5000);
	return 0;
}

Certifique-se que o alias dbExpress EMPLOYEE foi criado e configurado corretamente para conectar ao banco de dados EMPLOYEE.GDB, além claro do cliente do InterBase ou FireBird que dever estar instalado. Com estes passos efetuados compile e execute sua aplicação no Windows ou Mac.

Ao executar no Mac, certifique-se de que o arquivos dbxconnection.ini está no mesmo diretório da aplicação, caso contrário você poderá ter problemas, pois a aplicação não irá encontrar os parâmetros para conectar ao banco.

O resultado abaixo representa a aplicação sendo executada no Mac.

Aplicação FireMonkey em C++ em execução no Mac

 

Você pode baixar o código fonte direto do repositório de demos do RAD Studio utilizando a linha de comando abaixo:

svn co https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/RadStudio_XE2/CPP/Database/dbExpress/DBXFramework/

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/dbexpress-framework-no-windows-e-mac-com-cbuilder-e-firemonkey/feed/ 1
Delphi XE3 e suas novidades – Parte 1 http://www.andreanolanusse.com/pt/delphi-xe3-e-suas-novidades-parte-1/ http://www.andreanolanusse.com/pt/delphi-xe3-e-suas-novidades-parte-1/#comments Tue, 11 Sep 2012 04:20:28 +0000 http://www.andreanolanusse.com/pt/?p=1586 Como prometido aqui está a parte 1 do meu review sobre o Delphi XE3 que foi anunciado recentemente e é parte da suíte RAD Studio XE3 e traz também as versões XE3 do C++Builder e Prism, além do HTML5 Builder o novo nome para o RadPHP e com algumas novidades. Aproveitando a oportunidade de uma olhada […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

Como prometido aqui está a parte 1 do meu review sobre o Delphi XE3 que foi anunciado recentemente e é parte da suíte RAD Studio XE3 e traz também as versões XE3 do C++Builder e Prism, além do HTML5 Builder o novo nome para o RadPHP e com algumas novidades.

Aproveitando a oportunidade de uma olhada nos artigos sobre desenvolvimento ágil de software que estou publicando semanalmente, já são 3 artigos e estão disponíveis neste link http://www.andreanolanusse.com/pt/tag/agile

Voltando ao tema principal, até aqui esta versão foi cercada de várias polêmicas, algumas delas você acompanhou aqui no blog e pelas centenas de blogs na internet, entre elas:

  • A mudança no contrato de licença foi abortada, ou seja, os novos usuários de Delphi Professional continuarão podendo utilizar a ferramenta para desenvolver suas aplicações Client/Server com os componentes dbGo (ADO) ou drivers dbExpress de terceiros.
  • O suporte ao desenvolvimento iOS (iPad, iPhone) que vinha no XE2 foi retirado do Delphi XE3, para desenvolver algo para iOS você terá que usar o XE2.
  • Na semana passada veio a tona a saída do Barry Kelly, o principal engenheiro do compilador do Delphi anunciou no seu blog sua saída da Embarcadero, tive a oportunidade de trabalhar com ele, sem dúvida um grande profissional e um dos mais brilhantes do mundo.

Voltando ao tema da falta de suporte a desenvolvimento mobile no XE3, a Embarcadero pretende lançar no primeiro trimestre de 2013 um addon para o XE3 que está sendo chamado de “Mobile Studio”, basicamente será um “novo produto” que irá rodar dentro do IDE do Delphi. A promessa é que o “Mobile Studio” traga o novo compilador ARM que já vem sem trabalhado a algum um tempo, não só para iOS mas para Android também, além dos drivers dbExpress, ClientDataSet e acesso a bancos de dados SQLite e InterBase ToGo, além claro de componentes específicos para mobile, aqueles que assistiram ano passado o webinar que apresentei sobre desenvolvimento mobile com XE2 sabem do que estou falando, se você não participou pode assistir aqui.

 

Detalhes comerciais sobre o “Mobile Studio” não foram e nem serão divulgados tão cedo, mas como será um novo produto eu acredito que você terá que adquirir separadamente. É esperar o primeiro trimestre de 2013 para conferir o que virá e como virá. A ideia deste artigo é falar sobre as novidades e deixar para outra oportunidade o tema relacionado a desenvolvimento de aplicações Mobile . Vamos em frente e abaixo um pequeno resumo das principais melhorias do Delphi XE3, visto que novos recursos nesta versão foram muito poucos.

FireMonKey 2

O Delphi XE2 recebeu 5 updates e todos eles praticamente focados em atualizações para o FireMonkey, assim sendo as melhorias nesta nova versão focaram em trazer recursos que não estavam presentes na primeira versão do FireMonkey, como Actions, Anchors, Touch e Gesture. Recursos estes existentes na VCL e que faziam muita falta para quem começava a usar FireMonkey, agora eles estão presentes no Delphi XE3. O Editor de Styles traz algumas novas funcionalidades, incluindo o suporte a edição de BitMap no próprio designer. O mais importante em relação a Style nesta versão é que você pode agora aplicar estilos a non-client area, em outras palavras aplicar estilo as bordas do formulário em Windows e Mac.

[quote style=”boxed”]Aproveite e me siga no Twitter  [/quote]

FM2 agora traz componentes e classes para trabalhar com aúdio e vídeo no Windows e Mac, basicamente FM2 abstrai as API’s do sistema operacional e os traz como componentes e classes para Delphi. Além disso existem dois novos componentes não visuais, o Location Sensor (Windows e Mac) e Motion Sensor (somente Windows).

Windows 8 e UI Metropolis

Esta novidade deu o que falar nos blogs e forums de Delphi pela internet, principal razão é que o suporte a UI Metropolis, anteriormente chamado pela Microsoft “Metro” permite que aplicações VCL e FireMonkey tenham a aparência “Metro”, basicamente com o botão direito do mouse no form você transformar o visual do seu Form em interface Metropolis.

A discussão toda na internet foi porque todos esperavam poder desenvolver este tipo de aplicação em Delphi e distribuir através da nova loja online da Microsoft que virá com Windows 8, infelizmente isso não será possível neste momento, pois o suporte a WinRT não está disponível para parceiros Microsoft ainda, somente o Visual Studio neste momento traz este suporte. É esperar que a Microsoft libere para seus parceiros e assim a Embarcadero possa implementar.

Mesmo assim existe alguns valores neste recurso, por exemplo poder simular UI Metropolis em aplicações que rodam em Windows XP, 2000, Vista e 7 de forma nativa, talvez isso seja muito específico ou não, vai depender de você avaliar a sua necessidade e verificar se o seu negócio pode tirar proveito ou não deste recurso.

Driver dbExpress para SQLite e InterBase ToGo

Agora temos um novo driver dbExpress para SQLite, como SQLite é o banco de dados padrão em iOS e Android, certamente este driver será utilizado para o Mobile Studio.

E foi adicionado um driver específico para InterBase ToGo que é a versão do InterBase de fácil deploy, basicamente uma DLL e você tem server e client juntos.

DataSnap

Apenas correções no DataSnap XE3, nenhum recurso novo foi adicionado até então

No próximo artigo vou comentar sobre as melhorias na VCL, IDE, RTL, linguagem e claro minha conclusão sobre esta nova versão.

Enquanto isso você pode ler a série de artigos sobre desenvolvimento ágil de software que estou publicando semanalmente aqui no blog, já são 3 artigos.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/delphi-xe3-e-suas-novidades-parte-1/feed/ 50
Polêmica mudança no contrato de licença do Delphi XE3 e C++Builder XE3 http://www.andreanolanusse.com/pt/polemica-mudanca-no-contrato-de-licenca-do-delphi-xe3-e-cbuilder-xe3/ http://www.andreanolanusse.com/pt/polemica-mudanca-no-contrato-de-licenca-do-delphi-xe3-e-cbuilder-xe3/#comments Wed, 29 Aug 2012 08:12:10 +0000 http://www.andreanolanusse.com/pt/?p=1574 Delphi XE3 será lançado muito em breve e alguns previews já foram publicados, infelizmente essa versão vem recheada de polêmicas, algumas notícias tem vazado o que é lastimável quando isso acontece, pois demonstra a falta de respeito e palavra daqueles que assinam o acordo de confidencialidade (NDA).

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

Delphi XE3 será lançado muito em breve e alguns previews já foram publicados, infelizmente essa versão vem recheada de polêmicas, algumas notícias tem vazado o que é lastimável quando isso acontece, pois demonstra a falta de respeito e palavra daqueles que assinam o acordo de confidencialidade (NDA).

A maior polêmica está no novo contrato de licença (EULA) que vazou esta semana, onde os novos usuários de Delphi somente poderão utilizar a edição Professional para acesso a banco de dados local, seja com os componentes do Delphi ou de terceiros, para desenvolver aplicações Client/Server os novos usuários deverão utilizar a edição Enterprise ou superior, ou comprar o Addon Client/Server para a edição Professional. Caso você tenha uma licença entre o Delphi 1 até o XE2 você não será afetado por essa restrição do XE3.

Abaixo o texto original:

. the use of data access technologies for client/server
connectivity will no longer be allowed in the Professional edition.
This includes both Embarcadero and 3rd party solutions. Professional
users may only, legally, access local databases with their applications.

Users who want to use client/server database access can purchase a
Client/Server Add-On Pack for their Professional edition or purchase
an Enterprise, Ultimate or Architect edition product.

This restriction if for new licenses only. Users upgrading to XE3
will be “grandfathered” in that they will be able to continue to use
3rd party data access technologies for client/server database access
in version XE3 ..

 

Ainda existem questões em abertas sobre a definição de novos usuários, por exemplo, se você tem uma licença do Delphi 2006 ou versão anterior e deseja atualizar para uma nova versão, hoje você terá que comprar uma nova licença, pois somente quem tem uma das 3 últimas versões do Delphi pode fazer o upgrade, ai fica a pergunta este usuário será ou não afetado?

Além de tudo isso, os Technology Partners, aqueles que desenvolvem componentes pra Delphi serão impactados, pois muitos usuários de Delphi Professional utilizam componentes de terceiros para acesso remote de bancos de dados como Oracle, SQL Server, DB2 e outros.

A polêmica é gigantesca, o forum da Embarcadero tem uma threads sobre o assunto com mais de 300 replies, outros blogs tratam do tema também.

O produto ainda não foi lançado e toda essa discussão tem um lado positivo, deixar a Embarcadero saber a opinião dos usuários de Delphi e fazer as correções necessárias se assim desejar antes do lançamento oficial.

O que você acha desta mudança?

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/polemica-mudanca-no-contrato-de-licenca-do-delphi-xe3-e-cbuilder-xe3/feed/ 26
CopyReaderToClientDataSet, Blob e a mensagem “Feature not implemented” http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/ http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/#comments Thu, 03 Nov 2011 23:57:19 +0000 http://www.andreanolanusse.com/pt/?p=1409 Se você já utilizou o método TDBXDataSetReader.CopyReaderToClientDataSet provavelmente já se deparou com a mensagem “Feature not implemented”, 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 […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

Se você já utilizou o método TDBXDataSetReader.CopyReaderToClientDataSet provavelmente já se deparou com a mensagem “Feature not implemented”, 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 foi implementando.

Para saber como utilizar o método CopyReaderToClientDataSet na prática leia o artigo “Copiando estrutura e dados de um DBXReader para ClientDataSet  – DataSnap

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/feed/ 5
Conectando ao PostgreSQL com dbExpress ODBC driver http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/ http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/#comments Wed, 02 Nov 2011 07:41:23 +0000 http://www.andreanolanusse.com/pt/?p=1403 O Delphi XE2 e C++Builder XE2 finalmente trouxeram o driver ODBC para dbExpress, com este driver você pode conectar a qualquer banco de dados que disponibilize um driver ODBC usando o dbExpress em aplicações FireMonkey e VCL. Até o Delphi XE3 o driver ODBC somente é compatível com a plataforma Windows. Para exemplificar melhor como […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

O Delphi XE2 e C++Builder XE2 finalmente trouxeram o driver ODBC para dbExpress, com este driver você pode conectar a qualquer banco de dados que disponibilize um driver ODBC usando o dbExpress em aplicações FireMonkey e VCL. Até o Delphi XE3 o driver ODBC somente é compatível com a plataforma Windows.

Para exemplificar melhor como funciona criei uma aplicação FireMonkey que mostra como podemos utilizar o dbExpress ODBC driver para conectar ao banco de dados PostgreSQL.

Antes de iniciar o desenvolvimento você precisa configurar o seu ambiente conforme os passos abaixo:

  • Instalar o driver ODBC do PostgreSQL na máquina que irá executar a aplicação, o driver pode ser baixado aqui.
    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.
  • Depois de instalar o driver, através do ODBC Data Source Administrator (odbcad32.exe) crie e configure um alias ODBC, pode ser do tipo User DSN ou System DSN:

Instruções para aqueles que usam Windows 64-bit

  • Para aplicações 32-bit use o c:\Windows\SysWOW64\odbcad32.exe
  • Para aplicações 64-bit use o c:\Windows\system32\odbcad32.exe

Instruções para aqueles que usam Windows 32-bit

  • Use o c:\Windows\system32\odbcad32.exe

A seguir crie um alias dbExpress ODBC no Data Explorer, lembrando que Database Name é o nome do Data Source criado no ODBC Administrator, neste exemplo o chamei de PostgreSQL35W. Configurações adicionais do driver para acessar a base de dados, como usuário e senha já foram configuradas no Data Source, você pode sobrescrever o usuário e senha na conexão dbExpress.

Suponho que você já sabe como utilizar os componentes de acesso a dados do dbExpress (SQLConnection, DataSetProvider e ClientDataSet), 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:

  object SQLConnection1: TSQLConnection
    ConnectionName = 'PostgreSQLOdbc'
    DriverName = 'ODBC'
    LoginPrompt = False
    Params.Strings = (
      'drivername=ODBC'
      'Database=PostgreSQL35W')
  end

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.

Este exemplo pode ser encontrado no diretório de exemplos do Delphi ou no repositório de demos do RAD Studio no Source Forge através deste  link.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/feed/ 23
Criando tabelas através dos recursos de metadata do dbExpress no Delphi http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/ http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/#comments Thu, 02 Dec 2010 18:00:00 +0000 http://www.andreanolanusse.com/pt/dbxexpress-metadata-no-delphi-2009/ 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 … procedure CreateSchema(conn: TSQLConnection); […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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 …

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;

Download do código fontes completo aqui.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/criando-tabelas-atraves-dos-recursos-de-metadata-do-dbexpress-no-delphi/feed/ 12
Apresentações do Delphi Conference 2010 disponível para download http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/ http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/#comments Thu, 18 Nov 2010 23:54:24 +0000 http://www.andreanolanusse.com/pt/?p=1117 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 […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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 acesso ao melhor conteúdo já apresentado sobre Delphi.

Artigo do EDN com todas as apresentações, clique aqui.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/feed/ 11
Como trabalhar com multiplas transações utilizando dbExpress Framework http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/ http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/#comments Mon, 12 Jul 2010 00:04:42 +0000 http://www.andreanolanusse.com/pt/?p=980 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 […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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 irá depender do parâmetro a ser passado durante a criação da transação, estes tipos podem ser:

  • TDBXIsolations.ReadCommitted
  • TDBXIsolations.RepeatableRead
  • TDBXIsolations.DirtyRead
  • TDBXIsolations.Serializable
  • TDBXIsolations.SnapShot

Você pode consultar a documentação do RAD Studio online e entender cada tipo de isolamente transacional aqui. Importante lembrar que o isolamento transacional irá variar de banco para banco, verifica quais o seu banco de dados suporta.

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.

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 “comitados” 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.

O código ficaria assim:

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 <> 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.

Ao executar o código acima, temos o seguinte resultado:

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/como-trabalhar-com-multiplas-transacoes-utilizando-dbexpress-framework/feed/ 18
Como utilizar parâmetros em dbExpress (DBX) Framework http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/ http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/#comments Tue, 25 May 2010 18:23:22 +0000 http://www.andreanolanusse.com/pt/?p=941 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 “:PARAMETRO” para definir parâmetros em uma query, em DBX Framework parâmetro é representado […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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 “:PARAMETRO” para definir parâmetros em uma query, em DBX Framework parâmetro é representado pelo sinal de “?” e não inclui nome.

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.

Para entender melhor, caso você utilize puramente o framework, seu código seria assim:

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 <> 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.

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.

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.

Assim sendo vou estender a classe TDBXParameterList, o qual irá permitir que eu nomeie os parâmetros e define seus respectivos valores por nome.

O código abaixo estende a classe utilizando a sintaxe class helper, veja bem isso não é herança. Esta extensão define os seguintes métodos:
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;
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;

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) <> 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.

Com está extensão esta parte do código:

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

Ficaria assim:

      // 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');

Caso a query tenha vários parâmetros, ficaria assim:

      // 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');

Ao final vimos como utilizar consultas parametrizadas com DBX Framework e como utilizar class helper para estender classes.

Download do código fonte aqui.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/como-utilizar-parametros-em-dbexpress-dbx-framework/feed/ 18
Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010 http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/ http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/#comments Sat, 24 Apr 2010 23:30:31 +0000 http://www.andreanolanusse.com/pt/?p=934 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 […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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 traz algumas classes que permite essa operação.

A classe TDBXDataSetReader possui dois método que permitem copiar para um ClientDataSet já existente ou retorna um novo ClientDataSet, veja o exemplo abaixo.

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;

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.

Meus exemplos sobre DataSnap 2010 foram atualizados e você pode efetuar o download aqui.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/feed/ 19
Disponibilizando métodos de uma classe como Server Methods sem usar TServerModule em DataSnap http://www.andreanolanusse.com/pt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/ http://www.andreanolanusse.com/pt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/#comments Wed, 20 Jan 2010 20:26:45 +0000 http://www.andreanolanusse.com/pt/?p=631 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 […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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 obter informações da classe a partir da RTTI
  • Estar registrada através do componente DSServerClass

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

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.

Quer saber mais sobre DataSnap, clique aqui.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/feed/ 9
Utilizando o dbExpress (DBX) Framework em Delphi 2010 http://www.andreanolanusse.com/pt/utilizando-o-dbexpress-dbx-framework-em-delphi-2010/ http://www.andreanolanusse.com/pt/utilizando-o-dbexpress-dbx-framework-em-delphi-2010/#comments Fri, 16 Oct 2009 21:17:52 +0000 http://www.andreanolanusse.com/pt/?p=419 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 […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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 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 <> 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.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/utilizando-o-dbexpress-dbx-framework-em-delphi-2010/feed/ 35
Vídeo: Novo driver dbExpress para Firebird no Delphi 2010 e C++Builder 2010 http://www.andreanolanusse.com/pt/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/ http://www.andreanolanusse.com/pt/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/#comments Mon, 17 Aug 2009 16:26:52 +0000 http://www.andreanolanusse.com/pt/?p=144 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 […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

dbExpress driver para Firebird

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 banco de dados e o novo DataSnap 2010.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/feed/ 7
Como criar tabelas utilizando o dbExpress Framework http://www.andreanolanusse.com/pt/como-criar-tabelas-utilizando-o-dbexpress-framework/ http://www.andreanolanusse.com/pt/como-criar-tabelas-utilizando-o-dbexpress-framework/#comments Thu, 06 Aug 2009 14:55:45 +0000 http://www.andreanolanusse.com/pt/?p=122 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 […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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 começar vamos ver como criar tabelas utilizando utilizando o framework.

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.

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;

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.

Agora basta criamos a tabela utilizando a classe TDBXMetaDataTable e as colunas através da classe TBX<XXX>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.

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);

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.

Para criar primary key, foreign key, indices, etc.. disponibilizei um exemplo completo no Embarcadero Code Central, para fazer o download clique aqui

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/como-criar-tabelas-utilizando-o-dbexpress-framework/feed/ 1
Exemplos DataSnap, dbExpress e outros recursos do Delphi 2009 http://www.andreanolanusse.com/pt/exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009/ http://www.andreanolanusse.com/pt/exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009/#respond Sun, 03 May 2009 18:25:11 +0000 http://www.andreanolanusse.com/pt/?p=40 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 – métodos disponibilizados no servidor para acesso através das aplicações cliente Client […]

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>

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:

  1. DataSnap
    • Servidor DataSnap
    • Autenticação através do servidor de aplicação consultando banco de dados
    • Server methodos – métodos disponibilizados no servidor para acesso através das aplicações cliente
    • Client DataSnap
    • Execução de server methods a partir do cliente
    • Utilização de clientdataset no lado cliente, assim como applyupdates e master detail
  2. dbExpress
    • Criando tabelas, primary key e foreign key através de dbExpress framework
  3. Utilização de resources
    • Carregando recursos (images PNG) dinamicamente na aplicação

Pretendo atualizar esta aplicação frequentemente, o objetivo é exemplificar a utilização do DataSnap e dbExpress.

Se você tem alguma sugestão do que podemos adicionar nesta aplicação, por favor comente aqui no meu blog.

Andreano Lanusse | Tecnologia e Desenvolvimento de Software Siga-me no Twitter: @andreanolanusse

]]>
http://www.andreanolanusse.com/pt/exemplos-datasnap-dbexpress-e-outros-recursos-do-delphi-2009/feed/ 0