Você está aqui: Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet |
Como usar a propriedade Active da classe TClientDataSet do DelphiQuantidade de visualizações: 11547 vezes |
A propriedade Active de um controle TClientDataSet pode ser definida em tempo de design (pelo Object Inspector) ou em tempo de execução. Se o valor for True os dados armazenados no TClientDataSet podem ser lidos e manipulados. Se o valor for False, o client dataset está fechado (closed) e não podemos acessar nem manipular os dados contidos nele. Veja no trecho de código abaixo como definir o valor da propriedade Active em tempo de execução: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm3.Button3Click(Sender: TObject); begin // vamos ativar o client dataset ClientDataSet1.Active := True; // vamos testar se o client dataset foi mesmo ativado if ClientDataSet1.Active then ShowMessage('O ClientDataSet está ativo') else ShowMessage('O ClientDataSet NÃO está ativo') end; Ao clicar no botão nós "ativamos" o client dataset e em seguida testamos o valor da propriedade Active para informar se o controle foi realmente ativado. É preciso ter muito cuidado. Tentar manipular os dados de um client dataset fechado pode resultar em uma exceção do tipo EDatabaseError com mensagens parecidas com: Project Projeto.exe raised exception class EDatabaseError with message 'ClientDataSet1: Cannot perform this operation on a closed dataset'. Ao definirmos o valor True para a propriedade Active as seguintes ações ocorrem: 1) O client dataset é preenchido com dados. Dependendo das propriedades do controle, estes dados podem vir de três formas diferentes: a) Do arquivo especificado na propriedade FileName; b) Do provider especificado na propriedade ProviderName ou por meio do método SetProvider. (algumas classes derivadas de TCustomClientDataSet possuem um componente interno que faz o papel do provider); c) Os dados que estavam ativos quando o client dataset foi desativado (somente se a aplicação foi executada durante um certo período depois que o dataset foi desativado). 2) O evento BeforeOpen é disparado. 3) O valor dsBrowse é atribuído à propriedade State do dataset. 4) Abre e posiciona um cursor no primeiro registro do conjunto de dados. 5) Dispara o evento AfterOpen. Se o client dataset nunca foi ativado, atribuir o valor True para a propriedade Active faz com que a estrutura (metadata) do client dataset seja definida. Esta estrutura é obtida juntamente com o pacote de dados a partir do provider ou armazenado em disco. Se não houver pacote de dados, tal estrutura é construída usando o valor atual da propriedade FieldDefs ou a partir dos componentes de campos persistentes listados na propriedade Fields. Se um erro ocorrer durante a abertura do dataset, seu estado (State) é definido como dsInactive e o cursor de navegação é fechado. Ao definirmos o valor False para a propriedade Active as seguintes ações ocorrem: 1) O evento BeforeClose é disparado. 2) O valor para a propriedade State é definido como dsInactive. 3) O cursor de navegação é fechado, salvando os dados atuais em disco se a propriedade FileName estiver definida e salvando o pacote de dados atual em cache de forma que o mesmo possa ser restaurado mais tarde quando o dataset for reaberto. 4) O evento AfterClose é disparado. Importante: Uma chamada ao método Open do TClientDataSet define a propriedade Active como True, enquanto uma chamada ao método Close a define como False. Esta dica foi escrita e testada no Delphi 2009. |
Link para compartilhar na Internet ou com seus amigos: |
PHP ::: Fundamentos da Linguagem ::: Tipos de Dados |
Entendendo o tipo de dados NULL do PHP - Aprenda a usar o tipo de dados NULL da linguagem PHP - AtualizadaQuantidade de visualizações: 10615 vezes |
O tipo de dados NULL (nulo) do PHP é semelhante aos tipos undef (Perl) e None (Python). Este tipo de dados possui apenas um valor que é usado para indicar que uma variável não possui nenhum valor (não recebeu nenhuma atribuição ainda). Este tipo de dados pode ser escrito NULL, Null, null, etc. Não há distinção de maiúsculas e minúsculas. Veja um exemplo de seu uso:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- $nome = "Osmar J. Silva"; $nome = null; // variável é NULL agora $nome = Null; // mesmo resultado $nome = NULL; // mesmo resultado Se quisermos testar se uma variável ainda é NULL, podemos usar a função is_null(). Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- <? $nome; if(is_null($nome)){ echo 'A variável $nome ainda é NULL.'; } ?> Este código mostrará o seguinte resultado: A variável $nome ainda é NULL. Note que, se as advertências estiverem habilitadas na página PHP, a seguinte mensagem será exibida: Warning: Undefined variable $nome in ...\index.php on line 4 Esta é a forma da linguagem PHP nos advertir de que a variável foi declarada mas não foi inicializada com algum valor. Esta dica foi revisada, atualizada e testada no PHP 8. |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como contar as ocorrências de um determinado caractere em uma string usando a função strpbrk() da linguagem CQuantidade de visualizações: 16012 vezes |
Podemos facilmente obter quantas vezes um determinado caractere aparece em uma palavra, frase ou texto. Para isso, só precisamos usar a função strpbrk() da linguagem C, que retorna um ponteiro para a primeira ocorrência do caractere que estamos pesquisando. A partir daí só precisamos utilizar um laço para atingir a funcionalidade desejada. Lembre-se de que, se o caractere não for encontrado, um ponteiro nulo NULL será retornado:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char texto[] = "Gosto muito de C e C++"; char letra[] = "o"; char *pos_atual; int quant = 0; pos_atual = strpbrk(texto, letra); while(pos_atual != NULL){ quant++; pos_atual = strpbrk(pos_atual + 1, letra); } printf("A letra \"%s\" foi encontrada %d vezes\n", letra, quant); system("pause"); return 0; } Ao executar este código nós teremos o seguinte resultado: A letra "o" foi encontrada 3 vezes Pressione qualquer tecla para continuar... |
C# ::: Windows Forms ::: DataGridView |
Como ligar um DataGridView do C# Windows Forms à tabela de um banco de dados e efetuar inserção, alteração e remoção de registrosQuantidade de visualizações: 32490 vezes |
Uma das principais dúvidas que recebo em meu site é em relação aos passos necessários para associar um DataGridView com a tabela de um banco de dados e listar os dados. Em tempo de design este processo é relativamente fácil, visto que temos wizards que nos acompanham e fazem o trabalho mais pesado nos bastidores. No entanto, o cenário é completamente diferente quando temos que realizar tal tarefa via código. Espero que esta dica o deixe mais preparado para enfrentar tais situações. Para esta dica eu fiz uma conexão Visual C# 2005 + MySQL 5.0 usando ODBC (caso tenha dúvidas sobre isso, veja minha seção sobre C# + MySQL). Criei uma tabela MySQL chamada clientes contendo id, nome, idade, cidade e estado do cliente. Criei uma classe de conexão, inseri um DataGridView no formulário e coloquei as declarações abaixo na classe do formulário Form1.cs (fora dos métodos, para que os dados sejam globais na classe): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // membros de instância de acesso global na classe // Dica: Se estiver usando SQL Server, troque "Odbc" por // "Sql" (Ex: SQLConnection, SqlCommand, SqlDataAdapter) // conexão com o banco de dados OdbcConnection conn = null; OdbcCommand cmd = null; OdbcDataAdapter adapter = null; DataSet ds = null; Em seguida colocamos o código abaixo no evento Click de um botão: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- private void button4_Click(object sender, EventArgs e){ // Dica: Se estiver usando SQL Server, troque "Odbc" // por "Sql" (Ex: SqlCommand, SqlDataAdapter, etc) // obtém a conexão com o banco de dados conn = ConexaoODBC.obterConexao(); if(conn != null){ // obtém todos os clientes cadastrados cmd = new OdbcCommand("SELECT * FROM clientes", conn); adapter = new OdbcDataAdapter(cmd); ds = new DataSet(); adapter.Fill(ds, "clientes_table"); // exibe os dados da tabela no DataGridView dataGridView1.DataSource = ds; dataGridView1.DataMember = "clientes_table"; // fecha a conexão ConexaoODBC.fecharConexao(); } } Aqui os dados já são listados no DataGridView. Porém, as alterações efetuadas no controle ainda não são repassadas para o banco de dados. Veja o código adicional no evento Click de outro botão: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- private void button5_Click(object sender, EventArgs e){ // vamos salvar os dados do DataGridView para a tabela do // banco de dados // Dica: Se estiver usando SQL Server, troque "Odbc" por // "Sql" (Ex: SqlCommandBuilder) // obtém a conexão com o banco de dados conn = ConexaoODBC.obterConexao(); if(conn != null){ OdbcCommandBuilder cmb = new OdbcCommandBuilder(adapter); cmb.GetUpdateCommand(); adapter.Update(ds.Tables["clientes_table"]); // fecha a conexão ConexaoODBC.fecharConexao(); } } Pronto! Execute a aplicação, clique no primeiro botão para carregar os dados da tabela MySQL no DataGridView. Em seguida efetue algumas alterações, insira ou exclua linhas e clique no segundo botão. Feche a aplicação e abra-a novamente e se certifique de que os registros foram atualizados, inseridos ou removidos com sucesso. |
C++ ::: Dicas & Truques ::: Ponteiros, Referências e Memória |
Como alocar memória dinâmica usando o operador new do C++Quantidade de visualizações: 12067 vezes |
Em algumas situações precisamos alocar memória dinamicamente. Em C++ isso é feito com o auxílio do operador new. Este operador permite alocar uma determinada quantidade de bytes, alinhados de forma a representar o objeto para o qual queremos reservar memória. Veja um exemplo de código no qual alocamos memória dinâmica para uma variável do tipo int: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> using namespace std; int main(int argc, char *argv[]){ // aloca memória para um objeto do tipo int int *ponteiro = new int; // vamos definir o valor para o objeto recém-alocado *ponteiro = 20; // vamos exibir seu valor cout << *ponteiro << endl; // vamos liberar a memória delete ponteiro; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Note que aqui a memória foi alocada e guardada em um ponteiro. Veja também o uso do operador delete para liberar a memória alocada. Isso evita os vazamentos de memória tão frequentes em aplicações que lidam com a memória dinâmica. É claro que este não é o exemplo mais prático. Qual a vantagem de se alocar memória para um int? Declarar uma variável teria sido mais eficiente. A alocação de memória dinâmica é mais útil quando estamos lidando com objetos mais complexos que os tipos básicos. Alguns exemplos envolvem a criação de objetos de classes, matrizes, estruturas de dados, etc. Veja um exemplo no qual temos uma declaração de uma classe chamada Cliente e em seguida alocamos memória para uma instância desta classe: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <string> using namespace std; // declaração da classe Cliente class Cliente{ public: Cliente(); string obterNome(); void definirNome(string); private: string nome; }; // implementação dos métodos da classe Cliente::Cliente(){} // construtor vazio // obtém o nome do cliente string Cliente::obterNome(){ return this->nome; } // define o nome do cliente void Cliente::definirNome(string nome){ this->nome = nome; } int main(int argc, char *argv[]){ // aloca memória para um objeto da classe Cliente Cliente *c = new Cliente(); // vamos definir o nome do cliente c->definirNome("Osmar J. Silva"); // vamos exibir o nome do cliente cout << c->obterNome() << endl; // vamos liberar a memória usada delete c; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Nome do cliente: Osmar J. Silva |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Internet, LAN e E-Mail |
Exercícios Resolvidos de Java - Como testar se há um serviço sendo executado em uma porta de um servidor ou máquina localQuantidade de visualizações: 7143 vezes |
Pergunta/Tarefa: Este exercício resolvido é sobre Internet, Rede e E-Mail usando programação Java. Escreva um programa Java console ou GUI que peça ao usuário para informar um número de porta na máquina local. Em seguida, tente se conectar a esta porta e informe se há algum serviço sendo executado na porta informada. A entrada e saída do programa pode ser algo como: Informe o número da porta a ser pesquisada: 3306 Há um serviço na porta informada Informe o número da posta a ser pesquisada: 2040 Não há nenhum serviço na porta informada Resposta/Solução: Veja a resolução comentada deste exercício usando Java console: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Main { public static void main(String[] args){ Socket socket; // vamos declarar um objeto da classe Socket String host = "localhost"; // define o nome da máquina host // vamos pedir ao usuário que informe a porta a ser pesquisada Scanner entrada = new Scanner(System.in); System.out.print("Informe o número da posta a ser pesquisada: "); int porta = Integer.parseInt(entrada.nextLine()); // vamos verificar se há algum serviço na porta informada try{ socket = new Socket(host, porta); System.out.println("Há um serviço na porta informada"); } catch (UnknownHostException e) { // não foi possível encontrar a máquina host System.out.println("Não foi possível encontrar a máquina host: " + e); } catch (IOException e) { System.out.println("Não há nenhum serviço na porta informada"); } } } Veja que, neste exercício, podemos ter o surgimento de duas exceções: UnknownHostException (a máquina informada não pôde ser encontrada) e IOException (houve erro de entrada e/ou saída). Por esta razão, é uma boa idéia envolver o código em um bloco try...catch. |
Mais Desafios de Programação e Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |