sábado, 17 de março de 2007

Usando VCL for PHP para criar aplicações de banco de dados e usando dicionários de dados em Delphi for PHP

English Version click here
Versión en Español clic acá

A VCL para PHP está integrada a tecnologia AJAX, com este recurso podemos atualizações as informações em um DBGrid sem ter que enviar(submit) a página ao servidor.

Outro fantástico recurso na VCL para PHP é o suporte a dicionários de dados, você pode definir os valores de algumas propriedades como DisplayLabel e DisplayWidth no dicionário de dados e os componentes da VCL para PHP automaticamente atualizam os valores de cada propiedade, quando a aplicação é executada.

Assista este Vídeo e veja como é rápido criar aplicações de banco de dados em Delphi para PHP

DBX 4 Framework (Delphi 2007 para Win32)

Definitivamente DBX 4 facilita a vida do desenvolvedor, é muito fácil utilizar o framework.

Abaixo um exemplo que mostra o quão fácil é utilizar o Framework do DBX, este exemplo conecta ao banco de dados, lê os parâmetros de conexão, inicia uma transação, executa uma consulta e comita a transação.

program DBX4Example;

{$APPTYPE CONSOLE}

uses
SysUtils,
DBXDynalink,
Dialogs,
DBXCommon;

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

begin
aDBXConn := TDBXConnectionFactory.GetConnectionFactory.GetConnection('EMPLOYEE','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.

O resultado é:

================= Connection Properties ============
DelegateConnection=
DriverName=Interbase
DriverUnit=DBXDynalink
DriverPackageLoader=TDBXDynalinkDriverLoader
DriverPackage=DBXCommonDriver110.bpl
DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader
DriverAssembly=Borland.Data.DbxCommonDriver,Version=11.0.5000.0,Culture=neutral,PublicKeyToken=a91a7c5705831a4f
Database=localhost:C:CodeGearInterBaseexamplesdatabaseemployee.ib
RoleName=RoleName
User_Name=sysdba
Password=masterkey
ServerCharSet=
SQLDialect=3
BlobSize=-1
CommitRetain=False
WaitOnLocks=True
ErrorResourceFile=
LocaleCode=0000
Interbase TransIsolation=ReadCommited
Trim Char=False
ConnectionName=Employee

====================================================

Results from Query: SELECT * FROM Country
Number of Columns: 2
USA
England
Canada
Switzerland
Japan
Italy
France
Germany
Australia
Hong Kong
Netherlands
Belgium
Austria
Fiji
teste
ss
aaaa
aaa1
brazil
====================================================


Outros artigos do mesmo autor:
DBX 4 Framework - Class Diagram - Delphi 2007 for Win32

Traduções deste artigo:
Versión en Español clic acá
English Version click here


Usando StringList para retornar várias Strings

Esses dias precisei criar uma função que me retornasse uma array de string. Porém não consegui achar em nenhum lugar um meio de fazer isso em delphi. Apenas vi que muitos outros programadores também estavam com o mesmo problema. Por isso resolvi postar algo que talvez ajude a contornar essa situação. O artigo é algo bem simples.

Código da função


// entrada de dados

//para função “S” recebe string, “separador” recebe caracter de separação da string.

function Tform1.arraystring(S : String; separador : char): TStringList;

var

conta : integer; // variáveis auxiliares

resultado : TStringList; // variáveis auxiliares

Saux : string; // variáveis auxiliares

begin

// inicializa variavel

resultado := TStringList.Create;

//pega posição do separador

conta := pos(separador,S);

// verifica se existe o separador caso contrario trata apenas

// como uma única linha

if conta <> 0 then

begin

// enquanto S não for nulo executa

while trim(S) <> '' do

begin

// Variável Saux recebe primeiro valor

Saux := copy(S,1,conta-1);

//deleta primeiro valor

delete(S,1,conta);

//se não ouver mais separador Saux equivale ao resto da

//linha

if conta = 0 then

begin

Saux := S;

S := '';

end;

// adiciona linhas na string lista

resultado.Add(Saux);

//pega posição do separador

conta := pos(separador,S);

end;

end

else

begin

Saux := S;

resultado.Add(Saux);

end;

// retorna resultado como uma lista indexada

Result := resultado;

end;


Para ver a utilização do código acesse este site.


quarta-feira, 14 de março de 2007

Delphi para PHP Quick Start

Delphi para PHP é o mais novo produto da CodeGear para desenvolver aplicações PHP, módulos, bibliotecas e componentes "como em Delphi." Delphi para PHP é um ambiente de desenvolvimento RAD (Desenvolvimento Rápido de Aplicações) que contém um designer, editor, debugger, wizard para distribuição da aplicação e um framework de componentes chamado "VCL para PHP."

Os usuários de Delphi terão grande familiaridade. Esperamos que os desenvolvedores PHP tenham mais produtividade, gostem da ferramenta e tenham um uso amigável.

Instalando Delphi para PHP
Enquanto as aplicações desenvolvidades em Delphi para PHP™ podem ser executadas em qualquer dispositivo que suporte PHP, o ambiente integrado de desenvolvimento (IDE) é suportado apenas em plataforma Microsoft Windows nesta versão. Depois de ter o arquivo de instalação do Delphi para PHP, você pode executar a ferramenta de instalação.

Para ler o artigo na íntegra acesse www.activedelphi.com.br.



Armazenando imagens, sons e vídeos em bancos de dados

Um dos recursos mais interessantes nos bancos de dados atuais é a possibilidade de armazenar recursos multimídia juntamente com outras informações. Dessa forma, é possível criar registros com informações mais ricas sobre um determinado assunto. Por exemplo, pode-se armazenar informações sobre um funcionário juntamente com a sua própria foto. No Paradox, por exemplo, existe um tipo de campo destinado especialmente para esse fim.

No entanto, as possibilidades vão muito além do que o simples armazenamento de imagens. É possível armazenar sons, filmes ou qualquer tipo de arquivo, usando o "obscuro" campo BLOB (Binary Large Object), que permite que qualquer arquivo seja "embutido" no banco de dados. Na verdade, o conteúdo do arquivo não é armazenado no registro em si, mas num arquivo separado que é manipulado internamente pelo banco de dados.

Trabalhar com esse tipo de campo no Delphi é muito simples, mas não tão óbvio à primeira vista. A manipulação de campos BLOB, diferentemente dos campos comuns, não deve ser feita diretamente, mas sim por meio do objeto TBlobField, descendente do TField, que disponibiliza recursos especiais para esse fim. Para isso, você deve sempre se referir ao campo BLOB no código como sendo um TBlobField, utilizando typecasting.

Vamos supor que você tenha um arquivo de som MyWave.wav que será armazenado no campo "SOM" da tabela "MyTable". Para carregar o conteúdo do arquivo no campo SOM, basta fazer assim:

TBlobField(MyTable.FieldByName('SOM')).LoadFromFile('MeuWave.wav');

Neste exemplo, você usou o recurso de typecasting para manipular o campo como sendo um objeto TBlobField, carregando o arquivo através do método LoadFromFile que existe nesse objeto. Fácil, não é?
Se você quiser salvar o conteúdo do campo "SOM" no arquivo "MyWaveCopy.wav", basta fazer assim:

TBlobField(MyTable.FieldByName('SOM')).SaveToFile('MyWaveCopy.60wav');

Para remover o conteúdo do campo "SOM" (limpá-lo), você também deve usar um método apropriado:

TBlobField(MyTable.FieldByName('SOM')).Clear;

Para saber se o campo SOM possui algum conteúdo, use a propriedade IsNull:

with MyTable do
if not TBlobField(FieldByName('SOM')).IsNull then
TBlobField(FieldByName('SOM')).SaveToFile('MyWaveCopy.wav');

A maneira mais simples de utilizar o conteúdo de um campo BLOB já armazenado é primeiro gravá-lo novamente em um arquivo em disco, usando o método SaveToFile, e depois manipulá-lo normalmente. No caso de um conteúdo em formato wave, por exemplo, você deve primeiro gravá-lo num arquivo .wav, e então reproduzí-lo através do TMediaPlayer ou pela função SndPlaySound.

Usando os mesmos métodos, você também pode armazenar e manipular filmes AVI, apresentações, documentos, enfim, o que a sua imaginação mandar. Mas tenha em mente que o armazenamento de arquivos de som ou outros tipos vai aumentar consideravelmente o tamanho do seu banco de dados, por isso esse recurso deve ser utilizado com cuidado. Uma boa medida para reduzir esse problema é compactar o arquivo antes de armazená-lo. Para utilizá-lo depois, basta gerar o arquivo novamente em disco e descompactá-lo. Para saber quanto um campo BLOB está ocupando num registro do seu arquivo, em bytes, use a propriedade BlobSize:

TBlobField(MyTable.FieldByName('SOM')).BlobSize;

Obs: Para armazenar imagens ou texto em formato RichText (RTF), use os tipos GRAPHIC e FORMATED MEMO do Paradox, que são destinados a esses tipos de dados. O Delphi também possui objetos para a manipulação desses campos: TGraphicField e TMemoField, ambos descendentes do TBlobField.

Dúvidas/Sugestões favor entrar em contato.
Comentem aí pessoal.

E-mail: markuvinicius@uol.com.br
msn : marku@gabtransportes.com.br

Até a próxima pessoal.
Marku Vinícius
Clique aqui para ler o Artigo original

Convertendo Texto em Imagem

Esta é uma dica bastante interessante para geração de imagens para validação, por exemplo. Através de uma procedure, você poderá montar uma imagem com o texto que quizer, com opção de grau de inclinação, e ainda poderá salvá-la.

Veja abaixo o código da procedure:

procedure ConvTextOut(CV: TCanvas; const sText: String; x, y, angle:integer);
var
LogFont: TLogFont;
SaveFont: TFont;
begin
SaveFont := TFont.Create;
SaveFont.Assign(CV.Font);
GetObject(SaveFont.Handle, sizeof(TLogFont), @LogFont);
with LogFont do
begin
lfEscapement := angle *10;
lfPitchAndFamily := FIXED_PITCH or FF_DONTCARE;
end;
CV.Font.Handle := CreateFontIndirect(LogFont);
SetBkMode(CV.Handle, TRANSPARENT);
CV.TextOut(x, y, sText);
CV.Font.Assign(SaveFont);
SaveFont.Free;
end;

Para usá-la, você precisa passar o Canvas de destino, ou seja, onde seu texto será desenhado. Qualquer componente que possua a propriedade Canvas poderá ser utilizado para tal, como o próprio form, e até um TImage, que nos permitirá salvar a imagem. Veja:

No Form:

  ConvTextOut(Canvas, Edit1.Text, 10, 70, 0);

No TImage:

  ConvTextOut(Image1.Canvas, Edit1.Text, 20, 10, 315);
Image1.Picture.SaveToFile('C:imagem.bmp');

Para testar, adicionei um Edit, bois Buttons e um TImage, programando cada um dos códigos acima do seu respectivo botão. O resultado foi como a figura abaixo:


Figura 1 - Resultado da Conversão de Texto em Imagem


Neobux