Delphi Orientado a Objetos: desenvolvendo um CRUD

Veja nesse artigo a criação das classes necessárias para as operações de CRUD orientado a objetos em Delphi utilizando banco de dados firebird Embarcadero® Delphi® 2010.

Este artigo tem como objetivo demonstrar como criar uma classe de conexão ao banco de dados, a ser utilizada em um projeto orientado a objetos e a utilização desta classe para realizar as operações do CRUD (acrônimo de Create, Retrieve, Update e Delete em língua Inglesa) para as quatro operações básicas utilizadas em bancos de dados relacionais (RDBMS) ou em interface para usuários para criação, consulta, atualização e destruição de dados.

Para tanto criaremos três classes básicas demonstrando o procedimento:

Primeiro vamos criar a classe de conexão. Neste exemplo vamos conectar em um banco de dados Firebird. Os parâmetros da conexão encontram-se em um arquivo .INI gravado no diretório da aplicação chamado config.ini, cujo conteúdo segue abaixo:

Conteúdo da seção Dados do arquivo .INI

DriverName=Firebird<br> UserName=sysdba<br> PassWord=masterkey<br><br> Servidor=127.0.0.1/3050<br> Database=C:\Projetos\Database\ICOMBASE.FDB

Abaixo o código da unit uConexaoBanco.pas que cria a classe de conexão:

unit uConexaoBanco; interface uses SqlExpr, inifiles, SysUtils, Forms, uGFunctions; type TConexaoBanco = class private FConexaoBanco : TSQLConnection; public constructor Create; destructor Destroy; override; function GetConexao : TSQLConnection; property ConexaoBanco : TSQLConnection read GetConexao; end; implementation { TConexaoBanco } constructor TConexaoBanco.Create; var ArquivoINI, Servidor, Caminho, DriverName, UserName, PassWord : string; LocalServer : Integer; Configuracoes : TIniFile; begin ArquivoINI := ExtractFilePath(Application.ExeName) + '\config.ini'; if not FileExists(ArquivoINI) then begin Erro('Arquivo de Config não Encontrado - Entre em contato como suporte técnico!'); Exit; end; // Carregando as informações do arquivo de configurações Configuracoes := TIniFile.Create(ArquivoINI); Try Servidor := Configuracoes.ReadString('Dados', 'Servidor', Servidor); Caminho := Configuracoes.ReadString('Dados', 'DataBase', Caminho); DriverName := Configuracoes.ReadString('Dados', 'DriverName', DriverName); UserName := Configuracoes.ReadString('Dados', 'UserName', UserName); PassWord := Configuracoes.ReadString('Dados', 'PassWord', PassWord); Finally Configuracoes.Free; end; try FConexaoBanco := TSQLConnection.Create(Application); FConexaoBanco.ConnectionName := 'FBConnection'; FConexaoBanco.DriverName := 'Firebird'; FConexaoBanco.LibraryName := 'dbxfb.dll'; FConexaoBanco.VendorLib := 'fbclient.dll'; FConexaoBanco.GetDriverFunc := 'getSQLDriverINTERBASE'; FConexaoBanco.LoginPrompt := False; // FConexaoBanco.Connected := False; FConexaoBanco.Params.Values['DataBase'] := Servidor + ':' + Caminho; FConexaoBanco.Params.Values['User_Name'] := UserName; FConexaoBanco.Params.Values['Password'] := PassWord; FConexaoBanco.Connected := True; except Erro('Erro ao Conectar o Banco de dados. Verifique as preferencias do sistema!'); end; end; destructor TConexaoBanco.Destroy; begin FConexaoBanco.Free; inherited; end; function TConexaoBanco.GetConexao: TSQLConnection; begin Result := FConexaoBanco; end; end.

Em seguida vamos criar uma outra classe que será a controladora da conexão.

Também nessa classe vamos criar uma propriedade do tipo TSQLQuery que será usada em consultas gerais ao banco. Alguns podem perguntar: tudo isso não poderia fazer parte da classe de conexão? A resposta é sim , entretanto, por questão de preferências pessoais e considerar uma boa pratica separar as classes em units diferentes e de acordo com suas funcionalidades optei por utilizar esta estrutura.

Então vamos à classe de controle:

