32
Dezembro 2009

The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Embed Size (px)

Citation preview

Page 1: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009

Page 2: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009

Page 3: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 03

Delphi

InfoNews

.NETBanco de Dados

Journaling System - A solução definitiva para perda de dados - Parte II 14Autor: Felipe Santos

Desafio The Club

- Cruzada

.NET

Acessando um serviço WCF com Silverlight

24Autor: Djonatas Tenfen

Dicas

- Dicas Delphi

29

índiceTrabalhando com campos blob do Firebird no Delphi 2010

Editorial Delphi

06Inicio este editorial parabenizando toda equipe Embarcadero pelo sucesso do Delphi Conference... 04

Delphi Conference 2010

05Personalizando DBGrid

10Visual Studio 2008 com DDEX e Firebird

18

30LegendaInicianteIntermediárioAvançado

Autor: Antonio Spitaleri

Autor: Mateus ChiesAutor: Luis Alexandre de Oliveira

Autor: Vitor Manuel Rodrigues

Page 4: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200904

Bem-vindo

Delphi é marca registrada da Borland International, as demais marcas citadas são registradas

pelos seus respectivos proprietários.

Marcos César Silva - Editor [email protected]

Inicio este editorial parabenizando toda equipe Embarcadero pelo su-cesso do Delphi Conference, evento realizado na cidade de São Paulo no dia 24 de Novembro, que pode contar com grandes nomes da comunidade Delphi do Brasil, onde centenas de programadores Delphi puderam ao longo do dia assistir inúmeras palestras e mini-cursos.

Neste mês em nossa seção Delphi estamos com mais um artigo para Delphi 2010, onde o consultor Antonio Spitaleri Neto com seu artigo “Tra-balhando com campos blob do Firebird no Delphi 2010”, aborda o uso do novo Driver do DBExpress para Firebird, onde as incompatibilidades existentes no driver para Interbase com o banco Firebird foram corrigidas, sendo uma delas a encontrada no uso de campo blob do Firebird. Também na seção Delphi Matheus André Chies mostra como personalizar o DBgrid, incluindo imagens em seus registros.

O leitor poderá dar continuidade nos estudos sobre Interbase na segunda parte do artigo de Felipe Santos “Journaling System - A solução definitiva contra perda de dados”.

Uma dúvida constante de nossos sócios é como acessar o banco Fire-bird em aplicações Asp.net usando recursos semelhantes ao do SQLServer no Visual Studio, como o de arrastar e soltar os componentes de dados, e resposta é clara! Isto não é possível, pois o Data Provider disponível para Firebird não tem este tipo recurso, até surgir o DDEX (Data Designer Extensibility), assim neste mês Luis Alexandre de Oliveira no seu artigo “Visual Studio 2008 com DDEX e Firebird” aborda o uso deste componente para a alegria de muitos leitores.

Confira também o artigo de capa “Acessando um serviço WCF com Silverlight” de Djonatas Tenfen.

Agradeço a todos nossos associados e leitores que estiveram junto conosco ao longo deste ano, onde apesar das dificuldades e crises econô-micas acreditamos que foi muito produtivo, e nos abre um novo horizonte de esperança e novos planos para 2010.

Um grande abraço a todos, boas festas e sucesso neste novo ano que se inicia.

Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP 18.707-150

Informações: (14) 3732-1529 Suporte: (14) 3733-1588

Internethttp://www.theclub.com.br

Cadastro: [email protected]: [email protected] Informações: [email protected] Cadastro: theclub_cadastro

Skype Suporte: theclub_linha1 theclub_linha2 theclub_linha3

www.twitter.com/theclubbr

Copyright The Club Megazine 2009

Diretor TécnicoMarcos César Silva

Diagramação e ArteVitor M. Rodrigues

RevisãoTassiane Fileto

ColunistasAntonio Spitaleri Neto

Djonatas TenfenFelipe Santos

Luis Alexandre de OliveiraMateus Chies

Vitor M. Rodrigues

Impressão e acabamento:GRIL - Gráfica e Editora

Taquarituba-SP - Tel. (14) 3762-1345

ReproduçãoA utilização, reprodução, apropriação, armazenamento em banco de dados, sob qualquer forma ou meio, de textos, fotos e outras criações intelectuais em cada publicação da revista “The Club Megazine” são terminantemente proibidos sem autorização escrita dos titulares dos direitos autorais.

Page 5: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 05

InfoNews

A Embarcadero promoveu no dia 24 de novembro o Delphi Conference 2010 que aconteceu em São Paulo no Centro FECOMERCIO de Eventos.

Compareceram ao evento mais de 500 programadores.

Foi um dia muito produtivo onde os programadores presentes puderam se reciclar e ver as novidades do mundo Delphi.

Entre os palestrantes podemos destacar:

-Bruno Lichot (com o minicurso: Modelando bases de dados com ER/Studio e a palestra: Gerindo e automatizando o ciclo de vida de bases de dados relacionais)

-Andreano Lanusse (com as palestras: Touch e Gesture e Twitter API no Delphi)

-Luciano Pimenta (com o minicurso: E-commerce com Delphi Prism e ASP.NET)

-Felipe Santos (com a palestra: 5 razões para você migrar para o InterBase SMP 2009)

-Manoel Edésio (com a palestra: Simplificando a im-plementação de Nf-e com Delphi 2010)

- Adilson Jr. (com a palestra: Boas práticas OOP no desenvolvimento Web com Delphi Prism)

- Carlos Henrique Agnes (com a palestra: Open Tolls API - Personalize seu Delphi e deixe-o ainda mais prático)

- Alan Glei (com o minicurso: Técnicas avançadas com Rave Reports)

- Jackson Gomes (com o minicurso: Desmistificando o IntraWeb: desenvolvendo aplicações corporativas com VCL for the Web)

Conversamos com vários participantes e a grande maioria citou que esse foi um dos melhor eventos sobre Delphi que já participa-ram.

Foi um evento muito bem organizado, com excelentes pales-trantes, o conteúdo das palestras e minicursos foram de ótima qualidade.

Quem não compareceu perdeu uma grande oportunidade.

Em nome de toda equipe The Club agradeço a sempre cordial recepção que tivemos por parte da organização do Delphi Confe-rence.

Aproveito para desejar à todos um Feliz Natal e um ótimo 2010.

Aquele abraço e beijo nas crianças!

Page 6: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200906

Delphi

Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter perdido grande parte da evolu-ção do Firebird ao longo dos anos e devido a isso alguns erros de incompatibilidades do driver com o Firebird terem surgido.

Entre esses problemas, um que mais gera preocupação entre os desenvolvedores que utilizam Firebird com DBExpress sem dúvida é o armazenamento de dados em campos do tipo blob. O driver DBExpress para Interbase acaba por não suportar esse tipo de campo nos bancos criados com o Firebird e isso leva os desenvolvedores a recorrer a outros drivers, em geral pagos, o que altera os custos do desenvolvimento e acaba em prejuízo algumas vezes.

No Delphi 2010, foi incluído o driver DBExpress nativo para Firebird, e as incom-patibilidades com campos blob foram enfim superadas. Nesse artigo estarei mostrando que podemos trabalhar com certa facilida-de com campos blob utilizando Firebird e DBExpress.

Trabalhando com campos blob do

Criando o banco de dados

Crie um banco de dados no Firebird com a seguinte estrutura:

CREATE DATABASE ‘C:\FOTOS.fdb’USER ‘SYSDBA’ PASSWORD ‘masterkey’PAGE_SIZE 8192DEFAULT CHARACTER SET NONE;/* Tables definitions */CREATE TABLE FOTOS ( ID_FOTO INTEGER, FOTO BLOB sub_type 0 segment size 80, DESCRICAO BLOB sub_type 1 segment size 1 COLLATE NONE);

Criando a aplicação exemplo

Com o banco de dados devidamente criado,

criaremos agora uma aplicação em Delphi 2010 utilizando o novo driver DBExpress para Firebird.

Inicie uma nova aplicação no Delphi 2010.

Selecione View-Data Explorer e será exibida uma lista com os drivers disponíveis entre eles o driver FIREBIRD. Clique com o botão direito sobre ele e selecione Add New Connection. Dê o nome de FOTOS para essa nova conexão e clique OK.

Com a nova conexão criada, selecione-a no Data Explorer e com botão direito selecione Modify Connection. Na janela que se abre, coloque o ca-minho para a base de dados anteriormente criada e confirme. Pronto! Nossa conexão com a base de dados está pronta para ser utilizada.

Insira os seguintes componentes na aplica-ção:

Tmemo: Name: memdescricaoTimage: Name:imgfoto

Firebird no Delphi 2010

Page 7: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 07

Tbutton: Name:btnfotoTbutton: Name:btngravarTopendialogTedit: Name:edtfoto

A aplicação deverá ficar com o seguinte layout:

Veja a Figura 1. Como não é o foco do artigo, não estarei mos-

trando o passo a passo necessário para a conexão com o banco de dados através dos componentes DBExpress. Lembrando que esta conexão e poste-rior ligação com a tabela de fotos devem ser feitas da forma padrão. O componente sqlconnection deverá ter sua propriedade connectioname setada para a conexão FOTOS que criamos a pouco.

Iremos agora realizar a codificação necessária para inserirmos as fotos no banco de dados. Iremos utilizar a classe TMemoryStream do Delphi 2010 para armazenarmos primariamente as imagens e a descrição das mesmas e depois carregá-las para o banco de dados.

O primeiro passo é buscarmos a foto e arma-zenarmos seu caminho no edtfoto. Para isso, no evento onclick do btnfoto faça:

Veja o Código 1.

Em seguida iremos salvar a foto e sua des-crição no banco de dados. No evento onclick do btngravar faça:

Veja o Códgo 2.

Veja que primeiramente verificamos se a extensão do arquivo que carregamos é .JPG ou .BMP, caso não seja, não executamos os passos seguintes para evitarmos erros de imcompatibili-dade de formato.

Depois criamos dois objetos do tipo TMe-moryStream: Um para armazenar a imagem e outro para o texto.

Figura 1.

procedure Tfrmfotos.btnfotoClick(Sender: TObject);begin if OpenDialog1.Execute then begin edtfoto.Text:=OpenDialog1.FileName; imgfoto.Picture.LoadFromFile(edtfoto.Text); end;end;

procedure Tfrmfotos.btngravarClick(Sender: TObject);var imagem:Tmemorystream; texto:TMemoryStream; extensao:string;begin try extensao:=UpperCase(ExtractFileExt(edtfoto.Text)); if(extensao<>’.JPG’)and(extensao<>’.BMP’)and(extensao<>’.JPEG’)then begin raise Exception.Create(‘Formato não suportado!’); Abort; end; imagem := Tmemorystream.Create; texto := Tmemorystream.Create; imgfoto.Picture.Graphic.SaveToStream(imagem); Memo1.Lines.SaveToStream(texto); with ClientDataSet1 do begin Open; Append; TBlobField(FieldByName(‘FOTO’)).LoadFromStream(imagem); TBlobField(FieldByName(‘DESCRICAO’)).LoadFromStream(texto); end; finally imagem.Free; texto.Free; end;end;

Código 1.

Código 2.

Page 8: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200908

Fazemos um typecasting dos campos FOTO e DESCRICAO contidos no Clientdataset responsável pela ligação com a tabela FOTOS. Esse typecasting nos permite utilizar o método loadfromstream pas-sando como parâmetro os objetos TMemoryStream criados anteriromente. È o método loadfromstream que manda as informações binárias para os campos blob correspondentes no banco de dados.

Teste o aplicativo e salve as alterações.

A seguir criaremos o formulário onde iremos visualizar as imagens. Adicione um novo formulário à aplicação e monte-o conforme a figura a seguir:

Veja a Figura 2.

Adicione um botão ao formulário de gravação de fotos e mude o seu caption para “Visualização” e seu name para btnvisualizar. Em seu evento on-click chamaremos o formulário de visualização de imagens com o seguinte código:

Veja o Código 3.

Para a visualização das imagens, estaremos utilizando a classe TStream do Delphi 2010 ao invés de TMemoryStream, devido ao fato de termos de fazer a carga a partir do banco utilizando o método createblobstream do clientdataset que retorna um TStream.

Criaremos uma função que fará a leitura das imagens e descrições contidas no banco de dados. Esta função será utilizada nos quatro botões que temos no formulário de visualização.

Veja o código 4 da função:

A seguir implementaremos os quatro eventos relativos aos botões de navegação do formulário de visualização como segue:

Figura 2.

procedure Tfrmfotos.btnvisulaizarClick(Sender: TObject);begin try frmvisualizador:=Tfrmvisualizador.Create(Self); frmvisualizador.ShowModal; finally FreeAndNil(frmvisualizador); end;end;

procedure Tfrmvisualizador.leimagem;var imagem:TStream; texto:TStream; Jpg:TJPEGImage;begin try imagem:=TMemoryStream.Create; texto:=TMemoryStream.Create; Jpg:=TJPEGImage.Create; imagem:=frmfotos.ClientDataSet1.CreateBlobStream(frmfotos.ClientDataSet1FOTO,bmRead); texto:=frmfotos.ClientDataSet1.CreateBlobStream(frmfotos.ClientDataSet1DESCRICAO,bmRead); Jpg.LoadFromStream(imagem); imgvisualizacao.Picture.Assign(Jpg); memvisualizacao.Lines.LoadFromStream(texto); finally imagem.Free; texto.Free; end;end;

Código 3.

Código 4.

Page 9: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 09

Botão “Primeira”:

procedure Tfrmvisualizador.btnprimeiraClick(Sender: TObject);begin frmfotos.ClientDataSet1.Open; frmfotos.ClientDataSet1.First; leimagem;end;

Botão “Anterior”:

procedure Tfrmvisualizador.btnanteriorClick(Sender: TObject);begin frmfotos.ClientDataSet1.Open; if not frmfotos.ClientDataSet1.bof then frmfotos.ClientDataSet1.Prior; leimagem;end;

Botão “Próxima”:

procedure Tfrmvisualizador.btnproximaClick(Sender: TObject);begin frmfotos.ClientDataSet1.Open; if not frmfotos.ClientDataSet1.eof then frmfotos.ClientDataSet1.Next; leimagem;end;

Botão “Última” :

procedure Tfrmvisualizador.btnultimaClick(Sender: TObject);begin frmfotos.ClientDataSet1.Open; frmfotos.ClientDataSet1.Last; leimagem;end;

Teste o aplicativo e salve as alterações.

Conclusão

Vimos através desse artigo que com o driver para Firebird incluso no Delphi 2010, o trabalho de gravação e leitura em campos blob se tornou muito mais tranqüilo, acabando com um proble-ma que os desenvolvedores Delphi enfrentavam a muitos anos.

Espero que tenham gostado e até a próxima!

Consultor Técnico The Club.

Sobre o autor

Antonio Spitaleri Neto

[email protected]

Page 10: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200910

Considerado um dos componentes mais populares presentes na VCL do Delphi o DB-Grid é um componente que é utilizado nas mais diversas situações em aplicações Delphi Win32, sua riqueza de propriedades permite ao programador que o utilize das mais va-riadas formas e maneiras, possibilitando ao usuário aplicações com layouts de boa apa-rência e fácil integração com a visualização, inclusão ou manutenção dos registros de uma base de dados.

Criando a aplicação

Utilizarei o Delphi 2007, crie uma nova aplicação através do menu File|New>VCl Forms Application. Altere a propriedade Caption para “Personalizando DBGrid”. Salve a Unit principal do projeto como “uPrincipal.pas” e o projeto salve como “PerDbGrid.dpr”.

Para melhor demonstrar algumas funcio-nalidade do DBGrid, criaremos através de um ClientDataSet nossa própria estrutura de dados, salvando as informações do mesmo em um arquivo XML. Adicione ao formulário principal um novo componente ClientDataSet (“CDSDados”) da paleta de componentes DataAcces e com um duplo clique sobre o mesmo abra o Fields Editor onde criaremos

os campos da nossa base. Utilizando um clique de botão direito do mouse no espaço do Fields Editor selecione a opção New Field criando a estrutura de campos conforme a tabela 1.

Veja a tabela 1.

Após criada esta estrutura no Fields Editor, utilize o botão direito do mouse sobre o CDSDados e escolha a opção Create DataSet (Figura 1) que fará a criação de uma base de dados em memória. Para salvar os registros do ClientDataSet em uma base

Campo Tipo Tamanhocodigo AutoInc

data Date

descricao string 100

valor Currency

tipo string 1

