Utilizando Delphi Firebird Firedac

Download Utilizando Delphi Firebird Firedac

Post on 04-Oct-2015

428 views

Category:

Documents

68 download

DESCRIPTION

PAsso a passo para criar uma aplicao simples

TRANSCRIPT

Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:1 UTILIZANDO DELPHI + FIREBIRD + FIREDAC EXEMPLO DE USO: TABLE e QUERY (RAD Studio) Delphi: Ambiente de desenvolvimento de aplicativos multilinguagens, multidispositivos e com uso de mltiplos bancos de dados. Firebird: Banco de Dados relacional que oferece recursos ANSI SQL-99 que rodam no Linux, Windows e plataformas Unix. Firedac: Biblioteca de Acesso Universal a Dados para o desenvolvimento de aplicaes para mltiplos dispositivos conectados a bancos de dados corporativos. Com sua poderosa arquitetura universal, a FireDAC possibilita acesso direto, nativo e de alta velocidade do Delphi e do C++Builder a InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix, DataSnap, dentre outros. Para o desenvolvimento do exemplo a seguir, foi adotado o RAD Studio XE5 e Firebird 2.5. BANCO DE DADOS Adotou-se auto incremento nos campos chave primria de cada tabela. Na atividade, o intuito no apresentar as etapas para criao do Banco de Dados. Parte-se da premissa que o mesmo j tenha sido previamente elaborado. /* ------------------------------- */ /* Project name: Trabalho GTI 1 */ /* Author: Andr Klunk */ /* Script type: Database script */ /* Created on: 2014-03-19 22:21 */ CREATE GENERATOR GEN_AUTOMOVEL; SET GENERATOR GEN_AUTOMOVEL TO 0; CREATE GENERATOR GEN_MARCA; SET GENERATOR GEN_MARCA TO 0; CREATE GENERATOR GEN_CIDADE; SET GENERATOR GEN_CIDADE TO 0; CREATE TABLE MARCA ( COD_MARCA INTEGER NOT NULL, NOME_MARCA VARCHAR(40) NOT NULL, CONSTRAINT PK_MARCA PRIMARY KEY (COD_MARCA) ); CREATE TABLE CIDADE ( COD_CIDADE INTEGER NOT NULL, NOME_CIDADE VARCHAR(40) NOT NULL, UF CHAR(2) NOT NULL, CONSTRAINT PK_CIDADE PRIMARY KEY (COD_CIDADE) ); CREATE TABLE AUTOMOVEL ( COD_AUTOMOVEL INTEGER NOT NULL, COD_MARCA INTEGER, MODELO VARCHAR(40) NOT NULL, PLACA VARCHAR(10), ANO_FABRICACAO INTEGER, CONSERVACAO CHAR(1), OBS VARCHAR(200), CONSTRAINT PK_AUTOMOVEL PRIMARY KEY (COD_AUTOMOVEL) ); ALTER TABLE AUTOMOVEL ADD CONSTRAINT MARCA_AUTOMOVEL FOREIGN KEY (COD_MARCA) REFERENCES MARCA (COD_MARCA); ALTER TABLE AUTOMOVEL ADD CONSTRAINT CIDADE_AUTOMOVEL FOREIGN KEY (COD_CIDADE) REFERENCES CIDADE (COD_CIDADE); SET TERM ^ ; CREATE TRIGGER TRG_MARCA1 FOR MARCA BEFORE INSERT AS BEGIN IF (NEW.COD_MARCA IS NULL) THEN NEW.COD_MARCA = GEN_ID(GEN_MARCA, 1); END ^ SET TERM ; ^ SET TERM ^ ; CREATE TRIGGER TRG_CIDADE1 FOR CIDADE BEFORE INSERT AS BEGIN IF (NEW.COD_CIDADE IS NULL) THEN NEW.COD_CIDADE = GEN_ID(GEN_CIDADE, 1); END ^ SET TERM ; ^ SET TERM ^ ; CREATE TRIGGER TRG_AUTOMOVEL1 FOR AUTOMOVEL BEFORE INSERT AS BEGIN IF (NEW.COD_AUTOMOVEL IS NULL) THEN NEW.COD_AUTOMOVEL = GEN_ID(GEN_AUTOMOVEL, 1); END ^ SET TERM ; ^ Figura 1 - Modelo ER Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:2 APLICAO DELPHI Consideraes Iniciais: - Pasta de Trabalho adotada: C:\Sistemas\Trab1_2014\ para os arquivos cdigo do Delphi. - Pasta de trabalho adotada: C:\Sistemas\Trab1_2014\APP\ para o arquivo do Banco de Dados e executvel. Iniciando o Desenvolvimento: - Criar uma nova Aplicao: File/New/VCL Forms Application Delphi - Salvar como: - Unit: UnitPrincipal.pas - Project: ProjetoTrab1_2014.dproj Gerar o Executvel dentro da Pasta Pretendida: Como o objetivo que o arquivo executvel seja compilado dentro da pasta C:\Sistemas\Trab1_2014\APP\, devemos proceder da seguinte forma: - Menu Project/Options: ser apresentada a tela demonstrada a Figura 2. No lado esquerdo, selecionar a primeira opo (Delphi Compiler). Na parte direita, opo (Output directory), definir o path para gerao do executvel. Figura 2 - Definio do caminho para gerao do executvel Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:3 Formulrio Principal: Hora de definir as propriedades do Formulrio Principal: BorderIcons: biSystemMenu BorderStyle: bsSingle Caption: Trabalho 1 GTI FAI 2014 FormStyle: fsMDIForm KeyPreview: True Name: frmPrincipal Position: poMainFormCenter WindowState: wsMaximized. Figura 3 - Formulrio Principal No Formulrio Principal Incluir: - Incluir um MainMenu: Cadastro com as opes: Cidades, Marcas, Automveis. - Incluir um ToolBar com os botes: Cidades, Marcas, Automveis, Fechar e um Separador. - Incluir um ImageList e vincular tanto ao MainMenu, quanto a ToolBar. (Imagens disponveis). - Incluir uma StatusBar com trs StatusPanels o 1 StatusPanel: Largura 200; Text: Copyright Nome do Aluno (2014) o 2 StatusPanel: Largura 150; Aligment: taCenter; (Text ir receber a data e hora atualizada) o 3 StatusPanel: Aligment: taRightJustify; Receber no text a verso do Sistema. - Timer: responsvel em atualizar a data e horrio na StatusBar. o Cdigo: StatusBar1.Panels[1].Text := DateTimeToStr(Now); Para informar a verso do Sistema, inicialmente haver a necessidade de utilizar uma funo especfica para tal. Para facilitar as atividades, todas as funes a serem utilizadas nesse Artigo, foram agrupadas numa Unit especfica, denominada RotinasGerais.pas. Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:4 Importando uma Unit no Projeto: Inicialmente deve-se copiar a Unit at a pasta na qual constam nossos arquivos fontes: C:\Sistemas\Trab1_2014\. Feito esse procedimento, com nosso Projeto Aberto, basta adicionar a referida Unit (RotinasGerais). - Menu Project/Add to Project Vinculando Units: Com a Unit Rotinas Gerais adicionada ao projeto, basta agora fazer com que a mesma seja visvel no formulrio principal. - Com o formulrio principal selecionado, menu File/Use Unit. - Selecionar na lista a Unit pretendida, depois OK. Basta agora no Evento OnShow do Formulrio Principal, invocar a funo GetBuildInfo, presente na Unit Rotinas Gerais, e lanar o valor na StatusBar. Cdigo: StatusBar1.Panels[2].Text := GetBuildInfo; Utilizando o Data Module (Mdulo de Dados): Data Module: trata-se de um container de componentes no visuais que geralmente so utilizados em aplicaes de banco de dados e web. Em tempo de projeto (design time), um Data Module semelhante a um Form, mas em tempo de execuo (run time) ele existe somente na memria. Imagine como se fosse um Form invisvel no qual se pode incluir componentes invisveis da VCL do Delphi. Para acrescentar um Data Module ao nosso projeto, cuja funo ser receber todos os componentes de acesso e manipulao de dados, faa o seguinte: - File/New/Other - Na Janela que abre, no lado esquerdo selecione a opo Delphi Files. - Na parte central, basta clicar no item Data Module. - Com o Data Module inserido, Salve a Unit como UnitDM.pas. - Propriedade Name: DM Figura 4 - Vincular Units Figura 5 - Inserir Data Module Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:5 Componentes de Conexo ao Banco de Dados: - Da Tool Palette (Paleta de Componentes) FireDAC. Adicione os components: FDConnection e FDTransaction. (No Delphi XE4, os componentes correspondentes so: ADConnection e ADTransaction). - Da Paleta FireDAC UI, adicione o componente FDGUIxWaitCursor. (No Delphi XE4, ADGUIxWaitCursor). - Da Paleta FiredDAC Link, acione o componente FDPhysFBDriverLink. (No Delphi XE4, ADPhysIBDriverLink) Passamos ento a configurar a conexo ao banco de dados, dando Clique Duplo sobre o componente FDConnection (ADConnection). Figura 6 - Configurao do componente FDConnection - Em Driver ID, seleciona-se o SGBD. No nosso exemplo, adotamos o Firebird. Na Verso XE5 do Delphi, usa-se o driver FB, j na verso XE4, faz-se necessrio o uso do driver IB. Ambos funcionaro da mesma forma. - Na opo Database, localiza-se o arquivo do Banco de Dados desejado. No exemplo: C:\Sistemas\Trab1_2014\APP\BDTRAB1_2014.FDB - Em User_Name o usurio padro do Firebird: SYSDBA (em maisculo). - Em Password a senha padro: masterkey (em minsculo). - Altere a propriedade LoginPrompt do componente FDConnection (ADConnection) para False; OBS: Os demais componentes inseridos no necessitam de configuraes especficas. Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:6 Componente de Acesso s Tabelas do Banco de Dados O componente Table, da mesma forma como o componente Query, podem ser utilizados para acessar os registros das tabelas do Banco de Dados. Para fins de produtividade, o componente Query o indicado uma vez que no carrega todos os registros na memria. Vale lembrar que uma Query pode fazer a funo de um Table, j o Table no pode fazer todas as funes de uma Query. Imagine uma tabela em seu aplicativo com 50 mil registros, e voc tendo a necessidade de gravar mais um. Usando um Table o processo vai carregar os 50 mil registros na memria e talvez o seu aplicativo d uma congelada se estiver rodando numa rede. Se usar uma instruo Sql ("insert into.."), passada para uma Query, o registro ser gravado e voc nem vai perceber Utilizando o Table para conectar na tabela Marca Da Paleta FireDAC, adicione o componente FDTable (ADTable). Configure as seguintes propriedades: - Name: tblMarca - Connection: FDConnection1 (ADConnection1) - TableName: Marca (Onde so listadas as tabelas contidas no BD) Configuradas as propriedades, d um duplo clique sobre o componente tblMarca. Na telinha que aparecer, clique com o boto direito do mouse na parte central e selecione a opo Add all fields (adicionar todos os campos). Para funcionar corretamente a questo do auto incremento, na lista de campos, selecione o campo COD_MARCA, e no Object Inspector altere a propriedade ReadOnly para True. - Active: True. (Caso tenha erro de configurao, ao ativar o mesmo apresentado). Terminada a configurao do Table, passamos a inserir o componente DataSource, presente na paleta Data Access. Aps inserido, altere no Object Inspector a propriedade Name para dsMarca e a propriedade DataSet para tblMarca. Utilizando o Query para conectar na tabela Cidade Da Paleta FireDAC, adicione o componente FDQuery (ADQuery). Configure as seguintes propriedades: - Name: tblCidade - Connection: FDConnection1 (ADConnection1) Configuradas as propriedades, d um duplo clique sobre o componente tblCidade. No editor que aparecer, ser necessrio informar o cdigo SQL select, responsvel para trazer os dados da tabela Cidade. Cdigo: Select from Cidade Para testar clique no boto Executar do lado direito, depois OK. Feito esse procedimento, da mesma forma como tambm foi feito anteriormente para a tabela Marca, usando o Table, vamos adicionar os campos da tabela Cidade ao componente Query. Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:7 Para tal, faz-se necessrio clicar com o boto direito do mouse sob o tblCidade, e no submenu selecionar Fields Editor, abrindo a janela para adicionar os campos. - Nessa janela, clique com o boto direito do mouse na rea central, opo Add all fields (Adicionar todos os campos). - Para funcionar corretamente a questo do auto incremento, na lista de campos, selecione o campo COD_CIDADE, e no Object Inspector altere a propriedade ReadOnly para True. - Active: True. (Caso tenha erro de configurao, ao ativar o mesmo apresentado). O passo seguinte ser adicionar ao Data Module o componente FDUpdateSQL (ADUpdateSQL) presente na Paleta FireDAC, permitindo que os dados possam ser editados, inseridos e deletados. Esse componente acoplado a uma Query para desempenhar essas funes. No nosso exemplo, o mesmo ser vinculado a Query tblCidade. Altere as propriedades do componente da seguinte forma: - Name: updCidade - Connection: FDConnection1 (ADConnection1) Retorne agora e selecione o componente tblCidade, marcando a propriedade UpdateObject para updCidade. Feito isso, torna-se possvel adicionar os cdigos SQL responsveis pela manipulao dos registros. D um duplo clique sobre o componente updCidade. Caso seja exibida uma mensagem, apenas confirme clicando em Yes. Abrir o editor de SQL. Figura 7 - Editor de SQL Tabela Cidade Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:8 Nesse editor, certifique-se que na primeira coluna esteja selecionado o campo chave primria da tabela, na segunda coluna, todos os registros selecionados, o que ocorre por padro. - Para gerar os cdigos SQL automaticamente, basta clicar no boto Generate SQL. Depois s confirmar clicando em OK. Para finalizar, basta inserir o componente DataSource, presente na paleta Data Access. Aps inserido, altere no Object Inspector a propriedade Name para dsCidade e a propriedade DataSet para tblCidade. Utilizando o Query para conectar na tabela Automvel O processo idntico ao adotado item anterior, bastando alterar somente algumas propriedades dos componentes para serem associadas dessa vez tabela Automoveis. Um diferencial a ser adotado nesta tabela, ser a configurao de uma mscara de edio, j que encontramos o campo PLACA, que passvel de receber esse parmetro, por ser sempre composto por 3 letras seguido por 4 nmeros. As mscaras podem ser adotadas a campos, cuja formataao seja sempre um padro definido, como telefones, datas, horrios, CPFs, CEPs, etc. Vamos aos procedimentos. Da Paleta FireDAC, adicione o componente FDQuery (ADQuery). Configure as seguintes propriedades: - Name: tblAutomovel - Connection: FDConnection1 (ADConnection1) Configuradas as propriedades, d um duplo clique sobre o componente tblAutomovel. No editor que aparecer, ser necessrio informar o cdigo SQL select, responsvel para trazer os dados da tabela Automovel. Cdigo: Select from Automovel Para testar clique no boto Executar do lado direito, depois OK. Feito esse procedimento, vamos adicionar os campos da tabela Automovel ao componente Query. Para tal, faz-se necessrio clicar com o boto direito do mouse sob o componente tblAutomovel, e no submenu selecionar Fields Editor, abrindo a janela para adicionar os campos. - Nessa janela, clique com o boto direito do mouse na rea central, opo Add all fields (Adicionar todos os campos). - Para funcionar corretamente a questo do auto incremento, na lista de campos, selecione o campo COD_AUTOMOVEL, e no Object Inspector altere a propriedade ReadOnly para True. Definindo a Mscara para o campo Placa: selecione o campo Placa, e na propriedade EditMask informe a seguinte mscara de entrada: LLL-9999. Pronto, est configurada a mscara. - Active: True. (Caso tenha erro de configurao, ao ativar o mesmo apresentado). O passo seguinte ser adicionar ao Data Module o componente FDUpdateSQL (ADUpdateSQL) presente na Paleta FireDAC. No nosso exemplo, dessa vez ser vinculado a Query tblAutomovel. Altere as propriedades do componente da seguinte forma: - Name: updAutomovel - Connection: FDConnection1 (ADConnection1) Retorne agora e selecione o componente tblAutomovel, marcando a propriedade UpdateObject para updAutomovel. Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:9 Feito isso, torna-se possvel adicionar os cdigos SQL responsveis pela manipulao dos registros. D um duplo clique sobre o componente updAutomovel. Caso seja exibida uma mensagem, apenas confirme clicando em Yes. Abrir o editor de SQL. Figura 8 Editor de SQL - Tabela Automvel Nesse editor, certifique-se que na primeira coluna esteja selecionado o campo chave primria da tabela, na segunda coluna, todos os registros selecionados, o que ocorre por padro. - Para gerar os cdigos SQL automaticamente, basta clicar no boto Generate SQL. Depois s confirmar clicando em OK. Para finalizar, basta inserir o componente DataSource, presente na paleta Data Access. Aps inserido, altere no Object Inspector a propriedade Name para dsAutomovel e a propriedade DataSet para tblAutomovel. Figura 9 - Viso Final do Data Module Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:10 CRIAAO DOS FORMULRIOS PARA MANIPULAO DOS DADOS FORMULRIO MARCAS Nesse formulrio adotaremos o mtodo rpido para manipulao dos dados, adotando o componente DBNavigator para automatizar grande parte do processo. Vamos criar rapidamente o formulrio, atravs do menu File/New/VCL Form - Delphi. Salve como UnitMarca.pas. Altere as seguintes propriedades: BorderIcons: biSystemMenu BorderStyle: bsSingle Caption: Cadastro de Marcas FormStyle: fsMDIChild KeyPreview: True Name: frmMarca Position: poMainFormCenter Height: 175 Width: 360Para impedir que o formulrio seja criado automaticamente ao executar o aplicativo, por ser do tipo MDI, faz-se necessrio retirar o mesmo do auto-create. Menu Project/Options. Na primeira coluna opo Forms. Na coluna central, selecione o formulrio pretendido, e clique na seta que aponta pra direita. OBS> O frmPrincipal e o DM, devem permanecer sempre na Coluna central, Auto-Create forms. Figura 11 - Impedir Auto-Create do Formulrio Figura 10 - Formulrio de Cadastro de Marcas Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:11 Feito o procedimento para impedir o auto-create, vamos garantir que seja possvel fechar o formulrio quando assim pretendido. Vamos no evento OnClose do frmMarca, incluir os seguintes cdigos: Action := Cafree; frmMarca := Nil; Chamando o formulrio Marcas a partir do Form Principal: Volte ao formulrio principal, abre o MainMenu1, selecione o item Marcas das opes, dando um duplo clique com o mouse. No editor de cdigo, informe o seguinte: if frmMarca = nil then frmMarca := TfrmMarca.Create(Self); frmMarca.Show; Para que tambm seja possvel acessar o formulrio Marcas a partir do boto da ToolBar que consta no formulrio principal, no ser necessrio redigitar o cdigo acima. Basta vincular o cdigo existente ao evento OnClick do referido boto. Selecione o Boto Marcas, nos eventos procure o OnClick, e ao invs de dar o duplo clique para abrir o editor de cdigos, basta clicar na setinha no canto direito e selecionar o evento j criado anteriormente para o menu, que nesse caso aparecer como Marcas1Click. Adicionando os componentes ao Formulrio Marcas: - Adicione dois labels da paleta Standard. - Da Paleta Additional adicione um BitBtn (name: btnLocMarca) - Da paleta Data Controls, adicione: um DBText, um DBEdit e um DBNavigator. - Organize o layout conforme a Figura 10. Com os componentes devidamente inseridos, faz-se necessrio incluir a Unit do Data Module na Unit do Formulrio frmMarcas. - Selecione o frmMarcas. - Menu File/Use Unit - Selecione a UnitDM e OK. Agora altere as seguintes propriedades dos componentes: - DBText DataSource: DM.dsMarca DataField: Cod_Marca - DBEdit - DataSource: DM.dsMarca DataField: Nome_Marca - DBNavigator - DataSource: DM.dsMarca ShowHint: True; Na propriedade Hints do DBNavigator, exclua os textos em ingls, substituindo os mesmos pelas tradues: Primeiro Registro Registro Anterior Prximo Registro ltimo Registro Inserir Registro Excluir Registro Editar Registro Salvar Registro Cancelar Registro Atualizar Dados Aplicar Alteraes Cancelar Alteraes Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:12 Fazendo Enter funcionar como Tab: Na propriedade OnKeyPress do formulrio frmMarca inclua o cdigo abaixo: if Key = #13 then if not ((ActiveControl is TDBNavigator)) then begin Key := #0; Perform(WM_NEXTDLGCTL, 0, 0); end; Exibir o Cdigo da Marca ao salvar um registro: Para atualizar automaticamente toda vez ao se incluir um registro novo, utilizando-se o componente Table, faz-se necessrio retornar ao Data Module e incluir o cdigo abaixo, no evento AfterPost do tblMarca. tblMarca.Refresh; tblMarca.Last; Pronto. Agora s executar e testar os mtodos de insero, edio e excluso. Formulrio de Pesquisa das Marcas cadastradas - Table Mesmo utilizando-se o componente Table, tambm torna-se possvel realizar buscas nos registros de uma tabela. Embora mais limitado que usando os comandos SQL, podemos utilizar do mtodo Locate do componente Table. Vamos criar um novo Formulrio, salvando a Unit como UnitLocMarca.pas. Tire do auto-create conforme visto anteriormente. Altere as propriedades conforme descrito no formulrio anterior, substituindo somente as propriedades: - Name: frmLocMarca - Height: 240 - Width: 350 O form criado deve ser chamado, clicando-se no BitBtn btnLocMarca, inserido no formulrio frmMarca. - Inclua nesse formulrio localizar: um Label, um MaskEdit, um DBGrid e um BitBtn. - Na parte do cdigo do formulrio, bem na parte superior, na clusula Uses, acrescente no final da lista a classe DB. - No evento OnChange do edtPesquisa, vamos inserir o cdigo responsvel pela busca na tabela: DM.tblMarca.Locate('Nome_Marca',edtPesquisa.Text,[loPartialKey]); - No evento OnShow do formulrio vamos incluir o cdigo para colocar automaticamente no edtPesquisa: edtPesquisa.setFocus; Temos a necessidade de impedir que o usurio consigo fazer edio ao clicar num campo da tabela. Selecione o DBGrid, e na propriedade Options clique no (+) que aparece sua frente. Mude para True a propriedade dgRowSelect. Para testar, e garantir melhores resultados, recomendvel ter quantidade maior de registros j inseridos na tabela. Figura 12 - Formulrio Localizar Marca Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:13 FORMULRIO CIDADE Para o formulrio cidade, adotaremos botes de aes personalizados, manipulando os dados via cdigo. - Crie um novo formulrio, salve como UnitCidade.pas, e propriedade Name como frmCidade. Siga os demais procedimentos para deixar o formulrio OK para uso. Figura 13 - Formulrio Cidade Lembre-se de adicionar a unit DM ao formulrio de Cadastro de Cidades: - File/Use Unit -> UnitDM.pas Tambm utilizaremos neste formulrio os procedimentos Habilita e Desabilita campos presentes na unit RotinasGerais. Da mesma forma, adicionaremos essa unit ao formulrio de Cadastro de Cidades. - File/Use Unit -> RotinasGerais.pas Inserindo os componentes no formulrio: Para o campo Cod_Cidade, insira um componente DBText da paleta Data Controls: DataSource: DM.dsCidade DataField: COD_CIDADE Name: lblCodigo Para o campo Nome_Cidade, insira um componente DBEdit da paleta Data Controls: DataSource: DM.dsCidade DataField: NOME_CIDADE Name: edtNomeCidade Para o campo Estado, insira um componente DBComboBox da paleta Data Controls: DataSource: DM.dsCidade DataField: UF Name: cbEstado Na propriedade Items, do DbComboBox, digite as iniciais dos estados Brasileiros para serem exibidos depois: AC, SC, RS, SP, RJ, AM, PR, etc. Para serem ordenados em ordem alfabtica, altere a propriedade Sorted para True. Para os botes, insira 11 BitBtns da paleta Additional. Configure as propriedades de tamanho, imagens, hints, conforme cada qual. OBS: Fundamental lembrar que a propriedade Enabled dos botes Salvar e Cancelar deve estar como False, a fim de efetivamente funcionar o tratamento de todos os botes. Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:14 Procedimento de Controle dos Botes TrataBotoes Para poder gerenciar os botes que devem ficar habilitados e/ou desabilitados durante o processo de insero ou edio dos dados, faremos uso de um procedimento. Inicialmente ser necessrio acrescentar o procedimento na clusula Type do cdigo fonte do formulrio, na parte superior do mesmo. Localize onde se iniciam as entradas dos demais procedimentos, e acrescente a seguinte linha: ........ procedure TrataBotoes; ................ J na parte aps a clusula Uses, acrescente o procedimento de fato: procedure TfrmCidade.TrataBotoes; begin btnNovo.Enabled:=not btnNovo.Enabled; btnEditar.Enabled:=not btnEditar.Enabled; btnExcluir.Enabled:= not btnExcluir.Enabled; btnSalvar.Enabled:=not btnSalvar.Enabled; btnCancelar.Enabled:=not btnCancelar.Enabled; btnFechar.Enabled:=not btnFechar.Enabled; btnLocalizar.Enabled:=not btnLocalizar.Enabled; btnPrimeiro.Enabled := not btnPrimeiro.Enabled; btnAnterior.Enabled := not btnAnterior.Enabled; btnProximo.Enabled := not btnProximo.Enabled; btnUltimo.Enabled := not btnUltimo.Enabled; end; CDIGOS DO EVENTO ONCLICK DOS BOTES procedure TfrmCidade.btnPrimeiroClick(Sender: TObject); begin DM.tblCidade.First; end; procedure TfrmCidade.btnAnteriorClick(Sender: TObject); begin DM.tblCidade.Prior; end; procedure TfrmCidade.btnProximoClick(Sender: TObject); begin DM.tblCidade.Next; end; Figura 14 - Cdigo Fonte Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:15 procedure TfrmCidade.btnUltimoClick(Sender: TObject); begin DM.tblCidade.Last; end; procedure TfrmCidade.btnNovoClick(Sender: TObject); begin DM.tblCidade.Append; HabilitaCampos(frmCidade); TrataBotoes; edtNomeCidade.setFocus; end; procedure TfrmCidade.btnSalvarClick(Sender: TObject); begin DM.tblCidade.Post; DesabilitaCampos(frmCidade); TrataBotoes; btnNovo.SetFocus; end; procedure TfrmCidade.btnEditarClick(Sender: TObject); begin DM.tblCidade.Edit; HabilitaCampos(frmCidade); TrataBotoes; end; procedure TfrmCidade.btnCancelarClick(Sender: TObject); begin DM.tblCidade.Cancel; DesabilitaCampos(frmCidade); TrataBotoes; end; procedure TfrmCidade.btnExcluirClick(Sender: TObject); begin If Application.MessageBox('Tem Certeza de que deseja excluir esse registro ?', 'Excluso',mb_YesNo+mb_DefButton2+mb_IconQuestion) = Id_Yes then Begin DM.tblCidade.Delete; end; end; Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:16 OBS: Como ainda no temos criado o formulrio frmLocCidade, vamos apenas inserir o cdigo no boto Localizar, mantendo-o comentado, at que o formulrio seja criado mais adiante, bastando da, somente descometer retirando os ({ }). procedure TfrmCidade.btnLocalizarClick(Sender: TObject); begin { if frmLocCidade = nil then frmLocCidade := TfrmLocCidade.Create(Self); frmLocCidade.Show; } end; procedure TfrmCidade.btnFecharClick(Sender: TObject); begin Close; end; CDIGO EVENTO OnKeyPress DO FORMULRIO (Enter Funcionar como Tab). Lembrando de organizar a propriedade TabOrder de todos os componentes presentes do form, iniciando-se no primeiro pelo ndice 0 e assim por diante. procedure TfrmCidade.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then if not ((ActiveControl is TBitBtn) or (ActiveControl is TDBMemo)) then begin Key := #0; Perform(WM_NEXTDLGCTL, 0, 0); end; end; No formulrio Principal, na opo do Menu para chamar o formulrio Cidade, temos que acrescentar a linha que desabilita os botes abrindo-se o mesmo, devendo ficar da seguinte forma: procedure TfrmPrincipal.Cidades1Click(Sender: TObject); begin if frmCidade = nil then frmCidade := TfrmCidade.Create(Self); DesabilitaCampos(frmCidade); frmCidade.Show; end; Para finalizar, falta incluir o cdigo de atualizao nos eventos AfterPost e AfterDelete do tblCidade, constante no Data Module: tblCidade.Refresh; Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:17 FORMULRIO LOCALIZAR CIDADE Para facilitar as buscas de cidades cadastradas, vamos incluir um novo formulrio ao nosso projeto, salvando a unit com o nome UnitLocCidade.pas, name do form: frmLocCidade. As demais configuraes so similares aos anteriormente criados. Figura 15 - Formulrio Localizar Cidade Vamos incluir a UnitDM ao formulrio: - File/Use Unit -> UnitDM.pas Insira os seguintes componentes, no formulrio de localizao: - Um Label - Um MaskEdit - Um DBGrid - Um BitBtn No DbGrid, na propriedade DataSource, selecione DM.tblCidade. Para personalizar os dados do DBGrid, d um duplo clique sobre o mesmo. Na janela que aparecer, clique com o Boto Direito do mouse na parte central, depois na opo Add All Fields. Agora basta selecionar o/s campos desejados e alterar as propriedades conforme desejado. Lembrando que para ajustar a linha de cabealho da tabela, necessita-se clicar no (+) que precede a propriedade Title, sendo possvel alterar o Caption, Cor, ajustes de alinhamento, dentre outros. No Boto OK, basta incluir o comando Close, ao evento OnClick. Temos a necessidade de impedir que o usurio consigo fazer edio ao clicar num campo da tabela. Selecione o DBGrid, e na propriedade Options clique no (+) que aparece sua frente. Mude para True a propriedade dgRowSelect. Figura 16 - Personalizar DbGrid Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:18 Para finalizar o formulrio de busca, faremos com que ao ser aberto, o cursor j aparea no campo de pesquisa, atravs do evento OnShow do formulrio. procedure TfrmLocCidade.FormShow(Sender: TObject); begin edtPesquisa.SetFocus; end; Pretende-se que, ao o usurio digitar no campo de pesquisa, sejam simultaneamente filtrados os registros. Para isso, recorremos ao evento OnChange do componente edtPesquisa. E definimos o seguinte cdigo SQL: procedure TfrmLocCidade.edtPesquisaChange(Sender: TObject); begin With DM.tblCidade do Begin Close; Sql.Clear; Sql.Add('Select * from Cidade where nome_cidade containing :Parametro order by nome_cidade'); ParamByName('Parametro').AsString := edtPesquisa.Text; Open; end; end; Para testar, vamos voltar ao formulrio de cadastro de cidades, e descomentar o cdigo do boto Localizar, retirando os ({ }). Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:19 FORMULRIO AUTOMVEL - Crie um novo formulrio, salve como UnitAutomovel.pas, e propriedade Name como frmAutomovel. Siga os demais procedimentos para deixar o formulrio OK para uso. Figura 17 - Formulrio Cadastro de Automveis Lembre-se de adicionar a unit DM e RotinasGerais ao formulrio de Cadastro de Automveis: - File/Use Unit -> UnitDM.pas - File/Use Unit -> RotinasGerais.pas Inserindo os componentes no formulrio: Podemos agilizar o processo, copiando os botes criados no formulrio anterior (frmCidade). Basta selecionar todos eles no formulrio Cidade, dar o comando copiar (Ctrl+C) e voltar ao formulrio Automvel e colar (Ctrl+V). Para o campo Cod_Automovel, insira um componente DBText da paleta Data Controls: DataSource: DM.dsAutomovel DataField: COD_AUTOMOVEL Name: lblCodigo Para o campo Marca, insira um componente DBLookupComboBox da paleta Data Controls, que visa buscar os registros cadastrados na tabela Marca. Onde salva: DataSource: DM.dsAutomovel DataField: COD_MARCA Name: cbMarca Da onde Busca: ListSource: DM.dsMarca ListField: Nome_Marca KeyField: Cod_Marca Para o campo Modelo, insira um componente DBEdit da paleta Data Controls: DataSource: DM.dsAutomovel DataField: MODELO Name: edtModelo Para o campo Cidade, insira um componente DBLookupComboBox da paleta Data Controls, que visa buscar os registros cadastrados na tabela Cidade. Onde salva: DataSource: DM.dsAutomovel DataField: COD_CIDADE Name: cbCidade Da onde Busca: ListSource: DM.dsCidade ListField: Nome_Cidade KeyField: Cod_Cidade Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:20 Para o campo Placa, insira um componente DBEdit da paleta Data Controls: DataSource: DM.dsAutomovel DataField: PLACA Name: edtPlaca CharCase: ecUpperCase Para o campo Ano, insira um componente DBEdit da paleta Data Controls: DataSource: DM.dsAutomovel DataField: ANO_FABRICACAO Name: edtAno Para o campo Conservao, insira um componente DBRadioGroup da paleta Data Controls: DataSource: DM.dsAutomovel DataField: CONSERVACAO Name: cbConservacao Items> (o que exibido ao usurio) - Informe as quatro opes: timo, Bom, Razovel, Pssimo. Values> (o que se grava efetivamente no banco) Informe as Iniciais dos Itens: O, B, R e P. Para o campo Obs, insira um componente DBMemo da paleta Data Controls: DataSource: DM.dsAutomovel DataField: OBS Name: mmObs OBS: Fundamental lembrar que a propriedade Enabled dos botes Salvar e Cancelar deve estar como False, a fim de efetivamente funcionar o tratamento de todos os botes. Procedimento de Controle dos Botes TrataBotoes Inicialmente ser necessrio acrescentar o procedimento na clusula Type no cdigo fonte do formulrio, na parte superior do mesmo, da mesma forma como foi feito no formulrio anterior de cadastro de cidades. Localize onde se iniciam as entradas dos demais procedimentos, e acrescente a seguinte linha: ........ procedure TrataBotoes; ................ J na parte aps a clusula Uses, acrescente o procedimento de fato: procedure TfrmAutomovel.TrataBotoes; begin btnNovo.Enabled:=not btnNovo.Enabled; btnEditar.Enabled:=not btnEditar.Enabled; btnExcluir.Enabled:= not btnExcluir.Enabled; btnSalvar.Enabled:=not btnSalvar.Enabled; btnCancelar.Enabled:=not btnCancelar.Enabled; btnFechar.Enabled:=not btnFechar.Enabled; btnLocalizar.Enabled:=not btnLocalizar.Enabled; btnPrimeiro.Enabled := not btnPrimeiro.Enabled; btnAnterior.Enabled := not btnAnterior.Enabled; btnProximo.Enabled := not btnProximo.Enabled; btnUltimo.Enabled := not btnUltimo.Enabled; end; OBS: Repare que em relao ao cdigo inserido anteriormente no formulrio de cadastro de cidades, apenas foi alterado o nome do form na primeira linha da procedure. Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:21 CDIGOS DO EVENTO OnClick DOS BOTES procedure TfrmAutomovel.btnPrimeiroClick(Sender: TObject); begin DM.tblAutomovel.First; end; procedure TfrmAutomovel.btnAnteriorClick(Sender: TObject); begin DM.tblAutomovel.Prior; end; procedure TfrmAutomovel.btnProximoClick(Sender: TObject); begin DM.tblAutomovel.Next; end; procedure TfrmAutomovel.btnUltimoClick(Sender: TObject); begin DM.tblAutomovel.Last; end; Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:22 procedure TfrmAutomovel.btnNovoClick(Sender: TObject); begin DM.tblAutomovel.Append; HabilitaCampos(frmAutomovel); TrataBotoes; cbMarca.setFocus; end; procedure TfrmAutomovel.btnSalvarClick(Sender: TObject); begin DM.tblAutomovel.Post; DesabilitaCampos(frmAutomovel); TrataBotoes; btnNovo.SetFocus; end; procedure TfrmAutomovel.btnEditarClick(Sender: TObject); begin DM.tblAutomovel.Edit; HabilitaCampos(frmAutomovel); TrataBotoes; end; procedure TfrmAutomovel.btnCancelarClick(Sender: TObject); begin DM.tblAutomovel.Cancel; HabilitaCampos(frmAutomovel); TrataBotoes; end; procedure TfrmAutomovel.btnExcluirClick(Sender: TObject); begin If Application.MessageBox('Tem Certeza de que deseja excluir esse registro ', 'Excluso',mb_YesNo+mb_DefButton2+mb_IconQuestion) = Id_Yes then Begin DM.tblAutomovel.Delete; end; end; Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:23 procedure TfrmAutomovel.btnLocalizarClick(Sender: TObject); begin { if frmLocAutomovel = nil then frmLocAutomovel := TfrmLocAutomovel.Create(Self); frmLocAutomovel.Show; } end; procedure TfrmAutomovel.btnFecharClick(Sender: TObject); begin Close; end; CDIGO EVENTO OnKeyPress DO FORMULRIO (Enter Funcionar como Tab). Lembrando de organizar a propriedade TabOrder de todos os componentes presentes do form, iniciando-se no primeiro pelo ndice 0 e assim por diante. procedure TfrmAutomovel.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then if not ((ActiveControl is TBitBtn) or (ActiveControl is TDBMemo)) then begin Key := #0; Perform(WM_NEXTDLGCTL, 0, 0); end; end; No formulrio Principal, na opo do Menu para chamar o formulrio Automvel, temos que acrescentar a linha que desabilita os botes, devendo ficar da seguinte forma: procedure TfrmPrincipal.Automveis1Click(Sender: TObject); begin if frmAutomovel = nil then frmAutomovel := TfrmAutomovel.Create(Self); DesabilitaCampos(frmAutomovel); frmAutomovel.Show; end; Para finalizar, falta incluir o cdigo de atualizao nos eventos AfterPost e AfterDelete do tblAutomovel, constante no Data Module: tblAutomovel.Refresh; Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:24 FORMULRIO LOCALIZAR AUTOMVEL Vamos incluir um novo formulrio ao nosso projeto, salvando a unit como UnitLocAutomovel.pas, name do form: frmLocAutomovel. As demais configuraes so similares aos forms anteriormente criados. Figura 18 - Formulrio Localizar Automvel Vamos incluir a UnitDM ao formulrio: - File/Use Unit -> UnitDM.pas Insira os seguintes componentes, no formulrio de localizao: - Um Label - Um MaskEdit - Um DBGrid - Um BitBtn Ajuste o DBGrid, conforme descrito no formulrio localizar Cidade, criado em etapas anteriores. Cdigo do Evento OnChange, do edtPesquisa: procedure TfrmLocAutomovel.edtPesquisaChange(Sender: TObject); begin With DM.tblAutomovel do Begin Close; Sql.Clear; Sql.Add('Select * from Automovel where modelo containing :Parametro order by modelo'); ParamByName('Parametro').AsString := edtPesquisa.Text; Open; end; end; Como no DBGrid aparecem os cdigos, ao invs da descrio da Cidade e Marca, necessitamos criar campos do tipo Lookup na Query tblAutomovel. Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:25 CRIANDO CAMPOS VIRTUAIS NUM QUERY Abra o Data Module. Clique com o Boto Direito do mouse sobre tblAutomovel e selecione a opo Fields Editor. Na Janelinha que exibida, j esto sendo apresentados os campos fsicos e reais da tabela Automvel. Vamos incluir agora um campo do tipo Lookup. Para tal, clique com o boto direito na parte interna da janelinha e escolha a opo New Field. Configure como mostra a Figura 19. Figura 19 - Campo Virtual - Cidade Repita o procedimento anterior, adicionando mais um campo para mostrar a Marca. Figura 20 - Campo Virtual - Marca Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:26 ANEXO unit RotinasGerais; interface uses sysutils, IniFiles,Windows, Forms, Classes, Controls, StdCtrls, Variants,Messages, ExtCtrls, dialogs, DBCtrls, Buttons, StrUtils ; function VerificaCPF(cpf: string): boolean; procedure DesabilitaCampos (Form: TForm); procedure HabilitaCampos (Form: TForm); Function ValidaCNPJ(numCNPJ: string): boolean; function Acentos ( str: String ): String; function GetBuildInfo:string; implementation function GetBuildInfo:string; var VerInfoSize: DWORD; VerInfo: Pointer; VerValueSize: DWORD; VerValue: PVSFixedFileInfo; Dummy: DWORD; V1, V2, V3, V4: Word; Prog : string; begin Prog := Application.Exename; VerInfoSize := GetFileVersionInfoSize(PChar(prog), Dummy); GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(prog), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); with VerValue^ do begin V1 := dwFileVersionMS shr 16; V2 := dwFileVersionMS and $FFFF; V3 := dwFileVersionLS shr 16; V4 := dwFileVersionLS and $FFFF; end; FreeMem(VerInfo, VerInfoSize); result := Copy (IntToStr (100 + v1), 3, 2) + '.' + Copy (IntToStr (100 + v2), 3, 2) + '.' + Copy (IntToStr (100 + v3), 3, 2) + '.' + Copy (IntToStr (1000 + v4), 3, 2); end; function Acentos ( str: String ): String; var i: Integer; begin for i := 1 to Length ( str ) do case str[i] of '': str[i] := 'a'; '': str[i] := 'e'; '': str[i] := 'i'; '': str[i] := 'o'; '': str[i] := 'u'; '': str[i] := 'a'; '': str[i] := 'e'; '': str[i] := 'i'; '': str[i] := 'o'; '': str[i] := 'u'; '': str[i] := 'a'; '': str[i] := 'e'; '': str[i] := 'i'; '': str[i] := 'o'; '': str[i] := 'u'; '': str[i] := 'a'; '': str[i] := 'e'; '': str[i] := 'i'; '': str[i] := 'o'; '': str[i] := 'u'; '': str[i] := 'a'; '': str[i] := 'o'; '': str[i] := 'n'; '': str[i] := 'c'; '': str[i] := 'A'; '': str[i] := 'E'; '': str[i] := 'I'; '': str[i] := 'O'; '': str[i] := 'U'; '': str[i] := 'A'; '': str[i] := 'E'; '': str[i] := 'I'; '': str[i] := 'O'; '': str[i] := 'U'; '': str[i] := 'A'; '': str[i] := 'E'; '': str[i] := 'I'; '': str[i] := 'O'; '': str[i] := 'U'; '': str[i] := 'A'; '': str[i] := 'E'; '': str[i] := 'I'; '': str[i] := 'O'; '': str[i] := 'U'; '': str[i] := 'A'; '': str[i] := 'O'; '': str[i] := 'N'; '': str[i] := 'C'; end; Result := str; end; Function VerificaCPF(cpf:string):boolean; var i:integer; Want:char; Wvalid:boolean; Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:27 Wdigit1,Wdigit2:integer; begin Wdigit1:=0; Wdigit2:=0; Want:=cpf[1];//variavel para testar se o cpf repetido como 111.111.111-11 Delete(cpf,ansipos('.',cpf),1); //retira as mascaras se houver Delete(cpf,ansipos('.',cpf),1); Delete(cpf,ansipos('-',cpf),1); //testar se o cpf repetido como 111.111.111-11 for i:=1 to length(cpf) do begin if cpf[i] Want then begin Wvalid:=true; // se o cpf possui um digito diferente ele passou no primeiro teste break end; end; // se o cpf composto por numeros repetido retorna falso if not Wvalid then begin result:=false; exit; end; //executa o calculo para o primeiro verificador for i:=1 to 9 do begin wdigit1:=Wdigit1+(strtoint(cpf[10-i])(I+1)); end; Wdigit1:= ((11 - (Wdigit1 mod 11))mod 11) mod 10; {formula do primeiro verificador soma=12+23+34.. at 910 digito1 = 11 - soma mod 11 se digito > 10 digito1 =0 } //verifica se o 1 digito confere if IntToStr(Wdigit1) cpf[10] then begin result:=false; exit; end; for i:=1 to 10 do begin wdigit2:=Wdigit2+(strtoint(cpf[11-i])(I+1)); end; Wdigit2:= ((11 - (Wdigit2 mod 11))mod 11) mod 10; {formula do segundo verificador soma=12+23+34.. at 1011 digito1 = 11 - soma mod 11 se digito > 10 digito1 =0 } // confere o 2 digito verificador if IntToStr(Wdigit2) cpf[11] then begin result:=false; exit; end; //se chegar at aqui o cpf valido result:=true; end; Function ValidaCNPJ(numCNPJ: string): boolean; var cnpj: string; dg1, dg2: integer; x, total: integer; ret: boolean; begin ret:=False; cnpj:=''; //Analisa os formatos if Length(numCNPJ) = 18 then if (Copy(numCNPJ,3,1) + Copy(numCNPJ,7,1) + Copy(numCNPJ,11,1) + Copy(numCNPJ,16,1) = '../-') then begin cnpj:=Copy(numCNPJ,1,2) + Copy(numCNPJ,4,3) + Copy(numCNPJ,8,3) + Copy(numCNPJ,12,4) + Copy(numCNPJ,17,2); ret:=True; end; if Length(numCNPJ) = 14 then begin cnpj:=numCNPJ; ret:=True; end; //Verifica if ret then begin try //1 digito total:=0; for x:=1 to 12 do begin if x < 5 then Inc(total, StrToInt(Copy(cnpj, x, 1)) (6 - x)) else Inc(total, StrToInt(Copy(cnpj, x, 1)) (14 - x)); end; dg1:=11 - (total mod 11); if dg1 > 9 then dg1:=0; //2 digito total:=0; for x:=1 to 13 do Sociedade Educacional de Itapiranga - FAI Faculdades Curso: GESTO DA TECNOLOGIA DA INFORMAO Disciplina: PROGRAMAO II Professor: ANDR KLUNK Perodo: 3 semestre Ano: 2014 PG:28 begin if x < 6 then Inc(total, StrToInt(Copy(cnpj, x, 1)) (7 - x)) else Inc(total, StrToInt(Copy(cnpj, x, 1)) (15 - x)); end; dg2:=11 - (total mod 11); if dg2 > 9 then dg2:=0; //Validao final if (dg1 = StrToInt(Copy(cnpj, 13, 1))) and (dg2 = StrToInt(Copy(cnpj, 14, 1))) then ret:=True else ret:=False; except ret:=False; end; //Invlidos case AnsiIndexStr(cnpj,['00000000000000','11111111111111','22222222222222','33333333333333','44444444444444', '55555555555555','66666666666666','77777777777777','88888888888888','99999999999999']) of 0..9: ret:=False; end; end; ValidaCNPJ:=ret; end; procedure HabilitaCampos (Form: TForm); var i : Integer; begin for i := 0 to Form.ComponentCount - 1 do Begin if Form.Components[i] is TCustomEdit then (Form.Components[i] as TCustomEdit).Enabled:=True; if Form.Components[i] is TDBComboBox then (Form.Components[i] as TDBComboBox).Enabled:=True; if Form.Components[i] is TDBLookupComboBox then (Form.Components[i] as TDBLookupComboBox).Enabled:=True; if Form.Components[i] is TComboBox then (Form.Components[i] as TComboBox).Enabled:=True; if Form.Components[i] is TDbCheckBox then (Form.Components[i] as TDbCheckBox).Enabled:=True; if Form.Components[i] is TGroupBox then (Form.Components[i] as TGroupBox).Enabled:=True; if Form.Components[i] is TDBRadioGroup then (Form.Components[i] as TDBRadioGroup).Enabled:=True; End; end; procedure DesabilitaCampos (Form: TForm); var i : Integer; begin for i := 0 to Form.ComponentCount - 1 do Begin if Form.Components[i] is TCustomEdit then (Form.Components[i] as TCustomEdit).Enabled:=False; if Form.Components[i] is TDBComboBox then (Form.Components[i] as TDBComboBox).Enabled:=False; if Form.Components[i] is TDBLookupComboBox then (Form.Components[i] as TDBLookupComboBox).Enabled:=False; if Form.Components[i] is TComboBox then (Form.Components[i] as TComboBox).Enabled:=False; if Form.Components[i] is TDbCheckBox then (Form.Components[i] as TDbCheckBox).Enabled:=False; if Form.Components[i] is TGroupBox then (Form.Components[i] as TGroupBox).Enabled:=False; if Form.Components[i] is TDBRadioGroup then (Form.Components[i] as TDBRadioGroup).Enabled:=False; End; end; end. -------------------------------------------------------------------------------------------------------