![]() |
|
||||
![]() 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 dadosQuantidade 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 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 primoQuantidade 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 } Informe um valor inteiro: 7 O numero informado é primo 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 EndPointQuantidade 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 TimeQuantidade 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 SwingQuantidade 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é 0Quantidade 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 DelphiQuantidade 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 LIMITSQuantidade 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 HTMLQuantidade 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 inteirosQuantidade 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 } 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. 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 |
Você também poderá gostar das dicas e truques de programação abaixo |
JavaScript - Cookies em JavaScript - Como registrar a quantidade de vezes que o usuário visitou a sua página HTML JavaScript - Como arredondar um valor numérico de ponto-flutuante para cima usando a função ceil() do objeto Math do JavaScript Java - Como carregar uma imagem em um BufferedImage do Java usando o método read() da classe ImageIO |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |