VCL Style e Build Configurations no Delphi

Através deste artigo quero apresentar um novo recurso presente a partir da versão XE2 do Delphi, o VCL Style e sobre o recurso Build Configurations existente a partir da versão 2009 do Delphi.

Estrutura de organização dos diretórios no Linux

O Linux é projetado para rodar tanto em máquinas com bastante poder de processamento como em máquinas com configurações mínimas e baixo poder de processamento.

Como fazer um Extract MetaData com o IbExpert?

Vamos aprender a usar um recurso muito interessante da ferramenta IBExpert, o: extract metadata. Qual a utilidade dessa ferramenta?

Como desativar mensagem de expiração do Winrar

Se você usa o Winrar, um dos softwares mais utilizado para compactação de arquivos, então você já se deparou com aquela mensagem "chatíssima" de expiração.

Removendo senha de usuário no Windows

Acredito que alguém já deve ter passado pela desagradável situação de esquecer a senha do seu usuário do Windows, e pesou "Agora ferrou!". Pois é, aconteceu isso com um de nossos clientes, como resolver?


ClipaTec Informática

Receba novidades por e-mail. Digite seu e-mail abaixo e clique no botão "Cadastrar"

Delivered by FeedBurner

11 de agosto de 2017

Comando Array DML (FireDAC) no Delphi

array dml firedac delphi

Olá clipatequeiros. Espero que esteja tudo bem com vocês.
Já imaginou mais de dez mil registros sendo sincronizados em poucos segundos? Parece utópico não? Pois bem, utilizando o Delphi com FireDAC, veremos como isso é possível, mesmo fora da rede local, por exemplo, cadastrar registros em um banco de dados que esteja em um servidor nas nuvens.
Bom, se você ainda está lendo este artigo, é porque certamente você está curioso para entender como isso pode ser feito certo? A mágica toda se dá através do comando ArrayDML, mas, que diabos é "Array DML"?
OK, vamos em frente. Sucintamente explicando, o ArrayDML é um comando que nos proporciona a execução em lote de instruções SQL de maneira muito rápida. É um recurso provido pelo FireDac.
O objetivo deste artigo é mostrar a performance deste comando, mesmo executando a inserção de milhares de registros por segundo e tudo isso utilizando apenas algumas linhas de código. Vou lhe mostrar o modelo convencional adotado pela maioria hoje, e o novo modelo usando Array DML.
O Array DML ainda não é muito popular, visto que a maioria ainda não o conhece. Mas vamos pensar em um caso de uso. Imagine que você precisa transferir dados de um determinado banco para outro. Normalmente, você faria um laço de repetição, onde para cada registro do banco A percorrido, o mesmo seria cadastrado no banco B. Teríamos uma estrutura assim (convencional):

procedure TFrmCadastro.InserirItens;
var
  sComandoSQL: string;
begin
  sComandoSQL := 'insert into venda_iten values(:id_produto, :qtd, :preco)';

  cdsItens.Open;
  cdsItens.First;
  while not cdsItens.Eof do
  begin
    sqlCad.CommandText           := EmptyStr;
    sqlCad.CommandText           := sComandoSQL;
    sqlCad.Params[0].AsInteger  := cdsItensID_PRODUTO.AsInteger;
    sqlCad.Params[1].AsFloat     := cdsItensQTD.AsFloat;
    sqlCad.Params[2].AsFloat     := cdsItensPRECO.AsFloat;
    sqlCad.ExecSQL;

    cdsItens.Next;
  end;
  cdsItens.Close;
  sqlCad.Close;
end;


Esse modelo convencional, é muito mais lento, visto que, para cada registro um comando insert neste caso é realizado, desta forma, cada registro é na verdade uma solicitação que é enviada para o banco, pensando numa estrutura cliente/servidor onde o banco fica em um computador separado, isso torna o trafego na rede muito mais pesado, e o tempo de ida (instrução SQL) e vinda (retorno) fica muito mais lento. Com o Array DML, conseguimos enviar um conjunto de dados dentro de uma mesma transferência, e o ganho que temos em performance, é assustadoramente incrível.
Vale ressaltar que não necessariamente seja instruções de insert, pode ser update, delete ou qualquer outro comando parametrizado.
Agora, vamos ver como isso ficaria usando o ArrayDML. Observe a estrutura:

procedure TFrmCadastro.InserirItens;
var
  sComandoSQL: string;
  iNumInserts: Integer;
begin
  sComandoSQL := 'insert into venda_iten values(:id_produto, :qtd, :preco)';

  fdqItens.Open;
  fdqItens.Last;

  iNumInserts := fdqItens.RecordCount;

  fdqCad.Active := False;
  fdqCad.SQL.Add(sComandoSQL);

  fdqCad.Params.ArraySize := iNumInserts;

  fdqItens.First;
  fdqItens.DisableControls;
  while not fdqItens.Eof do
  begin
    fdqCad.Params[0].AsIntegers[fdqItens.RecNo-1] :=
      fdqItens.ID_PRODUTO.AsInteger;
    fdqCad.Params[1].AsFloats[fdqItens.RecNo-1] :=  fdqItensQTD.AsFloat;
    fdqCad.Params[2].AsFloats[fdqItens.RecNo-1] := fdqItensPRECO.Float;
 
    fdqItens.Next;
  end;

  if intNumInserts > 0 then
     fdqCad.Execute(iNumInserts, 0);

  fdqCad.Active := False;
end;


Muito bem, se observar no código acima, criamos uma variável "iNumInserts" onde armazenaremos a quantidade de instruções SQL a serem executadas, depois definimos um array no FDQuery de cadastro com o tamanho de instruções.
No laço While apenas alimentamos as posições do array com as instruções SQL, e fora do laço, nós executamos todas estas instruções.
Galera, podem cronometrar o modelo convencional e o modelo usando ArrayDML com a mesma quantidade de registros, e vejam vocês mesmo a diferença de tempo. É lindo 😄
Teste ai e comentem, em caso de dúvida, deixe seu comentário.
Um grade abraço e até o próximo.

(By ClipaTec Informática)

22 de dezembro de 2016

Cadastro Delphi com dataware - modelo 2 - Implementações do cadastro - parte 2

delphi cadastro

Olá pessoal, neste artigo vamos concluir a implementação do nosso CRUD. Este artigo, é parte integrante da nossa série de "Cadastro em Delphi com dataware - modelo 2", este é o penúltimo artigo.
Hoje vamos implementar nossa função de pesquisa, e montar o layout de cadastro onde teremos os campos para realizar o cadastro de cliente.
Com o projeto aberto, dê um duplo clique sobre o componente "acLstAcoes", e na janela que abrir, um duplo clique sobre a ação "ac_pesquisar". Ao fazer isso, seremos levados ao código.
Muito bem, implemente-o da seguinte maneira:

delphi cadastro

A primeira coisa que fazemos, é garantir que o dataset de pesquisa esteja fechado para receber o filtro correto e ai sim, trazer o resultado, então fizemos um teste verificando se o mesmo está ativo/aberto, caso esteja, chamamos o método "close" do dataset para fechá-lo.
O próximo passo é verificar qual opção de filtro está definida em nosso "comboBox". Caso a opção definida seja por "Código", então usamos a função "TryStrToInt" que tenta converter um valor "string" para "inteiro", caso esta conversão não seja possível, a função retorna "falso", precisamos garantir que o código digitado seja realmente um valor inteiro, por este motivo fizemos esta validação. Como você observou no código, caso a função retorne "falso" imprimimos uma mensagem para o usuário dizendo que o código que foi digitado é inválido.
Se a opção de filtro foi por nome, então alimentamos o parâmetro correspondente ao nome no dataset de pesquisa. Note que zeramos os parâmetros que não estamos usando, através do comando "Clear".
No final, após alimentar o parâmetro correto do "select", abrimos o dataset e o movemos para o primeiro registro. Pronto, simples, rápido e fácil.
Agora vamos montar nossa tela onde ficarão os campos do nosso cadastro. Selecione o componente "pgControle" e selecione a aba "tbDados".
O que vamos fazer é algo bem simples, vá até o DataModule (DmDados), dê um duplo clique sobre o "cdsCad" para abrir a janela do "Fields Editor", agora volte para o formulário de cadastro que já está aberto na aba "tbDados", agora selecione todos os campos na janela do "Fields Editor" do "cdsCad", e após selecionar todos, simplesmente clique e arraste para o formulário. Ao fazer isso, note que automaticamente serão criados os "DBEdits" para cada campo da tabela, com suas respectivas "Labels". Top, né não?
O seu único trabalho é apenas alterar o "Caption" das "Labels" para um nome mais formal, pois ele pega por padrão o nome do campo na base de dados.
Ordene os campos segundo seu gosto, no final teremos algo parecido com a imagem abaixo:

delphi cadastro

Muito bem galera, assim finalizamos mais um artigo, logo teremos vídeo-aulas sobre este tutorial, que poderá te ajudar melhor no entendimento, caso os artigos não estejam sendo tão claros, por isso, não chore. 😀
Legal, até o próximo artigo então, onde faremos alguns ajustes a nível de código e montar os arquivos para distribuição do aplicativo. Abraço e até lá!

(Por ClipaTec Informática)

24 de outubro de 2016

Cadastro Delphi com dataware - modelo 2 - Implementações do cadastro - parte 1

delphi crud

Olá meu povo. Estamos na reta final da nossa série de artigo "Cadastro em Delphi com dataware - modelo 2", e neste artigo, vamos iniciar a implementação do cadastro. Vamos começar predefinindo as ações no componente "acLstAcoes". Para isso, dê um duplo clique sobre ele. Na janela que abrir, vamos começar a criar nossas ações.
Este componente, contém as ações de um "DataSet" já prontas, porém, faremos nossa própria implementação, desta forma, não usaremos estas ações já prontas, melhor dizendo, vamos usar apenas duas, a ação "TDataSetCancel" referente ao cancelamento da operação, e ação "TDataSetPost" referente à gravação dos dados, as demais ações implementaremos da nossa forma.
Legal, então vamos começar por estas duas ações, para isso, clique com o botão direito sobre a área "Actions" da janela que está aberta, e clique na opção "New Standard Action...". 
Ao escolher esta opção, note que uma segunda janela será aberta, localize o grupo "DataSet", dê um clique sobre a ação "TDataSetPost" e com a tecla "Shift" pressionada, clique sobre a ação "TDataSetCancel", desta forma, teremos as ações gravar e cancelar selecionadas. Apenas clique no botão "OK". Já aproveitando o momento, note que as duas ações já apareceram na lista de ações, então selecione as duas, a na propriedade "DataSource" aponte para o componente "dsCad", que será o DataSource responsável pelo "CRUD".
Agora, vamos apagar a categoria dessas duas ações, então, ainda com as duas selecionadas, clique na propriedade "Category" e apague o conteúdo dela.
Agora vamos criar o restante das ações, para isso, clique com o botão direito do mouse sobre a área das ações, e escolha a opção "New Action". Repita esse passo mais quatro vezes. No final, teremos um total de sete ações.
Muito bem, agora vamos renomear as propriedades de cada ação, segue a lista:

  • DatasetPost: "Name" para "ac_gravar", "Caption" para "Gravar";
  • DatasetCancel: "Name" para "ac_cancelar", "Caption" para "Cancelar";
  • Action1: "Name" para "ac_novo", "Caption" para "Novo";
  • Action2: "Name" para "ac_detalhar", "Caption" para "Detalhar";
  • Action3: "Name" para "ac_excluir", "Caption" para "Excluir";
  • Action4: "Name" para "ac_listar", "Caption" para "Listar";
  • Action5: "Name" para "ac_pesquisar", "Caption" para "Pesquisar";


Muito bem, desta forma concluímos esta etapa. Agora, dê um duplo clique sobre a ação "ac_novo", e implemente da seguinte forma:

delphi cadastro

No início verificamos se o nosso DataSet de cadastro está fechado. Se ele tiver fechado, nós abrimos, pois, não é possível realizar alguma operação com o DataSet fechado.
Em seguida, colocamos nosso DataSet em modo de inserção, e ativamos a aba de cadastro, onde teremos os campos para o usuário preencher.
Agora, dê um duplo clique sobre a ação "ac_detalhar" e implemente da seguinte forma:

delphi cadastro

Na ação detalhar, nós verificamos se o DataSet de cadastro está aberto, se estiver, precisamos fechar, pois, precisamos garantir que o registro que estará ativo seja o mesmo que foi selecionado na aba de pesquisa. Exatamente por isso, em seguida nós pegamos o código do cliente selecionado na aba de pesquisa na "DBGrid" (que está ligada ao DataSet de pesquisa), e atribuímos este código ao DataSet de cadastro para em seguida abri-lo, desta forma, teremos todos os dados do cliente carregado no DataSet de cadastro e disponíveis para serem alterados ou apenas para uma simples consulta completa. Em seguida, ativamos a aba de cadastro para que o usuário veja todos os dados do cliente selecionado.
Agora, vamos implementar a ação excluir, para isso, de um duplo clique sobre a ação "ac_excluir" e implemente da seguinte forma:

delphi cadastro

Esta é a mais difícil de todas kkkkkk. Só que não! Simplesmente enviamos para o usuário uma mensagem de confirmação de exclusão, pois, pode acontecer do usuário clicar no botão cancelar sem querer, para prever este desconforto, então pedimos uma confirmação de exclusão. Se o usuário confirmar clicando no botão "Sim", então, chamamos o método "Delete" do DataSet, para que a exclusão do registro seja realizado.
Para finalizarmos este artigo, agora vamos implementar a ação "ac_listar":

delphi cadastro

Quando o usuário está na aba de cadastro e ele deseja voltar a aba de pesquisa, esta ação será chamada, porém, não podemos deixar que o usuário volte para a pesquisar, se por um acaso ele fez alguma alteração e não salvou, pois, isso faria com que o usuário perdesse todo trabalho feito. Não ia ser nada legal isso né? Então, como você observa, no início fazemos uma verificação, se o DataSet de cadastro estiver em estado de inserção ou edição, ele aborta a operação e manda uma mensagem dizendo que o usuário deve cancelar ou gravar as alterações antes de voltar para a aba de pesquisa/listagem.
Se o DataSet de cadastro não estiver em nenhum estado de alteração, então atualizamos o DataSet de pesquisa e ativamos a aba de pesquisa. A atualização que fazemos, é para que as informações do cliente sejam alteradas também no DataSet de pesquisa, caso alguma alteração tenha sido realizada.
Muito bem galera, e assim chegamos ao final de mais um artigo. Para concluir, apenas selecione o componente "dsPesq" e na propriedade "DataSet" aponte para o componente "cdsPesq" e depois, selecione o componente "dsCad" e aponte para o componente "cdsCad". Se não aparecer estes componentes na propriedade, é porque não foi dado o "Uses" no "DataModule", para isso, basta pressionar as teclas "Alt+F11", na janela que abrir, selecionar o "DmDados" que é o nosso DataModule e em seguida clicar no botão "OK".
Qualquer dúvida, deixe seu comentário, até o próximo artigo. Abraço.

(Por ClipaTec Informática)

19 de outubro de 2016

Restore da base de dados com Delphi e FireDac

delphi firedac restore

Olá clipatequeiros. Há uns dias atrás publicamos um artigo onde montamos um aplicativo básico de backup, usando componentes da paleta "FireDac" e banco "FireBird".
Recebemos alguns feedbacks pedindo para criarmos um artigo ensinando o restore do banco. Então, resolvemos atender a estes pedidos e aqui estamos.
A restauração da base de dados é muito simples, da mesma forma que o backup também é. Neste exemplo vamos pegar o arquivo de backup gerado "fbk" e restaurá-lo para um arquivo "fdb", isto é, o banco montado em si com todas os dados.
Então, crie um novo projeto em Delphi e adicione os componentes FDIBRestore, FDPhysFBDriverLink, FDGUIxWaitCursor, Memo (name = mmoProgresso) e dois Button (name btnIniciar, btnFechar).
Selecione o componente FDIBRestore e ligue na propriedade "DriverLink" o componente FDPhysFBDriverLink.
Monte um layout parecido com este na imagem abaixo:

delphi firedac restore

Repare que é idêntico ao layout que montamos no aplicativo de backup. Apenas algumas alterações foram feitas.
Vamos declarar nossos métodos, para isso, vá até a seção "Private" do formulário e declare:

delphi firedac restore

Pressione as teclas "Shift+Ctrl+C" para iniciarmos a implementação dos métodos. O método "HabilitarBotoes" será implementado da seguinte maneira:

delphi firedac restore

Ele será responsável por habilitar e desabilitar os botões conforme necessitamos.
Agora, implemente o método "GerarRestore" da seguinte maneira:

delphi firedac restore

Note que toda implementação está dentro de um bloco de tratamento (try...except), para tratarmos os possíveis erros. Claro que por este exemplo ser algo simples o tratamento será apenas imprimir uma mensagem para o usuário, para informá-lo.
Não vamos detalhar as explicações das implementações, porque é exatamente igual nosso tutorial sobre o backup, apenas foi alterado algumas linhas de código. Caso tenha dúvida, leia nosso artigo sobre backup com FireDac, ou deixe seu comentário que ajudaremos.
Na imagem está bem explicado cada linha, no final do artigo você encontra para download o fonte deste projeto.
Ao chamar o método "Restore", o processo de restauração da base de dados será iniciado, da mesma forma que fizemos com o backup, é legal acompanharmos todo esse processo, então vamos implementar o evento do componente "FDIBRestore".
Antes, selecione o componente "memo" e altere a propriedade "ScrollBars" para "ssVertical".
Agora sim, vá até o evento "OnProgress" do componente "FDIBRestore" e faça a seguinte implementação:

delphi firedac restore

OK, agora conseguiremos visualizar todo o processo realizado pelo banco de dados FireBird.
Finalizando, vamos chamar os métodos nos botões, então, de um duplo clique sobre o botão "Iniciar" e chame o método "GerarRestore":

delphi firedac restore

Agora, no botão "Fechar", chame o comando "Close":

delphi firedac restore

Muito bem, chagamos ao fim de mais um artigo, se você quiser, pode estudar a possibilidade de colocar uma barra de progresso, caso não queira o processo no "memo".
Não é legal usar os dois, porque ficaria um tanto redundante. Desta forma que fizemos, mostrando no "memo", a dica que damos é no início do processo, adicionar uma linha ao "memo" informando que o processo de restore está sendo iniciando, e no final, outra linha informando que o restore foi concluído. Alguma dúvida? Posta ai. Um forte abraço e até o próximo.

Download


(Por ClipaTec Informática)

18 de outubro de 2016

Cadastro Delphi com dataware - modelo 2 - Instruções SQL e implementações do DataModule

delphi sql

