Dúvidas, comentários e doaçoes: +55 62 9 8513 2505

Planilha de Dimensionamento de Tubulações Hidráulicas Água Fria e Água Quente Completa
Nossa planilha automática de dimensionamento de tubulações de água fria e quente é uma ferramenta desenvolvida para auxiliar engenheiros e projetistas no cálculo rápido e preciso das redes hidráulicas de edificaçoes. Por meio da inserçao de dados como vazao, diâmetro da tubulaçao, comprimento da rede, material do tubo e coeficientes hidráulicos, a planilha realiza automaticamente os cálculos necessários para verificar velocidade da água, perda de carga e dimensionamento adequado das tubulaçoes.

Você está aqui: Cards de Python
Card 1 de 2
A indentação é mesmo obrigatória em Python?

Sim, a linguagem Python exige o uso da indentação como forma de formar blocos de código.

O interpretador Python é informado que um grupo de instruções pertence a um bloco específico por meio da indentação. Em geral, programadores Python usam um ou dois caracteres de tabulação (tecla Tab) como forma de indentar seus blocos de código.

Em todas as linguagens de programação a indentação facilita a leitura e compreensão do código escrito, porém, em Python, ela é um requisito obrigatório.

Filtrar Cards
Use esta opção para filtrar os cards pelos tópicos que mais lhe interessam.
Termos:
Aviso Importante: Nos esforçamos muito para que o conteúdo dos cards e dos testes e conhecimento seja o mais correto possível. No entanto, entendemos que erros podem ocorrer. Caso isso aconteça, pedimos desculpas e estamos à disposição para as devidas correções. Além disso, o conteúdo aqui apresentado é fruto de conhecimento nosso e de pesquisas na internet e livros. Caso você encontre algum conteúdo que não deveria estar aqui, por favor, nos comunique pelos e-mails exibidos nas opções de contato.
Link para compartilhar na Internet ou com seus amigos:

QGIS ::: PyQGIS API ::: Shapefiles, Camadas Vetoriais, Dados Vetoriais

Como exibir todos os atributos das feições de uma camada vetorial no QGIS usando getFeatures() e attributes() da PyQGIS API

Quantidade de visualizações: 6457 vezes
Nesta dica mostrarei como podemos acessar todos os atributos das feições (features) de uma camada vetorial no QGIS usando getFeatures() e attributes() do objeto QgsVectorLayer da PyQGIS API.

Depois de carregar o shapefile contendo todos os municípios do Estado de Goiás, usei a getFeatures() para retornar um iterador QgsFeatureIterator que nos permite acessar as features individuais da camada.

Então, de posse das feições individuais, nós usamos a função attributes() para retornar o QgsFeature correspondente e exibir seu conteúdo.

Veja o código PyQGIS completo para o exemplo:

# vamos criar um novo objeto QgsVectorLayer com o local do nosso shapefile
camada = QgsVectorLayer("C:\\GO\\GO_Municipios_2022.shp",
  "Municípios Estado de Goiás", "ogr")

# vamos testar se a camada é válida  
if not camada.isValid():
  print("Não foi possível carregar a camada %s" % camada.name())
else:
  # vamos adicionar a camada à relação de camadas  
  QgsProject.instance().addMapLayer(camada)
  
  # vamos obter as feições
  feicoes = camada.getFeatures()
  
  # agora percorremos as feições e obtemos os seus
  # atributos, todos de uma só vez ou individual,
  # como mostro em outras dicas
  for f in feicoes:
    # vamos obter os atributos desta feição
    atributos = f.attributes()
    # e mostramos o resultado
    print(atributos)

Ao rodar esse código PyQGIS no QGIS nós teremos o seguinte resultado:

['5200050', 'Abadia de Goiás', 'GO', 143.357]
['5200100', 'Abadiânia', 'GO', 1044.555]
['5200134', 'Acreúna', 'GO', 1566.742]
['5200159', 'Adelândia', 'GO', 115.385]
['5200175', 'Água Fria de Goiás', 'GO', 2023.636]
['5200209', 'Água Limpa', 'GO', 458.836]
['5200258', 'Águas Lindas de Goiás', 'GO', 191.817]
['5200308', 'Alexânia', 'GO', 846.876]
['5200506', 'Aloândia', 'GO', 102.094]
['5200555', 'Alto Horizonte', 'GO', 500.342]
['5200605', 'Alto Paraíso de Goiás', 'GO', 2594.998]
['5200803', 'Alvorada do Norte', 'GO', 1268.347]
['5200829', 'Amaralina', 'GO', 1343.742]
['5200852', 'Americano do Brasil', 'GO', 133.834]
['5200902', 'Amorinópolis', 'GO', 406.93]
['5201108', 'Anápolis', 'GO', 935.672]
['5201207', 'Anhanguera', 'GO', 55.569]
['5201306', 'Anicuns', 'GO', 976.038]
['5201405', 'Aparecida de Goiânia', 'GO', 279.954]
['5201454', 'Aparecida do Rio Doce', 'GO', 603.254]
['5201504', 'Aporé', 'GO', 2899.237]
['5201603', 'Araçu', 'GO', 149.776]
['5201702', 'Aragarças', 'GO', 661.677]
['5201801', 'Aragoiânia', 'GO', 218.125]
['5202155', 'Araguapaz', 'GO', 2188.1]
['5202353', 'Arenópolis', 'GO', 1075.535]
['5202502', 'Aruanã', 'GO', 3054.773]
['5202601', 'Aurilândia', 'GO', 565.514]
['5202809', 'Avelinópolis', 'GO', 170.228]
['5203104', 'Baliza', 'GO', 1780.173]
['5203203', 'Barro Alto', 'GO', 1080.268]
['5203302', 'Bela Vista de Goiás', 'GO', 1274.034]
['5203401', 'Bom Jardim de Goiás', 'GO', 1901.137]
['5203500', 'Bom Jesus de Goiás', 'GO', 1405.605]
['5203559', 'Bonfinópolis', 'GO', 121.915]
['5203575', 'Bonópolis', 'GO', 1635.319]
['5203609', 'Brazabrantes', 'GO', 125.326]
['5203807', 'Britânia', 'GO', 1458.459]
['5203906', 'Buriti Alegre', 'GO', 901.932]
['5203939', 'Buriti de Goiás', 'GO', 202.576]
['5203962', 'Buritinópolis', 'GO', 246.075]
['5204003', 'Cabeceiras', 'GO', 1126.434]
['5204102', 'Cachoeira Alta', 'GO', 1657.226]
['5204201', 'Cachoeira de Goiás', 'GO', 424.49]
['5204250', 'Cachoeira Dourada', 'GO', 528.281]
['5204300', 'Caçu', 'GO', 2254.34]
['5204409', 'Caiapônia', 'GO', 8627.961]
['5204508', 'Caldas Novas', 'GO', 1608.523]
['5204557', 'Caldazinha', 'GO', 251.72]
['5204607', 'Campestre de Goiás', 'GO', 272.734]
['5204656', 'Campinaçu', 'GO', 1978.386]
['5204706', 'Campinorte', 'GO', 1064.541]
['5204805', 'Campo Alegre de Goiás', 'GO', 2450.111]
['5204854', 'Campo Limpo de Goiás', 'GO', 156.113]
['5204904', 'Campos Belos', 'GO', 735.126]
['5204953', 'Campos Verdes', 'GO', 443.125]
['5205000', 'Carmo do Rio Verde', 'GO', 419.821]
['5205059', 'Castelândia', 'GO', 299.228]
['5205109', 'Catalão', 'GO', 3826.37]
['5205208', 'Caturaí', 'GO', 205.065]
['5205307', 'Cavalcante', 'GO', 6948.78]
['5205406', 'Ceres', 'GO', 213.07]
['5205455', 'Cezarina', 'GO', 417.08]
['5205471', 'Chapadão do Céu', 'GO', 2184.076]
['5205497', 'Cidade Ocidental', 'GO', 389.984]
['5205513', 'Cocalzinho de Goiás', 'GO', 1785.339]
['5205521', 'Colinas do Sul', 'GO', 1707.519]
['5205703', 'Córrego do Ouro', 'GO', 458.077]
['5205802', 'Corumbá de Goiás', 'GO', 1064.833]
['5205901', 'Corumbaíba', 'GO', 1864.277]
['5206206', 'Cristalina', 'GO', 6153.921]
['5206305', 'Cristianópolis', 'GO', 221.624]
['5206404', 'Crixás', 'GO', 4673.039]
['5206503', 'Cromínia', 'GO', 364.918]
['5206602', 'Cumari', 'GO', 568.365]
['5206701', 'Damianópolis', 'GO', 417.625]
['5206800', 'Damolândia', 'GO', 86.057]
['5206909', 'Davinópolis', 'GO', 482.857]
['5207105', 'Diorama', 'GO', 685.382]
['5207253', 'Doverlândia', 'GO', 3227.558]
['5207352', 'Edealina', 'GO', 598.218]
['5207402', 'Edéia', 'GO', 1469.099]
['5207501', 'Estrela do Norte', 'GO', 301.139]
['5207535', 'Faina', 'GO', 1949.685]
['5207600', 'Fazenda Nova', 'GO', 1279.107]
['5207808', 'Firminópolis', 'GO', 422.34]
['5207907', 'Flores de Goiás', 'GO', 3695.106]
['5208004', 'Formosa', 'GO', 5804.292]
['5208103', 'Formoso', 'GO', 843.42]
['5208152', 'Gameleira de Goiás', 'GO', 588.328]
['5208301', 'Divinópolis de Goiás', 'GO', 828.874]
['5208400', 'Goianápolis', 'GO', 166.642]
['5208509', 'Goiandira', 'GO', 569.917]
['5208608', 'Goianésia', 'GO', 1547.319]
['5208707', 'Goiânia', 'GO', 729.296]
['5208806', 'Goianira', 'GO', 213.772]
['5208905', 'Goiás', 'GO', 3108.423]
['5209101', 'Goiatuba', 'GO', 2479.591]
['5209150', 'Gouvelândia', 'GO', 827.373]
['5209200', 'Guapó', 'GO', 514.178]
['5209291', 'Guaraíta', 'GO', 205.533]
['5209408', 'Guarani de Goiás', 'GO', 1221.054]
['5209457', 'Guarinos', 'GO', 593.188]
['5209606', 'Heitoraí', 'GO', 228.615]
['5209705', 'Hidrolândia', 'GO', 952.122]
['5209804', 'Hidrolina', 'GO', 583.756]
['5209903', 'Iaciara', 'GO', 1547.183]
['5209937', 'Inaciolândia', 'GO', 689.201]
['5209952', 'Indiara', 'GO', 955.419]
['5210000', 'Inhumas', 'GO', 614.887]
['5210109', 'Ipameri', 'GO', 4382.863]
['5210158', 'Ipiranga de Goiás', 'GO', 244.209]
['5210208', 'Iporá', 'GO', 1027.249]
['5210307', 'Israelândia', 'GO', 579.19]
['5210406', 'Itaberaí', 'GO', 1461.916]
['5210562', 'Itaguari', 'GO', 142.652]
['5210604', 'Itaguaru', 'GO', 241.029]
['5210802', 'Itajá', 'GO', 2082.736]
['5210901', 'Itapaci', 'GO', 952.998]
['5211008', 'Itapirapuã', 'GO', 2047.874]
['5211206', 'Itapuranga', 'GO', 1281.404]
['5211305', 'Itarumã', 'GO', 3437.367]
['5211404', 'Itauçu', 'GO', 383.066]
['5211503', 'Itumbiara', 'GO', 2447.014]
['5211602', 'Ivolândia', 'GO', 1260.841]
['5211701', 'Jandaia', 'GO', 863.087]
['5211800', 'Jaraguá', 'GO', 1848.947]
['5211909', 'Jataí', 'GO', 7178.792]
['5212006', 'Jaupaci', 'GO', 528.783]
['5212055', 'Jesúpolis', 'GO', 115.211]
['5212105', 'Joviânia', 'GO', 446.258]
['5212204', 'Jussara', 'GO', 4092.34]
['5212253', 'Lagoa Santa', 'GO', 463.289]
['5212303', 'Leopoldo de Bulhões', 'GO', 476.137]
['5212501', 'Luziânia', 'GO', 3962.107]
['5212600', 'Mairipotaba', 'GO', 468.029]
['5212709', 'Mambaí', 'GO', 858.27]
['5212808', 'Mara Rosa', 'GO', 1695.463]
['5212907', 'Marzagão', 'GO', 225.518]
['5212956', 'Matrinchã', 'GO', 1150.503]
['5213004', 'Maurilândia', 'GO', 389.959]
['5213053', 'Mimoso de Goiás', 'GO', 1380.701]
['5213087', 'Minaçu', 'GO', 2854.137]
['5213103', 'Mineiros', 'GO', 9042.844]
['5213400', 'Moiporá', 'GO', 452.314]
['5213509', 'Monte Alegre de Goiás', 'GO', 3119.86]
['5213707', 'Montes Claros de Goiás', 'GO', 2900.397]
['5213756', 'Montividiu', 'GO', 1869.581]
['5213772', 'Montividiu do Norte', 'GO', 1337.232]
['5213806', 'Morrinhos', 'GO', 2846.299]
['5213855', 'Morro Agudo de Goiás', 'GO', 282.333]
['5213905', 'Mossâmedes', 'GO', 684.882]
['5214002', 'Mozarlândia', 'GO', 1738.516]
['5214051', 'Mundo Novo', 'GO', 2141.534]
['5214101', 'Mutunópolis', 'GO', 955.069]
['5214408', 'Nazário', 'GO', 281.147]
['5214507', 'Nerópolis', 'GO', 204.713]
['5214606', 'Niquelândia', 'GO', 9846.293]
['5214705', 'Nova América', 'GO', 209.432]
['5214804', 'Nova Aurora', 'GO', 307.335]
['5214838', 'Nova Crixás', 'GO', 7308.681]
['5214861', 'Nova Glória', 'GO', 411.753]
['5214879', 'Nova Iguaçu de Goiás', 'GO', 625.625]
['5214903', 'Nova Roma', 'GO', 2136.725]
['5215009', 'Nova Veneza', 'GO', 122.354]
['5215207', 'Novo Brasil', 'GO', 649.349]
['5215231', 'Novo Gama', 'GO', 192.285]
['5215256', 'Novo Planalto', 'GO', 1254.491]
['5215306', 'Orizona', 'GO', 1971.265]
['5215405', 'Ouro Verde de Goiás', 'GO', 208.804]
['5215504', 'Ouvidor', 'GO', 411.318]
['5215603', 'Padre Bernardo', 'GO', 3142.615]
['5215652', 'Palestina de Goiás', 'GO', 1318.047]
['5215702', 'Palmeiras de Goiás', 'GO', 1537.196]
['5215801', 'Palmelo', 'GO', 59.809]
['5215900', 'Palminópolis', 'GO', 393.326]
['5216007', 'Panamá', 'GO', 432.204]
['5216304', 'Paranaiguara', 'GO', 1153.415]
['5216403', 'Paraúna', 'GO', 3786.578]
['5216452', 'Perolândia', 'GO', 1033.657]
['5216809', 'Petrolina de Goiás', 'GO', 530.49]
['5216908', 'Pilar de Goiás', 'GO', 906.048]
['5217104', 'Piracanjuba', 'GO', 2374.232]
['5217203', 'Piranhas', 'GO', 2045.088]
['5217302', 'Pirenópolis', 'GO', 2200.369]
['5217401', 'Pires do Rio', 'GO', 1077.641]
['5217609', 'Planaltina', 'GO', 2558.924]
['5217708', 'Pontalina', 'GO', 1434.289]
['5218003', 'Porangatu', 'GO', 4825.287]
['5218052', 'Porteirão', 'GO', 606.262]
['5218102', 'Portelândia', 'GO', 553.411]
['5218300', 'Posse', 'GO', 2076.99]
['5218391', 'Professor Jamil', 'GO', 356.292]
['5218508', 'Quirinópolis', 'GO', 3786.026]
['5218607', 'Rialma', 'GO', 268.291]
['5218706', 'Rianápolis', 'GO', 157.379]
['5218789', 'Rio Quente', 'GO', 244.655]
['5218805', 'Rio Verde', 'GO', 8374.255]
['5218904', 'Rubiataba', 'GO', 750.659]
['5219001', 'Sanclerlândia', 'GO', 509.402]
['5219100', 'Santa Bárbara de Goiás', 'GO', 140.957]
['5219209', 'Santa Cruz de Goiás', 'GO', 1109.007]
['5219258', 'Santa Fé de Goiás', 'GO', 1164.186]
['5219308', 'Santa Helena de Goiás', 'GO', 1142.337]
['5219357', 'Santa Isabel', 'GO', 812.756]
['5219407', 'Santa Rita do Araguaia', 'GO', 1357.197]
['5219456', 'Santa Rita do Novo Destino', 'GO', 970.448]
['5219506', 'Santa Rosa de Goiás', 'GO', 166.44]
['5219605', 'Santa Tereza de Goiás', 'GO', 789.544]
['5219704', 'Santa Terezinha de Goiás', 'GO', 1206.6]
['5219712', 'Santo Antônio da Barra', 'GO', 450.336]
['5219738', 'Santo Antônio de Goiás', 'GO', 135.022]
['5219753', 'Santo Antônio do Descoberto', 'GO', 943.948]
['5219803', 'São Domingos', 'GO', 3335.999]
['5219902', 'São Francisco de Goiás', 'GO', 416.535]
['5220009', "São João d'Aliança", 'GO', 3334.455]
['5220058', 'São João da Paraúna', 'GO', 286.979]
['5220108', 'São Luís de Montes Belos', 'GO', 829.62]
['5220157', 'São Luiz do Norte', 'GO', 583.832]
['5220207', 'São Miguel do Araguaia', 'GO', 6150.179]
['5220264', 'São Miguel do Passa Quatro', 'GO', 537.347]
['5220280', 'São Patrício', 'GO', 172.763]
['5220405', 'São Simão', 'GO', 415.015]
['5220454', 'Senador Canedo', 'GO', 247.005]
['5220504', 'Serranópolis', 'GO', 5521.774]
['5220603', 'Silvânia', 'GO', 2349.924]
['5220686', 'Simolândia', 'GO', 346.811]
['5220702', "Sítio d'Abadia", 'GO', 1611.851]
['5221007', 'Taquaral de Goiás', 'GO', 205.665]
['5221080', 'Teresina de Goiás', 'GO', 784.793]
['5221197', 'Terezópolis de Goiás', 'GO', 107.407]
['5221304', 'Três Ranchos', 'GO', 284.034]
['5221403', 'Trindade', 'GO', 712.69]
['5221452', 'Trombas', 'GO', 802.905]
['5221502', 'Turvânia', 'GO', 482.317]
['5221551', 'Turvelândia', 'GO', 935.659]
['5221577', 'Uirapuru', 'GO', 1154.305]
['5221601', 'Uruaçu', 'GO', 2142.484]
['5221700', 'Uruana', 'GO', 522.904]
['5221809', 'Urutaí', 'GO', 623.821]
['5221858', 'Valparaíso de Goiás', 'GO', 61.488]
['5221908', 'Varjão', 'GO', 517.402]
['5222005', 'Vianópolis', 'GO', 954.115]
['5222054', 'Vicentinópolis', 'GO', 733.794]
['5222203', 'Vila Boa', 'GO', 1052.593]
['5222302', 'Vila Propício', 'GO', 2181.593]

Note que mostrei todos os atributos das 246 feições (features) do meu shapefile. E cada feição representa um dos municípios do Estado de Goiás. Veja que os atributos são o código do município, seu nome, a sigla do estado e sua área (em metros quadrados). Deixei a listagem completa para facilitar alguém que queira fazer trabalhos relacionados a isso.


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade)

Exercícios Resolvidos de Java - Um método recursivo que recebe uma String e retorna a quantidade de letras maiúsculas encontradas

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

Escreva um método recursivo que recebe uma palavra ou frase e retorna a quantidade de caracteres (letras) maiúsculos. Seu método deverá possuir a seguinte assinatura:

public static int contarMaiusculas(String frase){
  // sua implementação aqui
}
Veja que o método deverá funcionar para qualquer tamanho de string. Teste também com strings que contenham somente letras maiúsculas ou somente letras minúsculas.

Sua saída deverá ser parecida com:

Digite uma palavra ou frase: Arquivo de Códigos
A palavra ou frase contém 2 letras maiúsculas
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java console:

Observação importante: Este código criará uma cadeia de chamadas recursivas. Cada chamada ao método contarMaiusculas() receberá uma cópia menor da palavra ou frase fornecida. Quando a última chamada recursiva do método receber uma string vazia, a cadeia começa a retornar. Note que os valores acumulados nas várias chamadas ao método vão sendo acumulados na variável quantidade.

package exercicio;

import java.util.Scanner;

public class Exercicio {
  public static void main(String[] args) {
    // cria um novo objeto da classe Scanner
    Scanner entrada = new Scanner(System.in);
    
    // solicita uma palavra ou frase ao usuário
    System.out.print("Digite uma palavra ou frase: ");
    // lê a palavra ou frase
    String frase = entrada.nextLine();
    
    int quantMaiusculas = contarMaiusculas(frase);
    System.out.println("A palavra ou frase contém " + quantMaiusculas +
      " letras maiúsculas");
  }
  
  // método recursivo que recebe uma palavra ou frase e retorna
  // a quantidade de letras maiúsculas
  public static int contarMaiusculas(String frase){
    /* Este código criará uma cadeia de chamadas recursivas. Cada
     * chamada ao método contarMaiusculas() receberá uma cópia menor
     * da palavra ou frase fornecida. Quando a última chamada recursiva do
     * método receber uma string vazia, a cadeia começa a retornar. Note
     * que os valores acumulados nas várias chamadas ao método vão sendo
     * acumulados na variável quantidade
    */ 
    int quantidade = 0;
    
    // o tamanho da string é maior que 0?
    if(frase.length() > 0){
      if(Character.isUpperCase(frase.charAt(0))){
        quantidade = 1 + contarMaiusculas(frase.substring(1));      
      }
      else{
        quantidade = contarMaiusculas(frase.substring(1));    
      }
    }
   
    return quantidade;
  }
}



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

Como adicionar conteúdo ao início de um elemento HTML usando a função prepend() do jQuery

Quantidade de visualizações: 868 vezes
O método prepend() permite adicionar conteúdo ao início de um elemento HTML. Este conteúdo pode ser um seletor, um elemento HTML, uma string HTML ou um objeto jQuery.

Veja um trecho de código no qual adicionamos uma linha de texto no início de um parágrafo:

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

O método prepend() 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.


Ruby ::: Dicas & Truques ::: Strings e Caracteres

Como converter uma string em um valor inteiro em Ruby usando a função to_i da classe String

Quantidade de visualizações: 11851 vezes
Em algumas situações precisamos transformar um valor contido em uma string em um valor numérico do tipo inteiro. Em Ruby podemos fazer isso usando o método to_i da classe String.

Veja:

# um número inteiro declarado como string
valor = "34"

# vamos somar este número a um outro
resultado = 30 + valor.to_i

# exibe o resultado
puts resultado

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

64


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 registros

Quantidade de visualizações: 33330 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):

// 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:

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:

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.


Desafios, Exercícios e Algoritmos Resolvidos de C#

Veja mais Dicas e truques de C#

Dicas e truques de outras linguagens

E-Books em PDF

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
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

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


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