POO - Delphi - Leonardo Quartieri

March 17, 2018 | Author: Flaviano Costa Silva | Category: Computer Programming, Computer Data, Application Software, Computer Engineering, Programming Paradigms


Comments



Description

Olá pessoal, neste artigo mostrarei de forma prática e direta como é facilutilizar POO no Delphi, criaremos uma classe para conexão e uma classe de clientes para realizar as operações de Select, Insert, Update e Delete no banco. A POO (Programação Orientada a Objetos) facilita e muito a manutenção e o reaproveitamento de código, sendo ainda facil de se entender e aplicar, vamos por a mão na massa? Crie um banco de dados com uma tabela chamada Clientes: // Observe que o campo id é auto incremento CREATE TABLE Clientes( id int IDENTITY(1,1) NOT NULL, Nome varchar(50), Endereco varchar(50), Telefones varchar(50), Obs varchar(200) ) Tabela construida vamos agora para a construção de nossa classe de conexão, (File > New > Unit) nesta eu utilizei ADO, observe abaixo a unit uConn : **************************** unit uConn; interface uses ADODB; type TConn = class public Conn : TADOConnection; constructor Create; end; implementation { TConn } constructor TConn.Create; begin Conn := TADOConnection.Create(nil); Conn.LoginPrompt := false; Conn.ConnectionString := 'Provider=SQLOLEDB.1'+ ';Password=XXXXX'+ ';Persist Security Info=False'+ ';User ID=XXXXX'+ ';Initial Catalog=Clientes'+ ';Data Source=QD_08'; Conn.Connected := true; end; end. **************************** Observe que na classe TConn o create é o único método disponível, e no mesmo a conexão já é realizada, claro, você pode e deve implementar outros métodos nesta classe como capturar a string de conexão de um arquivo ini ou xml, mas como a intenção aqui e mostrar os primeiros passos POO no Delphi // utiliza a classe de conexão // Propriedades property Chave : integer read FChave write SetChave. property Obs : string read FObs write SetObs. Agora vamos a classe de Clientes(File > New > Unit). property QryPesquisa : TADOQuery read FQryPesquisa write SetQryPesquisa. Conexao : TConn. Nome. FDs: TDataSource. FQry: TADOQuery. observe abaixo a unit uClientes : **************************** unit uClientes. FTelefone: string. procedure SetChave(const Value: integer). FQryPesquisa: TADOQuery. interface uses ADODB. procedure SetQryPesquisa(const Value: TADOQuery). // Métodos function Selecionar(Chave: Integer. DB. procedure SetDsPesquisa(const Value: tDataSource). property Telefone : string read FTelefone write SetTelefone. procedure SetObs(const Value: string). published public constructor Create(Conn: TConn). type TClientes = class private FObs: string. uConn. procedure SetNome(const Value: string).fiz de forma reduzida. // Componentes property Qry : TADOQuery read FQry write SetQry. procedure SetTelefone(const Value: string). procedure SetDs(const Value: TDataSource). property Endereco : string read FEndereco write SetEndereco. FNome: string.Ordem: String):Boolean. FEndereco: string. FDsPesquisa: tDataSource. FChave: integer. procedure SetEndereco(const Value: string). procedure SetQry(const Value: TADOQuery). SysUtils. property Ds : TDataSource read FDs write SetDs. property Nome : string read FNome write SetNome. property DsPesquisa : tDataSource read FDsPesquisa write SetDsPesquisa. . '+ ' Telefones = :Telefones.Alterar: boolean. end.Fnome. Parameters.'+ ' Obs = :Obs'+ ' Where '+ ' id = :id'.Text := ' delete from Clientes'+ . Qry.Value := FTelefone.. SQL.etc. Parameters.ParamByName('Telefones').Create(nil).'+ ' Endereco = :Endereco.ParamByName('Nome')..ParamByName('id')..Connection := Conexao. function Alterar : boolean. DsPesquisa. Parameters. begin with Qry do begin Close.Deletar(Chave: integer): boolean. except Result := False. end.DataSet := Qry.Value := FChave. SQL.Text := ' Update Clientes Set '+ ' Nome = :Nome.Create(nil). end.function Inserir : boolean. try ExecSQL.Value := Fnome. end.Connection := Conexao.ParamByName('Obs').ParamByName('Endereco').) Parameters.Conn. constructor TClientes. begin with Qry do begin Close. DsPesquisa := TDataSource. QryPesquisa := TADOQuery. Qry := TADOQuery. end.Value := Fendereco. Ds. Result := true. Ds := TDataSource.Create(Conn: TConn).Value := FObs.Create(nil).. QryPesquisa. Parameters. // Observe a utilização dos Fileds (FChave. begin { No create é passada a conection das Qrys } Conexao := Conn. function TClientes.DataSet := QryPesquisa.Conn.Create(nil). function Deletar(chave: integer) : boolean. implementation { TClientes } function TClientes. try ExecSQL. Endereco. if Chave > 0 then begin Sql. except Result := False. Obs)'+ ' Values '+ ' (:Nome. function TClientes.Selecionar(Chave: Integer.ParamByName('Chave'). begin Nome := '%'+Nome+'%'.Fnome.Ordem: String): Boolean. :Obs)'.Text := ' Select * from Clientes where 1=1 '. begin with Qry do begin Close. end. :Endereco. end.etc.. Parameters. end. end.Inserir: boolean. Sql.ParamByName('Endereco'). end.ParamByName('Obs').Value := FTelefone. function TClientes.Value := FObs. end.) Parameters. // Observe a utilização dos Fileds (FChave. Parameters. Parameters.' where id = :Chave'. Nome. Telefones.Value := Fnome. try ExecSQL.ParamByName('Telefones'). Parameters.ParamByName('Chave').add(' and Nome like '+quotedstr(Nome)).Value := Chave. if Nome <> '' then sql.add(' Order by '+Ordem). try Open. :Telefones.Value := Chave..ParamByName('Nome'). Result := True. Parameters.. if Ordem <> '' then sql. Sql. if not eof then . with QryPesquisa do begin Close.add(' and id = :Chave').text := ' Insert into Clientes'+ ' (Nome.Value := Fendereco. end. except result := false. result := true.. begin FQryPesquisa := Value. begin FObs := Value. estes . procedure TClientes.SetDs(const Value: TDataSource). end.SetNome(const Value: string). end. end.Result := true else Result := false.SetQry(const Value: TADOQuery).SetDsPesquisa(const Value: tDataSource). procedure TClientes.SetQryPesquisa(const Value: TADOQuery). end. procedure TClientes. end. begin FTelefone := Value. end. end. begin FEndereco := Value. end. end. procedure TClientes. end. end. procedure TClientes.SetChave(const Value: integer). begin FChave := Value. end.SetTelefone(const Value: string). begin FDsPesquisa := Value. begin FQry := Value. begin FDs := Value. procedure TClientes. procedure TClientes. **************************** Observem que esta classe é simples e só contem metodos com SQL.SetEndereco(const Value: string). end. except Result := false. procedure TClientes. procedure TClientes.SetObs(const Value: string). begin FNome := Value. Graphics. edtTelefone: TEdit. Label5: TLabel. ComCtrls. DBCtrls. Grids. Label8: TLabel. TabSheet4: TTabSheet. mmoObs: TMemo. type TfrmPrincipal = class(TForm) PageControl1: TPageControl. uClientes. Label4: TLabel. Código da unit ufrmPrincipal : **************************** unit ufrmPrincipal. StdCtrls. Controls. TabSheet1: TTabSheet. uConn. edtNome: TEdit. Label2: TLabel. edtEndereco: TEdit. Label9: TLabel. Buttons.métodos são usados na nossa tela. ExtCtrls. . DBNavigator1: TDBNavigator. Messages. Label7: TLabel. abaixo segue uma sugestão de layout para a tela: Observe abaixo o código do formulário. Forms. DBGrid1: TDBGrid. Dialogs. Label1: TLabel. Classes. SysUtils. interface uses Windows. note que no create do mesmo instânciei nossas classes e já realizei um select para carregar o grid. TabSheet3: TTabSheet. Label3: TLabel. Variants. TabSheet2: TTabSheet. Label6: TLabel. DBGrids. procedure Label15MouseLeave(Sender: TObject). begin if edtNome. {$R *. BitBtn2: TBitBtn. X. edtUpEndereco: TEdit.Text.text. edtClienteDel: TEdit. procedure Label15Click(Sender: TObject). Endereco := edtEndereco. public { Public declarations } end. ufrmSplashSobre. var frmPrincipal: TfrmPrincipal.text.text = '' then exit. procedure DBGrid1CellClick(Column: TColumn). Label11: TLabel. Telefone := edtTelefone. procedure PageControl1Change(Sender: TObject). mmoUPObs: TMemo. Label14: TLabel. edtUpTelefones: TEdit.text. procedure FormCreate(Sender: TObject). Conn : TConn. procedure DBGrid1DblClick(Sender: TObject). Label15: TLabel. procedure BitBtn1Click(Sender: TObject). edtUpNome: TEdit. Label13: TLabel.BitBtn1: TBitBtn. Shift: TShiftState. Y: Integer).dfm} procedure TfrmPrincipal. Obs := mmoObs. BitBtn3: TBitBtn. procedure Label15MouseMove(Sender: TObject. procedure BitBtn3Click(Sender: TObject). implementation uses DB. with Clientes do // preeencho as properties begin Nome := edtNome. private { Private declarations } procedure LimpaCampos.BitBtn1Click(Sender: TObject). Label10: TLabel. Clientes : TClientes. if Inserir then // operação incluir begin . procedure BitBtn2Click(Sender: TObject). Label12: TLabel. 'Atenção'. end. if clientes.'Atenção'.MB_OK).asstring.MessageBox('Registro deletado com sucesso!'.DataSource. Telefone := edtUpTelefones. if Alterar then // operação alterar begin Application.FieldByName('telefones').Text.FieldByName('Nome'). procedure TfrmPrincipal.text = '' then exit.BitBtn3Click(Sender: TObject). edtUpEndereco.DataSource.MessageBox('O registro não foi alterado!'.text. procedure TfrmPrincipal.Text := DBGrid1. end.FieldByName('Endereco'). edtUpTelefones. Endereco := edtUpEndereco.asinteger)then begin Application.DataSource.text := DBGrid1.DataSet. Obs := mmoUpObs.text := DBGrid1.text. begin if edtClienteDel.FieldByName('id').Application. Nome := edtUpNome. end.MessageBox('O registro não foi incluído!'.DataSource. end. end else begin Application.DataSet. begin if edtUpNome.MB_OK).MessageBox('Registro alterado com sucesso!'.'Confirmação'. LimpaCampos. end. with Clientes do // preeencho as properties begin Chave := DBGrid1.DataSet.asstring.DataSet. procedure TfrmPrincipal. begin // carrega dados na tela de update e delete edtUpNome. end else begin Application.DataSource.'Confirmação'. end.FieldByName('Obs').asstring.'Atenção'.DBGrid1CellClick(Column: TColumn).MB_OK).DataSource. LimpaCampos.DataSet. LimpaCampos. end.text := DBGrid1. end else begin Application.asstring.MessageBox('O registro não foi deletado!'.DataSet.MB_OK). mmoUPObs.Deletar(DBGrid1.'Atenção'.AsInteger. .FieldByName('id').BitBtn2Click(Sender: TObject).MessageBox('Registro incluido com sucesso!'.text.MB_OK).text = '' then exit.MB_OK). end. begin label15.FieldByName('Nome'). procedure TfrmPrincipal.'Nome').Font. var i : integer.FormCreate(Sender: TObject).Create(Conn). procedure TfrmPrincipal. begin if PageControl1.Label15MouseLeave(Sender: TObject).Destroy. // Cria a conexão e conecta Clientes := TClientes. begin try frmSplashSobre := TfrmSplashSobre. begin label15.ActivePageIndex := 2.DsPesquisa.DBGrid1DblClick(Sender: TObject). // efeito link end. procedure TfrmPrincipal.ActivePageIndex = 0 then Clientes.PageControl1Change(Sender: TObject). //Conn.DataSet. Y: Integer). .Font. procedure TfrmPrincipal.Style := [fsUnderline].DataSource:= Clientes. end.'Nome').text := DBGrid1.Create.edtClienteDel. // cria o objeto cliente Clientes. DBNavigator1. // limpa edits e memos begin for I := 1 to ComponentCount -1 do begin if Components[i] is Tedit then (Components[i] as TEdit). Shift: TShiftState. begin // duplo click no grid leva para tela de update PageControl1. begin Conn := TConn.asstring. // metodo de seleção de cliente DBGrid1.''.Selecionar(0.clear. var frmSplashSobre : TfrmSplashSobre. end.clear. end.Style := [].DataSource := clientes. end.Selecionar(0.Label15MouseMove(Sender: TObject. procedure TfrmPrincipal.LimpaCampos.''.DataSource. // refresh no grid end. end.DsPesquisa. procedure TfrmPrincipal. X. procedure TfrmPrincipal. if Components[i] is TMemo then (Components[i] as TMemo).create(application).Label15Click(Sender: TObject). // efeito link end. finally freeandnil(frmSplashSobre). **************************** Observem a aplicação em funcionamento. qualquer sugestão ou dúvida entrem em contato : [email protected]. end. end.DF .Brasília .Net 30/04/2007. end.com por: Leonardo Quartieri Desenvolvedor Delphi & Delphi.
Copyright © 2024 DOKUMEN.SITE Inc.