unit uControle; interface uses Windows, Messages, SysUtils, Classes, Controls, Forms, Dialogs, Variants, Contnrs, DBXFirebird, SqlExpr, StrUtils, inifiles, uConexaoBanco; type TControle = class private FConexao : TConexaoBanco; FSqqGeral : TSQLQuery; public constructor Create; destructor Destroy; override; property SqqGeral : TSQLQuery read FSqqGeral write FSqqGeral; end; implementation { TControle } constructor TControle.Create; begin FConexao := TConexaoBanco.Create; FSqqGeral := TSQLQuery.Create(Application); FSqqGeral.SQLConnection := FConexao.ConexaoBanco; end; destructor TControle.Destroy; begin inherited; end; end.

Agora finalmente criamos uma classe que será responsável por realizar o CRUD de um cadastro de clientes no banco. No OnCreate desta classe é passado como parâmetro a classe Tcontrole, que contem a conexão ao banco e a TSQLQuery.

unit uClienteControle; interface uses Windows, SysUtils, Classes, Controls, Forms, ComCtrls, uControle; type TClienteControle = class private FCodigo : String; FNome : String; FCpfCnpj : String; FIdentidade : String; FEndereco : String; FPontoRef : String; FBairro : String; FCidade : String; FEstado : String; FCep : String; FFone1 : String; FFone2 : String; FCelular : String; FDataCadastro : TDate; FDataUltimaCompra : TDate; FDataNascimento : TDate; FSexo : String; FEstadoCivil : String; FLimiteDeCredito : Currency; FEmail : String; FGrupoCliente : String; FArea : String; FStatus : String; FObservacoes : String; // Classe de Persistencia ... Fcontrole :TControle; public constructor Create(pConexaoControle:TControle); destructor Destroy; override; // function InsereCliente : Boolean; function AlteraCliente : Boolean; function ExcluirCliente : Boolean; function PesquisaCliente (pCodigo:string):TClienteControle; // property Codigo : String read FCodigo write FCodigo; property Nome : String read FNome write FNome; property CpfCnpj : String read FCpfCnpj write FCpfCnpj; property Identidade : String read FIdentidade write FIdentidade; property Endereco : String read FEndereco write FEndereco; property PontoRef : String read FPontoRef write FPontoRef; property Bairro : String read FBairro write FBairro; property Cidade : String read FCidade write FCidade; property Estado : String read FEstado write FEstado; property Cep : String read FCep write FCep; property Fone1 : String read FFone1 write FFone1; property Fone2 : String read FFone2 write FFone2; property Celular : String read FCelular write FCelular; property DataCadastro : TDate read FDataCadastro write FDataCadastro; property DataUltimaCompra : TDate read FDataUltimaCompra write FDataUltimaCompra; property DataNascimento : TDate read FDataNascimento write FDataNascimento; property Sexo : String read FSexo write FSexo; property EstadoCivil : String read FEstadoCivil write FEstadoCivil; property LimiteDeCredito : Currency read FLimiteDeCredito write FLimiteDeCredito; property Email : String read FEmail write FEmail; property GrupoCliente : String read FGrupoCliente write FGrupoCliente; property Area : String read FArea write FArea; property Status : String read FStatus write FStatus; property Observacoes : String read FObservacoes write FObservacoes; end; implementation { TClienteControle } function TClienteControle.AlteraCliente: Boolean; begin FControle.sqqGeral.Close; FControle.sqqGeral.SQL.Clear; FControle.sqqGeral.SQL.Add(' UPDATE TBL_CLIENTES '); FControle.sqqGeral.SQL.Add(' SET CLI_NOME = :vCLI_NOME, '); FControle.sqqGeral.SQL.Add(' CLI_CPF_CNPJ = :vCLI_CPF_CNPJ, '); FControle.sqqGeral.SQL.Add(' CLI_RG_INSCR = :vCLI_RG_INSCR, '); FControle.sqqGeral.SQL.Add(' CLI_ENDERECO = :vCLI_ENDERECO, '); FControle.sqqGeral.SQL.Add(' CLI_PONTO_REFERENCIA = :vCLI_PONTO_REFERENCIA, '); FControle.sqqGeral.SQL.Add(' CLI_BAIRRO = :vCLI_BAIRRO, '); FControle.sqqGeral.SQL.Add(' CLI_CIDADE = :vCLI_CIDADE, '); FControle.sqqGeral.SQL.Add(' CLI_ESTADO = :vCLI_ESTADO, '); FControle.sqqGeral.SQL.Add(' CLI_CEP = :vCLI_CEP, '); FControle.sqqGeral.SQL.Add(' CLI_FONE1 = :vCLI_FONE1, '); FControle.sqqGeral.SQL.Add(' CLI_FONE2 = :vCLI_FONE2, '); FControle.sqqGeral.SQL.Add(' CLI_CELULAR = :vCLI_CELULAR, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_CADASTRO = :vCLI_DTA_CADASTRO, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_ULTIMA_COMPRA = :vCLI_DTA_ULTIMA_COMPRA, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_NASCIMENTO = :vCLI_DTA_NASCIMENTO, '); FControle.sqqGeral.SQL.Add(' CLI_SEXO = :vCLI_SEXO, '); FControle.sqqGeral.SQL.Add(' CLI_ESTADO_CIVIL = :vCLI_ESTADO_CIVIL, '); FControle.sqqGeral.SQL.Add(' CLI_LIMITE_CREDITO = :vCLI_LIMITE_CREDITO, '); FControle.sqqGeral.SQL.Add(' CLI_EMAIL = :vCLI_EMAIL, '); FControle.sqqGeral.SQL.Add(' GRP_ID = :vGRP_ID, '); FControle.sqqGeral.SQL.Add(' ARE_ID = :vARE_ID, '); FControle.sqqGeral.SQL.Add(' CLI_STATUS = :vCLI_STATUS, '); FControle.sqqGeral.SQL.Add(' CLI_OBSERVA = :vCLI_OBSERVA '); FControle.sqqGeral.SQL.Add(' WHERE (CLI_ID = :vCLI_ID) '); FControle.sqqGeral.ParamByName('vCLI_ID').AsString := Self.Codigo; FControle.sqqGeral.ParamByName('vCLI_NOME').AsString := Self.Nome; FControle.sqqGeral.ParamByName('vCLI_CPF_CNPJ').AsString := Self.CpfCnpj; FControle.sqqGeral.ParamByName('vCLI_RG_INSCR').AsString := Self.Identidade; FControle.sqqGeral.ParamByName('vCLI_ENDERECO').AsString := Self.Endereco; FControle.sqqGeral.ParamByName('vCLI_PONTO_REFERENCIA').AsString := Self.PontoRef; FControle.sqqGeral.ParamByName('vCLI_BAIRRO').AsString := Self.Bairro; FControle.sqqGeral.ParamByName('vCLI_CIDADE').AsString := Self.Cidade; FControle.sqqGeral.ParamByName('vCLI_ESTADO').AsString := Self.Estado; FControle.sqqGeral.ParamByName('vCLI_CEP').AsString := Self.Cep; FControle.sqqGeral.ParamByName('vCLI_FONE1').AsString := Self.Fone1; FControle.sqqGeral.ParamByName('vCLI_FONE2').AsString := Self.Fone2; FControle.sqqGeral.ParamByName('vCLI_CELULAR').AsString := Self.Celular; FControle.sqqGeral.ParamByName('vCLI_DTA_CADASTRO').AsDate := Self.DataCadastro; FControle.sqqGeral.ParamByName('vCLI_DTA_ULTIMA_COMPRA').AsDate := Self.DataUltimaCompra; FControle.sqqGeral.ParamByName('vCLI_DTA_NASCIMENTO').AsDate := Self.DataNascimento; FControle.sqqGeral.ParamByName('vCLI_SEXO').AsString := Self.Sexo; FControle.sqqGeral.ParamByName('vCLI_ESTADO_CIVIL').AsString := Self.EstadoCivil; FControle.sqqGeral.ParamByName('vCLI_LIMITE_CREDITO').AsCurrency := Self.LimiteDeCredito; FControle.sqqGeral.ParamByName('vCLI_EMAIL').AsString := Self.Email; FControle.sqqGeral.ParamByName('vGRP_ID').AsString := Self.GrupoCliente; FControle.sqqGeral.ParamByName('vARE_ID').AsString := Self.Area; FControle.sqqGeral.ParamByName('vCLI_STATUS').AsString := Self.Status; FControle.sqqGeral.ParamByName('vCLI_OBSERVA').AsString := Self.Observacoes; // try FControle.sqqGeral.ExecSQL; Result := True; except Result := False; end; end; constructor TClienteControle.Create(pConexaoControle:TControle); begin Fcontrole := pConexaoControle; end; destructor TClienteControle.Destroy; begin inherited; end; function TClienteControle.ExcluirCliente: Boolean; begin Fcontrole.SqqGeral.Close; FControle.sqqGeral.SQL.Clear; FControle.sqqGeral.SQL.Add(' DELETE FROM TBL_CLIENTES C '); FControle.sqqGeral.SQL.Add(' WHERE C.CLI_ID = :vCLI_ID '); FControle.sqqGeral.ParamByName('vCLI_ID').AsString := Self.Codigo; try FControle.sqqGeral.ExecSQL; Result := True; except Result := False; end end; function TClienteControle.InsereCliente: Boolean; begin FControle.sqqGeral.Close; FControle.sqqGeral.SQL.Clear; FControle.sqqGeral.SQL.Add(' INSERT INTO TBL_CLIENTES '); FControle.sqqGeral.SQL.Add(' (CLI_ID, '); FControle.sqqGeral.SQL.Add(' CLI_NOME, '); FControle.sqqGeral.SQL.Add(' CLI_CPF_CNPJ, '); FControle.sqqGeral.SQL.Add(' CLI_RG_INSCR, '); FControle.sqqGeral.SQL.Add(' CLI_ENDERECO, '); FControle.sqqGeral.SQL.Add(' CLI_PONTO_REFERENCIA, '); FControle.sqqGeral.SQL.Add(' CLI_BAIRRO, '); FControle.sqqGeral.SQL.Add(' CLI_CIDADE, '); FControle.sqqGeral.SQL.Add(' CLI_ESTADO, '); FControle.sqqGeral.SQL.Add(' CLI_CEP, '); FControle.sqqGeral.SQL.Add(' CLI_FONE1, '); FControle.sqqGeral.SQL.Add(' CLI_FONE2, '); FControle.sqqGeral.SQL.Add(' CLI_CELULAR, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_CADASTRO, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_ULTIMA_COMPRA, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_NASCIMENTO, '); FControle.sqqGeral.SQL.Add(' CLI_SEXO, '); FControle.sqqGeral.SQL.Add(' CLI_ESTADO_CIVIL, '); FControle.sqqGeral.SQL.Add(' CLI_LIMITE_CREDITO, '); FControle.sqqGeral.SQL.Add(' CLI_EMAIL, '); FControle.sqqGeral.SQL.Add(' GRP_ID, '); FControle.sqqGeral.SQL.Add(' ARE_ID, '); FControle.sqqGeral.SQL.Add(' CLI_STATUS, '); FControle.sqqGeral.SQL.Add(' CLI_OBSERVA) '); FControle.sqqGeral.SQL.Add(' VALUES (:vCLI_ID, '); FControle.sqqGeral.SQL.Add(' :vCLI_NOME, '); FControle.sqqGeral.SQL.Add(' :vCLI_CPF_CNPJ, '); FControle.sqqGeral.SQL.Add(' :vCLI_RG_INSCR, '); FControle.sqqGeral.SQL.Add(' :vCLI_ENDERECO, '); FControle.sqqGeral.SQL.Add(' :vCLI_PONTO_REFERENCIA, '); FControle.sqqGeral.SQL.Add(' :vCLI_BAIRRO, '); FControle.sqqGeral.SQL.Add(' :vCLI_CIDADE, '); FControle.sqqGeral.SQL.Add(' :vCLI_ESTADO, '); FControle.sqqGeral.SQL.Add(' :vCLI_CEP, '); FControle.sqqGeral.SQL.Add(' :vCLI_FONE1, '); FControle.sqqGeral.SQL.Add(' :vCLI_FONE2, '); FControle.sqqGeral.SQL.Add(' :vCLI_CELULAR, '); FControle.sqqGeral.SQL.Add(' :vCLI_DTA_CADASTRO, '); FControle.sqqGeral.SQL.Add(' :vCLI_DTA_ULTIMA_COMPRA, '); FControle.sqqGeral.SQL.Add(' :vCLI_DTA_NASCIMENTO, '); FControle.sqqGeral.SQL.Add(' :vCLI_SEXO, '); FControle.sqqGeral.SQL.Add(' :vCLI_ESTADO_CIVIL, '); FControle.sqqGeral.SQL.Add(' :vCLI_LIMITE_CREDITO, '); FControle.sqqGeral.SQL.Add(' :vCLI_EMAIL, '); FControle.sqqGeral.SQL.Add(' :vGRP_ID, '); FControle.sqqGeral.SQL.Add(' :vARE_ID, '); FControle.sqqGeral.SQL.Add(' :vCLI_STATUS, '); FControle.sqqGeral.SQL.Add(' :vCLI_OBSERVA) '); // FControle.sqqGeral.ParamByName('vCLI_ID').AsString := Self.Codigo; FControle.sqqGeral.ParamByName('vCLI_NOME').AsString := Self.Nome; FControle.sqqGeral.ParamByName('vCLI_CPF_CNPJ').AsString := Self.CpfCnpj; FControle.sqqGeral.ParamByName('vCLI_RG_INSCR').AsString := Self.Identidade; FControle.sqqGeral.ParamByName('vCLI_ENDERECO').AsString := Self.Endereco; FControle.sqqGeral.ParamByName('vCLI_PONTO_REFERENCIA').AsString := Self.PontoRef; FControle.sqqGeral.ParamByName('vCLI_BAIRRO').AsString := Self.Bairro; FControle.sqqGeral.ParamByName('vCLI_CIDADE').AsString := Self.Cidade; FControle.sqqGeral.ParamByName('vCLI_ESTADO').AsString := Self.Estado; FControle.sqqGeral.ParamByName('vCLI_CEP').AsString := Self.Cep; FControle.sqqGeral.ParamByName('vCLI_FONE1').AsString := Self.Fone1; FControle.sqqGeral.ParamByName('vCLI_FONE2').AsString := Self.Fone2; FControle.sqqGeral.ParamByName('vCLI_CELULAR').AsString := Self.Celular; FControle.sqqGeral.ParamByName('vCLI_DTA_CADASTRO').AsDate := Self.DataCadastro; FControle.sqqGeral.ParamByName('vCLI_DTA_ULTIMA_COMPRA').AsDate := Self.DataUltimaCompra; FControle.sqqGeral.ParamByName('vCLI_DTA_NASCIMENTO').AsDate := Self.DataNascimento; FControle.sqqGeral.ParamByName('vCLI_SEXO').AsString := Self.Sexo; FControle.sqqGeral.ParamByName('vCLI_ESTADO_CIVIL').AsString := Self.EstadoCivil; FControle.sqqGeral.ParamByName('vCLI_LIMITE_CREDITO').AsCurrency := Self.LimiteDeCredito; FControle.sqqGeral.ParamByName('vCLI_EMAIL').AsString := Self.Email; FControle.sqqGeral.ParamByName('vGRP_ID').AsString := Self.GrupoCliente; FControle.sqqGeral.ParamByName('vARE_ID').AsString := Self.Area; FControle.sqqGeral.ParamByName('vCLI_STATUS').AsString := Self.Status; FControle.sqqGeral.ParamByName('vCLI_OBSERVA').AsString := Self.Observacoes; // try FControle.sqqGeral.ExecSQL; Result := True; except Result := False; end; end; function TClienteControle.PesquisaCliente(pCodigo: string): TClienteControle; begin FControle.sqqGeral.Close; FControle.sqqGeral.SQL.Clear; FControle.sqqGeral.SQL.Add(' SELECT CLI_ID, '); FControle.sqqGeral.SQL.Add(' CLI_NOME, '); FControle.sqqGeral.SQL.Add(' CLI_CPF_CNPJ, '); FControle.sqqGeral.SQL.Add(' CLI_RG_INSCR, '); FControle.sqqGeral.SQL.Add(' CLI_ENDERECO, '); FControle.sqqGeral.SQL.Add(' CLI_PONTO_REFERENCIA, '); FControle.sqqGeral.SQL.Add(' CLI_BAIRRO, '); FControle.sqqGeral.SQL.Add(' CLI_CIDADE, '); FControle.sqqGeral.SQL.Add(' CLI_ESTADO, '); FControle.sqqGeral.SQL.Add(' CLI_CEP, '); FControle.sqqGeral.SQL.Add(' CLI_FONE1, '); FControle.sqqGeral.SQL.Add(' CLI_FONE2, '); FControle.sqqGeral.SQL.Add(' CLI_CELULAR, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_CADASTRO, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_ULTIMA_COMPRA, '); FControle.sqqGeral.SQL.Add(' CLI_DTA_NASCIMENTO, '); FControle.sqqGeral.SQL.Add(' CLI_SEXO, '); FControle.sqqGeral.SQL.Add(' CLI_ESTADO_CIVIL, '); FControle.sqqGeral.SQL.Add(' CLI_LIMITE_CREDITO, '); FControle.sqqGeral.SQL.Add(' CLI_EMAIL, '); FControle.sqqGeral.SQL.Add(' GRP_ID, '); FControle.sqqGeral.SQL.Add(' ARE_ID, '); FControle.sqqGeral.SQL.Add(' CLI_STATUS, '); FControle.sqqGeral.SQL.Add(' CLI_OBSERVA '); FControle.sqqGeral.SQL.Add(' FROM TBL_CLIENTES '); FControle.sqqGeral.SQL.Add(' WHERE CLI_ID = '+ pCodigo ); FControle.sqqGeral.Open; if FControle.sqqGeral.IsEmpty then begin Self.Codigo := ''; end else begin Self.Codigo := FControle.sqqGeral.ParamByName('vCLI_ID').AsString ; Self.Nome := FControle.sqqGeral.ParamByName('vCLI_NOME').AsString ; Self.CpfCnpj := FControle.sqqGeral.ParamByName('vCLI_CPF_CNPJ').AsString ; Self.Identidade := FControle.sqqGeral.ParamByName('vCLI_RG_INSCR').AsString ; Self.Endereco := FControle.sqqGeral.ParamByName('vCLI_ENDERECO').AsString ; Self.PontoRef := FControle.sqqGeral.ParamByName('vCLI_PONTO_REFERENCIA').AsString ; Self.Bairro := FControle.sqqGeral.ParamByName('vCLI_BAIRRO').AsString ; Self.Cidade := FControle.sqqGeral.ParamByName('vCLI_CIDADE').AsString ; Self.Estado := FControle.sqqGeral.ParamByName('vCLI_ESTADO').AsString ; Self.Cep := FControle.sqqGeral.ParamByName('vCLI_CEP').AsString ; Self.Fone1 := FControle.sqqGeral.ParamByName('vCLI_FONE1').AsString ; Self.Fone2 := FControle.sqqGeral.ParamByName('vCLI_FONE2').AsString ; Self.Celular := FControle.sqqGeral.ParamByName('vCLI_CELULAR').AsString ; Self.DataCadastro := FControle.sqqGeral.ParamByName('vCLI_DTA_CADASTRO').AsDate ; Self.DataUltimaCompra := FControle.sqqGeral.ParamByName('vCLI_DTA_ULTIMA_COMPRA').AsDate ; Self.DataNascimento := FControle.sqqGeral.ParamByName('vCLI_DTA_NASCIMENTO').AsDate ; Self.Sexo := FControle.sqqGeral.ParamByName('vCLI_SEXO').AsString ; Self.EstadoCivil := FControle.sqqGeral.ParamByName('vCLI_ESTADO_CIVIL').AsString ; Self.LimiteDeCredito := FControle.sqqGeral.ParamByName('vCLI_LIMITE_CREDITO').AsCurrency ; Self.Email := FControle.sqqGeral.ParamByName('vCLI_EMAIL').AsString ; Self.GrupoCliente := FControle.sqqGeral.ParamByName('vGRP_ID').AsString ; Self.Area := FControle.sqqGeral.ParamByName('vARE_ID').AsString ; Self.Status := FControle.sqqGeral.ParamByName('vCLI_STATUS').AsString ; Self.Observacoes := FControle.sqqGeral.ParamByName('vCLI_OBSERVA').AsString ; end; end; end.

Lembrando que todo o código acima foi criando usando o Embarcadero® Delphi® 2010. Um grande abraço e até o próximo post.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados