COLÉGIO TÉCNICO “ANTÔNIO TEIXEIRA FERNANDES” CTI - UNIVAP Vb.net 2008 – Professor Alberson Wander Sá dos Santos Sumário 3º Bimestre: 32 - Conceitos iniciais de Banco de Dados ......................................................... 33 – Sistemas Gerenciadores de Bancos de Dados.................................................... 34 – ADO.NET ......................................................................................................... 34.1 – Criando um banco de dados SQL-SERVER ..................................................... 34.2 – Criando tabelas no banco de dados SQL-SERVER ............................................. 34.3 – PROJETO CLIENTES ........................................................................................... 34.4 – Carregando dados de tabela em Caixas de Listagens ......................................... 34.5 – Objetos de acesso a bancos de dados ADO.NET ................................................ 34.5.1 – Objetos Connection ............................................................................................ 34.5.2 – Objetos Command ....................................................................................... 34.5.3 – Objetos DataReader ..................................................................................... 101 102 102 103 107 110 122 125 125 125 126 4º Bimestre: 35 – Caixas de Diálogos ................................................................................................... 35.1 – Caixa de Diálogo ABRIR... ..................................................................................... 35.2 – Caixa de Diálogo SALVAR ..................................................................................... 35.3 – Caixa de Diálogo CORES....................................................................................... 35.4 – Caixa de Diálogo FONTE..... ............................................................................ 35.5 – Programa Caixas de Diálogo ............................................................................ 36 – Objeto WebBrowser ............................................................................................ 37 – Manipulação de arquivo texto no vb.net ............................................................... 37.1 – A classe System.IO .......................................................................................... . 37.2 – Criando o arquivo texto .................................................................................... . 37.3 - Escrevendo num arquivo texto .......................................................................... . 37.4 – Abrindo um arquivo para leitura ......................................................................... 37.5 – Lendo um arquivo texto SEQUENCIALMENTE (Método ReadLine) ...................... 37.6 – Lendo TODO arquivo texto (Método ReadToEnd) .................................................. 37.7 – Programa GeraArquivoTexto ................................................................................... 38 – Classe FileSystem (manipulando arquivos) e executanto arquivos .exe ................... 39 – Criação de Barras de Menu ....................................................................................... 127 128 129 130 131 132 135 139 139 139 140 140 140 141 141 144 145 ANEXO 1- Novo projeto CLIENTES (3º BIMESTRE)...................................................... 150 Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos 3º BIMESTRE 31 – CONCEITOS INICIAIS DE BANCO DE DADOS Antes de começarmos a trabalhar com banco de dados, devemos conhecer alguns conceitos importantes, a saber: • BANCO DE DADOS: Coleção organizada de informações, armazenadas em um ou mais arquivos OU TABELAS (entidades). • TABELAS (ou Entidades): Formada por campos (Atributos). • CAMPOS (ou Atributos): Colunas que armazenarão dados. • DADO: Especifica o conteúdo armazenado em cada campo da tabela. • REGISTRO (ou Tupla): Coleção de todos os dados armazenados nas LINHAS da tabela. • DOMÍNIOS: Coleção de todos os dados gravados em cada COLUNA da tabela. • CHAVE PRIMÁRIA: Impede a duplicação de registros na tabela e também facilita a busca de um registro. Existem dois tipos de chaves primárias, a saber: • o Chave Primária Simples: Somente um campo da tabela é usado para chave primária; o Chave Primária Composta: Dois ou mais campos da tabela compõe a chave primária; CHAVE ESTRANGEIRA: Um ou mais campos utilizados em uma tabela filho para receber dados de uma tabela pai. A QUANTIDADE DE CAMPOS que irá compor a chave estrangeira é definida pela quantidade de campos definidos como chave primária na tabela pai. Portanto, se a tabela pai possui uma chave primária composta por 3 campos, a chave estrangeira, na tabela filho, terá obrigatoriamente 3 campos do mesmo tipo e tamanho que os definidos na tabela pai. Estudaremos este conceito na prática, mais adiante, não se preocupe. A figura abaixo ilustra alguns conceitos citados acima: Curso de Informática – Cti / UniVap Página Figura 137 Vb.net 2008 – Professor Alberson Wander Sá dos Santos 33 – SISTEMAS GERENCIADORES DE BANCOS DE DADOS Sistemas Gerenciadores de Bancos de Dados são software´s capazes de manter a integridade dos dados armazenados num banco de dados. Os bancos de dados mais utilizados pelos analistas de sistemas e programadores são: • ACCESS • SQL-SERVER • MYSQL (gratuíto) • POSTGRE (gratuíto) • PARADOX • INTERBASE • FIREBIRD (gratuíto) • ORACLE (mais caro do mercado) • Entre outros É importante saber que todos os bancos de dados utilizam uma linguagem para manipulação dos registros armazenados. Esta linguagem é a SQL, ou Transact-SQL (STRUCTURED QUERY LANGUAGE). As linguagens de programações atuais, entre elas o Visual Basic .NET, permitem que os programadores cadastrem, alterem, excluam e consultem registros, utilizando comandos da SQL. Não confunda um arquivo de banco de dados com um programa desenvolvido numa linguagem qualquer. Deste ponto para frente da matéria trabalharemos com arquivos de banco de dados e os programas desenvolvidos para gravar, excluir, consultar e alterar os registros gravados no banco. Com o vb.net, podemos criar o arquivo de banco de dados, tabelas e seus campos, com estrutura de arquivos do SQL-SERVER. Este procedimento irá gerar um arquivo para armazenar os registros gerados pelo seu programa. 34 – ADO.NET O ADO.NET é um dos meios de acesso a registros de um banco de dados. Nesta apostila iremos manter (cadastrar / alterar / excluir / consultar) registros num banco de dados utilizando os recursos de acesso a dados do ADO.NET via código. Todos estes recursos estão presentes no Utilizaremos a estrutura do banco de dados SQL-SERVER, para cadastro de registros em tabelas que serão criadas. Curso de Informática – Cti / UniVap Página Namespace System.Data do ADO.NET. Vb.net 2008 – Professor Alberson Wander Sá dos Santos Mais adiante conheceremos a fundo os componentes do ADO.NET. Porém, para título de conhecimento incial saibamos que o ADO.NET é composto basicamente pelos seguintes componentes: • DataSet • Provedor .NET que é um conjunto de componentes que inclui os objetos: o Connection, o Command, o DataReader, o e DataAdapter. O ADO.NET atual pode acessar dados de três maneiras: • OLE DB, • SQL • e ODBC (implementado mais recentemente). Cada objeto possui uma versão para cada uma das maneiras mencionadas acima; assim temos o objeto OleDataAdapter e SqlDataAdapter Todos os recursos ADO.NET são oferecidos através dos Namespaces (espaços de nomes) da biblioteca de nomes da classe .NET. • System.Data - (Dados do sistema) - contém as classes fundamentais para gerenciar dados como DataSet e DataRelation . • System.Data.Common - (Dados comuns de Sistema) - Possui classes bases que são herdadas por outras classes. • System.Data.OleDb - Possui classes usadas para realizar conexão com o provedor OLE DB. • System.Data.SqlClient - Possui classes para conexão com um banco de dados SQL Server via interface TDS (Tabular Data Stream) • System.Data.SqlTypes - (Dados de sistema Tipos SQL) - inclui tipos adicionais de dados que não são fornecidos pelo .NET. 34.1 – Criando um banco de dados SQL-SERVER Para fins de aprendizado, vamos contruir um projeto para manipular registros de clientes. Para isso, vamos definir os campos que deveremos ter na tabela CLIENTES. Veja abaixo: CAMPO TIPO DE DADO INTEIRO NOMECLI CHAR SALARIOCLI REAL SEXOCLI CHAR NASCIMENTOCLI DATETIME CHAVE PRIMÁRIA # 40 1 Curso de Informática – Cti / UniVap Página CODCLI TAMANHO Vb.net 2008 – Professor Alberson Wander Sá dos Santos Vamos seguir os passos abaixo para criação de um banco de dados com estrutura do SQL-SERVER e a tabela anterior, assim dando início aos estudos sobre acessos e criação a banco de dados. a) Primeiramente abra o VB.net; b) Em seguida, clique com o botão direito do mouse sobre o nome do projeto na janela “Solution Explorer” e siga os passos ilustrados na figura abaixo: Figura 138 OU ENTÃO, entre no menu “Project”, escolha a opção “New Item”. Logo em seguida surgirá a seguinte janela: Curso de Informática – Cti / UniVap Página Figura 139 Vb.net 2008 – Professor Alberson Wander Sá dos Santos c) Na janela anterior, selecione o item “Service-based Database” e digite no campo “NAME” o nome do banco de dados que será criado. Veja abaixo um exemplo, aqui estamos criando o banco LOJA.MDF: Figura 140 d) Dando seguimento, clique no botão “Add”, visto na figura acima. Sugirá a seguinte tela. Oobserve os pontos destacados pela linha vermelha: Figura 141 Curso de Informática – Cti / UniVap Página e) Clique no botão “Finish”, na janela acima. Vb.net 2008 – Professor Alberson Wander Sá dos Santos f) Se tudo deu certo, conforme descrito nos passos anteriores, após clicar no botão “Finish”, aparecerá na janela solution explorer, os seguintes itens: Figura 142 g) Agora basta clicar com o botão direito do mouse sobre o icone “Loja.mdf”, conforme exemplo abaixo. Quando surgir o submenu selecione a opção “Open”. Diante desses passos surgirá a aparecerá a janela “Server Explorer”. Veja abaixo: Figura 143 h) Caso a janela “Server Explorer” não apareça, basta entrar no menu “View” e clicar na opção “Solution Explorer”, conforme a próxima ilustração: Curso de Informática – Cti / UniVap Página Figura 144 Vb.net 2008 – Professor Alberson Wander Sá dos Santos 34.2 – Criando tabelas no banco de dados SQL-SERVER Estando com a janela “Solution Explorer” aberta no seu projeto, vamos agora criar a tabela “CLIENTES” no banco de dados “Loja.mdf”. Para isso, seguiremos os seguintes passos: a) Primeiramente clique com o botão direito do mouse sobre o objeto “Tables” do banco de dados “Loja.mdf”, localizado na janela “Solution Explorer”. No submenu que surgir, clique na opção “Add New Table”, conforme figura abaixo: Figura 145 b) Deverá surgir a seguinte área de criação/edição de tabelas na tela, destacada em vermelho abaixo: Curso de Informática – Cti / UniVap Página Figura 146 Vb.net 2008 – Professor Alberson Wander Sá dos Santos A área anterior é destinada a criação/edição da estrutura da tabela. Preencha-a com os seguintes dados, para criação da tabela “CLIENTES” (de acordo com a estrutura definida anteriormente, no item 34.1 desta apostila): Figura 147 OBSERVAÇÕES SOBRE O PREENCHIMENTO ACIMA: • Na coluna “Column Name” informe o nome dos campos da tabela “clientes”; • Na coluna “Data Type”, informe o tipo de dado de cada campo; • Na coluna “Allow Nulls”, informe se o campo permitirá cadastrar os registros sem a informação do referido campo. Se caixa de seleção estiver SELECIONADA, está indicando que o dado não será obrigatório, ou seja, permitirá vazio no momento do cadastro de um registro. • Para criar a CHAVE PRIMÁRIA, basta selecionar o(s) campo(s) que irá(ão) compor a chave, e em seguida, clicar no botão . Este procedimento fará aparecer o ícone de uma chave, ao lado dos campos definidos como chave primária, na área de criação da tabela. c) Depois de preenchida a área de criação de estrutura da tabela, podemos fechá-la. Porém, ao (“Save All”), surgirá a seguinte janela solicitando- nos a gravação da estrutura criada. Veja a próxima figura: Curso de Informática – Cti / UniVap Página clicarmos no botão fechar, OU NO BOTÃO Vb.net 2008 – Professor Alberson Wander Sá dos Santos Figura 148 d) Clique no botão “YES” para informar um nome para a tabela que está sendo criada. Com isso, deverá aparecer a seguinte janela, solicitando a troca do nome proposto na figura anterior “Table1”. Veja a figura abaixo: Figura 149 e) Digite então o nome da tabela, no nosso caso “CLIENTES” e pressione o botão “OK”. Veja exemplo a seguir: Curso de Informática – Cti / UniVap Página Figura 150 Vb.net 2008 – Professor Alberson Wander Sá dos Santos Após seguir os passos anteriores, na janela “Solution Explorer”, deverá aparecer o nome da tabela criada, conforme mostra a figura abaixo: Figura 151 Desta forma já temos o banco de dados criado e também uma primeira tabela para manter os dados de CLIENTES. Os passos deste item da apostila devem ser seguidos sempre que uma nova tabela se tornar necessária no banco de dados. Já podemos então criar um formulário no vb.net, para se comunicar com o banco de dados e tabela(s) criada(s). Veremos isso no próximo item desta apostila. 34.3 – PROJETO CLIENTES Devemos agora criar a tela de programação para se comunicar com o banco de dados e tabela, criados até então. Todo o acesso ao banco de dados e tabelas serão feitos por meio de linhas de programação. Vale ressaltar que existem objetos que fazem esta conexão, minimizando com isso a escrita de linhas de programa. Porém, como o objetivo deste curso é programação, então devemos deixar de lado. Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Construa o seguinte formulário: Figura 152 OBSERVAÇÃO IMPORTANTE: DESENHE OS CAMPOS DENTRO DOS PAINEIS DO FORMULÁRIO ACIMA Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Em seguida, vamos alterar as seguintes propriedades dos objetos desenhados no formulário acima: OBJETO NAME TEXT lblcodcli “Código do LIST MASK Enabled Visible Maxlenght Cliente” Txtcodcli “” Lblnomecli “Nome Cliente” Txtnomecli “” Lblsalariocli “Salário do 10 40 Cliente” Txtsalariocli “” Lblsexocli “Sexo do 10 Cliente” Cbosexocli “” Masculin o Feminino Lblnascimentocli “Data de Nascimento” Msknascimentocli “” __/__/____ Cmdcadastrar “Cadastrar” Cmdalterar “Alterar” Cmdexcluir “Excluir” Cmdconsultar “Consultar” Cmdconfirmar “Confirmar” False Cmdcancelar “Cancelar” False Cmdok “OK” False pnlchave “” True Pnlcampos “” False Form1 “Clientes” IMPORTANTE: COM OS VALORES INFORMADOS Curso de Informática – Cti / UniVap Página PARA O PROJETO FUNCIONAR CORRETAMENTE, ALTERE AS PROPRIEDADES ACIMA DE ACORDO Vb.net 2008 – Professor Alberson Wander Sá dos Santos Após criado o formulário e o banco de dados, conforme passos anteriores, seu projeto no vb.net deverá ter a seguinte aparência: Figura 153 PERCEBA NO PROJETO ACIMA: • A janela “Server Explorer” exibe o banco de dados e a tabela clientes. Caso a tabela não esteja visível, basta clicar no sinal “+” ao lado do objeto “Tables” nesta janela. • Na janela “Solution Explorer”, está relacionado também o arquivo “LOJA.MDF”, • A tela da aplicação será programada. Agora vamos programar o projeto acima. Observe que cada linha de comando será explicada, conforme as aulas dadas. Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Primeiramente, antes de qualquer programação, vamos importar a classe do OBJETO ADO.NET que nos permitirá trabalhar com o banco de dados SQL-SERVER, construído para o projeto até então criado. Esta importação deve ser feita na área de declaração de variáveis GENERAL /DECLARATIONS do formulário. Veja figura abaixo: Figura 154 OBSERVAÇÕES IMPORTANTES: • A IMPORTAÇÃO DA CLASSE SYSTEM.DATA.SQLCLIENT deve ser feita antes da definição da classe FORM1, conforme mostra o exemplo acima. • Perceba que a variável botao, também foi criada, para sabermos futuramente qual operação está sendo CONFIRMADA pelo usuário. Veremos sua utilidade mais a frente. Inclua um módulo no seu projeto, para criamos uma variável que servirá para guardar uma String de conexão para o banco de dados. Crie a seguinte variável no MODULE.VB: Figura 156 No envento FORM_LOAD, devemos estipular a string de conexão para o banco de dados, que será usada para acessá-lo. do banco de dados (LOJA.MDF), na janela “Server Explorer”, será mostrada na janela de propriedades de conexão para este banco. Copie a string de conexão criada automaticamente na propriedade ConnectionString, circulada na figura a seguir: Curso de Informática – Cti / UniVap Página Para facilitar, basta utilizar a mesma string usada pelo banco de dados LOJA.MDF. Ao clicar no nome Vb.net 2008 – Professor Alberson Wander Sá dos Santos Figura 156 Vamos copiar o conteúdo da propriedade ConnectionString, selecionada acima, para ser atribuída a variável “caminhoconexao”, criada no módulo. Esta atribuição deverá ser feita no evento FOM_LOAD do formulário. Veja abaixo: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'estipulando o caminho para conexão do banco de dados caminhoconexao = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\VBxSQLSERVER\projeto3bi\projeto3bi\LOJA.mdf;Integrated Security=True;User Instance=True" End Sub Agora, vamos programar os botões Cadastrar / Alterar / Excluir / Consultar, respecitvamente: Private Sub cmdcadastrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcadastrar.Click 'verificando se o código do cliente é válido If Not IsNumeric(txtcodcli.Text) Then MsgBox("Digite corretamente o código do cliente.", MsgBoxStyle.Information, "Aviso:") txtcodcli.Focus() Exit Sub End If 'criando objeto conexao para estabelecer a conexão com o banco de dados, diante do caminho estabelecido em caminho conexao Dim conexao As New SqlConnection(caminhoconexao) 'criando o objeto comando para executar a busca do registro no banco de dados que está conectado Dim comando As New SqlCommand("select count(*) from clientes where codcli = " & txtcodcli.Text, conexao) 'vamos nos preparar para possíveis erros gerados quando executarmos os próximos comandos 'usando o comando try... catch Try Curso de Informática – Cti / UniVap Página 'Com a linha abaixo estamos informando ao objeto comando que tipo de 'instrução será utilizada para acessar o registro comando.CommandType = CommandType.Text Vb.net 2008 – Professor Alberson Wander Sá dos Santos 'abrindo o banco de dados conexao.Open() 'executanto o comando sql para contar quantos registros possuem o código informado 'na caixa de texto txtcodcli comando.ExecuteNonQuery() 'se a quantidade de registro filtrados for maior ou igual a 1, significa que já existem 'registros gravados com o código digitado na caixa de texto txtcodcli If comando.ExecuteScalar >= 1 Then MsgBox("Cliente já cadastrado", MsgBoxStyle.Information, "Aviso:") txtcodcli.Focus() Else 'se o registro não existir pnlchave.Enabled = False pnlcampos.Enabled = True cmdcadastrar.Enabled cmdalterar.Enabled = cmdexcluir.Enabled = cmdconsultar.Enabled = False False False = False cmdconfirmar.Visible = True cmdcancelar.Visible = True 'Definindo o botão cadastrar como 1 botao = 1 txtnomecli.Focus() End If 'fechando a conexão conexao.Close() Catch ex As Exception MsgBox("erro: " & Err.Number & "-" & Err.Description) End Try Private Sub cmdalterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdalterar.Click 'verificando se o código do cliente é válido If Not IsNumeric(txtcodcli.Text) Then MsgBox("Digite corretamente o código do cliente.", MsgBoxStyle.Information, "Aviso:") txtcodcli.Focus() Exit Sub End If 'criando objeto conexao para estabelecer a conexão com o banco de dados, diante do caminho estabelecido em caminhoconexao Dim conexao As New SqlConnection(caminhoconexao) 'criando o objeto comando para executar a busca do registro no banco de dados que está conectado Dim comando As New SqlCommand("select count(*) from clientes where codcli = " & txtcodcli.Text, conexao) 'vamos nos preparar para possíveis erros gerados quando executarmos os próximos comandos 'usando o comando try... catch Try Curso de Informática – Cti / UniVap Página 'Com a linha abaixo estamos informando ao objeto comando que tipo de 'instrução será utilizada para acessar o registro comando.CommandType = CommandType.Text Vb.net 2008 – Professor Alberson Wander Sá dos Santos 'abrindo o banco de dados conexao.Open() 'executanto o comando sql para contar quantos registros possuem o código informado 'na caixa de texto txtcodcli comando.ExecuteNonQuery() 'se a quantidade de registro filtrados for maior ou igual a 1, significa que já existem 'registros gravados com o código digitado na caixa de texto txtcodcli If comando.ExecuteScalar >= 1 Then 'criando uma nova instrução sql para filtrar os dados do registro existente comando.CommandText = "select * from clientes where codcli = " & txtcodcli.Text 'A linha abaixo cria a tabela temporária chamada registro. 'Ela será criada quando o método ExecuteReader (Executar leitura)do objeto comando for 'executado Dim registro As SqlDataReader = comando.ExecuteReader() 'vamos nos preparar para possíveis erros gerados quando executarmos os próximos 'comandos usando o comando try... catch Try 'apontando para o registro lido, visto que só existe um registro com 'o código informado registro.Read() 'movendo o registro lido para a tela, ou seja, exibindo o registro na tela txtnomecli.Text = registro.Item("nomecli") txtsalariocli.Text = registro.Item("salariocli") If registro.Item("sexocli") = "M" Then cbosexocli.Text = "Masculino" Else If registro.Item("sexocli") = "F" Then cbosexocli.Text = "Feminino" End If End If msknascimentocli.Text = registro.Item("nascimento") cmdcadastrar.Enabled cmdalterar.Enabled = cmdexcluir.Enabled = cmdconsultar.Enabled = False False False = False pnlchave.Enabled = False pnlcampos.Enabled = True botao = 2 cmdconfirmar.Visible = True cmdcancelar.Visible = True txtnomecli.Focus() Catch ex As Exception MsgBox("Erro: " & Err.Number & "-" & Err.Description, MsgBoxStyle.Information, "Aviso:") End Try 'fechando a comando temporária que armazenava o registro do cliente registro.Close() Else End If conexao.Close() Curso de Informática – Cti / UniVap Página MsgBox("Cliente não cadastrado. Verifique o código do cliente informado.", MsgBoxStyle.Information, "Aviso") txtcodcli.Focus() Vb.net 2008 – Professor Alberson Wander Sá dos Santos Catch ex As Exception MsgBox("erro: " & Err.Number & "-" & Err.Description) End Try End Sub Private Sub cmdexcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdexcluir.Click 'verificando se o código do cliente é válido If Not IsNumeric(txtcodcli.Text) Then MsgBox("Digite corretamente o código do cliente.", MsgBoxStyle.Information, "Aviso:") txtcodcli.Focus() Exit Sub End If 'criando objeto conexao para estabelecer a conexão com o banco de dados, diante do caminho estabelecido em caminhoconexao Dim conexao As New SqlConnection(caminhoconexao) 'criando o objeto comando para executar a busca do registro no banco de dados que está conectado Dim comando As New SqlCommand("select count(*) from clientes where codcli = " & txtcodcli.Text, conexao) 'Com a linha abaixo estamos informando ao objeto comando que tipo de 'instrução será utilizada para acessar o registro comando.CommandType = CommandType.Text 'vamos nos preparar para possíveis erros gerados quando executarmos os próximos 'comandos usando o comando try... catch Try 'abrindo o banco de dados conexao.Open() 'executanto o comando sql para contar quantos registros possuem o código informado 'na caixa de texto txtcodcli comando.ExecuteNonQuery() 'se a quantidade de registro filtrados for maior ou igual a 1, significa que já existem 'registros gravados com o código digitado na caixa de texto txtcodcli If comando.ExecuteScalar >= 1 Then 'criando uma nova instrução sql para filtrar os dados do registro existente comando.CommandText = "select * from clientes where codcli = " & txtcodcli.Text 'A linha abaixo cria a tabela temporária chamada registro. 'Ela será criada quando o método ExecuteReader (Executar leitura)do objeto comando for executado Dim registro As SqlDataReader = comando.ExecuteReader() Try 'apontando para o registro lido, visto que só existe um registro 'com o código informado. registro.Read() 'movendo o registro da comando temporária para a tela txtnomecli.Text = registro.Item("nomecli") txtsalariocli.Text = registro.Item("salariocli") Curso de Informática – Cti / UniVap Página If registro.Item("sexocli") = "M" Then cbosexocli.Text = "Masculino" Else If registro.Item("sexocli") = "F" Then cbosexocli.Text = "Feminino" End If End If Vb.net 2008 – Professor Alberson Wander Sá dos Santos msknascimentocli.Text = registro.Item("nascimento") 'alterando o estado dos botões e campos da tela cmdcadastrar.Enabled = False cmdalterar.Enabled = False cmdexcluir.Enabled = False cmdconsultar.Enabled = False pnlchave.Enabled = False pnlcampos.Enabled = False 'determinando que o botão Excluir é o 3 botao = 3 cmdconfirmar.Visible = True cmdcancelar.Visible = True Catch ex As Exception MsgBox("Erro: " & Err.Number & "-" & Err.Description, MsgBoxStyle.Information, "Aviso:") End Try 'fechando a comando temporária que armazenava o registro do cliente registro.Close() Else MsgBox("Cliente não cadastrado. Verifique o código do cliente informado.", MsgBoxStyle.Information, "Aviso") txtcodcli.Focus() End If conexao.Close() Catch ex As Exception MsgBox("erro: " & Err.Number & "-" & Err.Description) End Try End Sub Private Sub cmdconsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdconsultar.Click 'verificando se o código do cliente é válido If Not IsNumeric(txtcodcli.Text) Then MsgBox("Digite corretamente o código do cliente.", MsgBoxStyle.Information, "Aviso:") txtcodcli.Focus() Exit Sub End If 'criando objeto conexao para estabelecer a conexão com o banco de dados, diante do caminho estabelecido em caminhoconexao Dim conexao As New SqlConnection(caminhoconexao) 'criando o objeto comando para executar a busca do registro no banco de dados que está conectado Dim comando As New SqlCommand("select count(*) from clientes where codcli = " & txtcodcli.Text, conexao) 'Com a linha abaixo estamos informando ao objeto comando que tipo de 'instrução será utilizada para acessar o registro comando.CommandType = CommandType.Text 'abrindo o banco de dados conexao.Open() Curso de Informática – Cti / UniVap Página 'vamos nos preparar para possíveis erros gerados quando executarmos os próximos 'comandos usando o comando try... catch Try Vb.net 2008 – Professor Alberson Wander Sá dos Santos 'executanto o comando sql para contar quantos registros possuem o código informado 'na caixa de texto txtcodcli comando.ExecuteNonQuery() 'se a quantidade de registro filtrados for maior ou igual a 1, significa que já existem 'registros gravados com o código digitado na caixa de texto txtcodcli If comando.ExecuteScalar >= 1 Then 'criando uma nova instrução sql para filtrar os dados do registro existente comando.CommandText = "select * from clientes where codcli = " & txtcodcli.Text 'A linha abaixo cria a tabela temporária chamada registro. 'Ela será criada quando o método ExecuteReader (Executar leitura)do objeto comando for executado Dim registro As SqlDataReader = comando.ExecuteReader() 'vamos nos preparar para possíveis erros gerados quando executarmos os próximos 'comandos usando o comando try... catch Try 'vai para o registro lido, visto que na tabela só existe um registro 'com o código informado registro.Read() 'movendo o registro da comando temporária para a tela txtnomecli.Text = registro.Item("nomecli") txtsalariocli.Text = registro.Item("salariocli") If registro.Item("sexocli") = "M" Then cbosexocli.Text = "Masculino" Else If registro.Item("sexocli") = "F" Then cbosexocli.Text = "Feminino" End If End If msknascimentocli.Text = registro.Item("nascimento") 'alterando o estado dos botões e campos da tela cmdcadastrar.Enabled = False cmdalterar.Enabled = False cmdexcluir.Enabled = False cmdconsultar.Enabled = False pnlchave.Enabled = False pnlcampos.Enabled = False cmdok.Visible = True Catch ex As Exception MsgBox("Erro: " & Err.Number & "-" & Err.Description, MsgBoxStyle.Information, "Aviso:") End Try 'fechando a comando temporária que armazenava o registro do cliente registro.Close() Else MsgBox("Cliente não cadastrado. Verifique o código do cliente informado.", MsgBoxStyle.Information, "Aviso") txtcodcli.Focus() End If conexao.Close() MsgBox("erro: " & Err.Number & "-" & Err.Description) End Try End Sub Curso de Informática – Cti / UniVap Página Catch ex As Exception Vb.net 2008 – Professor Alberson Wander Sá dos Santos Agora, vamos programar, respectivamente, os botões CONFIRMAR, CANCELAR e OK: Private Sub cmdconfirmar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdconfirmar.Click If txtnomecli.Text.Trim = "" Then MsgBox("Informe o nome do cliente.", MsgBoxStyle.Information, "Aviso:") txtnomecli.Focus() Exit Sub End If If Not IsNumeric(txtsalariocli.Text) Then MsgBox("Informe corretamente o salário do cliente.", MsgBoxStyle.Exclamation, "Aviso:") txtsalariocli.Focus() Exit Sub End If If cbosexocli.Text.Trim = "" Then MsgBox("Selecione o sexo do cliente.", MsgBoxStyle.Exclamation, "Aviso") cbosexocli.Focus() Exit Sub End If If Not IsDate(msknascimentocli.Text) Then MsgBox("Informe corretamente a data de nascimento.", MsgBoxStyle.Information, "Aviso:") msknascimentocli.Focus() Exit Sub End If 'criando conexão com o banco, diante do caminho indicado na variável caminhoconexao Dim conexao As New SqlConnection(caminhoconexao) Dim comando As SqlCommand = conexao.CreateCommand Dim sexo As String sexo = cbosexocli.Text.ToUpper.First Select Case botao Case 1 'gravar registro comando.CommandText = ("insert into clientes(codcli, nomecli, salariocli, sexocli, nascimento) values(" & txtcodcli.Text & ",'" & txtnomecli.Text & "'," & txtsalariocli.Text & ",'" & sexo & "',CONVERT(datetime,'" & msknascimentocli.Text & "',103))") Case 2 ' alterar registro comando.CommandText = ("update clientes set nomecli = '" & txtnomecli.Text & "', salariocli= " & txtsalariocli.Text & ", sexocli= '" & sexo & "', nascimento= CONVERT(datetime,'" & msknascimentocli.Text & "',103) where codcli = " & txtcodcli.Text) Case 3 'excluir registro comando.CommandText = ("delete from clientes where codcli = " & txtcodcli.Text) End Select Try conexao.Open() comando.ExecuteNonQuery() conexao.Close() Catch ex As Exception MsgBox("Erro: " & Err.Number & "-" & Err.Description, MsgBoxStyle.Critical, "Aviso:") Página End Try cmdcancelar_Click(sender, e) End Sub Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Private Sub cmdcancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcancelar.Click pnlchave.Enabled = True pnlcampos.Enabled = False txtnomecli.Text = "" cbosexocli.Text = "" txtsalariocli.Text = "" msknascimentocli.Text = "" cmdcadastrar.Enabled cmdalterar.Enabled = cmdexcluir.Enabled = cmdconsultar.Enabled = True True True = True cmdconfirmar.Visible = False cmdcancelar.Visible = False txtcodcli.Focus() End Sub Private Sub cmdok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdok.Click cmdcancelar_Click(sender, e) cmdok.Visible = False End Sub 34.4 – Carregando dados de tabela em Caixas de Listagens Em alguns momentos precisaremos carregar alguns dados de um registro em uma caixa de combo, ou caixa de listagem, afim de exibí-los para o usuário, ou até mesmo como formas de pesquisas avançadas. Para exemplificar, vamos inserir uma caixa de listagem e um label a mais, no formulário de clientes, criado anteriormente. Para a caixa de listagem e o label inseridos, devemos alterar as seguintes propriedades: OBJETO PROPRIEDADE NAME PROPRIEDADE LIST PROPRIEDADE SORTED PROPRIEDADE TEXT Lblclientescadastrados “Clientes Já Cadastrados” Lstclientes “” TRUE A medida que novos clientes forem cadastrados, ou excluídos, ela deverá ser atualizada. Curso de Informática – Cti / UniVap Página Esta caixa de listagem exibirá os nomes de todos os clientes que estão cadastrados no sistema. Vb.net 2008 – Professor Alberson Wander Sá dos Santos Veja a nova aparência do seu formulário de cadastro de clientes, depois de desenhada a caixa de listagem: Figura 157 O PROCEDIMENTO ABAIXO, mostrará os nomes de clientes cadastrados na tabela “clientes” do banco de dados “LOJA.MDF”. Private Sub atualizalistaclientes() 'criando objeto conexao para estabelecer a conexão com o banco de dados, diante do caminho estabelecido em caminhoconexao Dim conexao As New SqlConnection(caminhoconexao) 'criando o objeto comando para executar a busca do registro no banco de dados que está conectado Dim comando As New SqlCommand("select count(*) from clientes ", conexao) 'Com a linha abaixo estamos informando ao objeto comando que tipo de 'instrução será utilizada para acessar o registro comando.CommandType = CommandType.Text lstclientes.Items.Clear() Try 'abrindo o banco de dados conexao.Open() Curso de Informática – Cti / UniVap Página 'executanto o comando sql para contar quantos registros possuem o código informado 'na caixa de texto txtcodcli comando.ExecuteNonQuery() Vb.net 2008 – Professor Alberson Wander Sá dos Santos 'se a quantidade de registro filtrados for maior ou igual a 1, significa que já existem 'registros gravados com o código digitado na caixa de texto txtcodcli If comando.ExecuteScalar >= 1 Then 'criando uma nova instrução sql para filtrar os dados do registro existente comando.CommandText = "select * from clientes " 'A linha abaixo cria a tabela temporária chamada registro. 'Ela será criada quando o método ExecuteReader (Executar leitura)do objeto comando for executado Dim registro As SqlDataReader = comando.ExecuteReader() Try 'vai para o registro lido, visto que na tabela só existe um registro 'com o código informado While registro.Read() 'movendo o registro da comando temporária para a tela lstclientes.Items.Add(registro.Item("nomecli")) End While Catch ex As Exception MsgBox("erro:" & ex.ToString) End Try End If Catch ex As Exception MsgBox("erro:" & ex.ToString) End Try conexao.Close() End Sub PARA O PROCEDIMENTO ACIMA FUNCIONAR LEMBRE-SE: • Copie o procedimento acima para dentro da classe Form1 do projeto criado. • DESENHE NO FORMULÁRIO DO PROJETO “LOJA” UMA CAIXA DE LISTAGEM e a nomeie como “lstclientes”. • Em seguida, basta escrevermos o nome do procedimento “atualizalistaclientes”, no ponto desejado do programa. Como proposta, chame-o no final da programação do botão “CMDCONFIRMAR”, e também, no evento FORM1_LOAD. Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos 34.5 – Objetos de acesso a bancos de dados ADO.NET Vamos falar um pouco sobre os objetos de acesso a banco de dados, usados no projeto programado anteriormente (CLIENTES). Todos os exemplos de uso dos objetos foram dados no projeto que cadastra CLIENTES, abordado nesta apostila. 34.5.1 – Objetos Connection Estes objetos são usados para estabelecer a conexão com um banco de dados. O único truque é que temos que usar corretamente uma string de conexão. Os métodos OPEN() E CLOSE() são usados por este objeto para abrir e fechar a conexão, respectivamente. 34.5.2 – Objetos Command Estes objetos são usados para declarações de instruções SQL. Usaremos as seguintes sintaxes SQL para manipulação de registros em tabelas: SINTAXE: INSERT – CADASTRO DE REGISTROS Insert into <tabela>(campo1, campo2,...,campon) values (dado1, dado2,...,dadon) SINTAXE: UPDADE – ALTERAÇÃO DE REGISTROS Update <tabela> set <campo1>=<novovalor>,<campo2>=<novovalor>,...,<campo3>=<novovalor> where <condição(ões)> SINTAXE: DELETE – EXCLUSÃO DE REGISTROS Delete from <tabela> where <condição(ões)> SINTAXE: SELECT – CONSULTA DE REGISTROS Select <campo1>, <campo2>, ..,<campon> from <tabela> where <condição(ões)> Os métodos usados para executar os comandos SQL são os seguintes : ExecuteReader - executa declarações SQL que retornam linhas de dados, tais como SELECT • ExecuteNonQuery - executa declarações SQL que não retornam dados , tais como: INSERT, UPDATE , DELETE e SET • ExecuteScalar - retorna um valor único como resultado de uma função agregada : SUM , AVG, COUNT , MAX E MIN. Curso de Informática – Cti / UniVap Página • Vb.net 2008 – Professor Alberson Wander Sá dos Santos 34.5.3 – Objetos DataReader O objeto DataReader é uma das maneiras mais fáceis para ler os dados retornados pelos objetos Command . Eles permitem acessar e percorrer os registros no modo de somente leitura e somente para frente - forward-only . Não oferecem acesso desconectado e não permitem alterar ou atualizar a fonte de dados original sendo usado para obter rapidamente dados de apenas leitura. Apresenta poucos recursos mas seu desempenho é muito melhor do que o oferecido pelos DataSet. As propriedades e métodos mais usadas dos objetos DataReader são : 1. FieldCount - informa o número de colunas da linha de dados atual 2. IsClosed - Indica se o objeto DataReader esta fechado. 3. RecordsAffected - especifica o número de linhas alteradas , excluídas ou incluídas na execução de uma declaração SQL 4. Item (n) - obtêm o valor da n-ésima coluna no seu formato nativo. 5. Close - Método que fecha o objeto 6. GetName - Método que retorna o nome da n-ésima coluna. 7. Read - método que permite ao DataReader avançar para o próximo registro 8. IsDbNull - método que informa se a n-ésima coluna possui um valor nulo. Este objeto deve ser utilizado no seu programa quando deseja executar leitura de registros das tabelas do banco de dados. Vale ressaltar que existem dois tipos de DataReader: • SqlDataReader (otimizado para banco de dados do SQL Server) • OleDbDataReader (para provedores OLE DB – Outros bancos de dados) Para criar o objeto DataReader é necessário usar o método ExecuteReader do nosso objeto command, explicado anteriormente. Após a execução da leitura dos registros desejados, será necessário nos movimentarmos entre eles, afim de exibí-los na tela ou realizar algum processamento desejado. Para acessarmos os registros filtrados devemos usar o método READ(), do objeto reader. Veja exemplos abaixo: Dim reader as sqldatareader = cmd.ExecuteReader() Do while reader.read() Loop Reader.close Conexao.close Curso de Informática – Cti / UniVap Página ‘trabalhamos com o registro corrente Vb.net 2008 – Professor Alberson Wander Sá dos Santos OBSERVAÇÃO IMPORTANTE SOBRE O MÉTODO READ( ): No vb.net, não usamos os métodos movenext (para posicionar num próximo registro) e nem os de testes de final e início de arquivos. O método READ() já executa estas duas tarefas ao mesmo tempo. 35 – Caixas de Diálogos Estes objetos são conhecidos no ambiente do windows por permitirem ao usuário definir locais para gravações/abertura de arquivos, em meios de armazenamento de informações (HD/pen drives / cd/ etc.), definição de cores, definição de fontes e definições de impressão de documentos.. Veja abaixo um exemplo de caixa de diálogo “Salvar Como...”, usada no WORD: Figura 158 Existem no vb.net, vários tipois de caixas de diálogos. Estudaremos agora como utilizar as seguintes caixa de diálogos, disponíveis na guia DIALOGS do vb.net 2008: Figura 159 principio de utilização é o mesmo que as citadas acima. Curso de Informática – Cti / UniVap Página Vale ressaltar que exite ainda a caixa de diálogo de IMPRESSÃO. Não a estudaremos, pois seu Vb.net 2008 – Professor Alberson Wander Sá dos Santos CURIOSIDADE: Quando for necessário usar uma caixa de diálogo no seu projeto, perceberá que a mesma não será inserida na área do formulário, pois seu principio de funcionamento é igual ao do objeto TIMER, ou seja, devemos programar seu funcionamento para o usuário. Veja abaixo como aparecerá inserida no formulário: Figura 160 35.1 – Caixa de Diálogo ABRIR (OpenFileDialog) Curso de Informática – Cti / UniVap Página Figura 161 Vb.net 2008 – Professor Alberson Wander Sá dos Santos Esta caixa de diálogo permitirá ao usuário localizar um arquivo para sua devida abertura. Vale ressaltar que deveremos escrever a programação para o arquivo selecionado ser aberto. A caixa de diálogo servirá somente para tornar o processo mais agradável e no padrão conhecido por qualquer usuário do windows. Vamos conhecer as principais propriedades da caixa de diálogo “ABRIR”(OpenFileDialog) : PROPRIEDADE PARA QUE SERVE Name Dar nome ao objeto. Este nome será usado na programação. AddExtension Controla se as extensões são ou não automaticamente adicionadas aos nomes de arquivos. CheckFileExists Verifica se o arquivo especificado esiste, antes de retornar do diálogo. CheckPathExists Verifica se o caminho especificado existe, antes de retornar do diálogo. DefautExt A extensão padrão do nome dos arquivos que deverão aparecer na caixa de diálogo. Ao digitar o nome do arquivo, esta extensão será adicionada automaticamente ao seu final, caso não seja especificada. FileName Caminho e nome do arquivo selecionado pelo usuário, quando o usuário clicar no botão “Abrir” (open) da caixa de diálogo FileNames Armazena o nome de todos os arquivos selecionados na caixa de diálogo. OBS: só poderá ser utilizada quando a propriedade MULTISELECT estiver com valor “true”. Filter Determina os tipos dos arquivos que poderão ser escolhidos pelo usuário. FilterIndex Indica o índice do tipo de arquivo selecionado pelo usuário. LEMBRE-SE QUE O PRIMEIRO TIPO DE ARQUIVO POSSUI ÍNDICE 1. InitialDirectory Determinar a pasta que deverá ser mostrada INICIALMENTE para o usuário quando a janela de diálogo aparecer. MultiSelect Permite (true) ou não (False) que o usuário possa selecionar vários arquivos ao mesmo tempo. Title Definir a string da barra de título da janela de diálogo 35.2 – Caixa de Diálogo SALVAR (SaveFileDialog) Página Figura 162 Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Esta caixa de diálogo permite ao usuário definir caminho e nome dos arquivos que deseja gravar. Esta caixa é comum no ambiente do windows. Como exemplo, podemos citar a janela que o próprio Word abre, quando você clica no ícone do diskete, para salvar o arquivo que está aberto naquele momento. Basicamente todas as propriedades das caixas de diálogos que serão conhecidas são as mesmas. Vamos conhecer as principais propriedades deste objeto: PROPRIEDADE PARA QUE SERVE Name Dar nome ao objeto. Este nome será usado na programação. AddExtension Controla se as extensões são ou não automaticamente adicionadas aos nomes de arquivos. CheckFileExists Verifica se o arquivo especificado esiste, antes de retornar do diálogo. CheckPathExists Verifica se o caminho especificado existe, antes de retornar do diálogo. DefautExt A extensão padrão do nome dos arquivos que deverão aparecer na caixa de diálogo. Ao digitar o nome do arquivo, esta extensão será adicionada automaticamente ao seu final, caso não seja especificada. FileName Caminho e nome do arquivo selecionado pelo usuário, quando o usuário clicar no botão “Abrir” (open) da caixa de diálogo Filter Determina os tipos dos arquivos que poderão ser escolhidos pelo usuário. FilterIndex Indica o índice do tipo de arquivo selecionado pelo usuário. LEMBRE-SE QUE O PRIMEIRO TIPO DE ARQUIVO POSSUI ÍNDICE 1. InitialDirectory Determinar a pasta que deverá ser mostrada INICIALMENTE para o usuário quando a janela de diálogo aparecer. Title Definir a string da barra de título da janela de diálogo 35.3 – Caixa de Diálogo CORES (ColorDialog) Figura 163 Usa-se esta caixa de diálogo num projeto, para permitir ao usuário escolher uma cor. Vale dizer que dependendo da cor selecionada. Curso de Informática – Cti / UniVap Página quando o usuário clicar no botão “OK” , será retornado o nome da cor ou o código hexadecimal da mesma, Vb.net 2008 – Professor Alberson Wander Sá dos Santos Entretanto, poderemos usar a propriedade COLOR, pois ela retornará as características da cor selecionada, para utilizarmos no programa do projeto que está sendo desenvolvido. Suas principais propriedades são: PROPRIEDADE PARA QUE SERVE Name Dar nome ao objeto. Este nome será usado na programação. AllowFullOpen Ativa (True) ou não (False) o botão “Definir cores personalizadas>>” da caixa de diálogo AnyColor Controlar se qualquer cor pode ser selecionada pelo usuário Color Retornar as caracteristicas da cor selecionada pelo usuário, quando o botão “OK” for pressionado Color.Name Retornar o nome da cor selecionada. Para algumas cores, retorna o código HEXADECIMAL da mesma. 35.4 – Caixa de Diálogo FONTE (FontDialog) Figura 164 A janela de fonte, como o próprio nome já diz, permite ao usuário configurar as fontes que serão utilizadas no seu projeto, definindo propriedades para outros objetos. Esta janela é normalmente utilizada quando desejamos definir as fontes de uma caixa de texto, por exemplo. Vejamos as propriedades mais utilizadas desta janela: Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos PROPRIEDADE PARA QUE SERVE Name Dar nome ao objeto. Este nome será usado na programação. AllowSimulations Tornar disponível os vários estilos de fontes, além da opção “Normal”. Color Definir a cor da fonte do texto Font Retornar as caracteristicas da fonte selecionada pelo usuário MaxSize Definirmos o valor máximo para as fontes selecionáveis (0 – desativa) MinSize Definirmos o valor mínimo para as fontes selecionáveis (0 - desativa) ShowApply Para permitir (True) ou não (false) que o botão “Aplicar” fique visível na caixa de diálogo ShowColor Para permitir (true) ou não (False) a exibição das opções de cores da fonte na janela. ShowEffects Para permitir (True) ou não (False) a exibição das opções Sublinhado / Sobrescrito / Cor de Fonte, na janela de diálogo 35.5 – Programa Caixas de Diálogo Vamos desenvolver um programa para ilustrar o uso das caixas de diálogo ensinadas até o momento. Para isso, vamos construir o seguinte formulário em um novo projeto: Figura 165 Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Em seguida vamos alterar as seguintes propriedades para os objetos desenhados no formulário: OBJETO PROPRIEDADE NAME PROPRIEDADE TEXT Lblfrase “Digite uma frase qualquer” Txtfrase “” Cmdcor “Cor” Cmdfonte “Fonte” Cmdabrir “Abrir” Cmdsalvar “Salvar” NESTE EXEMPLO NÃO ------- VOU NOMEÁ-LOS. Em seguida, vamos escrever o seguinte código dentro do botão “cmdcor”: Figura 166 Escreveremos também o seguinte código dentro do botão fonte: Página Figura 167 Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos No botão “cmdabrir” escreveremos a seguinte programação: Figura 168 Por fim, no botão “cmdsalvar” deverá ser escrito a seguinte programação: Figura 169 - OBSERVE NA PROGRAMAÇÃO ACIMA, QUE FOI UTILIZADO O MÉTODO ShowDialog(). Este método é utilizado para exibir a caixa de diálogo desejada. - Cada linha de comando escrita, possui uma linha de comentário, explicando o que está acontencendo. Curso de Informática – Cti / UniVap Página OBSERVAÇÃO IMPORTANTE: Vb.net 2008 – Professor Alberson Wander Sá dos Santos 36 – Objeto WebBrowser Com este objeto poderemos criar nosso próprio navegador Web. Este objeto está disponível na guia “Common Controls” e recebe o nome de WebBrowser. Ele tem a seguinte aparência: Figura 170 Quando o controle WebBrowser for arrastado para o formulário, ele ocupará toda a sua área. Para poder utilizá-lo melhor você deverá localizar a guia Smart Tag e clicar na opção Undock Parent Container, conforme figura abaixo, para poder arrastar os demais controles para o formulário. Figura 171 Os principais eventos deste controle são: EVENTO QUANDO É EXECUTADO Navigating Antes da navegação iniciar Navigated Após a navegação ProgressChanged Durante um download. Podemos programá-lo para saber quantos bytes foram baixados e quantos ainda são esperados Quando a página foi completamente carregada. StatusTextChanged Executado sempre que altera-se o texto da barra de status. Curso de Informática – Cti / UniVap Página DocumentCompleted Vb.net 2008 – Professor Alberson Wander Sá dos Santos Já os métodos mais utilizados para este objeto são os seguintes: MÉTODOS PARA QUE SERVEM Navigate() Usado para carregar uma página indicada no objeto WebBrowser GoBack() Usado para voltar para página visitada anteriormente. GoForward() Usado para avançara para página visitada posteriormente. GoHome() Usado para voltar para a página principal de um site que se está navegando. GoSearch() Mostrar no WebBrowser o site padrão de busca, definido como padrão no windows. Algumas propriedades importantes do objeto WebBrowser: PROPRIEDADE PARA QUE SERVE Name Dar nome ao objeto. Este nome será usado na programação. StatusText Exibe/Armazena o conteúdo da barra de status, no momento que for usado. Url Usada para armazenar o endereço da página que está carredada no objeto. Para um melhor entendimento das funcionalidades do objeto WebBrowser, vamos desenhar o seguinte formulário: Figura 172 Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Agora vamos alterar as seguintes propriedades dos objetos desenhados no formulário: OBJETO PROPRIEDADE PROPRIEDADE PROPRIEDADE NAME TEXT BORDERSTYLE Webbrowser1 “” --- Lblstatus “” FIXED SINGLE Lblurl “Digite o endereço --- (manteremos o nome padrão. Se desejar altere.) da página desejada” Txturl “” --- Cmdnavegar “navegar” --- Cmdposterior “Avançar” --- Cmdvoltar “Voltar” --- Cmdhome “Home deste site” --- cmdpadrao “Página padrão de --- busca” cmdatual “Página Atual” --- Agora sim, podemos programar os objetos desenhados no formulário. Vamos escrever o seguinte código no botão “navegar”: Figura 173 No botão “Avançar” escreva o seguinte programa: Curso de Informática – Cti / UniVap Página Figura 174 Vb.net 2008 – Professor Alberson Wander Sá dos Santos No botão “Voltar”, vamos escrever as seguintes linhas de programa: Figura 175 No botão “Home deste site”, escreva o programa abaixo: Figura 176 No botão “Página padrão de busca”, escreva: Figura 177 No botão “Página Atual”, escreva: Figura 178 Para finalizar, vamos escrever um código para atualizar a barra de status, sempre que uma página estiver sendo carregada. Para tal, escreva o seguinte trecho de programa no evento “StatusTextChanged” do objeto WebBrowser: Curso de Informática – Cti / UniVap Página Figura 179 Vb.net 2008 – Professor Alberson Wander Sá dos Santos 37 – Manipulação de arquivo texto no vb.net Quando programamos em uma linguagem qualquer, faz-se necessário conhecer a forma de manipulação de arquivo do tipo texto. Um arquivo do tipo texto é um tipo de arquivo não formatado. Como exemplos temos os arquivos gravados no Bloco de Notas do Windows, ao contrário dos arquivos gravados no word, que são formatados. No word também podemos criar arquivos do tipo texto, porém devemos ter o cuidado, de no momento da gravação, definirmos o tipo do arquivo como “Texto”. Caso contrário, não poderemos manipulá-lo utilizando os comandos que aprenderemos neste capítulo. Este tipo de manuseio de dado (em arquivo texto) é muito utilizado em programação de computadores. Existem programas, por exemplo, que geram arquivos html. Apesar de conterem códigos HTML são do tipo texto. Antes de criarmos um programa para manipular um arquivo texto qualquer, vamos conhecer alguns comandos que iremos precisar para este fim. 37.1 – A classe System.IO Vamos programar o formulário acima. Porém, para manuseio de arquivos textos devemos importar, antes de tudo, a classe System.IO. Veja o exemplo de linha de programa para importar a classe citada: Figura 181 37.2 – Criando o arquivo texto Para criarmos o arquivo texto devemos usar a seguinte sintaxe: Onde: variavel – representa um objeto que representará o arquivo a ser aberto; Curso de Informática – Cti / UniVap Página Dim variavel As New StreamWriter(“caminho_e_nomedoarquivo”, [True]) Vb.net 2008 – Professor Alberson Wander Sá dos Santos StreamWriter – cria o objeto StreamWriter, que referenciará o arquivo que será aberto para criação/escrita. caminho_e_nomedoarquivo – indicaremos o caminho do arquivo, bem como seu nome (como string); [True] – este parâmetro é opcional, porém quando escrito (sem os colchetes), indica que qualquer dado escrito no arquivo texto, será inserido após a última linha já gravada. 37.3 - Escrevendo num arquivo texto È bom lembrar que para escrever um conteúdo num arquivo texto, o mesmo já deve estar aberto. Use a sintaxe abaixo para escrever no arquivo texto: variavel.WriteLine(“Conteudo”) Onde: Varivel – representa o objeto que representará o arquivo que já foi aberto anteriormente; “Conteúdo” – representa o que você quer escrever no arquivo. Podemos usar variáveis neste local; 37.4 – Abrindo um arquivo para leitura Para abrirmos um arquivo texto para leitura do seu conteúdo devemos usar a seguinte sintaxe: Dim variavel As New StreamReader("caminho_e_nome_do_arquivo") Onde: variavel – representa o objeto que representará o arquivo a ser aberto para leitura; StreamReader – cria o objeto StreamReader, que servirá unicamente para ler o arquivo referenciado em caminho_e_nome_do_arquivo. caminho_e_nome_do_arquivo – indicaremos neste local o caminho e nome do arquivo que será aberto para leitura; 37.5 – Lendo um arquivo texto SEQUENCIALMENTE (Método ReadLine) Para lermos um arquivo sequencialmente usaremos o método ReadLine. Este método lê uma linha do Para utilizarmos este método, use a seguinte sintaxe: linhalida = variavel.ReadLine Curso de Informática – Cti / UniVap Página arquivo aberto. Portanto, será necessário utilizá-lo dentro de uma estrutura de repetição. Vb.net 2008 – Professor Alberson Wander Sá dos Santos Onde: Linhalida – refere-se a variável do tipo string que armazenará o conteúdo da linha lida. Variavel – refere-se ao arquivo aberto como StreamReader 37.6 – Lendo TODO arquivo texto (Método ReadToEnd) Para lermos um arquivo inteiro, basta utilizarmos o método ReadToEnd. Este irá ler o arquivo desde o primeiro caractere, contido na primeira linha, até o último caractere gravado na última linha do texto aberto. Portanto não devemos usar este método dentro de estruturas de repetições. Para utilizar esta forma de leitura de arquivo texto, utilize a seguinte sintaxe: Arquivotodo = variavel.ReadToEnd Onde: Arquivotodo – indica o nome de uma variável do tipo string, usada para armazenar todo o texto lido. variavel – refere-se ao arquivo aberto como StreamReader 37.7 – Programa GeraArquivoTexto Vamos criar um programa para manipular um arquivo texto. Para isso, vamos criar o seguinte formulário: Página Figura 180 Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Vamos alterar as seguintes propriedades dos objetos do formulário: OBJETO PROPRIEDADE NAME PROPRIEDADE TEXT PROPRIEDADE MULTILINE Txttexto “” True Cmdgerar “gerar arquivo texto” --- Cmdlerarquivo “Ler arquivo texto” --- Cmdconcatenação “concatenação na --- seleção” Cmdselecionando “selecionando todo o --- texto” Cmdselecionar10 “Selecionando 10 --- primeiros caracteres” Cmdqtdeselecionada “Qtde de caracteres --- selecionados” Vamos abrir o botão “cmdgerar” e escrever a seguinte programação: Figura 181 Curso de Informática – Cti / UniVap Página Vamos escrever também a programação para o botão “cmdlerarquivo”, veja a seguir: Vb.net 2008 – Professor Alberson Wander Sá dos Santos Figura 182 REPARE NO CÓDIGO ACIMA Poderemos usar a rotina de repetição, para ler linha a linha do arquivo texto OU a linha destacada em azul, que lê todo o arquivo de uma só vez. Dando continuidade, vamos escrever a programação para o botão “cmdconcatenação”: Figura 183 No programa acima repare na PROPRIEDADE SelectText DA CAIXA DE TEXTO Esta propriedade armazena o texto selecionado pelo usuário na caixa de texto. Escreveremos agora a programação para o botão “cmdselecionado” Figura 184 seleciona todo o texto digitado na caixa de texto. Esta propriedade não terá efeito se o método FOCUS não for escrito. Curso de Informática – Cti / UniVap Página Nas linhas programadas acima usamos a propriedade SELECTALL da CAIXA DE TEXTO. Esta propriedade Vb.net 2008 – Professor Alberson Wander Sá dos Santos A programação a seguir deve ser escrita no botão “cmdselecionar10”: Figura 185 Nas linhas programadas acima usamos a propriedade SELECT() da CAIXA DE TEXTO. Esta propriedade seleciona parte do texto digitado, iniciando da posição 0 (primeiro caractere) até o caractere 9, ou seja, os 10 primeiros caracteres estarão selecionados. Esta propriedade não terá efeito se o método FOCUS não for escrito. Por fim, programaremos agora o botão “cmdqtdeselecionada”: Figura 186 Na programação acima usamos a propriedade SELECTIONLENGTH da CAIXA DE TEXTO. Esta propriedade RETORNA a quantidade de caracteres selecionados na caixa de texto. Por esta razão criamos uma variável numérica para receber a quantidade de retornada pela propriedade SelectionLength. 38 – Classe FileSystem (manipulando arquivos) e executanto arquivos .exe Podemos também manipular arquivos, pastas ou diretórios, e até mesmo o sistema operacional usando a classe FileSystem. Com ela podemos por exemplo usar os comandos relacionados abaixo: 'cria a pasta teste2 na raiz da unidade c: FileSystem.MkDir("c:\teste\") Curso de Informática – Cti / UniVap Página 'verificando se a pasta teste já está criada na raiz da unidade c: If FileSystem.Dir("c:\teste", FileAttribute.Directory) <> "" Then MsgBox("Pasta já existe") End If Vb.net 2008 – Professor Alberson Wander Sá dos Santos 'verificando se o arquivo teste.txt já existe na pasta teste na raiz da unidade c: If FileSystem.Dir("c:\teste\teste.txt", FileAttribute.Archive) <> "" Then MsgBox("Arquivo já existe") End If 'remove a pasta teste2 (se ela estiver vazia) FileSystem.RmDir("c:\teste2\") 'apaga todos os arquivos cujo nome seja debug, localizados na 'pasta teste2 FileSystem.Kill("c:\teste2\debug.*") 'retornará qual a pasta aberta naquele momento MsgBox(FileSystem.CurDir) 'renomear um arquivo existente FileSystem.Rename("c:\teste\teste1.txt", "c:\teste\texte2.txt") 'faz com que a unidade de armazenamento "e:" seja a unidade corrente (que será usada) 'FileSystem.ChDrive("e:\") MsgBox(FileSystem.CurDir) 'copiando o arquivo teste.txt, localizado na pasta c:\teste, para a raiz da unidade d:\ FileSystem.FileCopy("c:\teste\teste.txt", "d:\teste.txt") Outro código importante, além dos mostrados anteriomente, refere-se a execução de arquivos executável (.EXE). A linha de comando abaixo fará o bloco de notas ser executado, e ao mesmo tempo será carregado o arquivo “teste.txt” que está gravado na raiz da unidade c:\ System.Diagnostics.Process.Start("C:\WINDOWS\notepad.exe", “C:\teste.txt") Poderíamos somente executar o bloco de notas, para isso escreveríamos a seguinte linha de comando: System.Diagnostics.Process.Start("C:\WINDOWS\notepad.exe") 39 – Criação de Barras de Menu Para criação de uma barra de menu no vb.net, usamos o objeto MenuStrip. Este objeto está localizado na guia “MENU & TOOLBARS”, conforme mostrado na figua abaixo: Figura 187 Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Quando inserirmos este objeto num formulário, você terá a seguinte aparência: Figura 188 Repare que o objeto não foi desenhado diretamente no formulário. Somente uma barra de menu vazia, com o texto “TYPE HERE” está disponível na área do formulário. Siga os passos abaixo para começar a criar um menu simples para seu programa: 1º passo: Clique sobre “Type Here” e selecione a opção “MenuItem” no menu que for aberto, conforme ilustra figura abaixo: Figura 189 Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos 2º passo: Sua tela deverá ficar parecida com a tela abaixo: Figura 190 3º passo: Dê um clique com o mouse sobre “ToolStripMenuItem1”, para escrever o rótulo do menu que deverá aparecer para o usuário. Neste caso, por exemplo, digitarei “&Arquivo”. Veja o que acontece: Figura 191 Repare acima que foi criado um MINEMÔNICO abaixo da letra “A” do rótulo “Arquivo”. Isso facilitará o acesso ao menu pelo usuário, utilizando as teclas de acesso “ALT+A” 4º passo: Vamos criar agora uma opção “Novo” para o menu “Arquivo”. Para isso, vamos clicar no centro da área “Type Here”, localizada abaixo do menu “Arquivo”. Desta forma o curso irá piscar neste local, indicando que um submenu poderá ser criado. Veja o que deverá acontecer: Página Figura 192 Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos 5º passo: Repare que o cursor estará piscando na área onde você clicou e novas opções de sub menu foram abertas automaticamente. Agora digite “&Novo” e pressione a tecla “Enter”. Você deverá obter o seguinte resultado: Figura 193 6º passo: Vamos criar uma combinação de teclas de atalhos para a opção “Novo”. Para isso, dê um simples clique sobre a opção “Novo”. Em seguida, veja que a caixa de propriedades estará exibindo as características da opção do menu “Novo”. Abra a propriedade “ShortcutKeys”, marque a opção “CTRL” e selecione na combo Key um caracter para servir de atalho. Veja na figura abaixo a referida propriedade: Vamos criar o atalho “CTRL+N”. A próxima figura demonstra como ficará o resultado obtido: Curso de Informática – Cti / UniVap Página Figura 194 Vb.net 2008 – Professor Alberson Wander Sá dos Santos Figura 196 Para programar a opção “Novo”, basta dar um duplo clique sobre esta opção. Desta forma será aberta a seguinte área de programação: Figura 197 Os mesmos passos seguidos até aqui, poderão ser repetidos para criar novos menus e suas opções. Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos ANEXO 1 NOVO PROJETO CLIENTES (3º BIMESTRE) Este projeto reduz a programação exposta na apostila, pois não será necessária a programação dos botões: CADASTRAR e CONSULTAR. A nova tela de CLIENTES deverá ter a seguinte aparência: Página Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos Vejamos agora a programação para cada evento da nova tela de CLIENTES: 'importanto a classe SYSTEM.DATA.SQLCLIENT, para manipularmos registros 'do sql server Imports System.Data.SqlClient Public Class Form1 'CRIANDO A VARIÁVEL BOTAO PARA INDICARMOS FUTURAMENTE 'QUAL A OPERAÇÃO ESTAREMOS REALIZANDO NO BANCO DE DADOS Dim BOTAO As Integer 'CRIANDO A VARIÁVEL SEXO, PARA ARMAZENAR M=MASCULINO / F=FEMININO Dim sexo As String FORM_LOAD Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'ESTIPULANDO O CAMINHO DA CONEXÃO caminhoconexao = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\3bim\projeto_Loja\projeto_Loja\LOJA.mdf;Integrated Security=True;User Instance=True" End Sub TXTCODCLI_KEYPRESS Private Sub txtcodcli_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtcodcli.KeyPress If e.KeyChar = Convert.ToChar(13) Then If Not IsNumeric(txtcodcli.Text) Then MsgBox("Digite um código numérico para o cliente.", MsgBoxStyle.Critical, "Aviso:") txtcodcli.Focus() Exit Sub End If Dim conexao As New SqlConnection(caminhoconexao) Dim comando As New SqlCommand("Select count(*) from clientes where codcli = " & txtcodcli.Text, conexao) comando.CommandType = CommandType.Text Try conexao.Open() comando.ExecuteNonQuery() 'SE EXISTIR PELO MENOS 1 REGISTRO NA TABELA COM CÓDIGO INFORMADO PELO USUÁRIO If comando.ExecuteScalar >= 1 Then 'CRIANDO O SQL PARA BUSCAR O REGISTRO EXISTENTE comando.CommandText = "select * from clientes where codcli = " & txtcodcli.Text 'EXECUTANTO O SQL PARA BUSCAR O REGISTRO EXISTENTE E CRIANDO A TABELA 'TEMPORÁRIA (OU OBJETO) CHAMADA REGISTRO Dim registro As SqlDataReader = comando.ExecuteReader() 'EXIBINDO O REGISTRO NA TELA txtnomecli.Text = registro.Item("nomecli") txtsalariocli.Text = registro.Item("salariocli") If registro.Item("sexocli") = "M" Then cbosexocli.Text = "Masculino" Else Curso de Informática – Cti / UniVap Página Try 'LENDO O PRIMEIRO REGISTRO FILTRADO(NESTE CASO O ÚNICO REGISTRO) registro.Read() Vb.net 2008 – Professor Alberson Wander Sá dos Santos If registro.Item("sexocli") = "F" Then cbosexocli.Text = "Feminino" End If End If msknascimentocli.Text = registro.Item("nascimentocli") 'BOTÕES ALTERAR, EXCLUIR e CANCELAR DEVEM APARECER NA TELA PARA O USUÁRIO cmdalterar.Visible = True cmdexcluir.Visible = True cmdcancelar.Visible = True Catch ex As Exception MsgBox("Erro:" & Err.Number & ": " & Err.Description) End Try registro.Close() Else 'CASO O CLIENTE NÃO ESTEJA CADASTRADO 'PROTEGENDO O CÓDIGO DO CLIENTE, TRAVANDO O CAMPO CHAVE pnlchave.Enabled = False 'LIBERAR OS CAMPOS PARA DIGITAÇÃO DOS DADOS DO NOVO CLIENTE pnlcampos.Enabled = True 'BOTÃO CONFIRMA E CANCELA FICAM VISIVEIS cmdconfirmar.Visible = True cmdcancelar.Visible = True 'VAMOS FAZER CADASTRO, PORTANTO A VARIÁVEL BOTAO = 1 BOTAO = 1 'POSICIONANDO O CURSOR NO CAMPO TXTNOMECLI txtnomecli.Focus() End If Catch ex As Exception MsgBox("Erro:" & Err.Number & ": " & Err.Description) End Try conexao.Close() End If End Sub CMDCANCELAR_CLICK Private Sub cmdcancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcancelar.Click 'VOLTANDO A TELA PARA O ESTADO INICIAL, QUANDO A RODAMOS PELA PRIMEIRA VEZ pnlchave.Enabled = True pnlcampos.Enabled = False txtcodcli.Text = "" txtnomecli.Text = "" txtsalariocli.Text = "" cbosexocli.Text = "" msknascimentocli.Text = "" Página cmdalterar.Visible = False cmdexcluir.Visible = False cmdconfirmar.Visible = False cmdcancelar.Visible = False txtcodcli.Focus() End Sub Curso de Informática – Cti / UniVap Vb.net 2008 – Professor Alberson Wander Sá dos Santos CMDALTERAR_CLICK Private Sub cmdalterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdalterar.Click 'PROTEGENDO O CÓDIGO DO CLIENTE CONTRA ALTERAÇÃO pnlcampos.Enabled = True 'LIBERANDO OS CAMPOS DA TELA PARA ALTERAÇÃO DO REGISTRO EXIBIDO pnlchave.Enabled = False 'TORNANDO OS BOTÕES ALTERAR e EXCLUIR INVISÍVEIS cmdalterar.Visible = False cmdexcluir.Visible = False 'TORNANDO VISÍVEL O BOTÃO CONFIRMAR cmdconfirmar.Visible = True 'VAMOS FAZER ALTERAÇÃO, PORTANTO A VARIÁVEL BOTAO = 2 BOTAO = 2 'COLOCANDO O CURSOR NO CAMPO TXTCODCLI txtcodcli.Focus() End Sub CMDEXCLUIR_CLICK Private Sub cmdexcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdexcluir.Click 'PROTEGENDO O CÓDIGO DO CLIENTE CONTRA ALTERAÇÃO pnlcampos.Enabled = False 'PROTEGENDO OS CAMPOS DA TELA PARA NÃO PERMITIR ALTERAÇÃO DOS DADOS pnlchave.Enabled = False 'TORNANDO OS BOTÕES ALTERAR e EXCLUIR INVISÍVEIS cmdalterar.Visible = False cmdexcluir.Visible = False 'TORNANDO VISÍVEL O BOTÃO CONFIRMAR cmdconfirmar.Visible = True 'VAMOS FAZER EXCLUSÃO, PORTANTO A VARIÁVEL BOTAO = 3 BOTAO = 3 End Sub CMDCONFIRMAR_CLICK Private Sub cmdconfirmar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdconfirmar.Click 'FAZENDO OS TEXTES DE CONSISTÊNCIAS DE DADOS PARA O NOVO REGISTRO DE CLIENTES 'VERIFICANDO SE O CAMPO DO NOME DO CLIENTE FOI PREENCHIDO If txtnomecli.Text.Trim = "" Then MsgBox("Informe o nome do cliente.", MsgBoxStyle.Information, "Aviso:") txtnomecli.Focus() Exit Sub End If Curso de Informática – Cti / UniVap Página 'VERIFICANDO SE O SALÁRIO É UM NÚMERO If Not IsNumeric(txtsalariocli.Text) Then MsgBox("Informe corretamente o salário do cliente.", MsgBoxStyle.Exclamation, "Aviso:") txtsalariocli.Focus() Exit Sub End If Vb.net 2008 – Professor Alberson Wander Sá dos Santos 'VERIFICANDO SE O COMBO DO SEXO NÃO ESTÁ VAZIO If cbosexocli.Text.Trim = "" Then MsgBox("Selecione o sexo do cliente.", MsgBoxStyle.Exclamation, "Aviso") cbosexocli.Focus() Exit Sub End If 'VERIFICANDO SE A DATA DE NASCIMENTO É UMA DATA VÁLIDA If Not IsDate(msknascimentocli.Text) Then MsgBox("Informe corretamente a data de nascimento.", MsgBoxStyle.Information, "Aviso:") msknascimentocli.Focus() Exit Sub End If 'criando conexão com o banco, diante do caminho indicado na variável caminhoconexao Dim conexao As New SqlConnection(caminhoconexao) Dim comando As SqlCommand = conexao.CreateCommand Dim sexo As String sexo = cbosexocli.Text.ToUpper.First 'TROCANDO A VÍRGULA (CASO APAREÇA) DO SALÁRIO, POR PONTO txtsalariocli.Text = Replace(txtsalariocli.Text, ",", ".") Select Case BOTAO Case 1 'criando a instrução SQL para cadastrar o registro digitado comando.CommandText = ("insert into clientes(codcli, nomecli, salariocli, sexocli, nascimentocli) values(" & txtcodcli.Text & ",'" & txtnomecli.Text & "'," & txtsalariocli.Text & ",'" & sexo & "',CONVERT(datetime,'" & msknascimentocli.Text & "',103))") Case 2 'criando a instrução SQL para alterar o registro exibido comando.CommandText = ("update clientes set nomecli = '" & txtnomecli.Text & "',salariocli= " & txtsalariocli.Text & ", sexocli= '" & sexo & "', nascimentocli= CONVERT(datetime,'" & msknascimentocli.Text & "',103) where codcli = " & txtcodcli.Text) Case 3 'criando a instrução SQL para excluir o registro exibido comando.CommandText = ("delete from clientes where codcli = " & txtcodcli.Text) End Select Try 'estabelecendo a conexão com o banco de dados conexao.Open() 'executando o comandtext definido(operação: cadastro, alteração ou exclusão) comando.ExecuteNonQuery() 'encerrando a conexão com o banco de dados conexao.Close() Catch ex As Exception MsgBox("Erro: " & Err.Number & "-" & Err.Description, MsgBoxStyle.Critical, "Aviso:") End Try 'executando a programação do botão cancelar, ou seja, 'limpando a tela e voltando-a para o estado inicial cmdcancelar_Click(sender, e) End Sub End Class Página Curso de Informática – Cti / UniVap