Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO

Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica.

Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet

Como usar o componente TClientDataSet do Delphi em suas aplicações de banco de dados

Quantidade de visualizações: 16031 vezes
Um objeto da classe TClientDataSet implementa um conjunto de dados independente de banco de dados. Este controle representa um conjunto de dados em memória (in-memory).

Antes de prosseguirmos, veja a posição desta classe na hierarquia de classes do Delphi:

System.TObject
  Classes.TPersistent
    Classes.TComponent
      DB.TDataSet
        DBClient.TCustomClientDataSet
          DBClient.TClientDataSet
Por descendência, a classe TClientDataSet implementa as interfaces Classes.IInterfaceComponentReference, System.IInterface e DB.IProviderSupport.

Um controle TClientDataSet pode ser usado das seguintes formas:

a) Um conjunto de dados baseado em arquivo, único e totalmente funcional direcionado a aplicações compostas de apenas uma camada. Quando usado desta forma, o client dataset representa os dados armazenados em um arquivo dedicado na máquina do usuário.

b) Um buffer em memória local dos registros de um outro conjunto de dados. O outro conjunto de dados (a fonte dos dados) pode residir no mesmo formulário ou data module que o client dataset (por exemplo, quando o client dataset fornece navegação e edição para os dados de um conjunto de dados unidirecional). O conjunto de dados fonte pode também residir em um sistema separado quando o client dataset apoia a parte cliente de uma aplicação de bancos de dados de múltiplas camadas.

A forma mais comum de se usar um controle TClientDataSet é acessando a aba Data Acccess da Tool Palette (Paleta de Ferramentas) e arrastando-o para o seu formulário. Em seguida ajustamos algumas de suas propriedades em tempo de design e pronto. Veja o passo-a-passo para configurar um TClientDataSet para representar uma tabela no banco de dados MySQL (outras dicas minhas mostram como efetuar a conexão com outros bancos de dados):

1) Certifique-se de que o banco de dados MySQL está devidamente configurado e funcionando. Inicie-o, anote o nome de usuário e senha e vamos começar.

2) Vá até a aba de componentes dbExpress e arraste um componente TSQLConnection para o formulário. Este é o componente responsável pela conexão com o banco de dados. Selecione o componente no formulário de forma a acessar suas propriedades no Object Inspector. Em seguida siga atentamente as observações a seguir:

a) Vá na propriedade ConnectioName e selecione MySQLConnection. Automaticamente a propriedade Driver é definida como MySQL. A propriedade LibrayName será definida como dbxmys.dll. O mesmo acontece com a propriedade VendorLib, que é definida como libmysql.dll. dbxmys.dll é fornecida com o Delphi enquanto libmysql.dll vem com a instalação do MySQL e deverá estar em C:\Windows\System para que sua aplicação seja executada com sucesso.

b) O simples fato de definirmos o valor MySQL para a propriedade ConnectionName faz com que os parâmetros de conexão sejam criados com os valores padrões e guardados na propriedade Params. O próximo passo é alterar estes valores de forma a refletir a realidade do banco de dados que vamos usar. Vá em Params e acione o editor Value List Editor. Em HostName você deverá informar o nome ou IP do servidor MySQL. Se estiver rodando localmente use apenas "localhost". Em Database informe o nome da base de dados, por exemplo, "estoque". Em User_Name informe o usuário do banco de dados. Geralmente é "root". Em Password informe a senha do banco de dados. Pressione OK.

c) Vá na propriedade LoginPrompt e altere seu valor para False. Isso evita que a tela de login seja exibida quando tentarmos efetuar a conexão. Agora vá na propriedade Connected e altere seu valor para True. Se correr tudo bem você já estará conectado ao banco de dados MySQL.

3) Agora coloque um componente TSQLDataSet no formulário e defina sua propriedade SQLConnection para o componente TSQLConnection que representa a conexão com o banco de dados. Em seguida defina o valor "ctTable" para a propriedade CommandType. Na propriedade CommandText você deverá informar o nome da tabela que será representada por este TSQLDataSet. Finalmente ajuste a propriedade Active para True.

4) O próximo passo é colocar no formulário um componente TDataSetProvider (na aba Data Access). Este componente é responsável por fazer a conexão com o conjunto de dados (dataset), extrair os dados do SQLDataSet e gerar os comandos de atualização SQL adequados. Assim, informe o valor "SQLDataSet1" para a sua propriedade DataSet.

5) Finalmente chegamos ao componente TClientDataSet. Vá na aba Data Acccess e arraste um TClientDataSet para o formulário. Em seguida informe o valor "DataSetProvider1" para sua propriedade ProviderName. Ajuste sua propriedade Active para True.

6) Hora de exibir e manipular os dados. Vá na aba Data Access e arraste um controle TDataSource para o formulário. Aponte sua propriedade DataSet para "ClientDataSet1". Agora vá na aba Data Controls e arraste um TDBGrid para o formulário. Ajuste sua propriedade DataSource para "DataSource1". Se tudo correu bem, você já verá os registros da tabela serem exibidos no DBGrid.

7) Hora de executar a aplicação. Pressione F9 e vamos ao resultado. Experimente navegar e editar os registros no DBGrid. A aplicação permitirá que você faça isso. No entanto, ao fechar a aplicação e abrí-la novamente você perceberá que as alterações não foram refletidas no banco de dados. Para que isso aconteça, coloque o código abaixo no evento Click de um botão:

procedure TForm3.Button1Click(Sender: TObject);
begin
  if (ClientDataSet1.ChangeCount > 0) then
    ClientDataSet1.ApplyUpdates(-1);
end;

Pronto. Execute a aplicação novamente e faça modificações nos dados exibidos no DBGrid (é preciso sair da linha de edição para que os dados sejam atualizados no DBGrid). Clique no botão para atualizar os dados na tabela do banco de dados. Feche a aplicação a abra-a novamente. Note que agora os dados foram atualizados com sucesso.

Esta dica foi escrita e testada no Delphi 2009.


C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Métodos, Procedimentos e Funções

Exercício Resolvido de C++ - Uma função C++ que recebe um valor inteiro e informa se o mesmo é um número primo

Quantidade de visualizações: 9033 vezes
Exercícios Resolvidos de C++ - Uma função C++ que recebe um valor inteiro e informa se o mesmo é um número primo

Pergunta/Tarefa:

Um inteiro é um número primo se ele for divisível somente por 1 e por ele mesmo. Assim, 2, 3, 5 e 7 são primos, enquanto 4, 6, 8 e 9 não são.

Escreva uma função C++ que recebe um valor inteiro e informe se o mesmo é um número primo. Você deverá usar a seguinte assinatura para a função:

bool primo(int valor){
  // implementação aqui
}
Note que a função retornará true se o valor for primo e false em caso contrário. Chame esta função a partir da função main() de forma que sua saída seja parecida com:

Informe um valor inteiro: 7
O numero informado é primo
Resposta/Solução:

Veja a resolução comentada deste exercício em C++:

#include <cstdlib>
#include <iostream>

using namespace std;

// protótipo da função primo()
bool primo(int);

int main(int argc, char *argv[]){
  int numero;
  
  setlocale(LC_ALL,""); // para acentos do português
	
  cout << "Informe um valor inteiro: ";
  cin >> numero;
  
  // vamos verificar se o valor informado é um número primo
  if(primo(numero)){
    cout << "O numero informado é primo\n" << endl;             
  }
  else{
    cout << "O numero informado NÃO é primo\n" << endl;     
  }
  
  system("PAUSE");
  return EXIT_SUCCESS;
}

bool primo(int valor){
  // se o valor fornecido for 7, a variável i do laço contará
  // de 2 até 7 / 2 (divisão inteira), ou seja, 3. Se o 
  // módulo de 7 por qualquer um dos valores neste intervalo 
  // for igual a 0, então o número não é primo
  for(int i = 2; i <= (valor / 2); i++){
    if(valor % i == 0){
      return false; // não é primo
    }
  }
    
  return true;
}



AutoCAD VBA ::: Dicas & Truques ::: Linha, Linhas, Comando LINE

Como retornar as coordenadas iniciais e finais de uma linha no AutoCAD usando AutoCAD VBA e as propriedades StartPoint e EndPoint

Quantidade de visualizações: 334 vezes
Nesta dica mostrarei como podemos usar as propriedades StartPoint e EndPoint do objeto AcadLine do AutoCAD VBA para obter e retornar as coordenadas iniciais e finais de uma linha do AutoCAD.

Veja que usamos a função ThisDrawing.Utility.GetEntity para pedir para o usuário selecionar uma linha na área de desenho. Uma vez selecionada a linha nós obtemos suas coordenadas iniciais e finais usando StartPoint e EndPoint.

Para finalizar nós usamos a função ThisDrawing.Utility.Prompt para exibir as coordenadas x, y e z iniciais e finais da linha na janela de comando do AutoCAD.

Veja o código AutoCAD VBA completo para o exemplo:

' Esta macro AutoCAD VBA mostra como selecionar uma linha
' na área de desenho do AutoCAD e retornar suas coordenadas
' iniciais e finais
Sub CoordenadasLinha()
  ' vamos declarar um variável para receber a linha
  ' selecionada
  Dim linha As AcadLine
  ' e também a localização da linha
  Dim localizacao As Variant
  ' para guardar o ponto inicial
  Dim ponto_inicial As Variant
  ' para guardar o ponto final
  Dim ponto_final As Variant
   
  ' caso haja algum erro
  On Error Resume Next
   
  ' agora pedimos para o usuário selecionar a linha
  ThisDrawing.Utility.GetEntity linha, localizacao, _
    "Selecione uma linha"
   
  ' vamos obter o ponto inicial da linha
  ponto_inicial = linha.StartPoint
  ' vamos obter o ponto final da linha
  ponto_final = linha.EndPoint
   
  ' e mostramos as coordenadas iniciais e finais da linha
  ThisDrawing.Utility.Prompt "As coordenadas iniciais são: X = " _
    & ponto_inicial(0) & "; Y = " & ponto_inicial(1) & "; Z = " _
    & ponto_inicial(2)
  ThisDrawing.Utility.Prompt vbCrLf & "As coordenadas finais são: X = " _
    & ponto_final(0) & "; Y = " & ponto_final(1) & "; Z = " _
    & ponto_final(2)
End Sub

Ao executar este código AutoCAD VBA nós teremos o seguinte resultado:

As coordenadas iniciais são: X = 55,9523227122882; Y = 42,9870898477564; Z = 0
As coordenadas finais são: X = 116,586068002574; Y = 20,6918609035664; Z = 0


Ruby ::: Dicas & Truques ::: Data e Hora

Como retornar a data e hora atual em Ruby usando os métodos new e now da classe Time

Quantidade de visualizações: 9580 vezes
Quando precisamos obter a data e hora atual, o Ruby nos fornece dois métodos muito úteis e presentes na classe Time: new e now. Ambos retornam um objeto da classe Time representando a data e hora atual no sistema no qual o programa Ruby está sendo executado.

Veja uma demonstração destes métodos no trecho de código a seguir:

# obtém a data e hora atual usando o método new
agora = Time.new

# exibe o resultado
puts "Usando new: " + agora.strftime("%d/%m/%Y - %H:%M:%S")

# obtém a data e hora atual usando o método now
agora = Time.now

# exibe o resultado
puts "Usando now: " + agora.strftime("%d/%m/%Y - %H:%M:%S")

Ao executar este código Ruby nós teremos o seguinte resultado:

Usando new: 21/03/2021 - 17:00:09
Usando now: 21/03/2021 - 17:00:09


Java ::: Java Swing - Componentes Visuais ::: JList

Como retornar os índices dos itens selecionados em uma JList de seleção múltipla do Java Swing

Quantidade de visualizações: 8141 vezes
Em outra dica desta seção nós vimos como obter e retornar os valores selecionados em uma JList de múltipla seleção do Java Swing. Agora veremos como retornar os índices dos valores selecionados. Para isso nós vamos usar o método getSelectedIndices(), que retorna um vetor (array) de inteiros.

Note o uso da constante ListSelectionModel.MULTIPLE_INTERVAL_SELECTION fornecida para o método setSelectionMode() da JList para indicar a forma de seleção que estamos usando no exemplo.

Veja o código Java Swing completo para o exemplo:

package estudos;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Estudos extends JFrame{
  JList lista;  

  public Estudos() {
    super("A classe JList");
    
    Container c = getContentPane();
    c.setLayout(new FlowLayout(FlowLayout.LEFT));
    
    // Cria os itens da lista
    String nomes[] = {"Carlos", "Marcelo", "Fabiana",
      "Carolina", "Osmar"};

    // Cria a JList
    lista = new JList(nomes);
 
    // Define a seleção múltipla para a lista
    lista.setSelectionMode(
      ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

    // Um botão que permite obter os índices do itens 
    // selecionados
    JButton btn = new JButton("Obter índices selecionados");
    btn.addActionListener(
      new ActionListener(){
        public void actionPerformed(ActionEvent e){
          int[] indices = lista.getSelectedIndices();
          String res = "Índices selecionados:\n";

          for(int i = 0; i < indices.length; i++)
            res += indices[i] + "\n";

          JOptionPane.showMessageDialog(null, res);
        }
      }
    );

    // Adiciona a lista à janela
    c.add(new JScrollPane(lista));

    // Adiciona o botão à janela
    c.add(btn);  

    setSize(350, 250);
    setVisible(true);
  }
  
  public static void main(String args[]){
    Estudos app = new Estudos();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

Lembre-se que as teclas Ctrl ou Shift devem estar pressionadas enquanto escolhemos os itens de uma JList de seleção múltipla.


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição

Exercícios Resolvidos de Java - Um laço for que conta de 10 até 0

Quantidade de visualizações: 10443 vezes
Pergunta/Tarefa:

Neste exercício você deverá modificar o Exercício Resolvido 1. Agora você deverá usar o laço for para contar de 10 até 0, ou seja, o inverso do exercício anterior. Novamente você deverá fazer dois exemplos. No primeiro você deverá escrever os valores na horizontal e no segundo você deverá escrever os valores na vertical:

Resposta/Solução:

Veja o código que usa o laço for para contar de 10 até 0 e exibir os valores na horizontal:

public static void main(String[] args){
  // laço for que conta de 10 até e exibe os valores na horizontal
  for(int i = 10; i >= 0; i--){
    System.out.print(i + "  ");
  }
}

Quando você executar este código, os valores deverão ser impressos da seguinte forma:

10  9  8  7  6  5  4  3  2  1  0

Agora, veja a modificação que faz com que os valores sejam impressos na vertical:

public static void main(String[] args){
  // laço for que conta de 10 até 0 e exibe os valores na vertical
  for(int i = 10; i >= 0; i--){
    System.out.println(i + "  ");
  }
}

Agora os valores serão exibidos da seguinte forma:

10  
9  
8  
7  
6  
5  
4  
3  
2  
1  
0



Delphi ::: Dicas & Truques ::: Arquivos e Diretórios

Como verificar a existência de um diretório usando a função DirectoryExists() do Delphi

Quantidade de visualizações: 13169 vezes
Em algumas situações precisamos saber se um diretório já existe, talvez para evitar que nosso código tente criar um diretório com o mesmo caminho e nome. Em Delphi isso pode ser feito com o auxílio da função DirectoryExists() da unit SysUtils. Esta função recebe uma string contendo o nome do diretório a ser pesquisado e retorna true se o diretório existir e false em caso contrário. Veja o exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  diretorio: string;
begin
  // diretório que queremos verificar a existência
  diretorio := 'C:\arquivo de codigos';

  // vamos verificar se o diretório existe
  if DirectoryExists(diretorio) then
    ShowMessage('O diretório existe')
  else
    ShowMessage('O diretório NÃO existe');
end;

Note que a unit FileCtrl também contém uma função chamada DirectoryExists(). Porém, esta função foi considerada ultrapassada. Dê preferência àquela da unit SysUtils.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


AutoCAD ::: Dicas & Truques ::: Configurações da Área de Desenho

Como definir os limites da área de desenho do AutoCAD usando o comando LIMITS

Quantidade de visualizações: 1089 vezes
Quando estamos criando um novo desenho no AutoCAD, muitas vezes usando os arquivos de template acad.dwt (medidas imperiais) ou acadiso.dwt (medidas métricas), nos deparamos com uma área de desenho gigantesca, com medidas enormes.

Assim, é sempre uma boa idéia delimitarmos a área de desenho, e isso é feito por meio do comando LIMITS. Este comando, quando acionado, nos pede duas coordenadas: Lower Left e Upper Right. Veja a figura:



Dessa forma, Lower Left define os limites para o canto esquerdo inferior e Upper Right define os limites para o canto superior direito. Quando acionamos o comando LIMITS (ligado: ON), não conseguimos sair desses limites, o que pode ser uma comodidade, pois podemos nos concentrar em pequenos porções de um desenho de grandes proporções.

Vamos então aprender a usar o comando LIMITS do AutoCAD? Comece criando um novo desenho (usando ou não os templates mencionados acima) e digite os comandos a seguir:

LIMITS [Enter]
Specify lower left corner or [ON/OFF] <0.0000,0.0000>: 0,0
Specify upper right corner <420.0000,297.0000>: 100,80

Tenha a certeza de inserir as coordenadas separadas por vírgulas e acionar a opção ON para ativar os limites. No final, digite o comando ZOOM ALL para aproximar a área de desenho dentro dos limites recém-definidos.

Agora, sempre que digitarmos coordenadas fora desses limites, o AutoCAD nos avisará que os valores são inválidos e os rejeitará. Para desligar os limites, basta chamar LIMITS novamente e informar o valor OFF.


jQuery ::: Dicas & Truques ::: Manipulação e Conteúdo Dinâmico

Como usar o método appendTo() do jQuery para adicionar todo o conteúdo de um elemento ao final de outro elemento HTML

Quantidade de visualizações: 561 vezes
O método appendTo() é usado quando queremos adicionar todo o conteúdo dos elementos retornados sob uma determinada condição a outro ou outros elementos HTML.

Veja um trecho de código no qual adicionamos o conteúdo de um parágrafo ao final de um elemento DIV:

<script type="text/javascript">
<!--
  function adicionarConteudo(){
    var texto = "<br>Mais uma linha.";
    $("#parag").appendTo("#div_1");
  }
//-->
</script>

O método appendTo() opera em todos os elementos HTML retornados sob uma determinação condição. O retorno do método é um objeto jQuery que pode ser usado para fins de encadeamento de chamadas de métodos.


VB.NET ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade)

Exercícios Resolvidos de VB.NET - Uma função recursiva que conta quantas vezes um valor inteiro k ocorre em um vetor de inteiros

Quantidade de visualizações: 539 vezes
Pergunta/Tarefa:

Escreva uma função recursiva em VB.NET que conta quantas vezes um valor inteiro k ocorre em um vetor de 10 inteiros. Sua função deverá ter a seguinte assinatura:

// função recursiva que recebe um valor e um vetor e retorna quantas
// vezes o valor é encontrado no vetor
public static int QuantRepeticoes(int indice, int valor, int[] vetor) {
  // sua implementação aqui 
}
Seu programa deverá solicitar ao usuário os valores do vetor e o valor a ser pesquisado. Sua saída deverá ser parecida com:

Informe o 1 valor: 2
Informe o 2 valor: 7
Informe o 3 valor: 4
Informe o 4 valor: 7
Informe o 5 valor: 1

Informe o valor a ser pesquisado no vetor: 7
O valor informado se repete 2 vezes.
Resposta/Solução:

Veja a resolução comentada deste exercício usando VB.NET:

Imports System

Module Program
  ' função principal do programa VB.NET
  Sub Main(args As String())
    ' vamos declarar um vetor de 10 inteiros
    Dim valores(4) As Integer

    ' vamos pedir ao usuário que informe os valores do vetor
    For i As Integer = 0 To valores.Length - 1
      Console.Write("Informe o " & (i + 1) & " valor: ")
      ' efetua a leitura do valor informado para a posição atual do vetor
      valores(i) = Int32.Parse(Console.ReadLine())
    Next

    ' agora vamos pedir para informar o valor a ser pesquisado
    Console.Write(vbCrLf & "Informe o valor a ser pesquisado no vetor: ")
    Dim valor As Integer = Int32.Parse(Console.ReadLine())

    ' e vamos ver a quantidade de repetições
    Dim repeticoes As Integer = QuantRepeticoes(0, valor, valores)
    Console.WriteLine("O valor informado se repete " & repeticoes & " vezes.")

    Console.WriteLine(vbCrLf & vbCrLf & "Pressione qualquer tecla para sair...")
    ' pausa o programa
    Console.ReadKey()
  End Sub

  ' função recursiva que recebe um valor e um vetor e retorna quantas
  ' vezes o valor é encontrado no vetor
  Function QuantRepeticoes(indice As Integer, valor As Integer, 
    vetor() As Integer) As Integer
    If indice = vetor.Length - 1 Then ' caso base...hora de parar a recursividade
      If vetor(indice) = valor Then
        Return 1 ' mais um repetição foi encontrada
      End If
    Else ' dispara mais uma chamada recursiva
      If vetor(indice) = valor Then ' houve mais uma repetição
        Return 1 + QuantRepeticoes(indice + 1, valor, vetor)
      Else
        Return 0 + QuantRepeticoes(indice + 1, valor, vetor) ' não repetiu
      End If
    End If

    Return 0 ' só para deixar o compilador satisfeito...esta linha nunca é
    ' executada
  End Function

End Module


Carregar Publicações Anteriores


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby


E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser. Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book Apenas R$ 19,90


© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 39 usuários muito felizes estudando em nosso site.