Escolar Documentos
Profissional Documentos
Cultura Documentos
Captulo 12
Intraweb
A grande revoluo, e por que no dizer, a agradvel surpresa presente na nova verso do Delphi: Intraweb. Desenvolvido pela
empresa Atozed Software, e rapidamente adotado pela Borland numa distribuio especial (existe uma verso mais poderosa),
vem ganhando simpatizantes em todo o mundo. Diversas empresas esto desenvolvendo componentes para trabalhar em
conjunto com o Intraweb, dando ainda mais poder a esta incrvel tecnologia.
Desenvolver aplicaes com o Intraweb bastante agradvel e prtico e certamente vai encorajar excelentes desenvolvedores
Delphi, que antes torciam o nariz para a tecnologia WebBroker, devido s dificuldades comuns encontradas no
desenvolvimento de aplicaes para Internet, como o aprendizado de HTML, JavaScript, alguma ferramenta aliada, como o
DreamWeaver, entre outros.
Desenvolvedores Delphi, criem coragem para entrar no mundo Internet com o Intraweb. Digo isso a todos que chegaram nesse
captulo, passando pelos anteriores, ou at mesmo a quem abriu o livro aqui, neste tpico.
Algumas curiosidades
A Borland vem trabalhando com extremo profissionalismo, apoiando diversas empresas
parceiras em projetos de tecnologia para as suas ferramentas. S para ter uma idia disso
tudo, incorporou na verso 7 diversas tecnologias, como o prprio Intraweb, Rave Report
(fantstico gerador de relatrios, e forte substituto do QuickReport), RxLib agora vem no
CD 2, Indy Components, j visto no captulo 9, entre outras tecnologias. Se a tecnologia
boa, pode ter certeza de que ser adotada nas prximas verses, e isso vem crescendo a
cada dia. Sorte nossa!
Antes de colocar a mo-na-massa, vou apresentar seus principais componentes:
Os componentes esto divididos em quatro sees: IWStandard, IWData,
IWClientSide e IWControl.
236
Intraweb 237
Componentes IWStandard
COMPONENTE
TIWApplet
TIWButton
TIWCheckBox
TIWComboBox
TIWEdit
TIIWHRule
TIWImage
TIWImageFile
TIWLabel
TIWLink
TIWList
TIWListBox
TIWMemo
TIWMenu
TIWRadioGroup
TIWTable
DESCRIO/USO
COMPONENTE
TIWTemplateProcessorHTML
TIWText
TIWTimer
TIWTreeView
TIWURL
TIWFile
TIWGrid
TIWRectangle
TIWRegion
DESCRIO/USO
Componentes IWData
COMPONENTE
TIWDBCheckbox
TIWDBCombobox
TIWDBEdit
TIWDBGrid
TIWDBImage
TIWDBLabel
TIWDBListbox
DESCRIO/USO
Intraweb 239
COMPONENTE
TIWDBLookupCombobox
TIWDBLookupListbox
TIWDBMemo
TIWDBNavigator
TIWDBText
TIWDBFile
DESCRIO/USO
Componentes IWClientSide
COMPONENTE
TIWCSLabel
TIWCSNavigator
TIWDynamicChart
TIWDynamicChartLegend
TIWDynGrid
DESCRIO/USO
Componentes IWControl
COMPONENTE
TIWClientSideDataSet
TIWClientSideDataSetDBLink
TIWLayoutMgrForm
TIWLayoutMgrHTML
TIWModuleController
TIWPageProducer
TIWStandAloneServer
DESCRIO/USO
Antes de Comear
Este tpico muito importante, pois precisamos conhecer alguns conceitos do Intraweb.
Na verso distribuda com o Delphi 7, o Intraweb coloca automaticamente o nome das units iniciais bem como do projeto. Isso
pode dificultar um pouco no comeo, mas em nosso caso iremos criar uma estrutura de diretrios com o intuito de organizar
nossos exerccios com o Intraweb, e evitar conflitos.
Crie a seguinte estrutura de diretrios (diagrama 12.1)
Intraweb 241
C:\CursoWeb
Intraweb
exercicio1
exercicio2
exerccio3
exerccio4
exerccio5
exerccio6
clientes
Diagrama 12.1
Intraweb 243
!"
!"
!"
IWProject.DPR
IWUnit1.PAS
ServerController.PAS
Projeto
Unit principal, contendo o formulrio principal da aplicao
Controle principal da aplicao, com sesses de usurio, tipo de acesso,
protocolos de segurana (SSL), browsers, entre outros.
Agora com o foco no formulrio (selecione o formulrio da unit IWUnit1), insira um componente do tipo IWLabel e altere sua
propriedade caption para Exerccio 1. A figura 12.5 ilustra o formulrio principal com o objeto IWLabel1.
Intraweb 245
TformMain = class(TIWAppForm)
IWLabel1: TIWLabel;
public
end;
implementation
{$R *.dfm}
uses
ServerController;
end.
Basicamente define a classe TformMain com o objeto IWLabel1.
Para analisar mais profundamente nosso primeiro exerccio, clique com o boto direito do mouse no formulrio principal e
selecione a opo Preview. A figura 12.10 ilustra o Preview do Intraweb.
Intraweb 247
<span id="IWLABEL1" class="IWLABEL1CSS">IWLabel1</span>
</body>
</html>
Complicado, no acham? Podem ficar tranqilos, pois dificilmente teremos que dar manuteno no cdigo HTML. A idia
justamente essa, utilizar o RAD (Rapid Application Development) do Intraweb para criar e dar manuteno s nossas
aplicaes.
S para finalizar a parte de cdigos deste tpico, vamos analisar a unit ServerController.
Intraweb 249
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Segundo Exemplo
120
16
OBJETO
TIWEdit
Objeto
edNome
Propriedade
Name
Left
MaxLength
Top
Width
Valor
edNome
72
30
56
225
OBJETO
TIWButton
Objeto
btConfirma
Propriedade
Name
Caption
Left
Top
Valor
btConfirma
Confirma
136
104
OBJETO
TIWLabel
Objeto
lbMensagem
Propriedade
Name
Caption
Left
Top
Visible
Valor
lbMensagem
deixe em branco
24
152
False
Intraweb 251
Execute a aplicao, e seguindo o mesmo procedimento do primeiro exemplo, no Intraweb Server Application, pressione
novamente a tecla F9. A figura 12.14 ilustra o resultado do nosso segundo exemplo.
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Terceiro Exemplo
112
16
OBJETO
TIWHRule
Objeto
IWHRule1
Propriedade
Left
Top
Width
Valor
56
40
225
Intraweb 253
OBJETO
TIWLabel
Objeto
IWLabel2
Propriedade
Name
Caption
Left
Top
Valor
IWLabel2
Insira dois nmeros e
selecione a operao
56
56
OBJETO
TIWEdit
Objeto
edN1
Propriedade
Name
Left
Text
Top
Valor
edN1
56
(deixe em branco)
80
OBJETO
TIWEdit
Objeto
edN2
Propriedade
Name
Left
Text
Top
Valor
edN2
56
(deixe em branco)
112
OBJETO
TIWHRule
Objeto
IWHRule1
Propriedade
Left
Top
Width
Valor
56
144
73
OBJETO
TIWEdit
Objeto
edTotal
Propriedade
Name
Left
Text
Top
Valor
edTotal
56
(deixe em branco)
152
OBJETO
TIWButton
Objeto
btAdicao
importante >>>
Propriedade
Name
Caption
Left
Tag
Width
Valor
btAdicao
+
144
1
25
OBJETO
TIWButton
Objeto
btSubtracao
importante >>>
Propriedade
Name
Caption
Left
Tag
Width
Valor
btSubtracao
176
2
25
OBJETO
TIWButton
Objeto
btMultiplicacao
importante >>>
Propriedade
Name
Caption
Left
Tag
Width
Valor
btMultiplicacao
x
208
3
25
Intraweb 255
OBJETO
TIWButton
Objeto
btDivisao
importante >>>
Propriedade
Name
Caption
Left
Tag
Width
Valor
btDivisao
:
240
4
25
Intraweb 257
Em seguida, atribumos ao objeto edTotal o resultado da operao.
except
on EZeroDivide do WebApplication.ShowMessage('Diviso por zero !');
on EOverFlow do WebApplication.ShowMessage('Aconteceu OverFlow !');
//
end;
Por fim, tratamos duas excees: EZeroDivide (diviso por zero), e EOverFlow (Overflow na operao). Repare que em caso
de erro, estamos apresentando mensagens ao usurio. muito parecido com o famoso Application.ShowMessage. Neste caso,
utilizamos o WebApplication.ShowMessage. As figuras 12.18, 12.19 e 12.20 ilustram nossa aplicao em tempo de execuo.
Intraweb 259
begin
try
n1:=StrtoFloat(edN1.Text);
n2:=StrtoFloat(edN2.Text);
total:=0;
operacao:=(Sender as TIWButton).Tag;
case operacao of
1:total:=n1+n2;
2:total:=n1-n2;
3:total:=n1*n2;
4:total:=n1/n2;
end;
edTotal.Text:=FloatToStr(total);
except
on EZeroDivide do WebApplication.ShowMessage('Diviso por zero !');
on EOverFlow do WebApplication.ShowMessage('Aconteceu OverFlow !');
//
end;
end;
end.
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Quarto Exemplo
112
16
OBJETO
TIWLabel
Objeto
IWLabel2
Propriedade
Name
Caption
Left
Top
Valor
IWLabel2
Selecione o arquivo para
UpLoad
32
48
OBJETO
TIWLabel
Objeto
lbMensagem
Propriedade
Name
Caption
Left
Top
Font.Color
Valor
lbMensagem
Mensagem
32
168
clRed
OBJETO
TIWFile1
Objeto
IWFile1
Propriedade
Name
Left
Top
Width
Valor
IWFile1
32
72
200
Intraweb 261
OBJETO
TIWButton1
Objeto
IWButton1
Propriedade
Name
Caption
Left
Top
Width
Valor
IWButton1
UpLoad
32
104
75
Dica
Voc poder configurar o diretrio que receber os arquivos. Normalmente numa Intranet,
existe um servidor de arquivos, onde sua aplicao poder gravar as informaes
provenientes da rotina de UpLoad. Veja o exemplo:
IWFile1.SaveToFile(F:\arquivos\+ IWFile1.FileName);
Intraweb 263
uses
ServerController;
procedure TformMain.IWButton1Click(Sender: TObject);
begin
try
IWFIle1.SaveToFile(ExtractFilePath(ParamStr(0)) + IWFile1.FileName);
lbMensagem.Caption:='O arquivo'+IWFile1.Filename+' foi gravado no diretrio
'+#13#10+ ExtractFilePath(ParamStr(0))+' com xito';
lbMensagem.Visible := True;
except
lbMensagem.Caption:='Houve um problema com a rotina de UPLOAD';
lbMensagem.Visible := True;
end;
end;
end.
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Quinto Exemplo
112
16
OBJETO
TIWButton
Objeto
IWButton1
Propriedade
Name
Caption
Left
Top
Width
Valor
IWButton1
Formulrio 2
120
56
115
OBJETO
TIWButton
Objeto
IWButton2
Propriedade
Name
Caption
Left
Top
Width
Valor
IWButton2
Formulrio 3
225
124
115
OBJETO
TIWEdit1
Objeto
edNome
Propriedade
Name
Left
Text
Top
Width
Valor
edNome
40
(deixe em branco)
126
175
Agora vamos criar um segundo formulrio. Atravs das opes File/New/Other..., selecione a seo Intraweb e escolha o
modelo Application Form (figura 12.25).
Intraweb 265
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Formulrio 2
136
36
OBJETO
TIWButton
Objeto
IWButton1
Propriedade
Name
Caption
Left
Top
Width
Valor
IWButton1
Fecha
136
96
75
Vamos codificar este formulrio. No evento OnClick do objeto IWButton1, insira o seguinte cdigo
Hide;
No cdigo que acabamos de inserir, estamos escondendo o formulrio, e retornando origem. Para entender o
funcionamento, vamos codificar o nosso formulrio principal.
Intraweb 267
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Formulrio 3
136
36
OBJETO
TIWLabel
Objeto
lbMensagem
Propriedade
Name
Caption
Left
Top
Valor
lbMensagem
Mensagem
32
72
Intraweb 269
OBJETO
TIWButton
Objeto
IWButton1
Propriedade
Name
Caption
Left
Top
Width
Valor
IWButton1
Fecha
128
120
75
Vamos codificar este formulrio. No evento OnClick do objeto IWButton1, insira o seguinte cdigo
Hide;
Voltando ao formulrio principal, coloque a unit un_formulario3 na clusula uses. Vamos codificar o boto IWButton2 do
formulrio principal. Coloque o cdigo que segue no evento OnClick do boto.
var
Form3:TForm3;
begin
Form3 := TForm3.Create(WebApplication);
Form3.lbMensagem.Caption:=edNome.Text+', seja bem-vindo(a)';
Form3.Show;
end;
Assim como na primeira fase da aplicao, declaramos uma varivel do tipo TForm3 (classe herdada da TForm3 que est
contida na unit un_formulario3).
var
Form3:TForm3;
Em seguida instanciamos o objeto.
Form3 := TForm3.Create(WebApplication);
E agora, que temos o controle total do objeto, estamos alterando a propriedade Caption do objeto lbMensagem.
Form3.lbMensagem.Caption:=edNome.Text+', seja bem-vindo(a)';
E por fim, apresentamos o objeto.
Form3.Show;
As figuras 12.31 e 12.32 ilustram o resultado da segunda fase de nossa aplicao.
Intraweb 271
IWLabel1: TIWLabel;
edNome: TIWEdit;
IWLabel2: TIWLabel;
IWButton2: TIWButton;
procedure IWButton1Click(Sender: TObject);
procedure IWButton2Click(Sender: TObject);
public
end;
implementation
{$R *.dfm}
uses
ServerController, un_formulario2, un_formulario3;
procedure TformMain.IWButton1Click(Sender: TObject);
var
Form2:TForm2;
begin
Form2 := TForm2.Create(WebApplication);
Form2.Show;
end;
procedure TformMain.IWButton2Click(Sender: TObject);
var
Form3:TForm3;
begin
Form3 := TForm3.Create(WebApplication);
Form3.lbMensagem.Caption:=edNome.Text+', seja bem-vindo(a)';
Form3.Show;
end;
end.
Intraweb 273
VALOR
CommitRetain
False
Database
localhost:c:\cursoweb\clientes.gdb
Password
a famosa masterkey
UserName
o famoso SYSDBA
Name
ConexaoBD
Altere tambm a propriedade LoginPrompt para false. Nunca esquea de fazer esta alterao, pois numa aplicao servidora,
no existe a possibilidade do usurio interagir no login do banco de dados.
VALOR
SQLConnection
ConexaoBD
CommandText
Active
True
timo, agora vamos para o formulrio principal. Insira a unit DataModuleUnit na clusula uses, e grave a aplicao. Insira os
componentes que seguem.
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Sexto Exemplo
128
208
Intraweb 275
OBJETO
TDataSource [DataAccess]
Objeto
DataSource1
Propriedade
Name
DataSet
Valor
DataSource1
DataModule1.SQLDataSet1
OBJETO
TIWDBGrid
Objeto
IWDBGrid1
Propriedade
Name
Align
DataSource
Valor
IWDBGRID1
alTop
DataSource1
Intraweb 277
interface
uses
{$IFDEF Linux}QForms, {$ELSE}Forms, {$ENDIF}
SysUtils, Classes, DBXpress, FMTBcd, DB, SqlExpr;
type
TDataModule1 = class(TDataModule)
SQLConnection1: TSQLConnection;
SQLDataSet1: TSQLDataSet;
private
public
end;
// Procs
function DataModule1: TDataModule1;
implementation
{$R *.dfm}
uses
IWInit,
ServerController;
// Since we are threaded we cannot use global variables to store form / datamodule
references
// so we store them in WebApplication.Data and we could reference that each time, but
by creating
// a function like this our other code looks "normal" almost as if its referencing a
global.
// This function is not necessary but it makes the code in the main form which
references this
// datamodule a lot neater.
// Without this function ever time we would reference this datamodule we would use:
//
TDataModule1(WebApplication.Data).Datamodule.<method / component>
// By creating this procedure it becomes:
//
TDataModule1.<method / component>
// Which is just like normal Delphi code.
function DataModule1: TDataModule1;
begin
Result := TUserSession(RWebApplication.Data).Datamodule1;
end;
end.
Cadastro de Clientes
Agora iremos desenvolver uma aplicao parecida com a do Captulo 7, onde faremos um cadastro de clientes com as
principais operaes.
Atravs das opes File/New/Other..., selecione a seo Intraweb e escolha o modelo Stand Alone Application with Data
Module (figura 12.37).
Definies iniciais
VALOR
CommitRetain
False
Database
localhost:c:\cursoweb\clientes.gdb
Password
a famosa masterkey
UserName
o famoso SYSDBA
Name
ConexaoBD
Altere tambm a propriedade LoginPrompt para false. Nunca esquea de fazer esta alterao, pois numa aplicao servidora,
no existe a possibilidade do usurio interagir no login do banco de dados.
Intraweb 279
VALOR
SQLConnection
ConexaoBD
CommandText
Active
True
Objeto de Incluso
Insira um objeto do tipo TSQLQuery e altere as propriedades que seguem.
OBJETO
TSQLQuery
Objeto
SQLInclui
Propriedade
Valor
Name
SQLInclui
SQLConnection ConexaoBD
SQL
Objeto de Alterao
Insira um objeto do tipo TSQLQuery e altere as propriedades que seguem.
OBJETO
TSQLQuery
Objeto
SQLAltera
Propriedade
Valor
Name
SQLAltera
SQLConnection BancoDados
SQL
Na propriedade PARAMS do SQLAltera altere os tipos dos parmetros para String, com exceo do parmetro PCODIGO, que
deve ser Integer.
Objeto de Excluso
Insira um objeto do tipo TSQLQuery e altere as propriedades que seguem.
Intraweb 281
OBJETO
TSQLQuery
Objeto
SQLExclui
Propriedade
Valor
Name
SQLExclui
SQLConnection BancoDados
SQL
Sobre
Informaes...
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Cadastro de Clientes
136
80
OBJETO
TIWImage
Objeto
IWImage1
Propriedade
Name
Left
Picture
Top
Valor
IWImmage1
168
insira uma figura qualquer,
exemplo: logo.jpg
120
Intraweb 283
WebApplication.ShowMessage('Cadastro de Clientes' +#13#10+ 'Verso 1.0',smAlert);
Neste evento apresentamos uma janela de dilogo ao usurio, com as informaes da aplicao. Bastante simples, no?
OBJETO
TIWRectangle
Objeto
IWRectangle1
Propriedade
Name
Align
Color
Font.Color
Font.Size
Font.Style.fsBold
Text
Valor
IWRectangle1
alTop
clNavy
clWhite
16
True
Cadastro de Clientes
(Incluso)
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Razo Social
24
88
OBJETO
TIWLabel
Objeto
IWLabel2
Propriedade
Name
Caption
Left
Top
Valor
IWLabel2
Endereo
24
120
OBJETO
TIWLabel
Objeto
IWLabel3
Propriedade
Name
Caption
Left
Top
Valor
IWLabel3
Cidade
24
152
OBJETO
TIWLabel
Objeto
IWLabel4
Propriedade
Name
Caption
Left
Top
Valor
IWLabel4
UF
328
152
Intraweb 285
OBJETO
TIWLabel
Objeto
IWLabel5
Propriedade
Name
Caption
Left
Top
Valor
IWLabel5
CEP
448
152
OBJETO
TIWLabel
Objeto
IWLabel6
Propriedade
Name
Caption
Left
Top
Valor
IWLabel6
e-Mail
24
184
OBJETO
TIWEdit
Objeto
edRazao
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edRazao
clYellow
21
128
deixar em branco
88
450
OBJETO
TIWEdit
Objeto
edEndereco
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edEndereco
clYellow
21
128
deixar em branco
120
450
OBJETO
TIWEdit
Objeto
edCidade
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edCidade
clYellow
21
128
deixar em branco
152
185
OBJETO
TIWComboBox
Objeto
edUF
Propriedade
Name
Height
Left
Items
Sorted
Top
Width
Valor
edUF
21
360
Insira a sigla de todos os
estados brasileiros
True
152
65
OBJETO
TIWEdit
Objeto
edCEP
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edCEP
clYellow
21
488
deixar em branco
152
90
Intraweb 287
OBJETO
TIWEdit
Objeto
edEmail
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edEmail
clYellow
21
128
deixar em branco
184
450
OBJETO
TIWButton1
Objeto
btConfirma
Propriedade
Name
Caption
Height
Left
Top
Width
Valor
btConfirma
Confirma
25
128
232
75
OBJETO
TIWButton1
Objeto
btDesiste
Propriedade
Name
Caption
Height
Left
Top
Width
Valor
btDesiste
Desiste
25
216
232
75
Agora vamos codificar o formulrio. Insira a unit DataModuleUnit na clusula uses do formulrio.
uses
ServerController, DatamoduleUnit;
No evento OnClick do objeto btDesiste insira o cdigo que segue:
Hide;
Para que possamos retornar ao formulrio de origem, utilizamos o mtodo Hide do formulrio. Agora vamos codificar o evento
OnClick do objeto btConfirma.
um
problema
na
incluso
do
cliente',
um
problema
na
incluso
do
E apresentando a mensagem do problema. A figura 12.42 ilustra o nosso formulrio de incluso de clientes.
cliente',
Intraweb 289
OBJETO
TIWRectangle
Objeto
IWRectangle1
Propriedade
Name
Align
Color
Font.Color
Font.Size
Font.Style.fsBold
Text
Valor
IWRectangle1
alTop
clNavy
clWhite
16
True
Cadastro de Clientes
(Alterao)
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Razo Social
24
88
OBJETO
TIWLabel
Objeto
IWLabel2
Propriedade
Name
Caption
Left
Top
Valor
IWLabel2
Endereo
24
120
OBJETO
TIWLabel
Objeto
IWLabel3
Propriedade
Name
Caption
Left
Top
Valor
IWLabel3
Cidade
24
152
Intraweb 291
OBJETO
TIWLabel
Objeto
IWLabel4
Propriedade
Name
Caption
Left
Top
Valor
IWLabel4
UF
328
152
OBJETO
TIWLabel
Objeto
IWLabel5
Propriedade
Name
Caption
Left
Top
Valor
IWLabel5
CEP
448
152
OBJETO
TIWLabel
Objeto
IWLabel6
Propriedade
Name
Caption
Left
Top
Valor
IWLabel6
e-Mail
24
184
OBJETO
TIWLabel
Objeto
IWLabel7
Propriedade
Name
Caption
Left
Top
Valor
IWLabel7
Cdigo Cliente
24
56
OBJETO
TIWLabel
Objeto
lbCodigo
Propriedade
Name
Caption
Left
Top
Valor
lbCodigo
cdigo
144
56
OBJETO
TIWEdit
Objeto
edRazao
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edRazao
clYellow
21
128
deixar em branco
88
450
OBJETO
TIWEdit
Objeto
edEndereco
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edEndereco
clYellow
21
128
deixar em branco
120
450
OBJETO
TIWEdit
Objeto
edCidade
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edCidade
clYellow
21
128
deixar em branco
152
185
Intraweb 293
OBJETO
TIWComboBox
Objeto
edUF
Propriedade
Name
Height
Left
Items
Sorted
Top
Width
Valor
edUF
21
360
Insira a sigla de todos os
estados brasileiros
True
152
65
OBJETO
TIWEdit
Objeto
edCEP
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edCEP
clYellow
21
488
deixar em branco
152
90
OBJETO
TIWEdit
Objeto
edEmail
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edEmail
clYellow
21
128
deixar em branco
184
450
OBJETO
TIWButton1
Objeto
btConfirma
Propriedade
Name
Caption
Height
Left
Top
Width
Valor
btConfirma
Confirma
25
128
232
75
OBJETO
TIWButton1
Objeto
btDesiste
Propriedade
Name
Caption
Height
Left
Top
Width
Valor
btDesiste
Desiste
25
216
232
75
Agora vamos codificar o formulrio. Insira a unit DataModuleUnit na clusula uses do formulrio.
uses
ServerController, DatamoduleUnit;
No evento OnClick do objeto btDesiste insira o cdigo que segue:
Hide;
Para que possamos retornar ao formulrio de origem, utilizamos o mtodo Hide do formulrio.
Agora vamos codificar o evento OnClick do objeto btConfirma.
try
{Altera Cliente}
with DataModule1.SQLAltera do
begin
ParamByName('pcodigo').Value:=StrtoInt(lbCodigo.Text);
ParamByName('prazao').Value:=edRazao.Text;
ParamByName('pendereco').Value:=edEndereco.Text;
ParamByName('pcidade').Value:=edCidade.Text;
ParamByName('pestado').Value:=edUf.Items[edUf.ItemIndex];
ParamByName('pcep').Value:=edCep.Text;
ParamByName('pemail').Value:=edEmail.Text;
ExecSQL;
end;
WebApplication.ShowMessage('Cliente alterado com sucesso',smSameWindow);
Intraweb 295
except
WebApplication.ShowMessage('Houve
smSameWindow);
end;
Hide;
um
problema
na
alterao
do
cliente',
um
problema
na
incluso
do
cliente',
OBJETO
TSQLDataSet
Objeto
SQLDataSet1
Propriedade
Name
SQLConnection
Valor
SQLDataSet1
DataModule1.ConexaoBD
CommandText
CommandType
Query
OBJETO
TDataSource
Objeto
DataSource1
Propriedade
Name
DataSet
Valor
DataSource
SQLDataSet1
Pronto, agora conclumos o nosso formulrio de alterao de clientes. A figura 12.44 ilustra o nosso formulrio.
Intraweb 297
OBJETO
TIWRectangle
Objeto
IWRectangle1
Propriedade
Name
Align
Color
Font.Color
Font.Size
Font.Style.fsBold
Text
Valor
IWRectangle1
alTop
clNavy
clWhite
16
True
Cadastro de Clientes
(Manuteno)
OBJETO
TIWRegion1
Objeto
IWRegion1
Propriedade
Name
Align
Color
Height
Valor
IWRegion1
alTop
clWhite
56
OBJETO
TIWLabel
Objeto
IWLabel1
Propriedade
Name
Caption
Left
Top
Valor
IWLabel1
Razo Social
16
16
OBJETO
TIWEdit
Objeto
edPesquisa
Propriedade
Name
BgColor
Height
Left
Text
Top
Width
Valor
edPesquisa
clYellow
21
112
deixar em branco
16
175
OBJETO
TIWButton
Objeto
btPesquisa
Propriedade
Name
Caption
Height
Left
Top
Width
Valor
btPesquisa
Confirma
25
296
16
75
OBJETO
TIWButton
Objeto
btVolta
Propriedade
Name
Caption
Height
Left
Top
Width
Valor
btVolta
Menu Principal
25
384
16
122
Intraweb 299
Em nosso formulrio iremos utilizar objetos de acesso a dados. Insira um objeto do tipo TDataSource e outro do tipo
TSQLQuery (dbExpress), configurando as propriedades que seguem.
OBJETO
TSQLQuery
Objeto
SQLPesquisa
Propriedade
Name
SQLConnection
Valor
SQLPesquisa
DataModule1.ConexaoBD
SQL
OBJETO
TDataSource
Objeto
DS1
Propriedade
Name
DataSet
Valor
DS1
SQLPesquisa
Repare que estamos colocando o comando SELECT * na propriedade SQL do objeto SQLPesquisa. Fazemos isso apenas para
nos auxiliar na montagem do Grid.
Com o foco no formulrio, insira um objeto do tipo TIWDBGrid e altere as propriedades que seguem.
OBJETO
TIWDBGrid
Objeto
IWDbGrid1
Propriedade
Name
DataSource
Rollover
RollOverColor
Valor
IWDbGrid1
DS1
True
$00E1FFE1
Curiosidade
Repare que estamos repetindo o campo COD_CLIENTE diversas vezes. Fazemos isto para
substituir os mtodos de chamada de operaes, devido a um BUG no Intraweb. At a
verso 5.51 (que vem junto com o D7), o BUG de vnculo com controles (Control) ainda
no estava corrigido. Existe uma maneira de associar um objeto, como por exemplo, um
boto, a um evento do Grid. Iramos fazer isso para disparar as rotinas de alterao e
excluso, mas infelizmente, devido ao BUG, estamos substituindo por outro mtodo.
Coluna [ 0 ] Cod_Cliente
Objeto
Propriedade
IWDbGrid1>Columns[0]
DataField
LinkField
Title.Text
Coluna [ 1 ] Razao_Social
Objeto
Propriedade
IWDbGrid1>Columns[1]
DataField
Title.Text
Coluna [ 2 ] EMAIL
Objeto
IWDbGrid1>Columns[2]
Valor
Cod_Cliente
Cod_Cliente
Cdigo
Valor
Razao_Social
Razo Social
Propriedade
Valor
DataField
Title.Text
email
e-Mail
Coluna [ 3 ] Cod_Cliente
Objeto
Propriedade
IWDbGrid1>Columns[3]
DataField
LinkField
Title.Text
Coluna [ 4 ] Cod_Cliente
Objeto
Propriedade
IWDbGrid1>Columns[4]
DataField
LinkField
Title.Text
Valor
Cod_Cliente
Cod_Cliente
Altera
Valor
Cod_Cliente
Cod_Cliente
Exclui
Agora vamos codificar o nosso formulrio. Na clusula uses insira as seguintes units.
uses
ServerController, DataModuleUnit, un_alteracao;
Intraweb 301
Em seguida devemos criar uma procedure pblica para auxiliar no posicionamento do registro, de maneira que possamos
atribuir o contedo do banco de dados, aos campos do formulrio fmAltera. Defina a procedure LOCALIZA, como segue.
public
procedure Localiza(Cliente: integer);
E na seo implementation, insira o cdigo a seguir.
procedure Tfmmanutencao.Localiza(Cliente:integer);
begin
SQLPesquisa.Locate('cod_cliente', Cliente, []);
end;
Neste cdigo estamos apenas posicionando o ponteiro do registro de acordo com a seleo do usurio. Agora vamos codificar
o objeto btPesquisa. Insira o cdigo que segue no evento OnClick.
SQLPesquisa.SQL.Clear;
SQLPesquisa.SQL.Add('SELECT
*
FROM
'+''''+'%'+edPesquisa.Text+'%'+'''');
SQLPesquisa.Open;
TBCLIENTE
WHERE
RAZAO_SOCIAL
LIKE
Neste cdigo estamos preparando uma consulta SQL, baseada na informao do usurio, extrada do objeto edPesquisa. As
informaes so apresentadas no Grid, devido ao vnculo com o objeto. Coloque o cdigo a seguir, no evento OnClick do
objeto btVolta.
Hide;
Agora vamos codificar a operao de alterao do Grid.
Atravs da propriedade Columns do IWDBGrid1, selecione a coluna 3 (Altera) e insira o cdigo que segue no evento OnClick.
var
fmAltera:TfmAltera;
begin
fmAltera:=TFmAltera.Create(WebApplication);
{Atribui o cdigo a Query}
with fmAltera do
begin
FmAltera.SQLDataSet1.Params[0].Value:=StrtoInt(AValue);
fmAltera.SQLDataSet1.Open;
edRazao.Text:=SQLDataSet1RAZAO_SOCIAL.AsString;
edEndereco.Text:=SQLDataSet1ENDERECO.AsString;
edCidade.Text:=SQLDataSet1CIDADE.AsString;
edCEP.Text:=SQLDataSet1CEP.AsString;
edUF.ItemIndex:=edUF.Items.IndexOf( QLDataSet1ESTADO.AsString);
edEmail.Text:=SQLDataSet1EMAIL.AsString;
{Atribui os valores}
fmAltera.lbCodigo.Caption:=Avalue;
fmAltera.Show;
end;
Vamos analisar o cdigo. No bloco a seguir, estamos definindo um objeto do tipo TfmAltera, para que possamos manipular o
objeto.
var
um
problema
na
exclusao
do
cliente',
Vamos analisar o cdigo. No cdigo que segue estamos criando um bloco protegido; atribuindo um parmetro para o objeto
SQLExclui e finalmente apresentando uma mensagem ao usurio, em caso de sucesso da operao.
try
with DataModule1.SQLExclui do
begin
ParamByName('pcodigo').Value:=StrtoInt(AValue);
ExecSQL;
end;
WebApplication.ShowMessage('Cliente Excluido com sucesso',smSameWindow);
No bloco a seguir estamos tratando a exceo, apresentando para o usurio uma mensagem de alerta.
Intraweb 303
except
WebApplication.ShowMessage('Houve
smSameWindow);
end;
um
problema
na
exclusao
do
cliente',
Grave a unit un_manutencao e selecione o formulrio principal. A figura 12.47 ilustra o nosso formulrio de manuteno.
Intraweb 305
Intraweb 307
begin
fmManutencao:=TFMManutencao.Create(WebApplication);
fmManutencao.Show;
end;
end.
Intraweb 309
SQLDataSet1ENDERECO: TStringField;
SQLDataSet1CIDADE: TStringField;
SQLDataSet1ESTADO: TStringField;
SQLDataSet1CEP: TStringField;
SQLDataSet1EMAIL: TStringField;
procedure IWButton2Click(Sender: TObject);
procedure IWButton1Click(Sender: TObject);
public
end;
implementation
{$R *.dfm}
uses
ServerController, DataModuleUnit;
procedure TfmAltera.IWButton2Click(Sender: TObject);
begin
Hide;
end;
procedure TfmAltera.IWButton1Click(Sender: TObject);
begin
try
{Altera Cliente}
with DataModule1.SQLAltera do
begin
ParamByName('pcodigo').Value:=StrtoInt(lbCodigo.Text);
ParamByName('prazao').Value:=edRazao.Text;
ParamByName('pendereco').Value:=edEndereco.Text;
ParamByName('pcidade').Value:=edCidade.Text;
ParamByName('pestado').Value:=edUf.Items[edUf.ItemIndex];
ParamByName('pcep').Value:=edCep.Text;
ParamByName('pemail').Value:=edEmail.Text;
ExecSQL;
end;
WebApplication.ShowMessage('Cliente Alterado com sucesso',smSameWindow);
except
WebApplication.ShowMessage('Houve um problema na alteracao do cliente',
smSameWindow);
end;
Hide;
end;
end.
RAZAO_SOCIAL
LIKE
Intraweb 311
fmAltera:=TFmAltera.Create(WebApplication);
{ Atribui o cdigo a Query }
with fmAltera do
begin
fmAltera.SQLDataSet1.Params[0].Value:=StrtoInt(AValue);
fmAltera.SQLDataSet1.Open;
edRazao.Text:=SQLDataSet1RAZAO_SOCIAL.AsString;
edEndereco.Text:=SQLDataSet1ENDERECO.AsString;
edCidade.Text:=SQLDataSet1CIDADE.AsString;
edCEP.Text:=SQLDataSet1CEP.AsString;
edUF.ItemIndex:=edUF.Items.IndexOf(SQLDataSet1ESTADO.AsString);
edEmail.Text:=SQLDataSet1EMAIL.AsString;
{ Atribui os valores }
fmAltera.lbCodigo.Caption:=Avalue;
fmAltera.Show;
end;
end;
procedure TfmManutencao.IWDBGrid1Columns4Click(ASender: TObject;
const AValue: String);
begin
try
with DataModule1.SQLExclui do
begin
ParamByName('pcodigo').Value:=StrtoInt(AValue);
ExecSQL;
end;
WebApplication.ShowMessage('Cliente Excluido com sucesso',smSameWindow);
except
WebApplication.ShowMessage('Houve
smSameWindow);
end;
um
problema
end;
end.
= class(TDataModule)
TSQLConnection;
TSQLQuery;
TSQLQuery;
TSQLQuery;
na
exclusao
do
cliente',
Intraweb 313
Anotaes de Dvidas
?
Preciso Revisar
Anotaes Gerais