XML, utilize novamente o botão direito do mouse sobre o componente selecionando a opção Save to MyBase Xml table (Figura 2), onde você devera mapear o mesmo diretório onde está salvando os fontes do sistema e informar ao nome do arquivo XML que está sendo solicitado o valor “dados.xml”. Ainda nas propriedades do CDSDados, loca-lize agora através de sua propriedade FileName o arquivo dados.xml que acabamos de criar, o qual será localizado em tempo de execução e fará com que os registros salvos sejam carregados.

Page 11: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 11

Veja a Figura 1.

Veja a Figura 2.

Para visualização e cadastro dos registros precisamos ainda adicionar ao formulário um com-ponente DataSource (“ds”) da paleta DataAcces e também um componente DBGrid da paleta Data-Controls. No ds relacione sua propriedade DataSet ao CDSDados e no DBGrid atribua a propriedade DataSource relacionada ao componente ds, onde já deverão ser listados no Grid as colunas que criamos no CDSDados, ainda adicione uma DBNavigator da paleta Data Controls.

Ordenando registros no DBGrid

Muito interessante também o recurso da or-denação de registros por meio do Click sobre uma coluna do Grid pela qual o usuário deseja que os registros sejam ordenados. Para implementar a funcionalidade, adicione ao evento OnTitleClick do DBGrid a seguinte linha de códigos:

CDSDados.IndexFieldNames := Column.FieldName;

O código será responsável por alterar o campo de criação do índice do ClientDataSet, em Runtime a cada clique do mouse sobre o titulo de alguma coluna com valores exatos (Campos do tipo Blob ou Memo não poderão ser ordenados) fará com que os registros da mesma sejam organizados de forma ordenada.

Destacando a coluna selecionada

Ao utilizarmos o recurso de ordenação de registros em um DBGrid, geralmente usa-se um destaque para diferenciar a coluna que esta sele-cionada, alterando-se a cor do titulo ou a fonte.

Figura 1: Criando a estrutura do Data Set

Figura 2: Salvando a base de dados em arquivo XML.

Page 12: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200912

O recurso também será implementado no evento OnTitleClick, em conjunto com o código de orde-nação dos registros. Para usar o recurso, digite no evento o código da Listagem 1.

Veja a Listagem 1.

Zebrando o DBGrid

Um outro recurso também bastante interes-sante e útil para melhor visualização dos registros de um DBGrid é sua capacidade de estar organizan-do os registros de forma “zebrada”, que em casos de números muito grandes e de linhas extensas facilita muito a localização dos registros. Para implantar o recurso no Grid da nossa aplicação, selecione no evento DrawColumnCell e adicione o código da Listagem 2.

Veja a Listagem 2.

Mostrando Imagens no DBGrid

Muito útil também na analise das informações de um DBGrid, um recurso que este componente também possibilita é o uso de imagens em agrega-das à colunas e valores do mesmo. Para configurar o recurso de imagens, adicione ao formulário um componente ImageList da paleta de componentes Win32 e com um duplo clique sobre o mesmo, utilize o botão “Add” para adicionar dois ícones que utilizaremos na representação de aprovado ou reprovado quanto a nota média obtida pelo aluno. Os ícones poderão normalmente ser encontrados nos diretório “C:\Arquivos de Programas\Arquivos Comuns\Borland Shared\Images\Buttons”.

Após adicionados os ícones, vá até o evento DrawColumnCell do gdRegistros, onde criamos a pouco as linhas de código responsáveis por zebra o DBGrid. Os códigos de adição de imagens serão conciliados aos códigos já adicionados, onde o evento deverá ter o seguinte código exibido na Listagem 3.

Veja a Listagem 3.

Ao executar agora nossa aplicação, observe que o Grid ficou organizado de uma forma bem diferente, onde os lançamentos podem ser diferen-ciados pelo ícones, onde os lançamentos do tipo crédito tem um ícone de mais (+) e os lançamentos de débito tem um ícone de menos (-). Conforme a figura 3.

Veja a Figura 3.

Vari:Integer;begin Try CDSdados.IndexFieldNames := Column.FieldName;//Ordenação dos registros do Grid for i:=0 to Column.Grid.FieldCount - 1 do begin dgDados.Columns.Items[i].Title.Font.Color := ClBlack;//Cor da Fonte dgDados.COLUMNS.ITEMS[I].TITLE.FONT.STYLE := [];//Estilo da Fonte dgDados.Columns.Items[i].Title.Color := clBtnFace;//Cor do Fundo do Titulo Normal Column.Title.Color := clSilver;//Cor do Fundo do Titulo Selecionado COLUMN.TITLE.FONT.STYLE := [FSBOLD];//Estilo NEGRITO da coluna selecionada Column.Title.Font.Color := ClBlue;//Cor da fonte Selecionada Column.Font.color := clTeal;//Cor dos registros na coluna selecionada dgDados.Columns.Items[i].Font.color := ClBlack;//Cor dos registros nas colunas normais end; Except ShowMessage(‘Ordenação não pode ser aplicada!’);End;

Listagem 1: Ordenação e destaque de coluna do Grid

if not Odd (cds CDSdados.RecNo) thenif not (gdSelected in State) then begin dgDados.Canvas.Brush.Color := clSilver; dgDados.Canvas.FillRect(Rect); dgDados.DefaultDrawDataCell(Rect,Column.Field,State); end;

Listagem 2. Zebrando as linhas dos DBGrid

var bitmap : TBitmap; fixRect : TRect; bmpWidth : integer; imgIndex : integer;begin//Deixa o DBGrid Zebrado if not Odd (CDSdados.RecNo) then if not (gdSelected in State) then begin dgDados.Canvas.Brush.Color := clSilver; dgDados.Canvas.FillRect(Rect); dgDados.DefaultDrawDataCell(Rect,Column.Field,State);

Listagem 3: Utilizando imagens no DBGrid

Page 13: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 13

Opções do DBGrid

Ao selecionar o DBGrid observe uma proprie-dade chamada Options, na qual poderemos ainda fazer uma série de configurações na aparência do DBGrid. Irei apresentar algumas das opções mais utilizadas:

- dgEditing: deixe esta opção habilitada com True. É responsável por permitir a edição e cadas-tro de registros diretamente no Grid, recurso que no caso desta aplicação está sendo utilizado por não termos uma tela especifica para cadastros e edições.

- dbTitles: recurso onde você poderá optar entre exibir ou ocultar a linha de apresentação dos títulos do DBGrid, deixe-a como True.

- dgIndicator: permite que você escolha em exibir ou não a seta de indicação na linha do Grid que está selecionada. Altere o recurso para False.

- dgColLines: nesta opção você poderá con-figurar se deseja exibir ou ocultar as linhas das colunas do DBGrid. Deixe habilitada como True esta função.

- dgRowLines: altere esta opção para False e observe que as linhas entre os registros do DBGrid não estarão mais sendo exibidas.

- dgMultiSelect: propriedade que permite a configuração de permitir que o usuário selecione mais de uma linha por vez no DBGrid. Altere a opção para True.

Conclusão

Vimos nestes artigo formas praticas e inte-ressantes de trabalhar e customizar a aparência do componente DBGrid em suas aplicações. Estas dicas aqui mostradas foram poucas comparado com o grande número de situações e customizações possíveis ao componente, fica então o desafio de você mesmo descobrir novos recursos.

Figura 3: Resultado a Personalização da DBGird

Técnico em Informática, bacharelando em Sistemas de Informação.

Sobre o autor

Mateus André Chies

[email protected]

end;//Incrementa as inagens no DBGrid fixRect := Rect; if Column.Field = CDSdadostipo then begin //Utilizaremos uma condiçao simulando a média de aprovação 8 if CDSdadostipo.Value = ‘C’ then imgIndex := 0 else imgIndex := 1; //Criar em runtime um TBitmap bitmap := TBitmap.Create; try //Selecionando a imagem... ImageList1.GetBitmap(imgIndex,bitmap); //Fixar as dimensões do bitmap bmpWidth := (Rect.Bottom - Rect.Top); fixRect.Right := Rect.Left + bmpWidth; //Desenhar o bitmap (imagem) dgDados.Canvas.StretchDraw(fixRect,bitmap); finally //Limpa o TBitmap bitmap.Free; end; //Ajustar o espaço do Retângulo para a imagem fixRect := Rect; fixRect.Left := fixRect.Left + bmpWidth; end; //Desenhar o texto no Grid dgDados.DefaultDrawColumnCell(fixRect,DataCol,Column,State);

Listagem 3: Utilizando imagens no DBGrid

Page 14: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200914

Olá pessoal,

Nesse mês daremos continuidade ao nosso artigo sobre o Journaling System – a tecnologia que nos auxilia na garantia de ambientes muito mais seguros e estáveis. Relembrando rapidamente o conceito:

O Sistema Journaling é uma tecnologia embar-cada no gerenciador de banco de dados InterBase que cria um ambiente para prevenção e recupera-ção possíveis falhas nos bancos de dados, causadas quase sempre por falhas de estrutura. Para o seu melhor funcionamento, o Sistema Journaling atua em duas partes. A recuperação de curto tempo, também conhecida como Short-Term-Recovery, e a recuperação de longo tempo – o Long-Term-Recovery.

Na primeira parte de nosso artigo nós defi-nimos o funcionamento do Short-Term-Recovery. Agora vamos detalhar o funcionamento do Long-Term-Recovery.

JOURNALING SYSTEM A SOLUÇÃO DEFINITIVA CONTRA PERDA DE DADOS – PARTE 2

LONG-TERM-RECOVERY

Pois bem, nosso ambiente InterBase agora conta com um sistema de journaling que mantém automaticamente uma estrutura onde são grava-dos arquivos chamados Journal Files, que, em caso de pane ou queda do sistema, são aplicados aos nossos bancos de dados, garantindo sua integri-dade. Esse é o processo de Short-Term-Recovery. Mas imaginem que o servidor queimou, pifou os discos, foi roubado ou vítima de algum desastre natural, enfim, como recuperar nosso ambiente se não temos mais um servidor, nem mesmo seus backups? Ou se temos um backup, o mesmo é de algumas semanas atrás? Pois nós podemos e iremos garantir muito mais segurança ativando, em conjunto com o Journal, o sistema de Journal Archiving. O Journal Archiving é um complemento ao sistema Journal, que nos ajudará a recuperar totalmente nosso ambiente em caso de perda total e irreversível de nosso servidor de produção. É o que chamamos de Disaster Recovery, ou recupe-ração de desastre.

A idéia também é simples. Nós definimos um local, caminho preferencialmente localizado

em um outro equipamento. Depois nós criamos rotinas que irão manter nesse diretório os arqui-vos Journal Files que estiverem preenchidos, bem como uma ou mais cópias full dump de nosso banco de dados de produção, ou seja, cópias fiéis de nosso banco de dados. Com isso nós teremos nesse servidor remoto, nesse outro equipamento, todas as informações necessárias para recriar nosso ambiente do zero novamente. Em caso de perda irreversível do servidor principal, somente com as informações que temos no equipamento escolhido para o Journaling Archiving, poderemos restaurar a cópia full dump mais recente e aplicar sobre ela os arquivos Journal Files, restaurando assim um banco de dados exatamente como o mesmo estava até seu último arquivamento.

E não é só isso não. Como as cópias full dumps que estão no sistema Journal Archiving são bancos com informações de timestamp de todas as transa-ções, é possível realizar outro processo chamado Point-in-Time Recovery, que permite restaurar essa cópia arquivada exatamente como o banco de da-dos estava em uma determinada data, hora, minuto e segundo. Por exemplo: um determinado processo em nossa aplicação foi executado por um usuário

Page 15: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 15

mal intencionado que acabou por excluir parte dos dados ou mesmo por distorcer as informações de nosso banco de dados. Podemos então realizar um Point-in-Time Recovery e restaurar um banco de dados no exato estado da arte que o mesmo estava às 18 horas e 35 minutos do dia 31 de outubro de 2009, um minuto antes da execução do processo do usuário. Muito interessante realmente.

Mas vamos deixar de papo e vamos ao que interessa: ver como executar todos esses pro-cessos.

CRIANDO O JOURNAL ARCHIVING

A criação do Journal Archiving é muito simples. Pode ser feita através de linha de comando, ou mesmo utilizando o utilitário IBConsole. Qualquer que seja a forma, não é necessário que o banco de dados esteja em modo de acesso exclusivo, ou seja, você pode ativar o Journal Archiving mesmo com seus usuários conectados ao banco. É claro que para ativar o Journal Archiving, é preciso que o sistema Journal já esteja previamente criado,

como bem ilustramos na Parte 1 de nosso artigo no mês passado

Segue abaixo um exemplo de comando para essa criação:

CREATE JOURNAL ARCHIVING ‘\\srv_archiving\archive\employee\’;

• O comando Create Journal Archiving é seguindo de um caminho. Esse caminho indica o local onde será mantido o Arquivamento dos Journal Files, bem como os full dumps de nosso banco de dados. No caso de nosso exemplo, esse caminho é o \\srv_archiving\archive\employee\, ou seja, o diretório Employee que está na pasta compartilhada Archive do computador Srv_Archive. Podemos definir esse caminho de três formas:

o Indicando um caminho local. Exemplo: “e:\archive\employee\”;

o Indicando um caminho mapeado. Exem-

plo: “f:\archive\employee”;o Indicando um caminho no formato

UNC Path. Exemplo: “\\srv_archiving\archive\employee\”;

Particularmente prefiro a terceira definição, pois estaremos gravando o Journal Archiving em outro computador e, mesmo a o compartilhamento falhe, o sistema continua ativo.

Caso nenhum caminho for especificado na execução desse comando, o InterBase assumirá o diretório definido no comando Create Journal como sendo o diretório para criação também do Journal Archiving.

Também é importante notar que o caminho especificado deve ser um caminho válido, caso contrário nosso comando não será executado.

Podemos também utilizar o utilitário IBConsole para realizar essa ativação do Journal Archiving:

Veja a Imagem 1.

Imagem 1 – Caminho para o Menu de ativação do Journal Archiving.

Page 16: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200916

Veja a magem 2.

Veja a Imagem 3.

Bom, utilizando o IBConsole nós também es-pecificamos o diretório onde será criado o Journal Archiving, além de marcar uma opção chamada Archive database, que irá nos “poupar” de um próximo passo que veremos na sequência.

Na Imagem 3 podemos ver o conteúdo do diretório após a criação do Journal Archiving. O InterBase criou um arquivo chamado IB_JOUR-NAL_ARCHIVE, que irá controlar o processo de arquivamento. Além disso o InterBase copiou para o mesmo diretório um arquivo Journal File, que estava lá do caminho do Journal System e que já estava com conteúdo. Complementando o processo, o Interbase também criou no mesmo diretório um arquivo chamado EX.2009-11-05T21-10-37Z.1.DATABASE. Esse arquivo nada mais é do que uma cópia full dump de nosso banco de dados de produção, exatamente idêntica à mesma. Pron-to, já temos nosso processo de Journal Archiving ativo. Mas não acabou.

MANTENDO O JOURNAL ARCHIVING

A manutenção do Journal Archiving não é feita de forma automática, assim como é feito pelo processo principal de Journal Files. É preciso criar rotinas para:

a. Copiar periodicamente os arquivos Jour-nal Files completos para o diretório de Archiving, ou seja, arquivar os arquivos Journal Files;

b. Criar novas cópias de full dumps no diretório de Archiving para diminuir o tempo de recuperação.

c. Opcionalmente definir um limite de full dumps no diretório de Archiving.

d. Criar rotinas para recuperação desses arquivos.

O primeiro passo é a criação de uma rotina para arquivar os Journal Files. Essa rotina deverá ser feita por linha de comando deve ser agendada utilizando o utilitário tradicional do seu Sistema Operacional. Segue abaixo a linha de execução:

GBAK –ARCHIVE_JOURNAL <Caminho do banco de dados principal> -user SYSDBA –pass masterkey

Imagem 2 – Tela para configuração do caminho para a ativação do Journal Archiving.

Imagem 3 – Visualização do diretório onde foi criado o Journal Archiving.

Recomendo que esse comando seja agendado para rodar diariamente de hora em hora, principal-mente se seus arquivos Journal Files são criados rapidamente. Esse processo irá copiar os Journal Files completos para a pasta de Arquivamento.

O passo dois é a criação de novas cópias de full dumps periodicamente no ambiente de Archiving. Esse processo é importante porque, se, por exem-plo, mantivermos um único arquivo .DATABASE no diretório, em caso de necessitar recuperá-lo, será preciso depois aplicar sobre ele todos os arquivos Journal Files que foram atualizados desde então. E esse tempo de recuperação pode não ser tão “agra-dável”. Assim recomendo a execução do comando abaixo ao menos uma vez por semana ou mais:

GBAK –ARCHIVE_DATABASE <Caminho do banco de dados principal> -user SYSDBA –pass masterkey

Esse comando irá criar novos arquivos .DATA-BASE no diretório de Journal Archiving.

Recomendo também a definição desse coman-do abaixo que irá controlar quanto arquivos .DA-TABASE serão criados por banco de dados. Desse forma, quando esse limite for alcançado, o próximo comando ARCHIVE DATABASE irá sobrescrever o arquivo mais antigo pelo mais recente:

GFIX –ARCHIVE_DUMPS 7 <Caminho do banco de dados principal> -user SYSDBA –pass masterkey

Nesse exemplo o sistema Journal Archiving irá controlar até sete arquivos dumps no seu diretório, fazendo com que o oitavo sobreponha o primeiro, que o nono sobreponha o segundo e assim por diante.

RECUPERANDO UM JOURNAL AR-CHIVING

Claro, de nada adiantaria todos esses coman-dos se não pudéssemos recuperar esse backup. Segue abaixo a linha de comando para isso:

GBAK –ARCHIVE_RECOVER C:\DATABASE\ARCHIVE\EXEMPLO\EX.2009-11-05T21-10-37Z.1.DATABASE D:\DATABASE\RESTORED\BANCO_NOVO.IB -user SYSDBA –pass masterkey

No comando acima nós indicamos o caminho do arquivo Dump que desejamos recuperar e indicamos um banco de dados destino, que será

Page 17: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 17

nosso banco de dados restaurado. Desse forma o InterBase irá restaurar esse dump e, na sequência, aplicar todos os arquivos Journal Files arquivados, restaurando nosso banco de dados até seu último momento.

Mas como disse acima, também podemos utilizar o recurso de Point-in-Time Recovery, in-dicando até que momento desejamos restaurar nosso banco de dados:

GBAK –ARCHIVE_RECOVER C:\DATABASE\ARCHIVE\EXEMPLO\EX.2009-11-05T21-10-37Z.1.DATABASE D:\DATABASE\RESTORED\BANCO_NOVO.IB -user SYSDBA –pass masterkey –UNTIL “2009-10-31 18:35:00”

Nesse exemplo nós restauramos o banco de dados Dump e depois aplicamos os arquivos Journal Files até manter o banco de dados idêntico ao nosso banco de dados de produção, como o mesmo estava às 18 horas e 35 minutos do dia 31 de outubro de 2009. É ou não é a solução definitiva contra perda de dados?

CONCLUSÃO

