Você está aqui: Delphi ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como usar arrays (vetores e matrizes) em DelphiQuantidade de visualizações: 73501 vezes |
Em programação de computadores, um array, também conhecido como vector (para arrays uni-dimensionais) ou matriz (para arrays bi-dimensionais), é uma das mais simples estruturas de dados. Os arrays mantêm uma série de elementos de dados, geralmente do mesmo tamanho e tipo de dados. Elementos individuais são acessados por sua posição no array. A posição é dada por um índice, também chamado de subscrição. O índice geralmente utiliza uma seqüência de números inteiros, (ao contrário de um array associativo) mas o índex pode ter qualquer valor ordinal. Alguns arrays são multi-dimensionais, significando que eles são indexados por um número fixo de números inteiros, por exemplo, por um seqüência (ou sucessão) finita de quatro números inteiros. Geralmente, arrays uni- e bi-dimensionais são os mais comuns. Os arrays podem ser considerados como as estruturas de dado mais simples que é possível imaginar. Têm a vantagem de que os seus elementos são acessíveis de forma rápida, mas têm uma notável limitação: são de tamanho fixo, mas podem ser incrementados ou diminuídos com determinados algoritmos, geralmente envolvendo a cópia de elementos de um array para outro e reinicializando o original com a nova dimensão. Os vetores podem ser implementados desta forma. Em Delphi um array é declarado da seguinte forma: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- var valores: array[1..10] of Integer; Aqui nós temos um array chamado valores que contém 10 elementos do tipo Integer. Estes elementos podem ser acessados por índices que variarão de 1 a 10, ou seja, podemos acessar o 5º elemento da seguinte forma: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var valores: array[1..10] of Integer; begin valores[5] := 20; end; Este tipo de array que ora criamos é chamado de array estático, em contraposição aos arrays dinâmicos, os quais podem ter seus tamanhos redimensionados durante a execução do programa. A forma mais prática de se trabalhar com arrays em Delphi é usando laços. Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var valores: array[1..5] of Integer; i, soma: Integer; begin // vamos preencher o array com os valores de 1 a 5 for i := 1 to 5 do begin valores[i] := i; end; // vamos percorrer o array novamente e obter a soma dos // valores de seus elementos soma := 0; for i := 1 to 5 do begin soma := soma + valores[i]; end; // vamos exibir o resultado ShowMessage('A soma dos valores é: ' + IntToStr(soma)); end; Aqui nós declaramos um array de 5 elementos do tipo Integer e inicializamos seus elementos com os valores de 1 a 5. Em seguida percorremos todo o array novamente para obter a soma dos valores dos elementos. É possível também declarar e já inicializar um array. Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); const valores: array[1..5] of Integer = (3, 2, 6, 12, 9); var i, soma: Integer; begin // vamos percorrer o array novamente e obter a soma dos // valores de seus elementos soma := 0; for i := 1 to 5 do begin soma := soma + valores[i]; end; // vamos exibir o resultado ShowMessage('A soma dos valores é: ' + IntToStr(soma)); end; Note que aqui eu declarei o array como uma constante. Isso aconteceu porque o Delphi não permite que inicializemos variáveis locais ([DCC Error] Unit1.pas(32): E2195 Cannot initialize local variables). Caso você realmente precise do array como variável e não constante, e deseje inicializá-lo juntamente com a declaração, mova-o para a seção interface do formulário ou classe. Para finalizar, veja que é possível criar arrays de todos os tipos em Delphi. Veja no trecho de código abaixo como usamos um array de Char para guardar uma palavra e exibí-la normal e depois invertida: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); const letras: array[1..5] of Char = ('O', 's', 'm', 'a', 'r'); var i: Integer; resultado: String; begin resultado := ''; // vamos exibir a palavra na forma normal for i := 1 to 5 do resultado := resultado + letras[i]; // exibe o resultado ShowMessage(resultado); // vamos exibir a palavra invertida resultado := ''; for i := 5 downto 1 do resultado := resultado + letras[i]; // exibe o resultado ShowMessage(resultado); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
![]() |
Delphi ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Tutorial Delphi para iniciantes: Como usar o laço while do DelphiQuantidade de visualizações: 26225 vezes |
O laço while do Delphi é usado quando queremos que um bloco de instruções seja executado enquanto uma condição for satisfeita. Assim, todas as iterações do laço serão resultados de um teste condicional. Veja um exemplo:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button3Click(Sender: TObject); var i: Integer; // variável de controle begin // este laço contará de 0 até 10 i := 0; while i <= 10 do begin ShowMessage(IntToStr(i)); // a mensagem será exibida 10 vezes Inc(i); // vamos incrementar a variável de controle end; end; Aqui nós temos uma variável i que tem seu valor inicial definido como 0. Ao entrarmos no laço while nós verificamos se o valor desta variável é menor ou igual a 10. Se este teste for verdadeiro o laço é executado pela primeira vez. Dentro do laço nós aumentamos o valor da variável de controle em 1. Isso é feito de forma a evitar um laço infinito. O laço então prossegue para a próxima iteração, que ocorre somente após a verificação do resultado do teste condicional. Isso nos mostra que um laço while pode nunca ser executado (casos nos quais o teste de continuidade do laço falha já na primeira iteração). Veja agora um exemplo no qual usamos um laço while para contar de 10 até 0: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button3Click(Sender: TObject); var i: Integer; // variável de controle begin // este laço contará de 10 até 0 i := 10; while i >= 0 do begin ShowMessage(IntToStr(i)); // a mensagem será exibida 10 vezes Dec(i); // vamos decrementar a variável de controle end; end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid |
Como obter o índice da linha da célula atual em um TDBGrid do DelphiQuantidade de visualizações: 9853 vezes |
Como obter o índice da linha da célula atual (com foco) em um TDBGrid do Delphi Em algumas situações precisamos obter o índice da linha da célula atual, ou seja, a célula que detém o foco no momento em um TDBGrid. Isso pode ser feito por meio da propriedade Row da classe TCustomGrid (e publicada na classe TStringGrid). Como esta propriedade não está publicada na classe TDBGrid (Delphi 2009), o que fazemos é um casting para a classe TStringGrid. Veja um trecho de código no qual usamos o evento Click de um botão para informar o índice da linha da célula atual: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm3.Button3Click(Sender: TObject); var indice: Integer; begin // vamos obter o índice da linha da célula atual indice := TStringGrid(DBGrid1).Row; ShowMessage('O índice da linha da célula atual é: ' + IntToStr(indice)); end; Execute o código e clique no botão. Você verá uma mensagem parecida com: "O índice da linha da célula atual é: 4". Lembre-se de que o índice da linha fixa do DBGrid é 0. Esta dica foi escrita e testada no Delphi 2009. |
Delphi ::: VCL - Visual Component Library ::: TStringGrid |
Como centralizar os títulos das colunas (ou o conteúdo de qualquer célula) de um TStringGrid do DelphiQuantidade de visualizações: 13610 vezes |
Em algumas situações nós precisamos centralizar os títulos das colunas de um TStringGrid. Em geral os títulos das colunas são exibidos nas células da primeira linha fixa do TStringGrid. Nesta dica eu mostrarei a forma mais comum de alcançar este efeito. Note que a técnica pode ser usada para centraliar o conteúdo de qualquer célula da grid: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var conteudo: String; alinhamento_anterior: Word; begin // vamos centralizar os títulos das colunas, ou seja, o conteúdo // das células na primeira linha if ARow = 0 then begin // vamos obter o conteúdo da célula conteudo := (Sender as TStringGrid).Cells[ACol, ARow]; // vamos obter o alinhamento atual alinhamento_anterior := SetTextAlign((Sender as TStringGrid).Canvas.Handle, TA_CENTER); // vamos colocar o conteúdo de volta na célula (Sender as TStringGrid).Canvas.TextRect(Rect, Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 5, conteudo); // vamos voltar o alinhamento anterior para as demais células SetTextAlign((Sender as TStringGrid).Canvas.Handle, alinhamento_anterior); end; end; Aqui nós temos duas chamadas à função SetTextAlign() da API do Windows. Na primeira vez nós obtemos o alinhamento atual e definimos o novo alinhamento como TA_CENTER. Na segunda chamada nós voltamos o alinhamento anterior. Se não fizermos este procedimento, todas as demais células da grid terão seus conteúdos também alinhados ao centro. |
Delphi ::: Imagens, Gráficos e Cores ::: TCanvas (Classe TCanvas) |
Computação gráfica em Delphi - Como desenhar linhas usando o método LineTo() da classe TCanvas do DelphiQuantidade de visualizações: 16328 vezes |
Podemos desenhar linhas em Delphi usando o método LineTo() da classe TCanvas. Este método desenha uma linha partindo da posição inicial da caneta (PenPos), ou seja, as coordenadas x e y iniciais, até as coordenadas finais que fornecemos ao método durante a realização do desenho. Veja um exemplo no qual desenhamos uma linha horizontal no formulário: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm2.Button1Click(Sender: TObject); var areaDesenho: TCanvas; begin // este trecho de código mostra como desenhar uma // linha horizontal no formulário // vamos obter o canvas do formulário areaDesenho := Form2.Canvas; // vamos mover a caneta para as coordenadas x = 30; y = 100 areaDesenho.MoveTo(30, 100); // vamos desenhar uma linha no formulário partindo // das coordenadas anteriores até as coordenadas // x = 300; y = 100 areaDesenho.LineTo(300, 100); end; Note que, na maioria dos casos, este código é escrito de forma mais compacta: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm2.Button1Click(Sender: TObject); begin // este trecho de código mostra como desenhar uma // linha horizontal no formulário // vamos obter o canvas do formulário with Form2.Canvas do begin // vamos mover a caneta para as coordenadas x = 30; y = 100 MoveTo(30, 100); // vamos desenhar uma linha no formulário partindo // das coordenadas anteriores até as coordenadas // x = 300; y = 100 LineTo(300, 100); end; end; É importante observar que a nova posição da caneta (propriedade PenPos) é definida ao final da chamada ao método LineTo(). Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Dicas & Truques ::: Strings e Caracteres |
Como obter uma substring no final de uma string usando a função AnsiRightStr() do DelphiQuantidade de visualizações: 13193 vezes |
Em algumas situações precisamos obter uma substring no final de uma string. Em Delphi isso pode ser feito por meio da função AnsiRightStr(). Esta função requer a string a partir da qual a substring será obtida e a quantidade de caracteres que comporâo a substring. O retorno será uma nova string contendo a substring obtida. Veja o exemplo:---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var frase, substring: string; begin frase := 'Programar em Delphi é muito bom'; // vamos obter a substring "bom" substring := AnsiRightStr(frase, 3); // vamos exibir o resultado ShowMessage('Resultado: ' + substring); end; Não se esqueça de adicionar a unit StrUtils no uses do seu formulário. Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Win32 API (Windows API) ::: Formulários e Janelas |
Como usar a função GetWindow() da API do Windows para pesquisar e retornar um handle para uma janela baseado em seu título completo ou parcial usando DelphiQuantidade de visualizações: 14950 vezes |
Em algumas situações nós precisamos pesquisar e retornar um handle para uma janela baseado em seu título completo ou parcial, ou seja, gostaríamos de encontrar uma janela que contenha a palavra "sexo". Isso pode ser feito com o auxílio da função GetWindow() da API do Windows. Veja: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- // função personalizada que permite encontrar uma janela // baseado em seu título function FindWindowByTitle(WindowTitle: string): Hwnd; var NextHandle: Hwnd; NextTitle: array[0..255] of char; begin // vamos obter a primeira janela NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); while NextHandle > 0 do begin // vamos obter o título da janela GetWindowText(NextHandle, NextTitle, 256); // a janela contém o título que procuramos? if Pos(Uppercase(WindowTitle), UpperCase(String(NextTitle))) <> 0 then begin Result := NextHandle; Exit; end else // vamos tentar a próxima janela NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); end; // não encontramos nada? vamos retornar um handle nulo Result := 0; end; procedure TForm1.Button1Click(Sender: TObject); var handle: hwnd; begin // vamos localizar e fechar a Calculadora do Windows // ou qualquer janela que contenha o texto "Calculadora" handle := FindWindowByTitle('Calculadora'); if handle <> 0 then // encontramos a janela? vamos fechá-la SendMessage(handle, WM_SYSCOMMAND, SC_CLOSE, 0) else ShowMessage('A janela pesquisada não foi encontrada'); end; Neste exemplo nós pesquisamos uma janela que contenha a palavra "Calculadora" em seu título. Se encontrada, nós a fechamos com o auxílio da função SendMessage() e a mensagem WM_SYSCOMMAND com o valor SC_CLOSE para o parâmetro wParam. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid |
Como usar a classe TDBGrid do Delphi em suas aplicaçõesQuantidade de visualizações: 9706 vezes |
Um objeto da classe TDBGrid permite a exibição e manipulação de registros a partir de um conjunto de dados (dataset) em uma grid tabular. Em geral os dados exibidos em um TDBGrid vêm de uma tabela no banco de dados ou como resultados de uma query. Por meio deste controle o usuário consegue adicionar, excluir e modificar informações em uma tabela do banco de dados. Antes de prosseguirmos, veja a posição desta classe na hierarquia de classes do Delphi: System.TObject Classes.TPersistent Classes.TComponent Controls.TControl Controls.TWinControl Controls.TCustomControl Grids.TCustomGrid DBGrids.TCustomDBGrid DBGrids.TDBGrid A forma mais comum de se usar um controle TBGrid em aplicações Delphi é colocá-lo em um formulário e definir suas propriedades em tempo de design. A exibição dos dados é feita indicando um componente TDataSource para a sua propriedade DataSource. Isso pode ser feito em tempo de design ou durante a execução do programa. Veja um trecho de código no qual usamos o evento Click de um botão para definir a fonte de dados (TDataSource) para a propriedade DataSource de um TDBGrid chamado "DBGrid1": ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- procedure TForm3.Button2Click(Sender: TObject); begin DBGrid1.DataSource := DataSource1; end; Em outras dicas sobre Delphi + Banco de dados você encontrará exemplos de como efetuar conexões com diversos bancos de dados. É importante que você saiba como efetuar conexões com o banco de dados e extrair informações antes de estudar o componente TDBGrid. Em tempo de execução os usuários podem usar um navegador de base de dados (TDBNavigator) para percorrer os dados na grid e inserir, excluir ou editar as informações. As modificações feitas nas células de um TDBGrid são enviadas ao conjunto de dados somente quando o usuário acessa um registro diferente daquele sendo atualizado ou fecha a aplicação. O TDBGrid implementa o comportamento genérico introduzido na classe TCustomDBGrid. A classe TDBGrid publica muitas das propriedades herdadas de TCustomDBGrid, mas não introduz nenhum novo comportamento. Esta dica foi escrita e testada no Delphi 2009. |
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: 15904 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: ---------------------------------------------------------------------- Se precisar de ajuda para ajustar o código abaixo de acordo com as suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar) Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar a manter o site livre de anúncios. Ficaremos eternamente gratos ;-) Nosso PIX é: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- 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. |
Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira |
Perfil em aço O perfil de aço apresenta diversas características e uma infinidade de composições que podem permanecer resistentes por meio da conexão de diferentes peças mediante conexões. A esse respeito, assinale a alternativa que indica corretamente o elemento de conexão de perfis de aço que oferece a possibilidade de união das peças de uma moldura de aço como se fosse um todo monolítico. A) Rebite. B) Pinos de alta resistência. C) Pinos de aço-carbono. D) Pinos de controle de tensão. E) Solda. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica |
Máquinas de fluxo radial Máquinas de fluxo radial, com fluxo predominantemente radial na região de trabalho da linha de lâmina móvel, podem ser exemplificadas por um ventilador ou bomba de fluxo radial (ou centrífuga), cujo escoamento se dá com o fluxo de saída ortogonal ao de entrada ao rotor. Sobre as classificações de fluxo em máquinas hidráulicas, qual afirmativa está correta? A) O fluxo axial ocorre em máquinas hidráulicas quando o fluido entra pelas pás do rotor em um sentido e sai no mesmo sentido, porém na direção contrária à de entrada. B) O fluxo misto ocorre em máquinas hidráulicas quando o fluido entra pelas pás do rotor em um sentido e sai no mesmo sentido, porém na direção contrária à de entrada. C) O fluxo misto em máquinas hidráulicas ocorre quando o fluido entra e sai no mesmo sentido, porém com ângulo próximo a 90° em relação à entrada. D) Há um grupo que não se enquadra na categoria de fluxo radial. Esse grupo específico tem um escoamento do fluxo que entra em um sentido e sai perpendicularmente. E) Há um grupo que não se enquadra na categoria de fluxo radial, tampouco na categoria axial. Esta categoria remanescente é conhecida como máquinas de fluxos misto. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Ética e Legislação Profissional |
Ética profissional, social, política Para Aristóteles, a base da ética é a justiça: "Essa forma de justiça (geral) é, portanto, uma virtude completa e governa nossas relações com os outros; por isso, muitas vezes, a justiça é considerada a virtude mais perfeita e nem a estrela vespertina, nem a estrela matutina é mais admirada que ela. Daí o provérbio: a justiça encerra toda a virtude" (ARISTÓTELES apud AUTOR, 1987, p. 93). A respeito do exposto, assinale a alternativa correta: A) A justiça é o que torna a ética tanto individual quanto social. B) A ética não depende das relações sociais para existir. C) A justiça deve ser ajustada e deliberada pela ética. D) A justiça se realiza na moral, e não nas leis do Estado. E) A justiça fundamenta os preceitos morais de convivência em sociedade. Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Python |
Qual é a forma correta de se declarar uma variável do tipo real em Python? A) valor = float(6.3) B) valor = Float(6.3) C) valor = 6.3 D) As formas A, B e C estão corretas E) As formas A e C estão corretas Verificar Resposta Estudar Cards Todas as Questões |
Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil |
Processos e técnicas construtivas de instalações elétricas e hidráulicas O projetista deve prezar pela compatibilização de projetos, de modo que os dispositivos elétricos e hidráulicos não se sobreponham aos elementos estruturais e arquitetônicos. Analise as afirmativas a seguir, referentes à compatibilização de projetos e à sua relação com as instalações elétricas. I. As instalações elétricas aparentes devem, sempre, ser executadas com eletrodutos flexíveis, pois estes são mais adequados à geometria do substrato quando comparados aos eletrodutos rígidos. II. A realização de cortes e rasgos em paredes de alvenaria, muito comum no cotidiano da engenharia, pode prejudicar o desempenho e a durabilidade do elemento de vedação e do ambiente interno da edificação. III. As instalações elétricas podem ser executadas de forma aparente, sob a laje de concreto, sendo recobertas, em seguida, por forros suspensos de gesso, de modo a manter a instalação escondida. IV. As instalações elétricas podem ser executadas no interior de paredes drywall; contudo, essa técnica resulta em elevado desperdício de material, em virtude dos cortes e rasgos nas placas de gesso acartonado. Assinale a alternativa que apresenta somente a(s) afirmativa(s) correta(s). A) Apenas a afirmativa I está correta. B) Apenas a afirmativa III está correta. C) Apenas as afirmativas II e III estão corretas. D) Apenas as afirmativas I, II e IV estão corretas. E) As afirmativas I, II, III e IV estão corretas. Verificar Resposta Estudar Cards Todas as Questões |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |