You are on page 1of 30

Revista The Club Megazine - 12/2001

A utilizao, reproduo, apropriao, armazenamento em banco de dados,


sob qualquer forma ou meio, de textos, fotos e outras criaes intelectuais
em cada publicao da revista The Club so terminantemente proibidos
sem autorizao escrita dos titulares dos direitos autorais.
Copyright The Club 2001
MeGAZINE 3
THE CLUB
Rua Acre, 950 - Avar - SP - CEP 18.700-260
Informaes: (0xx14) 3732-3689
Suporte: (0xx14) 3733-1588
Fax: (0xx14) 3732-0987
Internet
http://www.theclub.com.br
Cadastro: cadastro@theclub.com.br
Suporte: suporte@theclub.com.br
Informaes: info@theclub.com.br
Dvidas
Correspondncia ou fax com dvidas devem ser
enviados ao - THE CLUB, indicando "Suporte".
Opinio
Se voc quer dar a sua opinio sobre o clube em
geral, mande a sua correspondncia para a seo
"Tire sua dvida".
Reproduo
A utilizao, reproduo, apropriao,
armazenamento em banco de dados, sob qualquer
forma ou meio, de textos, fotos e outras criaes
intelectuais em cada publicao da Revista
The Club so terminantemente proibidos sem
autorizao escrita dos titulares dos direitos
autorais.
Copyri ght

The Cl ub

2001
Impresso e acabamento:
Impressos Gril - Gri l Grfi ca e Repr. I nd. Ltda.
Tel.: (0xx14) 3762.1345 - Fax: (0xx14) 3762.1259
Rua So Paulo, 447 - Cep 18.740-000
Taquari tuba - SP
Ti ragem: 5.000 exempl ares
Di retor - Presi dente
Celso Jefferson M. Paganelli
Di retor Tcni co
Mauro SantAnna
Col aboradores
Mrio Camilo Bohm - Claudenir C. Andrade
Anderson Haertel Rodrigues - Marcio Alexandroni
Delphi marca registrada da Borland
International, as demais marcas citadas so
registradas pelos seus respectivos proprietrios.
Editorial
Celso Jefferson Paganelli
Presidente - The Club
Editorial .................................................................... 03
Coluna do SantAnna ............................................... 04
Melhorando a performance em consultas SQL ......... 09
Utilizando a nova verso do InstallShield ................ 11
Automao comercial (ECF Emissor Cupom Fiscal)
Controle dos Erros e Status do ECF - Parte 2 .......... 17
ndices, Performance e Estatsticas no Interbase..... 21
PocketStudio: Poder, produtividade e
facilidade de uso ...................................................... 25
Dicas & Truques ........................................................ 28
Perguntas & Respostas ............................................. 30
EDITORIAL
MeGAZINE 4
DataSet em pginas
Web
Por Mauro SantAnna (santanna@mas.com.br). Mauro um MSDN Regional Director, consultor e instrutor
da MAS Informtica (www.mas.com.br), tendo ministrado treinamentos na arquitetura .NET desde outubro de
2000 para diversas empresas, dentre as quais a prpria Microsoft.
Coluna do SantAnna
Uma tarefa comum em aplicativos ASP.NET a exibio do
resultado de uma consulta em uma tabela (ou grid), como os
lanamentos de uma conta corrente ou um carrinho de compras.
Neste artigo veremos alguns detalhes de como fazer isto,
incluindo paginao, ordenao e modifio da aparncia final.
Vamos colocar componentes para consulta tabela
Products da base de dados Northwind. Acrescente um
componente SqlDataAdapter: (figura abaixo)
Criando o aplicativo
Crie um aplicativo ASP.NET em C# com o nome Paginacao:
(fugura a esquerda)
MeGAZINE 5
Coluna do SantAnna
Pea a consulta SQL select * from products:
Conecte-se base de dados Northwind de seu SQL Server:
Clique com o boto direito sobre o componente sqlDataAdapter1,
selecione Generate Dataset e aceite o nome sugerido de DataSet1.
No se esquea de selecionar Add this dataset to the designer:
(prxima figura)
Acrescente um DataGrid e ajuste a propriedade DataSource para
dataset11.
Precisamos agora colocar o cdigo que efetua a consulta. Para
no sobrecarregar o servidor de bancos de dados com uma
consulta a cada vez que pedirmos paginao, iremos efetuar a
consulta apenas na primeira vez que a pgina exibida. O cdigo
no evento Page_Load o seguinte: (prxima figura)
Private void Page_Load(object sender,
System.EventArgs e) {
// a primeira vez?
if (!IsPostBack) {
// Preenche o DataSet
sqlDataAdapter1.Fill(dataSet11);
// Coloca em varivel de sesso
Session[DS] = dataSet11;
}
else {
// Pega DataSet da varivel de sesso
dataSet11 = (DataSet1) Session[DS];
}
// Coloca os dados no DataGrid
DataGrid1.DataSource = dataSet11;
// Preenche os controles com dados
DataBind();
}
Clique com o boto direito sobre o DataGrid e pea Property
Builder.... Selecione paging e clique em Alow Paging.
Voc pode modificar as demais opes como quiser: (prxima
figura)
Intercepte o evento PageIndexChanged do DataGrid1 e coloque o
cdigo a seguir:
private void DataGrid1_PageIndexChanged(object
source, System.Web.UI.WebControls.
DataGridPageChangedEventArgs e) {
// Modifica a pgina corrente
DataGrid1.CurrentPageIndex = e.NewPageIndex;
// Preenche novamente o DataGrid
DataBind();
}
MeGAZINE 6
Veja a sada no navegador com Debug | Start Without
Debuging:
Coluna do SantAnna
Ordenao
Um recurso interessante permitir que o usurio modifique
a coluna usada para ordenao clicando sobre seu nome. Para
isto, faremos o seguinte:
1. Ajuste a propriedade AlowSorting do DataGrid1 para true;
2. Coloque um componente DataView. Ajuste a propriedade
Table para dataset11.Products;
3. Ajuste a propriedade DataSource do DataGrid1 para dataView1;
4. Modifique o cdigo conforme descrito a seguir.
A princpio, para modificar a coluna usada na ordenao,
precisamos interceptar o evento SortCommand do DataGrid e
acrescentar o seguinte cdigo:
private void DataGrid1_SortCommand(object source,
System.Web.UI.WebControls.
DataGridSortCommandEventArgs e) {
dataView1.Sort = e.SortExpression;
DataBind();
}
O aplicativo aparentemente funciona, mas na verdade a
ordenao briga com a paginao! Na verdade, precisamos
armazenar o estado da paginao e da ordenao em alguma
varivel, seno estes valores sero ignorados quando a pgina for
recarregada.
Poderamos armazen-los em variveis de sesso, mas o mais
indicado armazenar os valores no ViewState.
Uma das maneiras mais fceis de fazer isto colocar dois
componentes do tipo Literal com as propriedades Visible ajustadas
para false.
Depois de acrescentar os dois componentes do tipo Literal,
vamos alterar o cdigo como mostrado a seguir:
private void Page_Load(object sender,
System.EventArgs e) {
// a primeira vez?
if (!IsPostBack) {
// Preenche o DataSet
sqlDataAdapter1.Fill(dataSet11);
// Coloca em varivel de sesso
Session[DS] = dataSet11;
// Inicializa literais que contm
// pgina atual e expresso de
// ordenao
Literal1.Text = ProductID;
Literal2.Text = 0;
}
else {
// Pega DataSet da varivel de sesso
dataSet11 = (DataSet1) Session[DS];
}
// Coloca os dados no DataView
dataView1.Table = dataSet11.Products;
// Preenche os controles com dados
Exibe();
}
void Exibe() {
// Pega o valor da expresso de ordenao
dataView1.Sort = Literal1.Text;
// Pega pgina atual
MeGAZINE 7
Coluna do SantAnna
DataGrid1.CurrentPageIndex =
Convert.ToInt32(Literal2.Text);
// Preenche o Grid
DataBind();
}
private void DataGrid1_PageIndexChanged(object
source, System.Web.UI.WebControls.
DataGridPageChangedEventArgs e) {
// Armazena o valor da pgina corrente
Literal2.Text = e.NewPageIndex.ToString();
Exibe();
}
private void DataGrid1_SortCommand(object source,
System.Web.UI.WebControls.
DataGridSortCommandEventArgs e) {
// Armazena expresso de ordenao
Literal1.Text = e.SortExpression;
Exibe();
}
Mudando a aparncia
Voc pode modificar a aparncia do DataGrid de vrias
formas. Uma delas clicar com o boto direito sobre o DataGrid e
pedir Auto Format..., selecionando um formato pr-estabelecido:
(prxima figura)
Voc pode tambm clicar com o boto direito e pedir Property
Builder, onde possvel modificar bastante a apresentao. Veja
alguns exemplos a seguir.
Colunas
Normalmente as colunas so criadas em tempo de execuo
com base nas informaes do banco de dados. Podemos cri-las
em tempo de compilao, o que permite um controle mais preciso
da aparncia.
V para a guia Columns, desligue Create columns
automatically at run time, clique em All Fields e clique na seta
para acrescent-
los ao listbox da
direita: (figura
acima a direita).
possvel modificar muitas caractersticas, como o texto do
cabealho, do rodap, colocar uma imagem e uma string de
formatao.
No exemplo acima modifiquei o texto do cabealho e a
expresso de formatao.
Formatos
Na guia Format podemos modificar caractersticas como
fontes, cores e alinhamento dos diversos textos, tanto de
cabealho e rodap como das linhas e colunas. No exemplo
abaixo, modifiquei a fonte e a cor do texto do cabealho do campo
UnitPrice: (Figura abaixo)
DataGrid com
auto Format
MeGAZINE 8
Bordas
A guia Borders permite modificar as linhas das bordas do DataGrid:
Concluso
Armazenar o DataSet em uma varivel
de sesso permite diversas manipulaes
do resultado como ordenao, paginao
sem a necessidade de efetuar novas
consultas ao banco de dados.
O DataGrid tambm permite que se
altere a sua aparncia atravs de
propriedades modificveis em tempo de
desenvolvimento
Coluna do SantAnna
MeGAZINE 9
Melhorando a
performance em
consultas SQL... (2)
Mrio Camilo Bohm - Bohm,Interal
Fone (011) 4221.6151 - mario@bohminteral.com.br
A utilizao adequada de ndices melhora a
performance
Uma consulta SQL deve disponibilizar as colunas que
podero ser usadas para o acesso ndices. O banco de dados, a
partir das colunas disponveis e dos ndices existentes, determina
a convenincia de se usar determinado ndice.
Para permitir que uma coluna seja usada em acesso ndice,
ela deve aparecer na clusula where de um sel ect.
Por exemplo, na consulta:
select NOME
from CLIENTES
where CODCLI = 3;
precisamos ter um ndice na coluna CODCLI para que o
banco utilize o ndice.
Se neste campo houver apenas valores nicos (UNIQUE
INDEX), o banco de dados faz um unique scan, isto , uma
pesquisa no ndice para encontrar um nico valor. Caso
contrrio, existindo valores duplicados (INDEX), far range
scan, procurando no ndice os valores enquadrados na condio.
A seleo entre os ndices para determinar qual ser
realmente usado feita a partir de heursticas, como por
exemplo, melhor usar um ndice nico que um ndice no
nico.
J para condies de desigualdade, como por exemplo
select NOME
from CLIENTES
where CODCLI <> 3;
no possvel para o banco de dados utilizar ndices e toda a
tabela ser analisada, por se tratar de uma condio de
desigualdade.
Mas como saber se a consulta SQL que fizemos utilizou ou
no um ndice, ou se foi feito unique scan ou range scan?
No sqlPlus, digite na sesso aberta:
SET AUTOTRACE ON EXPLAIN;
Voc estar ativando o AUTOTRACE com a clusula
EXPLAIN, ou seja, solicitando uma explicao do TRACE de
como foi resolvida a consulta SQL.
Um erro comum o seguinte:
SQL
MeGAZINE 10
Neste caso, tivemos uma unique scan, por se tratar de
pesquisa por um campo com informaes nicas.
Vamos agora fazer um select na tabela CLIENTES
pesquisando pelo campo CIDADE, que no tem ndice. Veja o
resultado:
Se neste mesmo caso, criarmos um ndice para o campo
CIDADE, veja o que passa a ocorrer na resoluo da consulta
SQL:
Agora tivemos uma range scan, com muito mais
desempenho!!!
Experimente as recomendaes deste ms, que na prxima
matria continuaremos discutindo o assunto.
At l!
Neste caso, falta criar para o usurio ativo a tabela
PLAN_TABLE, que voc pode criar com o seguinte script:
Criada a tabela, as informaes relativas resoluo da
consulta SQL nos sero mostradas:
SQL
ATENO - ATENO - ATENO
Estamos chegando ao final de mais um ano. Esperamos que nossos servios tenham atendido s
expectativas de todos vocs, e que o trabalho de todos tenha sido produtivo.
Agora neste final de ano, vamos aproveitar os dois feriados para darmos frias para nossos consultores. O
suporte tcnico no atender no perodo de 17/12/2001 at 31/12/2001, voltando as suas atividades normais
a partir do dia 02/01/2002 s 13:00h.
MeGAZINE 11
O InstalShield um software para instalao de programas e
voc pode encontrar uma verso deste instalador junto com o
Delphi Professional ou Enterprise.
O InstallShield lhe permite criar cones na rea de trabalho,
no menu Iniciar, criar pastas e ainda criar vrios tipos de
instalao, como por exemplo uma instalao completa ou
parcial.
Todo o programa que voc instalada com o InstallShield vem
com desinstalador para que voc possa desinstalar o programa do
computador.
O InstallShield no instalado automaticamente com o
Delphi. Para instal-lo voc deve inserir o CD do Delphi e
escolher a opo InstallShield Express Custom Edition for
Delphi, como mostrado na figura 1.
Uma vez instalado, ao selecionar o programa no menu Start,
Utilizando a nova verso do
InstallShield
Figura1: Inicio da instalao.
abre-se uma tela como a da Figura 2.
Selecione a opo Create a new project.... No lado direito da
tela, aparecero os modelos para este projeto e na parte de baixo o
local onde ele ser colocado. Selecione a opo Blank Setup Project
e caixa da localizao Project Name and Location: informe
C:\TheClub\TCBank.ism. D um clique no boto Create . No
quadro a esquerda aparecer uma lista de tarefas a serem feitas
para criar o projeto, como voc pode ver na figura 3. A medida
que voc seleciona uma opo para preenchimento, um texto de
ajuda mostrado na parte inferior da tela, veja a figura 3.
O primeiro passo a ser feito o preenchimento das
informaes gerais do projeto.
A figura 3 mostra essas informaes preenchidas. Aqui ,
devemos observar que alguns diretrios no so fixos, e so
mostrados entre colchetes ([ ]). Por exemplo, [
Delphi
MeGAZINE 12
Figura 2: Tela do InstallShield
Figura 3: Parte de configurao do InstallShield.
MeGAZINE 13
ProgramFilesFolder] o diretrio de arquivos de programas e
INSTALLDIR o diretrio no qual o programa ser instalado.
D um clique em Features. No lado direito da tela voc tem
uma opo, Always Install.
No h necessidade de alterar esta opo. Voc pode
configur-la quando quiser diversos tipos de instalaes
diferenciadas, como por exemplo Tpica, Mnima e Personalizada.
O prximo passo escolher os tipos de configurao. Ao dar
um clique em Setup Types , mostarda uma tela como mostra a
figura 4.
Desmarque as opes &Minimal e Cu&stom , que no sero
usadas. A ltima opo deste grupo a Upgrade Paths, mas ela
s est disponvel na verso Full, o que no o nosso caso.
O grupo seguinte determina os arquivos que sero instalados.
Selecione a opo Files.
Figura 4: Tipos de configurao.
Voc deve selecionar, na janela superior, o diretrio onde
criou o programa, C:\TCBank .
Na janela inferior, d um clique com o boto direito do mouse
sobre Destination Computer e selecione a opo Show Predifined
Folders, escolhendo o diretrio [ Installdir].
O diretrio de instalao criado abaixo de Destination
Computer. No quadro superior direito, selecione os arquivos
TCBank.exe, TCBank.GDB, arrastando-os para o quadro
inferior, no diretrio criado.
Agora clique em Objects/Merge Modules. Nesta opo voc
pode selecionar quais os pacotes que deseja instalar com o seu
programa. Neste caso, necessitamos apenas do BDE.
Sendo assim d um clique em BDE_ ENT. Ao fazer isto um
assistente ser invocado para configurar o BDE.
Siga os seguintes passos:
Delphi
MeGAZINE 14
1 Clique no boto Next.
2 Selecione o item Create a New BDE Configuration
File e coloque o nome C:\TCBank\TCBank.ini para indicar o
nome do arquivo e clique em Next.
3 Clique no boto Launch para incluir o BDE Merge
Module. D um clique no boto ADD para adicionar um novo
alias. D o nome de TCBank. Selecione o drive INTERBASE e
feche a janela. No assistente, d um clique em Next.
4 - D um clique em Finish para encerrar o assistente e
retornar instalao.
O prximo grupo configura o computador de destino. Ao dar
um clique em Shortcuts / Folders , ser mostrada um tela igual a
Figura 5.
Aqui voc deve configurar os atalhos ou diretrios que sero
incluidos no computador de destino. Vamos adicionar dois atalhos
para o sistema. Um ser no menu Start, em Programs, e outro
na rea de trabalho.
D um clique com o boto direito do mouse sobre a opo
Programs Menu e selecione New Shortcut. Uma tela para
configurar o atalho mostrada. Mude o nome do atalho para
TCBank e configure-o como est mostrado na figura 6.
Crie um novo atalho em Desktop, configurando-o da mesma
forma que o primeiro atalho.
As outras opes do grupo servem para configurar
entradas no registro, arquivos INI, entradas ODBC e associaes
de arquivos, e elas sero usadas.
Agora vamos para o grupo Customize the Setup Appearance,
para configurar a aparncia da instalao.
A primeira opo para a configurao das caixas de dilogo.
Veja a figura 7.
Figura 5: Configurao de atalhos.
Delphi
MeGAZINE 15
Figura 6: Configurao do atalho
Figura 7: Configurar a aparncia da instalao.
MeGAZINE 16
Marque apenas as seguinte opes
- Splash Bitmap
- Install Welcome
- Customer Information
- Ready to Install
- Setup Progress
- Setup Complete Success
Agora voc pode configurar as caixas de dilogo que
aparecero na instalao, bem como sua aparncia. Se voc
quiser , pode criar bitmaps personalizados para cada opo:
1 Clique na opo Splash Bitmap e mude a
propriedade Splash Bitmap para o bitmap Logo.bmp que est no
diretrio C:\TCBank. Voc pode tambm criar um bitmap, neste
caso ns utilizamos um com o tamanho de 348x295 pixels. Altere
a propriedade Sunken para Yes.
2 - Clique na opo Setup Complete Success, mude a
propriedade Show Launch Program para Yes. Clique no boto
com reticncias ao lado da propriedade Program File. Feito isto
aparecer uma tela com [ Installdir] . D um clique duplo sobre
este nome, e ento aparece o nome do executvel TCBank.exe.
Clique sobre ele e depois no boto Open.
As prximas opes do grupo s podem ser configuradas com
a verso full do InstallShield. O prximo grupo determina a
configurao mnima necessria para rodar o programa. No h
necessidade de configurarmos essas opos. Agora j estamos
prontos para desenvolver a nossa instalao.
Selecione a opo Build Your Release. Aparecero as opes
de construo dos discos. Conforme o tamanho, a instalao
quebrada em um ou mais discos.
Ns criaremos uma instalao em
um nico disco. Selecione a opo
Single Image e d um clique com o
boto direito do mouse , escolhendo a
opo Build.
A construo dos discos iniciada.
medida que isso est acontecendo,
as mensagens de progresso so
mostradas na parte inferior da
tela.Ao final, voc pode conferir o que
foi feito, usando as opes Logs e
Reports .
Voc pode testar a instalao
dando um clique na opo Test your Realese. Ao dar um clique
na opo Single Image , so apresentadas duas opes:
Run Your Setup Executa a instalao completa, gravando
os arquivos
Test Your Setup Testa apenas a interface grfica da
instalao sem gravar no disco.
Selecione Test Your Setup e verifique a interface
grfica. Caso voc queira alterar, volte aos passos anteriores.
Note que, para o programa funcionar, voc dever ter o
Interbase instalado.
Esse programa no instala o interbase, e ocorrer um erro
caso voc tente executar o TCBank sem que o Interbase esteja
instalado.
O ltimo passo a distribuio da instalao. Voc deve
selecionar a opo Distribute Your Release, escolher a opo
Single Image e determinar o local em que o programa deve ser
copiado. Voc pode inclusive fazer uma transferncia por ftp para
um local na rede.
A instalao est pronta e voc pode fechar o
InstallShield. sempre bom lembrar que voc deveria testar o
programa em uma mquina limpa, que no tenha o Delphi nem
o BDE instalado, para verificar se a instalao realmente
funciona.
Concluso.
Esta nova verso do InstallShield est muito mais completa e
tambm mais fcil que as verses anteriores. Com base no que
foi explicado acima voc poder criar novos projetos de instalao
para os seus softwares.
Delphi
MeGAZINE 17
A comunicao com um CEF (Emissor de Cupom Fiscal)
uma via de duas mos, ou seja, todo comando enviado necessita
de uma consistncia de retornos ou respostas, seja da dll de
comunicao fornecida pela Bematech seja pela resposta direta
do ECF de seus Status ao receber o comando. Nosso objetivo na
segunda parte deste curso juntos montarmos um programa de
comunicao com o ECF e como tratar os retornos e status do
ECF, bem como criarmos uma rotina de tratamento de erros
para Pouco Papel, etc... A dll Bemafi32.dll que desenvolvemos e
fornecemos em nosso site j reduz em 80% o trabalho de
integrao do Software com o ECF. Vamos l!!!!
Para toda funo chamada de seu aplicativo para a dll, existe
um retorno de valor inteiro, que indicar se a funo teve xito
ou no ao enviar o comando para o ECF. Aqui est o primeiro
filtro que deve ser realizado em nosso aplicativo, por exemplo:
Procedure TForm1.AbreCupomFiscal1Click
(Sender: TObject);
Begin
if Bematech_FI_AbreCupom(Pchar(031625342-19))<>1
then
Analisa_Erro_ECF();
End;
No cdigo acima, estamos apenas filtrando se a funo de
abertura de cupom fiscal nos devolveu 1, ou seja OK. Nesta dll
utilizamos a lgica inversa, 1(UM) ok, valores diferentes de
1(UM) tem sua tabela de retorno conforme Tabela A. Os cdigos
18 a 21 analisaremos no prximo artigo quando falarmos sobre
TEF (Transferncia Eletrnica de Fundos).
A Funo anal i sa_erro_ecf chamar outra funo da dll
para analisar o erro que o ECF devolveu, aqui segue um
pequeno truque....No necessariamente deve-se decodificar toda
a tabela de erro de retorno da dll, basta identificar se a mesma
retornou <>(Diferente) de 1(UM) em caso afirmativo verifique
ento o que o ECF tem a lhe dizer sobre o erro. Em caso do ECF
tambm responder que a operao foi OK, a sim voc programa
sua aplicao para a decodificao dos erros da dll, pois o erro foi
ocasionado no em execuo com o ECF, mas sim antes mesmo
do envio do comando para o ECF a dll detectou problemas em sua
solicitao.
Vale comentar que as Macros de Erros utilizadas pelo Delphi
no conseguem detectar os erros de ECF por se tratar de erros
proprietrios do ECF e no da plataforma de desenvolvimento.
Decodificando Erro do ECF Tratamento do ACK,
ST1, ST2
Para solicitar a dll que nos informe qual erro foi gerado pelo
ECF necessrio chamarmos a funo
Bematech_FI_RetornoImpressora(Var ACK: Integer; Var ST1:
Integer; Var ST2: Integer ) passarmos 3 variveis do tipo
INTEGER por referncia. Uma ser para armazenar o ACK e as
outras duas para armazenar o ST1 e ST2. O Byte de ACK indica
se o comando foi entendido pela impressora ou no, o Byte ST1 e
ST2 reflete em combinao de Bits, o status atual da impressora
e seu possvel erro. A figura 1.1 nos mostra os cdigos de erros
retornados em ST1 e ST2 Tabela B como os mesmos devem ser
analisados em nossa rotina Analisa_erro_ecf( ).
Automao Comercial
(ECF Emissor Cupom Fiscal)
Controle dos Erros e Status do ECF
Parte 2
Delphi
Por: Claudenir C. Andrade - claudenir@bematech.com.br
Analista de Sistemas para Automao Comercial
MeGAZINE 18
TABELA B
Procedure TForm1.AbreCupomFiscal1Click
(Sender: TObject);
Begin
if Bematech_FI_AbreCupom(Pchar(031625342-19))<>1
then
Analisa_Erro_ECF();
End;
Procedure TForm1.Analisa_Erro_ECF;
Var iACK, iST1, iST2: Integer;
Begin
iACK := 0; iST1 := 0; iST2 := 0;
iRetorno := Bematech_FI_RetornoImpressora
(iACK, iST1, iST2);
If iACK = 6 then //Aqui efetuamos a
// verificao inicial com o ACK
// Comando OK e Entendido pelo ECF
BEGIN
// Verifica ST1 com logica de Bits os erros
IF iST1 >= 128 Then BEGIN iST1 := iST1 -
128; showmessage( Acabou o Papel); END;
IF iST1 >= 64 Then BEGIN iST1 := iST1 -
64; showmessage( Pouco Pela); END;
IF iST1 >= 32 Then BEGIN iST1 := iST1 -
32; showmessage( Erro no Relogio); END;
IF iST1 >= 16 Then BEGIN iST1 := iST1 -
16; showmessage( Impressora em
Erro); END;
IF iST1 >= 8 Then BEGIN iST1 := iST1 - 8;
showmessage( Primeiro dado nao foi
um ESC); END;
IF iST1 >= 4 Then BEGIN iST1 := iST1 - 4;
showmessage( Este comando nao
existe); END;
IF iST1 >= 2 Then BEGIN iST1 := iST1 - 2;
showmessage(Cupom est aberto); END;
IF iST1 >= 1 Then BEGIN iST1 := iST1 - 1;
showmessage( Numero parametro
invalido); END;
// Verifica ST2 com logica de bits os erros
IF iST2 >= 128 Then BEGIN iST2 := iST2 -
128; showmessage( Tipo de Parametro
Invalido); END;
IF iST2 >= 64 Then BEGIN iST2 := iST2 -
64; showmessage( Memoria Fiscal
Lotada);END;
IF iST2 >= 32 Then BEGIN iST2 := iST2 -
32; showmessage( Erro na RAM);END;
IF iST2 >= 16 Then BEGIN iST2 := iST2 -
16; showmessage( Aliquota nao
Programada); END;
IF iST2 >= 8 Then BEGIN iST2 := iST2 - 8;
showmessage( Capacidade Aliquota
Lotada);END;
IF iST2 >= 4 Then BEGIN iST2 := iST2 - 4;
showmessage( Cancelamento Nao
Permitido);END;
IF iST2 >= 2 Then BEGIN iST2 := iST2 - 2;
showmessage( CGC IE Nao
Programados);END;
IF iST2 >= 1 Then BEGIN iST2 := iST2 - 1;
showmessage( Comando Nao
executado);END;
End;
If iACK = 21 Then BEGIN
showmessage( Ateno!!! + #13 + #10 +
A Impressora retornou NAK.
Comando No entendido pela
Impressora.);
Application.Terminate;
Exit;
End;
End;
Claro que existem mensagens de erro que nunca aparecero
em tempo de execuo do software uma vez que voc tenha
testando bem seu software antes de coloca-lo em produo, erros
como: cgc i e no programados, ti po de parmetros i nvl i dos,
pri mei ro dado envi ado no foi ESC, so erros praticamente
impossveis de acontecerem em tempo de execuo, mas sempre
bom deixar uma mensagem de alerta, nem que seja apenas um
showmessage para no caso em que o impossvel acontea.
Existem erros que merecem um tratamento especial, por
exemplo: Cupom Aberto, Al quota No programada.... so erros
que seu software pode contornar a situao indicando para o
Usurio que feche o cupom ou isso pode ser realizado de forma
automtica por seu software, de todas as formas no ditamos
regra de como analisar estes erros, segue de como cada um deseja
ter seu software mais depurado possvel, basta voc decidir
quais so erros crticos e no to crticos assim de acordo com sua
necessidade. A Figura 1.1 mostra a tabela de erros do ECF. Vale
acrescentar que os erros so devolvidos em 1 byte que para
encontrar cada erro necessitamos utilizar o clculo binrio,
Delphi
MeGAZINE 19
sempre diminuindo de 128 at 1, conforme nosso cdigo
demonstrado na Tabela B.
Pouco Papel ????
Conforme observamos na tabela de status do Ecf existe
um erro, que na verdade um warning , Pouco Papel. Este
pouco papel detectado quando os sensores mecnicos da
Impressora fiscal detectam que a quantidade de papel na bobina
est chegando a um nvel baixo, ou seja, quase final de papel.
Como controlar isso? Bem alguns programadores preferem que
ao setar este status seja sempre colocado em tela o aviso para a
troca do papel e que o operador se encarregue de trocar o papel ou
controlar quantos cupom ainda podem ser impressos aps este
aviso.Isso funciona, mas pode acontecer do papel acabar e
segundo a legislao voc deve imprimir uma LeituraX no
comeo e no final de cada Bobina (Esperamos que este
procedimento seja abolido com a chegada da Impressora Fiscal
Trmica, aonde todas as transaes so gravadas em uma
memria flash eliminando a necessidade de segunda via etc.. e
tal) assim que se voc deseja ter um controle bem detalhado de
quando ainda pode ser utilizado para verificar se est a hora de
realmente trocar a bobina ou no pode-se fazer uso da funo
Bematech_FI _Moni toramentoPapel ( Ref I nteger).
Esta funo necessita de uma varivel inteira que ser
tratada como ByRef (isso foi indicado do declare function das
funes conforme vimos no artigo anterior) e nesta varivel ser
escrita o nmero de linhas que foram impressos aps o bit de
Pouco Papel estiver sinalizado. Assim voc pode fazer um clculo
tirando a media de cupons impressos por seu cliente e o nmero
de linhas e permitir que o operador trabalhe at o nmero X de
linhas. Ao alcanar este numero dever forar que o usurio
troque a bobina. Segue abaixo um pequeno cdigo que pode ser
acrescentado aps cada funo chamada da dll.
Procedure TForm1.AbreCupomFiscal1Click
(Sender: TObject);
Var iRet:integer;
iILines:integer;
Begin
if Bematech_FI_AbreCupom(Pchar(031625342-19))<>1
then
Analisa_Erro_ECF();
IRet: =
Bematech_FI_Monitoramento(iLines);
If iLine>1500 then
Trocar_Papel_ECF();
End;
Procedure TForm1.Trocar_Papel_ECF;
Var iACK : Integer;
iST1 : Integer;
iST2 : Integer;
Figura 1.1
Delphi
MeGAZINE 20
iRet : Integer;
begin
showmessage(Usuario, Por Favor Troque o
Papel)
repeat
IRet: = Bematech_FI_VerificaEstadoImpressora
(iACK,iST1,iST2 )
Until iST1 < 64
// Ficamos dentro deste lao at que
// o usurio troque o papel
// Comparamos o bit de pouco papel do
// ST1 que devolver 0(zero) quando
// o usurio trocar o papel e sair
// deste lao.
End;
Prximos Passos!!! TEF Transferncia
Eletrnica de Fundos
J que agora voc est craque em depurar e
controlar os erros do ECF agora vamos avanar um
pouco mais.
No Prximo artigo veremos como criar relatrios exigidos pela
legislao Convenio 50/00 e 85/01 - Mapa Resumo, Relatrio do
Tipo 60 Analtico e Mestre e como efetuar operaes com TEF
(Transferncia Eletrnica de Fundos) Carto de Dbito e
Credito, utilizando a linha discada e os gerenciadores padres
fornecidos pelas bandeiras de Cartes de Crdito. At L!!!
Delphi
MeGAZINE 21
Performance Lgica Otimizao:
A performance de um Banco de Dados, muito influenciada
pela estrutura e a forma no qual voc projetou seu Banco de
Dados. Normalizao, Tamanho da Pgina de Dados, ndices,
Stored Procedures, Triggers, so fundamentais para a uma boa
performance do seu Banco de Dados, quando bem projetados.
No existe uma regra nica para analise dos componentes
citados acima, cada caso, um caso!
Performance Fsica Otimizao:
A normalizao citada mais acima, tambm pode ser
quebrada para melhorar a performance fsica de uma Query,
devemos as vezes colocar todos os dados necessrios de uma
tabela em uma tabela apenas, para no haver a necessidade de
pesquisas em outras tabelas (Joins).
Ok, vamos a parte tcnica do artigo. Boa Leitura!
InterBase e o uso dos ndices.
A gerncia de ndices no InterBase bem diferente da
utilizada em outros servidores de banco de dados. O InterBase
tem dois tipos de ndices: Navegao e Bit Mapped.
ndices de Navegao
Um ndice de navegao percorrido de valor em valor, na
ordem em que foi criado. Isso permite que uma query acesse o
primeiro elemento de uma tabela muito rapidamente, caso exista
um ndice para uma coluna no ORDER BY.
Veja a query abaixo:
SELECT emp_no, first_name
FROM employee
ORDER BY hire_date;
Aqui, caso exista um ndice para a coluna Hire_date, a
leitura dos registros ser bem mais rpida.
ndices Bit Mapped
Um ndice bit mapped pode ser usado para se conseguir
executar o JOIN ou ORDER BY em que cada ndice percorrido
para verificar os valores antes que todos sejam juntados usando
operaes lgicas de OR/AND. Vamos citar o Otimizador de
Query.
Otimizador de Query:
No motor do Banco de Dados InterBase existe um
componente que chamamos de Otimizador de Querys, este
otimizador, tem a funo de montar o melhor Plano de Consulta
para a sua Query, sendo ela uma simples:
SELECT Coluna FROM TABELA WHERE Coluna =
:COLUNA, ou, uma Query complexa onde so usados vrios
Joins:
SELECT * FROM employee E, departament D, job J
WHERE E.Depto_no = D.Dept_no AND
E.Job_Code = J.Job_Code AND
E.Job_Country = J.Job_Country AND
E.Job_Grade = J.Job_Grade AND
E.Dept_no < 150;
O SELECT montado acima apenas um exemplo, existem
Querys bem mais complexas do que a apresentada neste
exemplo, onde podemos usar Agrupamentos, Unions, etc.
O Motor do Banco de Dados InterBase, avaliou a sua Query,
combinando os ndices, o relacionamento usado, e no final ele
verificou se a Otimizao est boa ou no. Caso no esteja a
contento para o Banco de Dados InterBase Estatstica, o
InterBase pode re-avaliar a sua Query, ou simplesmente no
fazer nada, montando uma Query Natural. E para todo este
mecanismo, o InterBase usou o nosso: ndice Bit Mapped.
ndices uma das partes mais importantes quando se fala
em otimizao em um banco de dados. Mas, ateno: no crie
ndices aleatoriamente. Cada ndice, assim como cada coluna em
ndices, Performance e Estatsticas no InterBase
Introduo:
Neste artigo veremos o que um indice, como eles podem nos ajudar na performance com o Banco de Dados
InterBase (as dicas sobre ndices, tambm servem para a grande maioria dos Bancos de Dados do mercado).
Aps, explico o que so e como entender as Estatsticas que o Banco de Dados InterBase nos mostra, veremos
tambm algumas dicas de performance em um comando SELECT, uma pequena introduo a planos de
consulta PLAN, como usar o componente IBStaticalService da palheta InterBase Admin do Delphi, o uso do
GSTAT para recuperar as estatsticas do InterBase via linha de comando.
Por Anderson Haertel Rodrigues (AHR): administrador de bancos de dados, desenvolvedor de sistemas e componentes.
Mora em Florianpolis/SC e pode ser contactado em anderson.hr@bol.com.br.
Interbase
MeGAZINE 22
um servidor de banco de dados SQL, precisa ser analisado antes
da criao e ter verificado seu real propsito. Pois, em contra
partida, o ndice deixa a manuteno na tabela mais lenta.
Por default, nenhum ndice definido quando se cria uma
tabela. O InterBase cria um ndice automaticamente quando
definido uma Primary Key e quando definida uma Foreign Key.
No caso de uma Primary Key, criado um ndice nico; j para
uma Foreign Key, criado um ndice nico em cima da chave
primria e um ndice que permite duplicaes para a chave
estrangeira.
Reconstruo de ndices
Depois de muitas alteraes na sua base de dados, o seu
ndice pode ficar desbalanceado. Voc pode, e deve, melhorar o
balanceamento de seu ndice executando uma reconstruo. O
procedimento para reconstruo de ndices o seguinte.
O primeiro passo desativar o ndice:
ALTER TABLE nome-do-ndice INACTIVE;
O segundo passo reativar o ndice:
ALTER TABLE nome-do-ndice ACTIVE;
Isso deixa o ndice balanceado e com sua performance mais
rpida.
Estatsticas
Aps vrias alteraes do tipo insero/atualizao em uma
base de dados, onde um determinado ndice atua, o InterBase
recalcula a seletividade do ndice Lembram da explicao do
ndice Bit Mapped ?!. Isto , ele recalcula os valores estatsticos
internos indicando qual o menor caminho para efetuar uma
determinada query.
Para forar o InterBase a realizar est operao, use o
seguinte comando:
SET STATISTICS INDEX nome-do-ndice;
Como o servidor vai avaliar cada ndice existente para a
coluna em questo, tome cuidado para no criar ndices em
colunas que j possuam ndices. Nesse caso, ocorreria queda de
performance.
Dicas para eficincia dos ndices:
1) Crie ndices para todas as colunas que participem de
ORDER BY e JOINS.
2) Reconstrua os ndices periodicamente, com ALTER
INDEX.
3) Lembre-se que ndices so ordenados de forma ascendente
e ou descendente. Um ndice s ser usado apenas se a ordenao
no ORDER BY for a mesma do ndice.
4) ndices prejudicam a performance em operaes de
atualizao de dados (INSERT, UPDATE, DELETE) porque so
atualizados pelo banco durante essas operaes. Nesse caso, voc
pode desativar ndices antes de realizar muitas atualizaes e
ativ-los novamente depois*.
5) Em SELECTs, use sempre a seguinte ordenao para
as colunas:
A) Colunas SmallInt,
B) Colunas Integer;
C) Colunas Data;
D) Colunas String;
Seguindo esta ordem, seu SELECT ser mais rpido.
6) Faa Backups e Restores peridicos. Alguns dos
benefcios so:
Reconstruo dos ndices
Eliminao de verses antigas de registros
Desfragmentao das pginas de dados
Reescrita das pginas de uma tabela em uma rea
contnua (desfragmentao)
Proteo dos seus dados contra imprevistos
Ao executar um Backup, execute o shutdown no servidor! O
Backup pode ser feito com o InterBase em uso, mas como o
backup, na realidade, uma transao parte, ele enxergar
apenas os registros como existiam no momento que o backup
iniciou.
* No possvel desativar e ou ativar um ndice em Stored
Procedures e ou Trigger, pois, no podemos usar comandos DDL
(Data Definition Language) em Stored Procedures e ou
Triggers. Para usarmos este mecanismo, precisamos faz-lo pelo
Delphi.
Estatsticas e Performance
Outra dica relacionada performance analisar as
estatsticas mantidas pelo banco. Nessa anlise, podemos ver
como est a mdia de preenchimento do banco (Average Fill), o
nmero de pginas de dados (Data Pages) e o valor de
profundidade de rvore (Depth).
Para comear, usaremos o IBConsole para obter estatsticas
do InterBase, com o banco de exemplo employee.gdb. Abra o
IBConsole e clique com o boto direito em cima do Alias para
employee.gdb e escolha Database Statistics (veja a Figura 1).
Interbase
MeGAZINE 23
Figura 1. Acesso a estatsticas do banco no IBConsole
Na janela Database Statistics, escolha All Options. Com
isso, o InterBase mostra todas as estatsticas do banco, como a
seguir:
Service started at 16/10/2001 17:43:47
Database C:\Arquivos de
programas\Firebird\Examples\v5\Employee.gdb
(...)
Analyzing database pages ...
COUNTRY (128)
Data pages: 1, data page slots: 1, average fill: 15%
(...)
Index RDB$PRIMARY1 (0)
Depth: 1, leaf buckets: 1, nodes: 14
(...)
EMPLOYEE (131)
Data pages: 2, data page slots: 2, average fill: 42%
(...)
Index NAMEX (1)
Depth: 1, leaf buckets: 1, nodes: 42
(...);
Informaes sobre tabelas
A listagem comea com informaes gerais sobre a base de
dados (arquivo, data de criao, tamanho de pgina, Shadows,
OAT - Oldest Active Transaction, verso do ODS e outras). Logo
depois, vm as informaes sobre as tabelas e ndices, ordenadas
alfabeticamente pelo nome da tabela.
Uma das informaes sobre tabelas o nmero de Data
Pages e o Average Fill, importantes para as tabelas maiores ou
mais acessadas na base. Se o valor de Average Fill for menor que
60%, devemos fazer um Backup e um Restore para tentar
diminuir a fragmentao. Se a fragmentao no for reduzida,
uma soluo aumentar o tamanho da pgina (a ltima verso
do FireBird, uma verso open source do InterBase, j aceita
pginas maiores que 8192).
Informaes sobre ndices
O InterBase utiliza uma variao de rvore-B para ndices,
com um valor de Depth que normalmente deve estar abaixo de 4.
Se no estiver, voc deve reconstruir o ndice. Novamente, se a
profundidade no diminuir, voc deve aumentar o tamanho da
pgina de dados. Nodes indica o nmero de valores existentes no
ndice.
Plano de Consulta PLANs
Uma pequena introduo a Planos de Consulta, pois, o
mesmo tambm est relacionado a Performance de um Banco de
Dados InterBase.
PLAN : A forma que o InterBase determina como sero
usados os ndices para a recuperao das informaes das tabelas
envolvidas no SELECT. A explicao de ndices Bit Mapped vai
de cncontro com boa parte da explicao sobre Plans!
Um bom artigo sobre PLANs encontrado no seguinte link:
http://www.ibphoenix.com/ibp_quep.html
IBStatisticalService
O componente IBStatisticalService, na paleta Interbase
Admin responsvel pelo retorno das estatsticas de bancos
InterBase. Vamos dar uma olhada nas suas principais
propriedades e mtodos.
A propriedade Active conecta o componente base de dados.
DatabaseName define o caminho da base. A propriedade Protocol
define o protocolo usado para conexo e ServerName especifica o
nome ou o IP do servidor.
A propriedade Options determina quais estatsticas sero
extradas. Veja a seguir a definio do tipo da propriedade
Options:
type TStatOption = (DataPages, DbLog, HeaderPages,
IndexPages, SystemRelations);
Agora veja o significado de cada opo:
DataPages: Recupera as estatsticas de dados das tabelas
DbLog: Interrompe as estatsticas aps retornar
informaes de Log
HeaderPages: Interrompe as estatsticas aps retornar
informaes de cabealhos das pginas de dados
IndexPages: Recupera estatsticas de ndices
SystemRelations: Recupera estatsticas de tabelas de
sistema
Um dos mtodos mais importantes GetNextLine, que
retorna a linha da estatstica e pula para o prximo registro da
estatstica, e ServiceStart, usado para iniciar o servio.
Aplicao
Vamos criar a nossa aplicao de Estatstica via Delphi.
Inicie o Delphi e abra um projeto novo. Acrescente um Button,
Interbase
MeGAZINE 24
um SpeedButtom, um Edit, um OpenDialog e um
IBStatisticalService. Sua tela dever ficar parecida com a
mostrada na Figura 2.
Figura 2. Exemplo para obteno de estatsticas no Delphi
Nota: A palheta InterBase Admin do Delphi, s aparece se
voc tiver o InterBase instalado na sua maquina
D um duplo clique no componente IBStatisticalService para
mostrar uma tela de configuraes para o servio. Clique em
browse para escolher o banco employee.gdb e configure as opes
de conexo como na Figura 3.
if ChckBxHeaderPages.Checked then
Options := [HeaderPages];
if ChckBxIndexPages.Checked then
Options := [IndexPages];
if ChckBxSystemRelations.Checked then
Options := [SystemRelations];
{ Inicia o Servio. }
ServiceStart;
while not Eof do
MmEstatisticas.Lines.Add(GetNextLine);
{ GetNextLine, alm de ir para prxima linha, obtem a
linha corrente antes de saltar a mesma. Por isso a
atribuio direta no Lines.Add() do Memo. }
finally
{ Foi executado at fim e ou por um acaso ocorreu um erro,
se desconecta do Banco.}
Active := False;
end; end;
E, por ltimo, o evento para abrir o OpenDialog e escolher o
banco InterBase desejado.
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpnDlgGDB.Execute then
EdtGDB.Text := OpnDlgGDB.FileName;
end;
Aps o cdigo ter sido digitado corretamente, podemos fazer
vrios testes com a propriedade Options do IBStatisticalService e
vermos o que as mesmas nos retornam!
Estatsticas com GSTAT
GSTAT um utilitrio que acompanha o InterBase/FireBird,
usado para a obteno de estatsticas via linha de comando.
muito til no Linux. Veja sua sintaxe bsica:
GSTAT [opcoes] GDB
As seguintes opes podem ser usadas:
-a Analise das Pginas de Dados;
-d Analise nica e exclusivamente das Pginas de Dados;
-h Informaes de Cabealho;
-i Analise de ndices;
-s Analise da System Table;
-z Informaes de verso do Banco;
Veja um exemplo de uso:
GSTAT h i a C:\Arquivos de
programas\Firebird\Examples\v5\Employee.GDB
Concluses
A performance de um banco de dados est ligada diretamente
a uma srie de fatores, que vo desde a rede fsica, ao tamanho
correto da pgina de dados, normalizao, Otimizao e os no
menos importantes ndices e a forma de escrita do SELECT.
Figura 3.
Configurao do
componente
IBStatisticalService
Para o boto Obter Estatsticas, crie o seguinte cdigo:
procedure TForm1.Button1Click(Sender: TObject);
begin
with IBStstclSrvcExemplo do
try
{ O DataBase escolhido. }
DatabaseName := EdtGDB.Text;
{ No pede Login. }
LoginPrompt := False;
{ Um IF Simples para testarmos qual a op escolhida para
mostrar as estatsticas com o componente IBStaticalService. }
if ChckBxDataPages.Checked then
Options := [DataPages];
if ChckBxDBlog.Checked then
Options := [DbLog];
Interbase
MeGAZINE 25
Amigos do The Club, neste artigo o ClubePalm
(www.clubepalm.com.br) apresenta-lhes o PocketStudio, lanado
recentemente, a ferramenta de desenvolvimento para Palm
mais aguardada e comentada ultimamente, principalmente por
aqueles que tem o Delphi como seu ambiente de trabalho.
Construda pela Pocket-Technologies Inc. (www.pocket-
technologies.com), uma empresa localizada no Estado de
Minnesota nos Estados Unidos formada por desenvolvedores
PocketStudio:
Poder, Produtividade e Facilidade de Uso
experientes e muitos profissionais, PocketStudio muito mais
que um simples IDE, conta com um compilador desenvolvido pela
prpria Pocket-Technologies, muito poderoso e rpido, que gera
aplicaes nativas PalmOS com velocidade e tamanho (KB)
comparveis s geradas por compiladores C e SEM necessidade
de runtime.
S para exemplificar, a maioria das ferramentas de
desenvolvimento para a plataforma Palm, geram executveis que
precisam de runtimes, ou seja, bibliotecas
auxiliares instaladas no equipamento,
necessrias para a execuo da aplicao. Em
algumas ferramentas o runtime chega a 300
KB, excessivo para dispositivos PDA que em
geral tem pouca memria, isso sem contar que
os runtimes tornam bem mais lentas as
aplicaes.
A linguagem do PocketStudio
Pascal, o que faz a ferramenta atingir um
grande nmero de desenvolvedores em todo o
mundo e tambm aqui no Brasil. No entanto,
preciso salientar que o PocketStudio no
suporta Object-Pascal, somente a linguagem
Pascal procedural, ainda assim, mais natural
para ns desenvolvedores Delphi que no
precisamos aprender outra linguagem para
desenvolver aplicaes para Palm. Veja o IDE
do PocketStudio na Figura 1.
Figura1
Por: Marcio Alexandroni
ClubePalm A Referncia do Desenvolvedor PalmOS.
Palm
MeGAZINE 26
O ambiente de desenvolvimento tambm lembra muito o
modo de trabalhar do Delphi, o Editor, a Janela de Status abaixo
e a janela Code Explorer ao lado do Editor. Os atalhos para
compilar (CTRL+F9), rodar (F9), finalizar a execuo
(CTRL+F2) entre outras operaes, tambm so os mesmos que
no ambiente do Delphi. Sinta-se em casa!
Alm disso, PocketStudio conta com um Editor de
Resources. Deixe-me esclarecer o que so Resources no PalmOS:
o sistema operacional PalmOS tem diversos objetos visuais como
Labels, Fields, Lists entre outros, que formam os Resources do
sistema operacional. Diferentemente do Windows, o PalmOS no
aceita o acrscimo de novos objetos visuais at a verso atual
(4.0), por isso, o PocketStudio no trabalha com uma VCL , mas
com funes especficas do sistema operacional para manipulao
destes objetos visuais. Talvez esta seja a maior dificuldade do
desenvolvedor Delphi em comear a trabalhar com o
PocketStudio e conseqentemente com a plataforma PalmOS,
mas basta um pouco de estudo e com certeza todos logo estaro
adaptados ao modo de programar para Palm.
O PocketStudio tem um excelente Editor de Resources para
criar visualmente os formulrios, menus e utilizar todos os
recursos visuais do Sistema Operacional PalmOS, utilizando-se
da Barra de Componentes, inclusive os objetos mais avanados
como as Tables e os Gadgets. Tables so objetos como o Grid no
Windows e Gadgets so objetos que permitem ao desenvolvedor
criar desenhos dentro do objeto atravs de alguns comandos do
sistema operacional, inclusive responder a alguns eventos que o
objeto suporta, como o toque da caneta pelo usurio. Veja na
figura 2 o Editor de Resources do PocketStudio.
Quer mais recursos? H muitos outros, veja a explicao de
porque colocamos o ttulo deste artigo como Poder, Produtividade
e Facilidade de Uso:
Poder
o Tem acesso a toda API do Sistema Operacional PalmOS.
Algumas ferramentas de desenvolvimento para Palm no
permitem o acesso s APIs do sistema operacional, obrigando o
desenvolvedor a desenvolver interfaces ou gastar dinheiro para
adquirir extenses para a ferramenta, para simplesmente poder
acessar estes recursos.
o Gera executveis nativos PalmOS sem necessidade de
runtime, como explicamos anteriormente.
o Permite instrues assembler no meio do cdigo (inline
assembler) para aqueles com bastante conhecimento do PalmOS
e do processador Motorola DragonBall!
o Suporte a PalmOS 2.0 a 4.0, permitindo que o
desenvolvedor crie aplicaes que rodam desde os modelos mais
antigos, at os modelos mais modernos.
o Suporte a HandEra, Kyocera, HandSpring, Symbol, Sony,
etc., que so os principais dispositivos Palm disponveis no
mercado, claro, alm dos tradicionais modelos da Palm e da IBM.
Quer um exemplo dos modelos citados? Vamos l:
HandEra um Palm com mais recursos
do que os tradicionais, principalmente sua tela
com resoluo de 240X320 contra os 160X160
dos modelos tradicionais.
Kyocera o primeiro fabricante mundial a
lanar um telefone celular, j disponvel no
Brasil, com tecnologia Palm incorporada. Isto
mesmo, celular CDMA+Palm no mesmo
equipamento!
HandSpring so modelos de Palm
totalmente expansveis, atravs de um slot
proprietrio, e dispe de vrios perifricos que
podem ser incorporados ao PDA, como telefones
GSM, leitores de cdigo de barras, cmeras, etc.
Symbol o mais conhecido fabricante
mundial de equipamentos para coleta de dados.
Seus modelos possuem desde Leitores de Cdigo
de Barras incorporado, at sistemas de
comunicao por rdio freqncia.
Sony tem os modelos mais cobiados pelos
usurios da plataforma Palm, os Sony Cli. H
Figura 2
Palm
MeGAZINE 27
modelos com 65K cores, tela com resoluo de 320X320, som
estreo, perifricos como Modem de alta velocidade, MP3-Player,
fone de ouvido entre outros.
o Acessa Bancos de Dados mveis como o Oracle Lite. Isso
mesmo, Oracle Lite roda no Palm! Porm, no so todas as
ferramentas que permitem acessar este banco de dados, mas o
PocketStudio acessa!
Produtividade
o Database Wizard cria uma aplicao bsica de entrada de
dados em segundos, com criao visual do banco de dados, muito
importante para os iniciantes na plataforma.
o Aceita Plugins no IDE para expanso das caractersticas da
ferramenta. Isto significa que os desenvolvedores que queiram
integrar novas funcionalidades ferramenta podem faz-lo
atravs desta interface.
o Conduit Wizard auxilia na criao dos conduits para seus
bancos de dados. J falamos sobre Conduits aqui no The Club, o
PocketStudio dispe de um Conduit genrico para simplificar a
transferncia dos dados do desktop para o Palm e vice-versa.
o Web Update Atualizao da ferramenta diretamente pela
Internet, muito importante para ns desenvolvedores!
o Integrao com o Emulador do PalmOS. O Emulador um
programa que usamos para testar as aplicaes antes de
distribui-las para os Palms. Com ele, podemos fazer debug da
nossa aplicao com total segurana e comodidade.
Facilidade de uso
o Ambiente similar ao do Delphi e linguagem Pascal
procedural.
o Debug passo-a-passo com janela Watch.
o Editor de texto que destaca a sintaxe da linguagem.
o Editor de Resources WYSIWYG.
o Final Stroke recurso que auxilia a edio de cdigo
mostrando argumentos e retorno das funes, eventos e outras
informaes.
Veja na figura 3 o Debug do PocketStudio em ao, com o
Emulador aberto e o breakpoint setado e o programa parado na
primeira linha do comando case. Do lado direito, veja tambm a
janela Watches, exibindo o contedo da varivel Operator, que
uma varivel Global dentro desta aplicao exemplo.
Alm destas caractersticas, h uma grande quantidade de
aplicaes exemplo acompanhando a ferramenta que certamente
fornecero uma tima base para comear, inclusive exemplos de
aplicaes que acessam servidores corporativos, utilizando as
bibliotecas da Asta Technology Group (www.astatech.com). Com
certeza, muitos de vocs j devem conhecer os produtos da
AstaTech, componentes Delphi que permitem que uma aplicao
acesse dados em qualquer tipo de servidor de banco de dados sem
necessidade de configurao e instalao de Clients, usando
qualquer tipo de comunicao, seja rede, linha discada, internet,
etc., atravs de um Middleware que a AstaTech dispe. Pois bem,
a AstaTech desenvolveu produtos para o desenvolvimento de
aplicaes para Palm, compatveis tambm com o PocketStudio e
que possibilitam que o Palm acesse o mesmo middleware. J
imaginou um Palm acessando um banco de dados Oracle atravs
de uma linha discada ou mesmo conectado a um celular,
enviando e recebendo dados? Isto possvel com o PocketStudio!
Na minha opinio, uma das caractersticas mais importantes
entre as citadas neste artigo que esta ferramenta foi totalmente
construda com a participao dos desenvolvedores. Fui beta
tester do PocketStudio desde o incio dos testes com o compilador,
quando o desenvolvimento estava comeando, e neste perodo a
opinio dos beta testers foi levada em conta em muitas
ocasies. O newsgroup um local excelente para a troca
de informaes entre os desenvolvedores e o pessoal da
Pocket-Technologies participa ativamente dele.
Acredito que seja a nica ferramenta comercial de
desenvolvimento para Palm que tenha sido construda
com a participao de quem realmente utiliza estas
ferramentas: o desenvolvedor.
H uma verso trial do PocketStudio disponvel em
www.pocket-technologies.com para quem quiser
conhecer esta ferramenta mais de perto.
Fiquem ligados e aguardem as novidades!
Figura 3
Palm
MeGAZINE 28
Gerar arquivo DB via TQuery
Em muitas situaes necessitamos gerar uma tabela a partir
do resultado de um Query. Isso at possvel atravs do
componente TBachMove, porm iramos necessitar de um
TBatchMove e um componente TTable para isso, o que muitas
vezes no vivel. Podemos facilmente executar esta tarefa via
APIs do BDE, como mostra o simples exemplo abaixo:
Uses BDE;
procedure GeraTab(Qry: TQuery; TabNome: String);
var
h : HDBICur;
ph : PHDBICur;
begin
if Qry.Active then
Qry.Close;
Qry.Prepare;
Check(dbiQExec(Qry.StmtHandle, ph));
h := ph^;
Check(DbiMakePermanent(h, PChar(TabNome), True));
Qry.Open;
end;
procedure TForm1.BT_SalvarClick(Sender: TObject);
var
TbNome: String;
begin
TbNome := InputBox(Salvar Resultado da Query,
Informe o nome para o arquivo, );
BT_Salvar.Enabled := not BT_Salvar.Enabled;
try
if TbNome <> then
GeraTab(Qry_Employee, TbNome)
else
raise Exception.Create(Informe o Nome da
Tabela!!!);
finally
BT_Salvar.Enabled := not BT_Salvar.Enabled;
end;
end;
O projeto de exemplo referente esta dica est disponvel para
download em nosso site no endereo www.theclub.com.br/revista/
qgeratab.zip.
Verificar Verso do Word
Neste exemplo utilizamos o CreateOLEObject() para verificar
a verso do Word que est rodando na mquina.
implementation
uses ComObj;
{$R *.DFM}
function GetWordVer: String;
var
W: Variant;
begin
try
W := CreateOLEObject(Word.Application);
Result := W.Version;
W := Null;
except
Result := Word no encontrado!;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := GetWordVer;
Dicas &Truques
MeGAZINE 29
end;
end.
Obs -> Este cdigo retorna a verso de controle interna do Word,
ou seja, em nosso caso utilizamos o Office XP, a verso retornada
foi a 10.0.
I/O Erros
Algumas vezes o Pascal retorna alguns erros que no so
encontrados em manuais. Se voc alguma vez receber um cdigo
IORESULT na faixa de 150-199, subtraia 131 deste valor e com
base no resultado olhe no manual de referencia do DOS ( ou na
lista mostrada abaixo ) para ver o erro relacionado.
Um erro que o usurio v freqentemente o erro nmero
163, que significa Sharing Violation, ou seja, violao de
compartilhamento. Este erro ocorre quando dois usurios tentam
acessar o mesmo arquivo ao mesmo tempo.
Nesta lista de erros a primeira coluna tem o nmero do erro
no formato decimal, a segunda coluna tem o erro em
hexadecimal e a terceira coluna tem a explicao do erro.
DEC HEX DESCRIO
01 01 Invalid function number
02 02 File not found
03 03 Path not found
04 04 Too many open files (no handles left)
05 05 Access denied
06 06 Invalid handle
07 07 Memory control blocks destroyed
08 08 Insufficient memory
09 09 Invalid memory block address
10 0A Invalid environment
11 0B Invalid format
12 0C Invalid access mode (open mode is invalid)
13 0D Invalid data
14 0E Reserved
15 0F Invalid drive specified
16 10 Attempt to remove current directory
17 11 Not same device
18 12 No more files
19 13 Attempt to write on a write-protected diskette
20 14 Unknown unit
21 15 Drive not ready
22 16 Unknown command
23 17 CRC error
24 18 Bad request structure length
25 19 Seek error
26 1A Unknown media type
27 1B Sector not found
28 1C Printer out of paper
29 1D Write fault
30 1E Read fault
31 1F General failure
32 20 Sharing violation
33 21 Lock violation
34 22 Invalid disk change
35 23 FCB unavailable
36 24 Sharing buffer overflow
37 25 Reserved
38 26 Unable to complete file operation (DOS 4.x)
39-49 27-31 Reserved
50 32 Network request not supported
51 33 Remote computer not listening
52 34 Duplicate name on network
53 35 Network name not found
54 36 Network busy
55 37 Network device no longer exists
56 38 NetBIOS command limit exceeded
57 39 Network adapter error
58 3A Incorrect network response
59 3B Unexpected network error
60 3C Incompatible remote adapter
61 3D Print queue full
62 3E No space for print file
63 3F Print file deleted
64 40 Network name deleted
65 41 Access denied
66 42 Network device type incorrect
67 43 Network name not found
68 44 Network name limit exceeded
69 45 NetBIOS session limit exceeded
70 46 Temporarily paused
71 47 Network request not accepted
72 48 Print or disk redirection is paused
73 49-4F Reserved
80 50 File already exists
81 51 Reserved
82 52 Cannot make directory entry
83 53 Fail on INT 24
84 54 Too many redirections
85 55 Duplicate redirection
86 56 Invalid password
87 57 Invalid parameter
88 58 Network device fault
89 59 Function not supported by network (DOS 4.x)
90 5A Required system component not installed (DOS 4.x)
Dicas &Truques
MeGAZINE 30
P ergunta: Como fao para configurar meu
aplicativo desenvolvido em Clipper 5.2 para rodar no
Windows XP?
Resposta: Efetuamos alguns testes e foi necessrio apenas
definir uma varivel para o SET CLIPPER nas Environment
Variables do Windows.
Para isso acesse o Control Painel | System | Advanced
| Environment Variables | System Variables e crie um
varivel Clipper, como o exemplo abaixo...
Com isso funcionou sem problemas!
Dvida enviada por Intime Consultoria, Ararangua/SC.
P ergunta: Tenho um programa instalado em 2
estaes. Numa das mquinas contece o seguinte:
Quando dou um Preview em qualquer relatrio, no
consigo visualizar os botes de navegao do
QuickReport, consigo fazer todas as operaes ir para
prxima pgina, imprimir o relatrio, mas vai tudo no
rumo porque os botes no aparecem. O que poderia
ser? J foi instalado o programa novamente,
reinstalado o Windows e ainda continua o problema.
Resposta: Este problema est relacionado a uma DLL do
Windows chamada COMCTL32.DLL, que responsvel em
mostrar/tratar as imagens de uma TToolBar por exemplo. Para
corrigir o problema, basta atualizar esta DLL ou copiar de uma
mquina que esteja funcionando para a mquina que no est.
Dvida enviada por Mnica Mikami, Maring/PR.
Pergunta: Como posso fazer em minha aplicao
para identificar se o Interbase est ativo ou no?
Resposta: Na unit IBIntf no Delphi 5, existe uma funo
chamada TryIBLoad, a qual faz a verificao do Interbase:
implementation
uses IBIntf;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
if TryIBLoad then
ShowMessage(Interbase est rodando!)
else
ShowMessage(Interbase no est rodando!);
end;
Dvida enviada por Everson S. Batista, Ararangua/SC.
Perguntas &Respostas

You might also like