Aoooh meu povo. Prosseguindo com nossa série "Cadastro Delphi com dataware - modelo 2", neste artigo vamos fazer toda implementação do nosso Data Module que criamos no "artigo anterior", para que no próximo artigo já iniciarmos a implementação da tela de cadastro. Let's go!
A primeira coisa que faremos, são as instruções SQL que utilizaremos em nossa aplicação de exemplo.
Vamos começar pela pesquisa. Lembre-se que na tela de cadastro que montamos no "primeiro artigo" desta série, disponibilizamos para o usuário três filtros para pesquisa, por código, nome e todos. Então precisamo montar nosso SQL de pesquisa com estes filtros parametrizados. Sem perca de tempo, selecione o componente "sqlPes", clique no botão elíptico (três pontinhos) da propriedade "CommandText", e na janela que abrir, digite a seguinte instrução SQL:
select id, nome, telefone from cliente where (id = :id) or (nome like :nome)
Legal, se você observar, deixamos os dois filtros (por código e nome) prontos. Não vamos entrar em detalhes da linguagem SQL porque este não é o foco desta série. Clique no botão "OK" da janela.
Nem sempre o componente identifica o tipo dos parâmetros, sendo necessário definirmos manualmente. Para isso, ainda com o componente "sqlPesq" selecionado, clique no botão elíptico da propriedade "Params". Uma janela será aberta já com os dois parâmetros identificados. Selecione o primeiro, a saber, "ID", e na propriedade "DataType" selecione a opção "ftInteger". E no parâmetro "Nome", selecione a opção "ftString". Feito isso, já pode fechar a janela.
Agora, dê um duplo clique sobre o componente "cdsPesq" para abrir a janela do "Fields Editor", ou simplesmente clique com o botão direito sobre o componente "cdsPesq" e escolha a opção "Fields Editor...".
Muito bem, na janela que abrir, clique com o botão direito dentro e clique na opção "Add all fields". Note que os campos que passamos na instrução SQL foram adicionados ao componente. Isso facilita na programação quando precisarmos fazer referência à um determinado campo do DataSet.
É importante ressaltar que, não retornamos todos os campos da tabela cliente, somente alguns. Isso se chama otimização de consulta. Sempre no DataSet de pesquisa, apenas trazemos os campos importantes para identificar o registro. Isso diminui o tráfego na rede. Em aplicações pequenas talvez não faça muita diferença, mas uma boa prática/hábito de programação é sempre bem-vindo.
Show de bola, ainda falta um detalhe, precisamos que o componente "cdsPesq" reconheça os parâmetros que definimos no componente "sqlPesq". Então, clique com o botão direito do mouse sobre o componente "cdsPesq" e selecione a opção "Fetch Params".
Ok, agora faça a mesma coisa com o componente "sqlCad", somente a instrução SQL que será diferente. A instrução a ser utilizada sera esta:
select * from cliente where id = :id
Se você é um bom observador, note que agora vamos retornar todos os campos da tabela cliente, isso é óbvio, visto que, como este DataSet será usado para o cadastro, então precisaremos de todos os campos, para que possamo disponibilizá-los na tela de cadastro, para o usuário preencher.
Ao concluir a instrução SQL, apenas adicione os campos no componente "cdsCad", igual fizemos com o "cdsPesq" e reconheça os parâmetros no "cdsCad", lembrando que é necessário adicionar o tipo dele no "sqlCad".
Se você tiver alguma dúvida, ou se perder na caminhada, deixe seu comentários, te ajudaremos com prazer.
Já estamos chegando ao fim deste artigo, agora vamos implementar alguns eventos do nosso DataSet de cadastro, "cdsCad".
Selecione-o, e dê um duplo-clique sobre o evento "AfterDelete". Implemente-o da seguinte maneira:

delphi sql datamodule

Este evento será executado logo após a exclusão de algum registro. A operação será persistida na base de dados e o DataSet de pesquisa será atualizado para que o registro seja eliminado da tabela de pesquisa lá na tela de cadastro.
Agora, dê um duplo-clique sobre o evento "AfterPost" e implemente da seguinte maneira:

delphi sql datamodule

Este evento será chamado após gravar um novo registro, A operação será persistida na base de dados.
Pra finalizar, precisamo gerar nosso código sequencial. Alguns optam por "Generators", que a maioria dos bancos dispõe. Porém, vamos gerar nosso código sequencial na "unha".
Então, duplo-clique no evento "BeforePost" e implemente da seguinte maneira:

delphi sql datamodule

Este evento será executado antes do registro ser persistido na base de dados, ou seja, o código sequencial será gerado antes do registro ser gravado.
Ufa, chagamos ao final de mais um artigo. Galera, qualquer dúvida, comente, estamos juntos. Um forte abraço e até o próximo artigo.

(Por ClipaTec Informática)

17 de outubro de 2016

Cadastro Delphi com dataware - modelo 2 - DataModule de interação com a base de dados

delphi

Olá pessoal. Dando continuidade em nosso série "Cadastro Delphi com dataware - modelo 2", neste artigo vamos criar o "DataModule" da nossa aplicação.
Antes de começar, faça o download da base de dados que utilizaremos que se encontra no final do artigo. Salve-o na pasta do projeto.
Para isso, clique no menu "File/New/Other...". Em "Delphi Files" selecione "Data Module" e clique no botão "OK". Um novo Data Module será criado, salve com o nome "uDmDados". Legal, agora renomeie a propriedade "Name" do Data Module criado para "DmDados".
Agora vamos inserir os componentes que utilizaremos para interagir com a nossa base de dados. Trabalharemos neste exemplo com os componentes da "DBX".
O primeiro componente a ser adicionado é o "TSQLConnection". Este componente é responsável por conectar a aplicação com a base de dados, para que possamos desenvolver nossa aplicação para banco de dados.
Renomeie a propriedade "Name" do "TSQLConnection" para "sqlConexao". Na propriedade "Driver", escolha a opção "Firebird", desta forma, estaremos definindo o componente para utilizar as DLL's e driver correspondente ao banco FireBird.
Altere a propriedade "LoginPrompt" para "False", para desativar a autenticação. Para finalizar, clique no botão elíptico (três pontinhos) da propriedade "Params". Note que uma janela contendo alguns valores configurados será aberta. Neste janela, apenas defina o caminho da base de dados na chave (key) "Database":

delphi data module

Clique no botão "OK", agora, altere a propriedade "Connected" para "True". Se ocorrer algum erro, poste nos comentários que ajudaremos.
Agora insira três componentes "TSQLDataSet", dois "TDataSetProvider" e dois "TClientDataSet".
Na propriedade "SQLConnection" dos três "TSQLDataSet" aponte para o componente de conexão, a saber, "sqlConexao".
Agora altere a propriedade "Name" dos componentes da seguinte forma:

  • 1 TSQLDataSet: sqlPesq;
  • 2 TSQLDataSet: sqlCad;
  • 3 TSQLDataSet: sqlAux;

  • 1 TDataSetProvider: dspPesq;
  • 2 TDataSetProvider: dspCad;

  • 1 TClientDataSet: cdsPesq;
  • 2 TClientDataSet: cdsCad;

Na propriedade "DataSet" do componente "dspPesq", aponte para o componente "sqlPesq". Agora na propriedade "ProviderName" do componente "cdsPesq" aponte para o componente "dspPesq".
Preste muita atenção nestas ligações para não ligar em componente errado.
Agora selecione o componente "dspCad" e aponte para o componente "sqlCad" através da propriedade "DataSet". Agora selecione o componente "cdsCad" e aponte na propriedade "ProviderName" para o componente "dspCad".
Muito bem, agora já temos nossa estrutura pronta, agora só falta implementarmos as instruções SQL e algumas programações, e assim faremos no próximo artigo. Um grande abraço e até lá.
delphi datamodule

Download

- Base de dados;

(Por ClipaTec Informática)