Muito bom. Espero ter mostrado nesses dois artigos um pouco sobre essa tecnologia exclusiva do InterBase, de baixíssimo custo e pouco manu-tenção, que pode revolucionar a forma com que tratamos o assunto segurança de dados em nossos clientes. Convido novamente você desenvolvedora utilizar a versão Developer Edition do InterBase SMP 2009, disponível gratuitamente no site da Em-barcadero (http://www.embarcadero.com) . Essa versão permite o uso dos completo dos recursos de Journal. E reforço o convite para você usuário InterBase de versões antigas e usuários Firebird a utilizar uma cópia de avaliação do InterBase SMP

Felipe Santos é especialista em InterBase. Trabalha com o InterBase desde 2001. atuando como consultor e instrutor do produto em todo Brasil. Especialista em ambientes críticos. Atua e trabalha com os maiores clientes do InterBase no Brasil. Participante ativo na comunidade, com diversos artigos publicados. Participante do grupo de beta testers mundial do produto. Palestrante em eventos como IB Tour, Borcon Conference, CodeRage Latin América, Delphi Developers Day, Linux Day, entre outros. Atualmente trabalhando na área técnica do InterBase na Presence Tecnologia – agente oficial especializado do produto no Brasil.

Sobre o autor

Felipe Santos

[email protected]

2009. Vale lembrar também que, a partir da versão 2009 do InterBase, seu novo termo de licenciamento permite que você tenha sua licença registrada tam-bém no servidor que você está utilizando para Journal Archiving, mas mantendo essa instalação apenas como um backup, ino-perante. Assim, em caso de você não ter mais seu servidor prin-cipal, você pode simplesmente “acordar” seu servidor backup, restaurar seus Journals e recriar

seu ambiente rapidamente. É muita facilidade e muita segurança realmente. Não esqueçam de ler também nossa referência do artigo que trás informações completas sobre o assunto.

Nos vemos no próximo artigo para falar mais sobre o InterBase e seus recursos. Valeu pessoa e Até lá!

Referência:InterBase 2009 Operations Guide – cap. 9.

Page 18: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200918

Neste artigo vou abordar a utilização do DDEX(Data Designer Extensibility) que é uma ferramenta para construir aplicações com integração com os dados, pois propicia a ma-nipulação do Firebird da mesma forma que manipulamos o SQLServer na IDE do Visual Studio, ou seja, utilizar o recurso de “arrastar e soltar” em tempo de projeto . Isso vem de encontro para muitos desenvolvedores que sonhavam em manipular o Firebird de modo visual no Visual Studio 2008.

Vamos ter uma certa mão de obra que requer muita atenção, pois manipularemos o registro do Windows e o arquivo de configuração do Visual Stu-dio 2008. Sugiro que faça uma cópia de segurança para evitar maiores problemas.

Usei a versão 1.5 do firebird (por incrível que pareça).Nada impede de se utilizar as versões mais atuais.Vamos utilizar o driver DataProvider do Firebird para o .Net.

Para fazer o dowload, aponte para o endereço www.firebirdsql.org, clique na opção download e no item Firebird .NET Data Provider

Você será direcionado para a página de down-loads do site. Neste artigo estamos usando a versão 2.01 for .NET 2.0. Utilizaremos também a versão 2.0.4 do driver DDEX.

Vamos iniciar o processo de instalação , co-

Visual Studio 2008 com DDEX e Firebird

meçando pelo DataProvider para o Firebird. Vá até a pasta onde salvou o arquivo do Firebird .NET Data Provider e execute o instalador. O processo de instalação é bem simples.O próximo passo é a instalação do driver DDEX que é distribuída em um arquivo .ZIP. Vá até a pasta Arquivos de Pro-gramas e uma pasta chamada DDEX. Agora copie o arquivo .ZIP do driver DDEX para dentro dela e descompacte nesse local.

Vamos para a parte chata, que é a configuração desses componentes.

Para o Visual Studio utilizar as DLLs do Da-taProvider e do DDEX esses precisam estar no GAC(Global Assembley Cache) que é uma pasta especial onde todos os assemblys compartilhados deverão ser colocados.Para maiores informações acesse http://www.macoratti.net/vbn_assb.htm e http://msdn.microsoft.com/pt-br/library/kw5x2w30.aspx. Teremos que adicionar manual-mente a DLL do driver DDEX no GAC. Irei utilizar a ferramenta gacutil.exe que é instalada junto com o SDK do Windows ou com o Visual Studio, e no Windows Vista fica disponível em C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe. Para utilizá-la basta iniciar o prompt de comando do Visual Studio, e a referência ao caminho (variável path) já será criado.

Vamos incluir a DLL do driver DDEX no GAC. Abra a janela de comando do Visual Studio, vá ate a pasta onde está instalado o driver DDEX (C:\ Arquivos de Programas \DDEX) e execute o seguinte comando gacutil /i FirebirdSql.VisualStu-

dio.DataTools.dll.Pronto, a instalação do drive já esta concluída.

Quando uma DLL é registrada no GAC algumas informações específicas desta DLL são gravadas no registro do Windows e nós vamos precisar de algumas destas informações no próximo passo que será a alteração do arquivo de configuração do Visual Studio. Mais uma vez vamos usar o gacutil.exe para criar um arquivo texto com os dados das DLLs registradas no GAC e desse modo podermos alterar corretamente o arquivo de configuração do Visual Studio. Utilizando a mesma janela de comando que usamos para registrar o driver DDEX no GAC, para criar este arquivo execute o seguinte comando gacutil /lr > gac.txt.

Com este comando foi criado o arquivo gac.txt na pasta C:\ Arquivos de Programas \DDEX. Abra este arquivo no bloco de notas. Temos agora que localizar as entradas do Firebird neste arquivo. Utilize o recurso de “localizar” e procure por “Fire-bird”, pois isso vai levá-lo diretamente às entradas que estamos procurando. A listagem 1 mostra o ponto do arquivo com os detalhes do driver .NET DataProvider do Firebird e do driver DDEX que acabamos de registrar no GAC.

Veja a Listagem 1.

A primeira entrada destacada (FirebirdSql.Data.FirebirdClient) é do driver .NET DataProvider e a segunda é do driver DDEX (FirebirdSql.VisualS-tudio.DataTools). De cada uma delas precisamos anotar as informações referentes à “Version”,

Page 19: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 19

“Culture” e “PublicKeyToken”.

Manipulando o registro do Windo-ws

O próximo passo é adicionar algumas informa-ções no arquivo de registro do Windows. Na pasta DDEX (C:\ Arquivos de Programas \DDEX) existe um pasta chamada “reg_files” dentro da mesma existem exemplos de arquivos .reg (arquivos do registro do Windows) já quase prontos para serem incluídos no registry. A pasta “reg_files” possui as pastas VS2005 e VS2008, cada uma contendo os arquivos .reg específicos para cada versão do Visual Studio. Se você usa o Visual Studio 2005 deve usar os arquivos dentro da pasta VS2005, caso contrário use os arquivos da pasta VS2008. Utilizaremos os arquivos da pasta VS2008. Se você tem o SDK do Visual Studio 2005 instalado então os arquivos de registro está na pasta withSDK, entretanto se você não tem o SDK do Visual Studio 2005 instalado, o arquivo se encontrará na pasta VS2005. O nome dos arquivos indica para qual versão do Windows ele se aplica. O arquivo FirebirdDDEXProviderVisu-alWebDeveloper32 é para quem tem a versão Ex-press do Visual Studio instalada. No artigo utilizarei o arquivo FirebirdDDEXProvider32.reg pois estou usando o Windows Seven 32 bits e a versão do Vi-sual Studio 2008 é a Professional. Para aqueles com o SDK do Visual Studio 2005 instalado, e como dito acima, devem procurar o arquivo a ser alterado na pasta withSDK, Vale ressaltar a informação de que somente dois arquivos ( 32 e 64 bits ) referentes às versões Full do Visual Studio (Standard ou superior) estão disponíveis, não há suporte para a versão Express do Visual Studio. Para o Visual Studio 2008 o procedimento é o mesmo, com a diferença de que não há arquivos para o SDK.

Para maiores informações sobre o SDK acesse http://msdn.microsoft.com/pt-br/vsx2008/pro-ducts/default.aspx.

FirebirdSql.Data.FirebirdClient, Version=2.5.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c, processorArchitecture=MSILSCHEME: <WINDOWS_INSTALLER> ID: <MSI> DESCRIPTION : <Windows Installer>FirebirdSql.VisualStudio.DataTools, Version=2.0.4.0, Culture=neutral, PublicKeyToken=bae6c78ccb0fcdb3, processorArchitecture=MSIL

Listagem1. Dados dos drivers para o Firebird registrados no GAC

Vamos abrir o arquivo FirebirdDDEXProvider32 no bloco de notas. No meu caso o arquivo se encon-tra em C:\ Arquivos de Programas \DDEX \reg_files\VS2008. Alterar só a linha “CodeBase”=”%Path%\\FirebirdSql.VisualStudio.DataTools.dll”, substi-tuindo o %Path% pelo nome da pasta onde está instalado o driver DDEX, que no meu caso será a pasta C:\ Arquivos de Programas \DDEX. Informe a “\” simples como dupla “\\”, então substituía o “%Path%” por ““C:\\Arquivos de Programas\\DDEX”, e salve o arquivo pois ele já está pronto para ser registrado.

Se você tem o SDK do Visual Studio instalado, deve estar usando os arquivos contidos na pasta withSDK. Neste caso, o arquivo .reg a ser alte-rado tem um parâmetro a mais que precisa ser alterado também. Procure pela linha contendo: “Path”=”%Path%” e altere a variável %Path% pela pasta onde está instalado o driver DDEX, exatamen-te como fizemos acima para a linha CodeBase, não esquecendo das barras invertidas duplas “\\” no lugar da barra simples.

Agora só nos resta incluir essas informações no registro no windows. Dê um duplo clique sobre o arquivo e será apresentada uma tela pedindo para confirmar a operação. Confirme, e um aviso será mostrado confirmando que as entradas foram adicionadas ao registro do Windows

Alterando o arquivo de configuração do Visual Studio(machine.config)

O Visual Studio tem um arquivo de configu-ração chamado machine.config que contém uma série de informações padrão usadas pelo Visual Studio e pelo .Net. Para a versão 2.0 do Common Language Runtime (que roda o .Net Framework 2.0, 3.0 e 3.5), ele está localizado na pasta %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG.

Faça uma cópia de segurança do arquivo machine.config antes de alterá-lo.

Vamos precisar das informações referentes aos drivers DataProvider do Firebird e do driver DDEX que se encontra no arquivo gac.txt.

Agora abra o arquivo machine.config no bloco de notas, ele usa o formato XML, e localize a seguinte tag:

<configuration><configSections>

Dentro dessa tag coloque a seguinte linha:

Veja a Listagem 2.

Page 20: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009

Na linha recém incluída no machine.config, deixe as propriedades Version, Culture e Publi-cKeyToken exatamente com os mesmos valores mostrados para o driver DDEX do Firebird (é a linha começando com FirebirdSql.VisualStudio.DataTools) no arquivo gac.txt. Coloque os números mostrados no seu arquivo gac.txt.

Localize a seguinte tag:

<configuration> ... <system.data> <DbProviderFactories>

Dentro dela coloque a seguinte linha :

Veja a listagem 3.

Coloque os números mostrados no seu arquivo gac.txt. Salve e feche o arquivo

Configurando o Visual Studio

Abra o Visual Studio e vá até o menu Tools e selecione a opção Choose Toolbox itens.Abaixo tem um campo chamado Filter. Digite Firebird . Mar-que r as linhas FbCommand, FbCommandBuilder, FbConnection e FbDataAdapter. Se você tiver uma linha com a entrada FbDataConnectionUIControl marque-a também. Se algum destes componentes não estiver aparecendo clique em browse e vá até a pasta onde instalamos o driver DDEX do Firebird (C:\ Arquivos de Programas \DDEX) e selecione a DLL “FirebirdSql.VisualStudio.DataTools.dll” e à pasta de instalação do cliente do Firebird (c:\Arquivos de Programas\FirebirdClient 2.0) e se-lecione a DLL “FirebirdSql.Data.FirebirdClient.dll”. Isto adicionará as entradas que faltavam. Não se esqueça de marcar cada uma delas. Ao final, clique em OK para adicionar os componentes à toolbox do Visual Studio.

Veja a Imagem 1.

Como se fosse o SQLServer

Abra o Visual Studio e Selecione a aba Server Explorer e clique em Add Connection... A janela de diálogo(Imagem 2) mostrando os provedores de acessos a dados disponíveis é apresentada.

Veja a Imagem 2.

<section name=”firebirdsql.data.firebirdclient” type=”System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=2.0.4.0, Culture=neutral, PublicKeyToken=bae6c78ccb0fcdb3”/>

Listagem 2.

<add name=”FirebirdClient Data Provider” invariant=”FirebirdSql.Data.FirebirdClient” description=”.Net Framework Data Provider for Firebird” type=”FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c”/>

Listagem 3.

Imagem 1. Componentes marcados no Toolbox do Visual Studio

Imagem 2. Data Source para o Firebird

Page 21: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 21

A janela de configuração da conexão exibida. Vou utilizar o banco EMPLOYEE.GDB . Observe a imagem 3 .

Veja a Imagem 3

Observe que na aba Server Explorer você teve ter uma conexão com o banco Firebird , assim como acontece com o SQLServer. Clique na pasta Tables para visualizar as tabelas do seu banco de dados do Firebird.

Agora crie uma nova aplicação Web e arraste um controle formview(seção Data) na página.(Imagem 4)

Veja a Imagem 4.

Clique na smartTag para adicionar um Data Source. O wizard de configuração do DataSour-ce é apresentado. Selecione Database e se desejar, dê um nome para a conexão. Deixarei o padrão(Imagem 5)

Imagem 5. Configurando a fonte de dadosImagem 3 Parâmetros de conexão com Firebird

Imagem 4 . Controle formView

Imagem 5. Configurando a fonte de dados

Page 22: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200922

A janela Choose your Data Connection é apresentada. Selecione a conexão que criamos no Server Explorer e clique em OK( Imagem 6).

Veja a Imagem 6.

Clique em Next para continuar. A janela de dialogo para configuração do Select é apresentada, permitindo que você selecione as tabelas e campos a serem exibidos. A imagem 7 mostra esta janela de dialogo.

Veja a Imagem 7.

Observe que selecionei os campos COUNTRY E CURRENCY. Nada impede de você digitar a frase SQL . Para isso , selecione “Specify a custom SQL statement or stored procedure”.

Agora clique em advanced para gerar as instruções de Inserção, atualização e deleção.(Imagem 8)

Veja a Imagem 8.

Clique em next e finish para finalizar.

Vá nas propriedades do formView e deixe a propriedade DefaultMode como Insert. Veja imagem 9

Imagem 9 – DefaultMode

Ainda na seção Data, adicione o controle gridview para visualização dos registros inseridos no formView.Na smarttag do componente aponte para o mesmo datasource do formview. Habite ordenação,paginação, edição e deleção conforme a imagem 10.

Veja a imagem 10.

Em Edit Columns podemos configurar as colunas. Veja configuração do campo Country na imagem 11

Imagem 6. Connectionstring contendo informações da conexão com firebird

Imagem 7. Tela de configuração da instrução Select

Imagem 8. Gerando instruções de insert, update e delete

Page 23: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 23

Veja a Imagem 11.

Faça o mesmo para o campo currency.Em CommandField (selected fields) podemos

deixar os links em português.

Veja imagem 12. Para testar dê um F5.Veja como ficou nosso projeto “rodando”

(imagem 13)

Conclusão

Apesar das dificuldades para instalação do driver, que requer concentração e paciência, vimos as facilidades para “desenhar” conexões dentro da IDE do visual Studio, que aumenta e muita a produtividade para se trabalhar com o excelente firebird.

Fontes

http://www.firebirdsql.org/firebirdtutorial/firebird-data-access-designer-ddex-installation.html

http://firebird.svn.sourceforge.net/viewvc/firebird/NETProvider/trunk/DataDesignerExtensi-bility/ReadMe.txt?revision=646

Imagem 12. Configuração dos CommandField

Imagem 13

Imagem 11. Configuração da coluna

Imagem 10. Configuração do gridview

Técnologo em Processamento de Dados ,graduado pela Faculdade de Técnologia de Sorocaba, Consultor técnico do The Club.

Docente do curso técnico informática - Etec de Avaré e do curso Tecnologia em Redes de Computadores - Fatec Eduvale – Avaré

Sobre o autor

Luís Alexandre de Oliveira

[email protected]

Page 24: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200924

Breve histórico da evolução das aplicações WEB

Olá, depois de alguns posts sobre jQuery agora vou começar minha saga de artigos sobre Silverlight, primeiramente gostaria de comunicar e convidar os leitores a ingressa-rem na minha comunidade Silverlight Brasil ( http://www.silverlightbrasil.ning.com ), o intuído com esses artigos de silverlight é dar uma introdução aos desenvolvedores sobre essa tecnologia Microsoft que com ela está se gerando uma nova geração de aplicativos da Web, as chamadas aplicações RIA ( Rich Inter-net Application ), apenas para relembrar um pouquinho no começo tínhamos as aplicações WEB com muita poluição visual, publicidade não direcionada apenas os famosos Web-Masters conseguiam dar manutenção nos WebSites, com a evolução das ferramentas e tecnologias surgiram ai o que chamamos Web 2.0 que ainda é a grande maioria na nossa internet atual, a Web 2.0 é baseada em Ajax, Redes Sociais, centrais de entretenimentos, portais dinâmicos, mecanismos de busca, sem dúvida foi um grande passo... Agora estamos vendo chegando a nova geração que são aplicações com cara de desktop, tecnologias renovadas como o jQuery, Silverligt, Flex e com isso ganhamos muita interatividade com a chegada do TouchScreen nos celulares e desktops. Agora vamos dar continuidade ao nosso artigo, neste quero abranger a comuni-cação WCF entre o Silverlight e o WCF.

Acessando um Serviço WCF com Silverlight

Criando a nossa aplicação

Para criarmos nossa aplicação inicialmente abra o Visual Studio 2008 sp1 selecione o menu File -> New Project e selecione a opção Silverlight Application ( conforme imagem 1 ) e renomeie a aplicação para TheClub, logo após o Visual Studio vai perguntar se você deseja criar uma outra apli-cação do tipo ASP.NET Web Application Project e o nome da aplicação será TheClub.Web (imagem 2) então clique em OK, o Visual Studio vai criar 2 projetos em nossa Solution Explorer, 1 com o nome TheClub ( Aplicação Silverlight ) e outra como The-Club.Web ( ASP.NET Application ), observe que ele vai criar todos os arquivos necessários para rodar uma aplicação silverlight, o arquivo Silverlight.js que contém o JavaScript que é responsável por verificar se o Silverlight está instalado na máquina, caso negativo chama a instalação do mesmo no site oficial da Microsoft, temos a pasta ClientBin que conterá o nosso XAP que é a nosso projeto Sil-verlight compilado e comprimido, temos também os arquivos TheClubTestPage.aspx que é a nossa página principal que vai conter a referência ao arquivo Silverlight.js e conterá a DIV onde o nosso arquivo XAP será executado. Para facilitar podemos excluir os arquivos Default.aspx e TheClubTestPage.html, agora compile a aplicação ( Ctrl + Shift + B ) e se tudo ocorrer conforme esperado a solution Explorer deverá estar semelhante a imagem 3.

Veja a Imagem 1.Veja a Imagem 2. Veja a Imagem 3.

Criando um serviço WCF

Agora que temos nossa aplicação criada vamos adicionar o um Serviço WCF, para isso selecione o projeto TheClub.Web botão direito e selecione a opção Add > New Item e depois selecione o tem-plate WCF Service, altere o nome do serviço para “TheClubService.svc” e clique em Add ( Imagem 4 ), neste ponto o Visual Studio irá adicionar algumas referências necessárias ao projeto TheClub.Net e irá criar 2 arquivos 1 com o nome “ITheClubService.cs” e outro “TheClubService.svc” que tem o arquivo “TheClubService.svc.cs” vinculado a ele, então ago-ra já temos efetivamente o nosso serviço criado. O arquivo ITheClubService.cs se refere a Interface de serviço que será implementada dentro do arquivo TheClubService.svc.cs.

Veja a Imagem 4.

Implementando novos métodos no WCF

Agora que temos o nosso serviço WCF criado em nossa aplicação vamos incrementar ele agregan-do novos métodos, abra o arquivo “ITheClubServi-ce.cs” e apague o método “DoWork” referenciado como default ( não esqueça de apagar o atributo [OperationContract] ), observe que logo acima da declaração da interface temos o atributo [Service-Contract] isso indica que todas as implementações dessa interface fazem parte do nosso serviço, ou seja posso ter N classes que implementam essa in-terface e todas as N estarão disponíveis para serem consumidas. Dentro da interface codifique o código

Page 25: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 25

Imagem 1.

Imagem 2. Imagem 3.

Imagem 4.

Page 26: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200926

descrito na Listagem 1, observe que na interface eu faço apenas a declaração dos métodos para retornar determinado cliente ( GetClienteCodigo ) retornar uma lista de clientes ( GetListaClientes ), agora vamos a implementação dos métodos, abra o arquivo “TheClubService.svc.cs” e a referência ao método Default “DoWork()” agora posicione o cursos sobre a interface ITheClubService e observe que a letra I está sublinhada, leve o mouse até esse sublinhado e irá aparecer uma caixinha então clique nessa caixinha e selecione a opção “Implement interface ITheClubService” para facilitar veja na imagem 5, então depois de clicar o que aconteceu ? O Visual Studio criou as assinaturas básicas dos nossos métodos assinados na interface. Para com-plementar essa parte decodifique a Listagem 2. No primeiro Método (Ping()) retorna apenas uma string para “dizer” que o servidor está on-line, no segundo método (GetClienteCodigo) eu verifico o parâmetro passado com sua chamada ai então eu crio uma nova instância da classe cliente (listagem 3) e preencho suas respectivas propriedades de acordo com o parâmetro informado. No terceiro Método eu retorno uma List<Cliente>, ou seja, uma lista de clientes para exemplificar, eu criei um for de 1 para 10 e criei 10 instâncias da classe cliente e adicionei essas instâncias na variável listaClientes que será o meu retorno, contendo as 10 classes de cliente incorporada (em breve estarei publicando um artigo falando especificamente de Listas Genéricas), agora temos nosso serviço WCF pronto, apenas para não deixar em branco, para criarmos a nossa classe cliente selecione o projeto TheClub.Web clique com o botão direito Add -> Class, altere o nome do arquivo para Cliente.cs e codifique a listagem 3;

Veja a Imagem 5.

Veja a Listagem 1:

Veja a Listagem 2:

Veja a Listagem 3:

Consumindo o Serviço no Silverlight

Agora que temos o nosso serviço Ok, compile para ver se tudo saiu conforme esperado, se tudo estiver ok vamos dar continuidade... Selecione o arquivo “MainPage.xaml” que se encontra dentro do projeto “TheClub”, irá abrir o famoso XAML contento, em breve iremos fazer um artigo intro-dutório a esse formato explicando os principais controles e como trabalhar amigavelmente com o XAML, por enquanto vamos ficar com o Copy/Paste, decodifique o código descrito na listagem

Imagem 5.

namespace TheClub.Web{ [ServiceContract] public interface ITheClubService { [OperationContract] string Ping();

[OperationContract] Cliente GetClienteCodigo(int codigo);

[OperationContract] List<Cliente> GetListaClientes(); }} Listagem 1.

public class TheClubService : ITheClubService { #region ITheClubService Members

public string Ping() { return “Servidor On-Line”; }

public Cliente GetClienteCodigo(int codigo) { var cli = new Cliente();

if (codigo == 1) { cli.Codigo = 1; cli.Nome = “Pedro da silva”; cli.Endereco = “Rua XV, 55 Apto 1002”; cli.CEP = “88.000-221”; cli.DataNascimento = new DateTime(1980, 10, 03); cli.Telefone = “333-6225”; } else if (codigo == 2) { cli.Codigo = 2; cli.Nome = “Pedro Alvares Cabral”; cli.Endereco = “Rua 7 de Listagem 2.

Page 27: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 27

4 entre as Tags <Grid x:Name=”LayoutRoot”> e </Grid>, agora que temos nossa interface criada vamos executar e ver como está ficando, tecle F5 e deverá ter como resultado ver algo semelhante a Imagem 6

Imagem 6

setembro, 55 Apto 1002”; cli.CEP = “85.020-221”; cli.DataNascimento = new DateTime(1920, 10, 03); cli.Telefone = “334-6315”; } else cli = null;

return cli; }

public List<Cliente> GetListaClientes() { var listaClientes = new List<Cliente>();

for (int i = 0; i < 15; i++) { var cliente = new Cliente(); cliente.Codigo = i; cliente.Nome = String.Format(“João {0}”, i ); cliente.Endereco = “Rua XV de Novembro”; cliente.CEP = “88.000-221”; cliente.DataNascimento = new DateTime(1980, 10, 03); cliente.Telefone = “444-6142”; listaClientes.Add(cliente); } return listaClientes; }

#endregion }

namespace TheClub.Web{ public class Cliente { public int Codigo {get; set;} public string Nome { get; set; } public string Endereco { get; set; } public string CEP { get; set; } public string Telefone { get; set; } public DateTime DataNascimento { get; set; }

}}

Listagem 2.

Listagem 3.

Page 28: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200928

Trabalha a quase 7 anos com Delphi, trabalha na empresa Benner Sistemas (www.benner.com.br ) na área de tecnologia desenvolvendo fer-ramentas em Delphi e como hobby e visão de mercado está migrando seus conhecimentos para a plataforma .NET. Faz parte do grupo .NET Blumenau http://dotnetblumenau.ning.com/ . Possue certificação 70-536 (Microsoft .NET Framework 2.0 Application Development Foundation ) . Twitter: djonatastenfen - blog http://www.djonatastenfen.blogspot.com/

Sobre o autor

Djonatas Tenfen

[email protected]

Veja a Listagem 4 .

Referenciando o Serviço WCF a apli-cação Silverlight

Agora que temos a interface básica criada, o serviço WCF criado vamos referenciá-lo a nossa aplicação Silverlight, para isso clique com o botão direito sobre o projeto TheClub então selecione a opção Add Service Reference (conforme item 1 da imagem 7), após a janela “Add Service referente” estiver aberta clique no Botão Discover para ele descobrir os serviços habilitados na solução atual, depois selecione o serviço TheClibService.svc e então por fim clique em OK, aguarde enquanto o Visual Studio faz a referência ao serviço e então teremos a pastinha Service Reference no nosso projeto TheClub. Observe que dentro dessa pasta temos o Serviço ServiceReference1, para evitar problemas futuros clique com o botão direito sobre ServiceReference1 e selecione a opção Configure Service Reference, altere a opção Collection Type para System.Collection.Generic.List e clique em Ok. E Pronto temos nosso serviço referenciado e configurado. Na próxima edição eu irei mostrar como acessar os métodos do WCF e como traba-lhar com Banco de dados. Então é isso, aguardo vocês na próxima edição da revista The Club e por enquanto continuem aprendendo Silverlight na comunidade Silverlight Brasil (http://www.silver-lightbrasil.ning.com)

<Grid> <Grid.RowDefinitions> <RowDefinition Height=”40”/> <RowDefinition /> </Grid.RowDefinitions> <StackPanel Orientation=”Horizontal” Grid.Row=”0”> <Button x:Name=”btnPing” Content=”Servidor OnLine?” Click=”btnPing_Click” /> <Button x:Name=”btnGetClienteCodigo” Content=”GetClienteCodigo” Click=”btnGetClienteCodigo_Click”/> <Button x:Name=”btnGetListaClientes” Content=”GetListaClientes” Click=”btnGetListaClientes_Click”/> </StackPanel> </Grid>

Listagem 4.

Page 29: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009 29

Dicas DELPHIDesenhando texto 3D no form com Canvas

Declare esa procedure na seção private

procedure Image3D(Canvas3D : TCanvas; Str : String; TheFontSize, UCorner, LCorner : Integer);Begin TheCanvas.Brush.Style := bsClear; TheCanvas.Font.Style := [fsBold]; TheCanvas.Font.Name := ‘MS Sans Serif’; TheCanvas.Font.Size := TheFontSize; TheCanvas.Font.Color := clBlack; TheCanvas.TextOut(UCorner, LCorner, TheString); TheCanvas.Font.Color := clGray; TheCanvas.TextOut(UCorner - 1, LCorner - 1, TheString); TheCanvas.Font.Color := clSilver; TheCanvas.TextOut(UCorner - 2, LCorner - 2, TheString); TheCanvas.Font.Color := clBlack; TheCanvas.TextOut(UCorner - 3, LCorner - 3, TheString);End;

Exemplo de utilização:

procedure TForm1.Button1Click(Sender: TObject);begin imgPaintCanvas(Form1.Canvas, ‘Theclub’, 10, 6, 4);end;

Exportar Registros da Query para HTML

Procedure CRIAHTML(Sender: TObject);var i, j, w: integer; linha: string;

htmlfile: TextFile;const wrap=#13+#10; {estamos declarando esta constante com o valor da tecla enter ...}begin AssignFile(HtmlFile, ‘c:htmlfile.html’); Rewrite(HtmlFile); writeln(htmlfile, ‘<html><head>’ + wrap + {estamos gerando o inicio do arquivo html} ‘<title>’+ Table1.name + ‘</title>’ + wrap + ‘</head>’ + wrap + ‘<body bgcolor=”#FFFBCB”>’ + wrap + ‘<table border =1>’ + wrap); {Nesse ponto iremos gerar a tabela html} with table1 do begin for w:=0 to fieldCount - 1 do writeln(htmlfile, ‘<td>’ + (Fields[w].FieldName) + ‘</td>’);{Na linha de cima iremos gerar uma coluna em html para cada campo da table 1 com os seus nomes} table1.first; for i:=0 to recordcount-1 do begin linha:=’<tr>’+wrap; for j:=0 to fieldcount-1 do begin linha:= linha + ‘<td>’ + Fields[j].AsString + ‘</td>’; {Este código pega o valor dos campos de cada linha da table e joga na tabela de html} end; writeln(htmlfile, linha); writeln(htmlfile, ‘</tr>’); next; end; end; writeln(htmlfile, ‘</body></html>’); {Finaliza o arquivo html} CloseFile(htmlfile);end;

Page 30: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 200930

VerticalHorizontal

Page 31: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009

Page 32: The Club - megazine Dezembro 2009 Delphi Um dos grandes problemas enfrentados pelos usuários de Firebird e DBExpress sem dúvida era o fato do driver DBExpress para o Interbase ter

Dezembro 2009