Tecnologia Programação de Computadores IV UNISAL Centro Universitário Salesiano de Campinas Prof. Gale Programação de Computadores IV – Prof. Gale INTRODUÇÃO Antes do Visual Basic, todas as linguagens de programação eram parecidas do ponto de vista conceitual. Havia diferenças de sintaxe, é claro, bem como diferenças importantes de paradigmas. Entretanto, a metodologia da programação em C, por exemplo, era a mesma da programação em Pascal, Cobol ou Fortran. O Visual Basic introduziu uma estratégia radicalmente nova de programação. O fato é que, com o passar do tempo, escrever programas passou a ser cada vez mais difícil, especialmente programas que exigem interface gráfica. Entretanto, alguns programadores perceberam que muitas coisas que eram difíceis de ser feitas, como construir janelas, menus ou botões, podiam ser feitas sempre da mesma forma. Estes programadores, que já tinham o hábito de colecionar sub-rotinas de utilização geral, passaram a encapsular algumas destas rotinas em uma espécie de “objeto” pronto para ser usado. A idéia final, que deu origem ao Visual Basic, foi a percepção de que vários destes objetos podiam simplesmente ser desenhados na tela como se desenha um retângulo ou outra figura qualquer. O Visual Basic surgiu no começo da década de 90 e deu início a uma profusão de linguagens visuais, tais como Delphi, Visual C, Visual Fox Pro, etc. Entretanto, devido a estar mais tempo no mercado, o Visual Basic apresenta certas vantagens sobre os concorrentes. De fato, o VB (como chamaremos esta linguagem daqui para frente) é o pacote de programação que apresenta o maior número de controles no mercado, os quais o programador pode adquirir, muitas vezes sem ônus (como é o caso dos controles à disposição na Internet ou daqueles que vêem com alguns livros de programação). É claro que a linguagem por traz do VB é o Basic, mas esta linguagem nada tem a ver com aquele velho Basic interpretado dos primeiros computadores pessoais. Nos últimos anos o Basic se sofisticou e se transformou em uma linguagem estruturada que nada fica a dever ao Pascal, por exemplo. Ainda assim, trata-se de uma linguagem de alto nível e não de uma linguagem “quebradora de bits”, como o C. O Visual Basic, por outro lado, é um pacote de ferramentas de programação concebido para programação em Windows. Os objetos são desenhados na tela de forma visual, com auxílio do mouse, e não por meio de programação. A programação, por outro lado, é orientada a eventos. O coração dos recursos de detecção de eventos do Windows é a sua arquitetura de mensagens. Quando um evento ocorre, tal como uma tecla pressionada ou um clique de mouse, uma mensagem é enviada para a fila de mensagens do Windows. A mensagem estará disponível para todos os aplicativos que estiverem rodando, mas apenas aquele interessado no evento responderá à mensagem. Tudo que o usuário precisa fazer é detectar o evento e mandar que um trecho de código seja executado quando isto acontecer. O VB torna esta tarefa fantasticamente fácil, como veremos. DICAS DE PROGRAMAÇÃO • Planeje antecipadamente seus programas. Pense sobre o que é necessário fazer e quais as ferramentas necessárias. Planejar é essencial para a programação e é comum que programadores iniciantes se esqueçam deste passo; • Pense como o usuário. Lembre-se que o usuário não é um especialista em informática. Logo, você deve ser mais esperto do que ele. Também não é necessário tratá-lo como um idiota. Lembrese da velha máxima da informática: “Um software que qualquer idiota possa usar será usado somente por um idiota !”; • Pense nos controles. É comum que programadores inexperientes tentem desenvolver tudo com as próprias mãos, por falta de hábito ou somente “para provar que é possível”. Trata-se de uma perda de tempo, pois podem existir controles de software prontos que podem fazer o que você precisa; O ambiente de trabalho do Visual Basic é formado por um conjunto de janelas que podem ser abertas Centro Universitário Salesiano de Campinas 2 Programação de Computadores IV – Prof. Gale e fechadas individualmente. A janela principal é aquela que contém a Barra de Menus (Menu Bar) e a Barra de Ferramentas (Tool Bar), conforme mostrado na figura 1 abaixo Figura 1 - Barra de Menus e de Ferramentas Como pode ser visto, esta janela contém os controles usuais de qualquer aplicativo Windows, tais como Abrir Arquivo, Salvar Arquivo, Editar, etc. A figura 2 mostra a Caixa de Ferramentas (Tool Box), que contém todos os controles personalizados (objetos) do Visual Basic. A figura 3 mostra a Janela de Propriedades (Properties Window) que permite o acesso a todas as propriedades do controle selecionado. Fig. 2 Fig. 3 Fig. 4 A figura 4 mostra a Janela do Projeto (Project Window), que permite o acesso a todos os arquivos do projeto em questão. Para abrir cada uma destas janelas você pode usar o menu View, ou, então, digitar F4 para abrir a Janela de Propriedades e Ctrl+R para abrir a Janela do Projeto. A Caixa de Ferramentas não tem tecla de atalho associada. ALGUMA TERMINOLOGIA Um objeto, em Visual Basic, é uma conjunto de códigos de programação (sub-rotinas) e propriedades. Na verdade, cada elemento que você vê em um programa Windows é um objeto individual, dotado de propriedades características.. Exemplo: Objeto Avião: Propriedades: velocidade, altitude, inclinação, etc.; Rotinas: decolar, aterrissar, taxiar, etc. Mudando as propriedades de um objeto, podemos mudar a forma como ele interage com o ambiente. Na programação em VB não é necessário ter um conhecimento muito grande de programação orientada a objetos, como é necessário em outras linguagens. Os objetos estão prontos para serem usados e o Visual Basic cuida de quase tudo. A programação em VB não é um exemplo Centro Universitário Salesiano de Campinas 3 Programação de Computadores IV – Prof. Gale de “Programação Orientada a Objetos” (POO), como é o caso do C++ ou do Object Pascal. O termo “objeto”, em VB, é usado de uma maneira um pouco diferente, mas isto não significa que a abordagem seja deficiente. É apenas diferente da POO clássica. Projeto é o nome dado a um aplicativo desenvolvido em Visual Basic. O arquivo do projeto (.vpb) é apenas uma lista de todos os outros arquivos que fazem parte do aplicativo, tais como: • • • • • formulários (.FRM); módulos de programação (.bas); controles de 16 bits (.VBX); controles de 32 bits (.OCX); bancos de dados (.mdb). Quando se gera o programa executável, o VB cria um arquivo .EXE que tem todas as características do arquivo .VBP, mas que pode ser executado fora do ambiente do VB. a janela TOOLBOX (Caixa de Ferramentas) - é a janela que traz os Controles (as ferramentas no VB) - Pointer – Não é um Controle, mas uma ferramenta que serve para mover e dimensionar Controles; - PictureBox – Exibir figuras ou ícones nos Formulários. Também responde ao Evento click. - Label – Etiqueta ou rótulo, exibe um texto que não pode ser editado pelo usuário. Uso: Títulos. - TextBox – Exibe uma área onde o usuário pode digitar texto. Frame – Moldura para agrupar Controles para que funcionem de forma lógica. - CommandButton – Botão de Comando. Executa ação ao ser clicado. - CheckBox – Pode assumir valores falso ou verdadeiro. Em um mesmo Formulário vários CheckBoxes podem assumir o valor verdadeiro ao mesmo tempo. - OptionButton – Pode também assumir valores falso/verdadeiro, mas em um mesmo Formulário somente um OptionButton pode assumir o valor verdadeiro. - ComboBox – Combina caixa de texto com caixa de listagem. O usuário pode digitar a informação como também pode encolher da lista. - ListBox – Exibe uma lista de itens que o usuário pode selecionar. Centro Universitário Salesiano de Campinas 4 Programação de Computadores IV – Prof. Gale - ScrollBar Horizontal e Vertical – Permite selecionar com o mouse um determinado valor numa faixa de valores. - Timer – Controla intervalos de tempo determinados pelo programador. - DriveListBox – Exibe uma lista de drives onde o usuário pode selecionar um. - DirListBox – Exibe uma lista de diretórios (pastas) e permite que o usuário selecione um. - FileListBox – Idem para arquivos. - Shape – Adiciona diversas formas geométricas ao Formulário. - Line – Adiciona linhas a Formulários. - Image – Exibe figuras ou ícones e funciona como um CommandButton quando clicado. - Data – É o DataControl, que permite conectar-se a um Banco de Dados existente para extrair manipular as informações contidas neste. - OLE – Incorpora objetos de outros aplicativos em um Formulário. - CommonDialog – Exibe um conjunto de caixas de diálogo comuns no Windows, abrir arquivo, imprimir, fontes, salvar, etc. - ToolBar – Contem uma coleção de Botões e é utilizado para criar Barras de Ferramentas que estão associadas com uma aplicação. - StatusBar – Cria uma Barra de Status para um programa com até 16 painéis contidos em uma coleção de painéis. - ProgessBar – Barra que indica o progresso de uma operação. - ImageList – Contém uma coleção de objetos ListImage. Para exibir imagens. Centro Universitário Salesiano de Campinas 5 Programação de Computadores IV – Prof. Gale - DBList – Automaticamente preenche uma lista com campos de um DataControl e opcionalmente passa o campo selecionado para um segundo DataControl. O DBCombo é similar mas permite editar o campo selecionado. - DBGrid – Exibe e manipula uma série de linhas e colunas representando Registros e Campos de um objeto Recordset. CONVENÇÕES DE NOMES PARA CONTROLES É sempre bom estabelecer convenções de nomes para objetos do Visual Basic, sob risco de não se saber, no meio de um projeto mais complicado, qual o tipo de um objeto cujo nome é, por exemplo, “dados”. A tabela 3 a seguir apresenta alguns exemplos para os controles mais comuns. Tabela 3 Controle Form Check Box Combo Box Command Button Data Directory List Box Drive List Box File List Box Frame Grid Horizontal scroll bar Image Label Line List Box Menu OLE Option Button Picture Box Shape Text Box Timer Vertical Scroll Bar Nome em Português formulário Caixa de Verificação Caixa “Combo” Botão de Comando Dados Caixa de Diretório Caixa de Drives Caixa de Arquivos Quadro Grade Barra de Rolagem Horizontal Imagem Rótulo Linha Caixa de Lista Menu OLE Botão de Opções Caixa de Figuras Forma (geométrica) Caixa de Texto Temporizador Barra de Rolagem Vertical Centro Universitário Salesiano de Campinas Prefixo frm chk cbo cmd dat dir drv fil fra grd hsb img lbl lin lst mnu ole opt pic sha txt tmr vsb Exemplo frmAbrir chkLeitura cboPortuguês cmdCancelar datLivros dirFontes drvAlvo filArquivos fraLíngua grdPreços hsbVolume imgÍcone lblMensagem linVertical lstCEP mnuSalvar oleObjeto optFrancês picDesenho shaCírculo txtEntrada tmrAlarme vsbTaxa 6 Programação de Computadores IV – Prof. Gale 1ª AULA VISUAL BASIC – PROF. GALE Palavras-Chaves • • • • • • • Name Caption MinButton MaxButton ControlBox Window State Backcolor name_objeto.propriedade = ???? Centro Universitário Salesiano de Campinas 7 Programação de Computadores IV – Prof. Gale Palavras-Chaves • • • • • • • • • Label (name, caption, font, forecolor) Text (name , text ) Command Button (name, caption, font) Timer (interval) Date , Time Option Button Mousemove End Hide , Show Cores • • • RGB (0..255, 0..255, 0..255) Constantes: vbred, vbgreen, vbblack, ... Qbcolor (0..15) Centro Universitário Salesiano de Campinas 8 Programação de Computadores IV – Prof. Gale 2ª AULA VISUAL BASIC – PROF. GALE Palavras-Chaves • • • • Shape (fillcolor, fillstyle, shape) VScroll (max, min, value) Textos: fontitalic, fontbold, fontunderline, fontsize, forecolor Decisão: if (condição) then else (opcional) endif Centro Universitário Salesiano de Campinas 9 Programação de Computadores IV – Prof. Gale 3ª AULA VISUAL BASIC – PROF. GALE Palavras-Chaves • • • • Variáveis Globais: declaradas quando necessitamos utilizar em vários forms a mesma variável Global variável Form (picture) Image (picture, left, top) Seleção: Select Case testexpression [Case expressionlist-n [statements-n]] . . . [Case Else expressionlist-n [elsestatements-n]] End Select Centro Universitário Salesiano de Campinas 10 Programação de Computadores IV – Prof. Gale 4ª AULA VISUAL BASIC – PROF. GALE Permitem exibir uma mensagem em uma janela e aguarda que o usuário escolha um botão. Uma caixa de mensagem pode ser utilizada de duas maneiras: • Como comando, não sendo possível retornar valor • Como função, retornando assim um valor Sintaxe: `Como função: MSGBOX (Mensagem[,[tipo][,título]]) Como comando: MSGBOX mensagem[,[tipo][,título]] Onde: mensagem : é o próprio escrito Tipo : deve conter uma expressão numérica opcional composta por uma soma de valores que especificam a quantidade e o tipo dos botões, o ícone que será exibido e o estilo da janela. De acordo com a tabela: Tipos de Botões Valor Descrição MB_OK 0 Mostra apenas o OK MB_OKCANCEL 1 “ OK e CANCEL MB_ABORTRETRYIGNORE 2 “ ABORT, RETRY, IGNORE MB_YESNOCANCEL 3 “ SIM, NÃO, CANCEL MB_YESNO 4 “ SIM, NÃO MB_RETRYCANCEL 5 “ RETRY, CANCEL Ícones: MB_ICONSTOP MB_ICONQUESTION MB_ICONEXCLAMATION MB_ICONINFORMATION 16 32 48 64 STOP ? ! i Título: expressão do tipo caracter que será exibida na barra de título da janela. Obs: Para pular linha utilizamos CHR$(13) Exemplo: MsgBox "Preste Atenção!!!", 16, "ERRO" "INFORMAÇÃO" MsgBox "Você deverá pressionar algum botão...", 67, Os valores retornados pela MSGBOX indicam qual o botão que foi pressionado. Tipos de Botões IDOK IDCANCEL IDABORT IDRETRY IDIGNORE IDYES IDNO Centro Universitário Salesiano de Campinas Valor 1 2 3 4 5 6 7 11 Programação de Computadores IV – Prof. Gale Crie cada “msgbox” em um botão diferente: Centro Universitário Salesiano de Campinas 12 Programação de Computadores IV – Prof. Gale 4ª AULA – Continuação... VISUAL BASIC – PROF. GALE Comando Format(expression[, format[, firstdayofweek[, firstweekofyear]]]) Exemplo: Text1.text = format$ (date, “dd/mmm/yyyy”) Palavras - Chaves Objetos: Drive / Dir / File (pattern) Image (loadpicture , strech, filename ) Centro Universitário Salesiano de Campinas 13 Programação de Computadores IV – Prof. Gale Exercícios – Faça Você Centro Universitário Salesiano de Campinas 14 Programação de Computadores IV – Prof. Gale Centro Universitário Salesiano de Campinas 15 Programação de Computadores IV – Prof. Gale Instruções para Desenvolvimento dos Exercícios de Visual Basic Atenção: Este é um único projeto formado por 12 formulários diferentes. Cada formulário deve ser acessado pelo botão próximo ou anterior. É necessário criar um formulário antes de chamá-lo. Como se faz isso?? Vá até o menu do Visual Basic na opção Project / Add Form aparecerá uma tela onde você deverá escolher “Form” e teclar abrir ou mesmo teclar duas vezes sobre o próprio form. Se você fez a “coisa” certa aparecerá no seu canto superior direito “Form2”, e assim por diante. Dicas para realização dos formulários: Form 1: o usuário digita um nome e um sobrenome e quando teclar concatenar exiba na terceira textbox o nome e sobrenome juntos (+) para colocar o botão próximo não se esqueça: form1.hide (para esconder o primeiro formulário) form2.show (para chamar o outro formulário) para colocar figuras dentro do botão, altere a propriedade “Style” para “graphical” e escolha uma figura dentro da propriedade “Picture” no botão sair exiba uma msgbox perguntando realmente se deseja ou não sair do programa. Form 2: Permita o usuário digitar dois números e pressionando “Somar” exiba a soma dos dois. Cuidado: os valores digitados em uma textbox são textos, sendo necessários converter o texto para números, utilizando assim o comando “val”. Ex: a = val(text1.text) Form 3: Permita o usuário digitar o Salário Bruto, as horas extras e o salário família. Na textbox dos descontos deve-se conter uma soma do valor calculado do INSS + IRRF o INSS corresponde a 8% do salário bruto O imposto de renda e a faixa de imposto de renda deve obedecer o cálculo feito no jornal, procure-o Esta empresa paga R$ 10,00 para cada hora extra feita O salário líquido é a soma do salário bruto + horas extras + salário família – descontos Se o Salário líquido ultrapassar R$ 5.000,00 exiba uma mensagem qualquer na caixa de mensagem do final do formulário. O botão limpar, limpa todos os conteúdos das textbox Form 4: rankine. Permita o usuário digitar uma temperatura em Celsius e quando pressionar calcular exiba em farenheit, kelvin e Form 5: Permita o usuário digitar 3 valores e utilizando o comando “if” exiba o menor e o maior valor digitado. Form 6: Permita o usuário digitar dois valores. De acordo com a opção desejada mostre o resultado na textbox. Cuidado: para se calcular raiz quadrada utiliza-se “sqr” para seno utiliza-se sin para cosseno utiliza-se cos O mod retorna o resto da divisão em Visual Os valores de seno e cos devem ser convertidos para graus: 3.1415 / 180 Form 7: Permita o usuário digitar um número de um mês e utilizando obrigatoriamente o comando “Select case” exiba por extenso o mês. exiba também uma hora e data correntes Form 8: Centro Universitário Salesiano de Campinas 16 Programação de Computadores IV – Prof. Gale Permita o usuário escolher um número e no momento que teclar “Mostrar” exiba a tabuada deste número em uma “ListBox”. Para utilização de uma listbox é necessário um comando de laço (for), um método chamado “Additem” para preencher cada linha da listbox. Form 9: A hora em que o usuário entrar neste formulário a bolinha comece a acender e apagar no sentido horário e o número que se encontra no meio vai diminuindo até chegar ao 1, voltando rapidamente ao 10 e continuando o processo. As bolinhas devem esperar 1s para apagar e acender. Form 10: Desenvolva dois shapes (um do lado esquerdo e outro do lado direito), a medida em que o usuário entrar no formulário este vão juntos ao mesmo tempo um para o lado esquerdo e outro para o direito, chegando volta e continua o processo. Form 11: Coloque nas textbox os valores dos resistores e calcule a resistência equivalente em série e em paralelo. Form 12: Permita trocar o valor das duas textbox e permita recalcular o salário de uma determinada pessoa, com base no aumento escolhido de 5%, 10%, 15% ou 20%. Centro Universitário Salesiano de Campinas 17 Programação de Computadores IV – Prof. Gale 5ª AULA VISUAL BASIC – PROF. GALE Manipulando Strings I-) As funções strings básicas Primeiro vamos mostrar as funções para tratamento de strings presentes em todas as versções do VB: a-) Str(numero) - Converte um valor numérica em uma string do tipo Variant Dim String String = Str(459) String = Str(-459.65) String = Str(459.001) b-) Len(string ) ' Resultado => " 459". ' Resultado = > "-459.65". ' Resultado = > " 459.001". - Determina o número de caracteres de uma string. (o comprimento da string) Dim sNome As String Dim tamanho As Long sNome = "Visual Basic" tamanho = Len(sNome) 'Resultado => c-) Chr$(codigo_do_caractere) Dim Caractere Caractere = Chr(65) Caractere = Chr(97) Caractere = Chr(62) Caractere = Chr(37) ' ' ' ' - a variavel tamanho será igual a 12 Retorna uma string caractere associado ao código indicado Resultado Resultado Resultado Resultado ==> ==> ==> ==> A a > % Para exibir os códigos de todos os caracteres de 0 a 255 use o código a seguir: Dim i as integer For i=0 to 255 Debug.Print i; chr$(i) Next d-) Asc(string) - Retorna um valor inteiro que representa o código do primeiro Caractere da String. Dim MyNumber Numero = Asc("A") Numero = Asc("a") Numero = Asc("Amor") ' Resultado => 65. ' Resultado => 97. ' Resultado => 65. e-) Space(numero) - Retorna uma string do tipo Variant contendo a quantidade de espaços indicados por número. String = "Visual" & Space(10) & "Basic" Basic - insere dez espaços entre as strings Visual e f-) String$(Tamanho,String) - Cria uma string com comprrimento igual a Tamanho e que contém o primeiro caráter indicado em String. Se String tiver mais de um caractere somente o primeiro será usado. String$(9,"VISUAL") g-) Trim$(string) 'retorna => "VVVVVVVVV" - Remove os espaços eexistentes de ambos os lados de uma string. Dim MVar Centro Universitário Salesiano de Campinas 18 Programação de Computadores IV – Prof. Gale MVar = Trim(" visual basic ") 'MVar irá conter ==> "visual basic". h-) RTrim$(string) - Remove os espaços a direita da string. Dim MVar MVar = RTrim(" basic". visual basic ") 'MVar irá conter ==> " visual ==> "visual basic i-) LTrim$(string) - Remove os espaços a esquerda daa string. Dim MVar MVar = LTrim(" ". visual basic j-) LCase$(string) - ") 'MVar irá conter Converte todos os caracteres alfanuméricos na string para minúsculas. LCase("SÃO JOSE DO RIO PRETO , 12-08-2001") 12-08-2001 l-) UCase$(string) - retorna ==> são jose do rio preto , Converte todos os caracteres alfanuméricos na string para maiúsculas. LCase("São Jose Do Rio Preto , 12-08-2001") PRETO , 12-08-2001 retorna ==> SÃO JOSE DO RIO II) Substrings Substrings são pedaços de uma string. Veremos a seguir as principais funções para o tratamento de substrings. a-) Left$(String, esquerdo da String. Tamanho) - Retorna uma string contendo o número de caracteres definido em Tamanho do lado Left$("Programar com Visual Basic é fácil", 9) Retorna ==> "Programar" Left$("Programar com Visual Basic é fácil", 50) Retorna ==> "Programar com Visual Basic é fácil" Left$("Programar com Visual Basic é fácil", 0) Retorna ==> "" b-) Right$(String, direito da String. Tamanho) - Retorna uma string contendo o número de caracteres definido em Tamanho do lado Right$("Programar com Visual Basic é fácil", 8) Retorna ==> " é fácil" Right$("Programar com Visual Basic é fácil", 50) Retorna ==> "Programar com Visual Basic é fácil" Right$("Programar com Visual Basic é fácil", 0) Retorna ==> "" c-) Mid$(String, Inicio,[Tamanho]) - Como função retornaa uma substring da String dada , começando no primeiro caractere de Inicio com comprimento definido em Tamanho. Se Tamanho for omitido ou for menor que o comprimento da string todos os caracteres a partir de inicio será retornado. Texto = " Usando strings no Visual Basic" Mid$(texto,7,7) retorna => "strings" Mid$(texto,7) retorna => "strings no Visual Basic" Podemos usar MID$ para substituir uma parte da string dada, a partir do primeiro caractere da posição Inicio. Texto ="Isto é um teste" Mid$(texto,6)="123456" retorna => "Isto 123456" Centro Universitário Salesiano de Campinas 19 Programação de Computadores IV – Prof. Gale Mid$(texto,6,3)="123456" retorna => "isto 123m teste" Mid$(texto,8)="12" retorna => "Isto é 12 teste" d-) Instr$(Inicio,string1,string2,[Compare]) - Determina a posiçãoo da primeira ocorrência de uma substring contida em uma string. Retorna uma variant do tipo Long. Os argumentos são : Argumentos Descrição Inicio Expressão numérica que define a posição de inicio para iniciar a procura. Se omitida a procura começa no inicio da string. string1 A expressão string a ser procurada. string2 A expressão string a procurar. compare Determina o tipo de comparação que será feito entre as strings. Os possiveis tipos de comparação são: Constante Valor Descrição vbUseCompareOption -1 A comparação será feita como definida em Option Compare vbBinaryCompare 0 Comparação binária vbTextCompare 1 Comparação textual vbDatabaseCompare 2 Comparação com base no seu banco de dados . Só para o Microsoft Access Exemplos: Dim String1, String2, posicao String1 = "Visual Basic 6 A linguagem" String2 = "a" ' string onde será feita a procura ' Substring a procurar ' comparação textual iniciando na posicao 4 posicao = InStr(4, String1, String2, 1) ' Comparação binaria iniciando na posicao 1 posicao = InStr(1, String1, "A", 0) ' Comparação binária posicao = InStr(String1, "A") posicao = InStr(1, String1, "W") Centro Universitário Salesiano de Campinas 'Retorna => 5. 'Retorna => 'Returns => 16 16 ' Returns 0 (não achou) 20 Programação de Computadores IV – Prof. Gale Nota: Observe que : Se A função InStr irá retornar: string1 for igual a "" 0 string1 for Null Null string2 for igual a "" Inicio string2 for igual a Null Null string2 não for encontrada 0 string2 for encontrada em string1 A posição onde ela for encontrada start > string2 0 d-) Split(string,delimiter,count,compare_mode] VB6 - Divide uma string e retorna as substrings como um array de strings. Parte Descrição String ( expressão ) Uma expressão string . Se a expressão for uma string vazia ("") o array retornado estar vazio, ou seja , sem elementos. delimiter Um string caractere usado para identificar Indica onde a divisão vai ocorrer. Se for omitida o caracter de espaço (" " ) será usado. Se for utilizado uma string vazia ("") então um array contendo a expressão completa será retornada. Count O número máximo de substrings a ser retornada. -1 indica que todas as substrings serão retornadas. compare Valor numérico indicando o tipo de comparação a usar quando da avaliação das substrings . Veja os valores abaixo: Os valores de compare podem ser: Constante Valor Descrição vbUseCompareOption –1 Realiza uma comparação com base na definição de Option Compare. vbBinaryCompare 0 Realiza uma comparação binária. vbTextCompare 1 Realiza uma comparação textual. vbDatabaseCompare 2 Somente para arquivos Microsoft Access. Exemplo 1- Vamos dividir a string "Visual Basic 6" (voce pode testar com diversas expressões) 1:Private Sub Command1_Click() 2:Dim i As Integer 3:Dim vetor As Variant Inicie um projeto no VB e no formulario padrao insira uma caixa de texto , uma caixa de listagem e um botão de comando Abaixo veja o resultado do código ao lado: 4:vetor = Split(Text1.Text) 5:List1.Clear 6:For i = LBound(vetor) To UBound(vetor) 7: List1.AddItem i & vbTab & vetor(i) 7:Next 8:End Sub Centro Universitário Salesiano de Campinas 21 Programação de Computadores IV – Prof. Gale O código para dividir strings e gerar vetores de substrings O resultado gera 3 substrings: vetor(0), vetor(1) e vetor(2) No exemplo acima usamos a função LBound para determinar o valor do menor índice de um array e UBound para determinar o maior valor para um índice de um array. Assim acessaremos todos os índices do array. Se substituirmos o código da linha 4 por : vetor = Split(Text1.Text,,2) iremos obter duas substrings: 0 Visual 1 Basic 6 Exemplo 2- Vamos acrescentar o caracter "s" para indicar onde a divisão irá ocorrer Private Sub Command1_Click() Dim i As Integer Dim vetor As Variant Inicie um projeto no VB e no formulario padrao insira uma caixa de texto , uma caixa de listagem e um botão de comando Abaixo veja o resultado do código ao lado: vetor = Split(Text1.Text,"s") List1.Clear For i = LBound(vetor) To UBound(vetor) List1.AddItem i & vbTab & vetor(i) Next End Sub Note que a divisão teve inicio no caracter "s" , retornando 4 substrings contidas nos vetores com indices 0,1,2 e 3. Podemos aproveitar esta última característica para 'contar' quantas vezes uma substring aparece numa string. Por exemplo , suponha que você queira saber quantas vezes a substring "do" aparece na frase : "Avaliação do impacto do treinamento no trabalho do programador". Usando Split fica fácil ...: 1:Dim frase As string 2:Dim vetor As Variant 3:frase = "Avaliação do impacto do treinamento no trabalho do programador" 4:vetor = Split(frase,"do") 5:MsgBox " 'do' aparece na texto ' " & frase & " ' " & UBound(vetor) & " vezes." Centro Universitário Salesiano de Campinas 22 Programação de Computadores IV – Prof. Gale Você ter como resposta que 'do' aparece 4 vezes no texto, pois 'do' também esta contida na palavra 'programador'. Para contar somente as ocorrências da preposição 'do' altere a linha 4 do código para: 4:vetor = Split(frase," do ") e você obterá como resposta 3 vezes. e-)Join(List,Delimter) VB6 - Concatena as substrings contidas em <List em uma única string. -List - deve ser um array de uma dimensão contendo as strings a serem concatenadas -Delimiter - Caractere string usado para separar as substrings na string retornada. Se omitida o caractere (" ") sera usado. Se for uma string vazia ("") , todos os itens da lista serão concatenados sem delimitadores. Exemplo: Dim array(1 to 4) As String Dim sJunta As String array(1)="Visual" array(2)="Basic" array(3)="6" array(4)="A linguagem" sJunta= Join(array," ") sJunta= Join(array) sJunta= Join(array,",") sJunta= Join(array,":") sJunta= Join(array,"") retorna => "Visual Basic 6 A linguagem" retorna => "Visual Basic 6 A linguagem" retorna => "Visual,Basic,6,A,linguagem" retorna => "Visual:Basic:6:A:linguagem" retorna => "VisualBasic6Alinguagem" g-) Filter(Varlist, Value, Include, Compare) VB6 - Procura em VarList pelas strings definidas em Value e retorna o resultado em um array. - VarList - contém um array de strings que a função irá filtrar - Value - é a string de caracteres usada para identificar qual elemento será incluída no novo array. - Include - Um valor boleano que indica se os elementos contendo o valor coincidente será incluido ou não na string . O valor padrão é True. - Compare indica como a busca por Value será efetuada. Os valores de compare podem ser: Constante vbUseCompareOption Valor –1 Descrição Realiza uma comparação com base na definição de Option Compare. vbBinaryCompare 0 Realiza uma comparação binária. vbTextCompare 1 Realiza uma comparação textual. vbDatabaseCompare 2 Somente para arquivos Microsoft Access. Exemplo: Centro Universitário Salesiano de Campinas 23 Programação de Computadores IV – Prof. Gale Dim vetor(1 to 3) As String Dim i as integer Dim sFiltra As Variant vetor(1)="Visual" vetor(2)="Basic 6" vetor(3)="a linguagem" sFiltra=Filter(vetor,"a") List1.Clear For i = LBound(vetor) To UBound(vetor) List1.AddItem i & vbTab & vetor(i) Next h-) StrReverse(string) - VB6 - Retorna uma string com os caraccteres invertidos. Exemplo: StrReverse ("Visual Basic") retorna => cisaB lausiV Se string for um for um valor Null ocorrerá um erro. h-) Replace(string, strProcura, strSubstPor, Inicio, Contador, Compare) 1. String - é a string a ser alterada 2. strProcura - é a string a procurar em <String> 3. strSubstPor - é a string usada para substituir a string <strProcura> 4. Inicio - indica o incio da busca por <strProcura>. (Opcional) 5. Contador - indica o número máximo de vezes que <strProcura> será substituida 6. Compare - o modo de comparação a ser efetuada. Esta função é muito útil para substituir ocorrências em uma string por um determinado valor. Vamos mostrar um exemplo onde vamos substituir todas a vírgulas(,) em uma frase por ponto e vírgula(;): Exemplo: Frase = " Geralmente , temos um problema , quando a temperatura aumenta " NovaFrase = Replace(Frase, "," , ";" ) retorna => "Geralmente ; temos um problema ; quando a temperatura" Nota: Observe que você deverá estar atento ás seguintes ocorrências: Se A função strReverse irá retornar: string for igual a "" "" string for Null Um erro strProcura for igual a "" Uma cópia de string strSubstPor for igual a "" Uma cópia de string com todas as ocorrências de StrProcura removidas Inicio > string Uma string vazia "" contador for igual a zero Uma cópia de string Centro Universitário Salesiano de Campinas 24 Programação de Computadores IV – Prof. Gale FORMULÁRIO Centro Universitário Salesiano de Campinas 25 Programação de Computadores IV – Prof. Gale 6ª AULA VISUAL BASIC – PROF. GALE Criação de Menus Menus são criados usando a janela Menu Design. Você adiciona itens ao menu em tempo de projeto pela criação de controles de menu e setando propriedades que definirão sua aparência. Para a criação de um Menu devemos ir ao menu Tools – Menu Editor ou teclar Ctrl+E. 1) Começamos digitando o Título (em Caption) do Menu mais à esquerda. Caso desejemos acessar esse menu via Alt e a letra grifada devemos inserir o & antes da letra que será grifada. No exemplo abaixo: &TesteMenu (que aparecerá como TesteMenu); 2) Depois digitamos o nome (em Name) do Menu para referência em Código; 3) Os outros itens não são obrigatórios; 4) Clicar em Next para entrar um novo Menu ou item de Menu. Caso seja um item de Menu devemos clicar na seta para a direita quando aparecerão três pontinhos a esquerda do título do item que ficará abaixo do nome do Menu. 5) Os Menus e os itens de Menus podem ser referenciados em Código através do Evento Click, que deve ser feito no Formulário após teclarmos em OK. Desenvolva o seguinte menu: Arquivo novo abrir texto figura sair Editar colar Ajuda normal especial copiar Centro Universitário Salesiano de Campinas 26 Programação de Computadores IV – Prof. Gale Botões Indexados Geramos um botão indexado quando copiamos e colocamos um botão e mantemos o mesmo “name”. O que diferencia um botão de outro é apenas a propriedade “index”, que retorna um valor numérico iniciado pelo valor 0. No menu Project – Components, procurar: MICROSOFT Windows COMMON CONTROLS-2 6.0 OBJETO – DTPICKER (propriedade Value) Sintaxe do Comando: Centro Universitário Salesiano de Campinas Configura Descrição yyyy Year q Quarter m Month y Day of year d Day w Weekday ww Week of year h Hour n Minute s Second DateDiff(interval, date1, date2) 27 Programação de Computadores IV – Prof. Gale 7ª AULA VISUAL BASIC – PROF. GALE Common Dialog No menu Project – Components, procurar: MICROSOFT COMMON DIALOG CONTROLS-2 6.0 • Esse objeto permite exibir cinco caixas de diálogo nos padrões do Windows. • Apenas uma caixa de diálogo pode ser exibida a partir de um objeto Common Dialog. • Para exibir uma determinada caixa de diálogo, deve ser utilizado o método correspondente à caixa desejada. • Os conteúdos das caixas são controlados através de suas propriedades, ou seja, quando uma caixa é preenchida, os resultados são apresentados por suas propriedades. Caixas de Diálogo e sua utilização: Abrir: para abrir um arquivo. Método correspondente: ShowOpen Salvar Como: para salvar um arquivo. Método correspondente: ShowSave Imprimir: para definir as opções de impressão. Método correspondente: ShowPrinter Fonte: para definir uma fonte e um estilo para textos. Método correspondente: ShowFont Cor: para escolher uma nova cor da paleta. Método correspondente: ShowColor NOTAS: Um objeto CommonDialog não é visível ao usuário em tempo de execução do programa. Propriedades correspondentes à CommonDialog Abrir: Filter: define quais os tipos de arquivos deverão ser exibidos. Por exemplo: commondialog1.filter = “Bitmaps (*.BMP) | *.BMP |Metafiles (*.WMF) | *.WMF” Filename: define o nome do arquivo selecionado. Centro Universitário Salesiano de Campinas 28 Arquivo Texto ABERTURA DE ARQUIVOS Abrir um arquivo significa “alocar um buffer do computador para eventos de entrada e saída”. O Visual Basic disponibiliza o comando Open, cuja sintaxe é mostrada abaixo. Open Nome_do_Arquivo [For Modo][Access acesso][Lock] As [#] nº_do_arquivo [Len=comp.], onde: • Nome_do_arquivo: String que contém o nome do arquivo e caminhos eventuais. Se o caminho não for especificado, o arquivo será aberto na pasta atual; • Modo: palavra-chave que especifica o modo de acessão arquivo, conforme a tabela 9; • Acesso: palavra-chave opcional que especifica as operações permitidas no arquivo aberto, conforme a tabela 10; • Lock: palavra-chave opcional que controla o acesso a um arquivo por outros processos, conforme a tabela 11; • nº_do_arquivo: número do próximo arquivo livre (1 a 255) • comp.: tamanho do registro, em bytes, para arquivos aleatórios, ou o tamanho do buffer para arquivos seqüenciais. Modos de abertura de arquivo Modo APPEND Acesso ao arquivo Acesso seqüencial; se o arquivo já existe, novos dados serão adicionados no final dos dados já existentes. Se o arquivo não existe, ele é criado. BINARY Acesso binário para leitura e escrita. Se o arquivo não existe, ele é criado. INPUT Acesso seqüencial para leitura. Se o arquivo não existe, ocorre um erro. OUTPUT Acesso seqüencial para gravação. Se o arquivo já existe, ele é eliminado e um outro é criado. Se o arquivo não existe, ele é criado. RANDOM Acesso aleatório para leitura e gravação. Se o arquivo não existe, ele é criado. Esse é o padrão se o argumento Modo for omitido. Por exemplo, para abrir um arquivo seqüencial para leitura, chamado VBJUNK.TXT, na pasta atual, escreveríamos: Open VBJUNK.TXT For Input As #1 Para fechar um arquivo devemos usar o comando Close: Close [#] nº_do_arquivo. O número do arquivo pode ser determinado com a função FreeFile, que retorna o número do próximo arquivo livre: nº_do_arquivo=FreeFile. LEITURA DE ARQUIVOS SEQÜENCIAIS O comando Open por si mesmo somente abre o arquivo, sem ler o conteúdo. Para ler arquivos seqüenciais devemos usar o comando Input$, cuja sintaxe é mostrada a seguir. Input$ (tamanho,[#]nº_do_arquivo), onde: tamanho: tamanho, em bytes, do arquivo a ser lido; nº_do_arquivo: número usado no comando Open. Para determinar o tamanho de um arquivo podemos usar a função LOF, que significa Length of File, ou Tamanho do Arquivo. Exemplo: Input$ (LOF(1), #1) line input lê uma linha do arquivo input #número,var1, var2 lê um conjunto de campos por vez GRAVAÇÃO DE ARQUIVOS SEQÜENCIAIS Programação de Computadores IV – Prof. Gale Para gravar arquivos sequenciais estes devem, antes, ter sido abertos para saída (output). O comando mais comum para gravação é Print #. Print # nº_do_arquivo, Lista, onde o parâmetro Lista contém os dados a serem gravados. Exemplo: Print # 1, txtTexto.text. Revisão - Comandos básicos: Open <nome arq> for <modo> as #número <modo> input, output, append line input lê uma linha do arquivo input #número,var1, var2 lê um conjunto de campos por vez eof verifica fim de arquivo close fecha o arquivo do until eof(1) .. .. loop EXEMPLO: Centro Universitário Salesiano de Campinas 30 Programação de Computadores IV – Prof. Gale Para ler um arquivo: cd.ShowOpen On Error GoTo fim monta = cd.FileName enter = Chr$(13) + Chr$(10) Open monta For Input As #1 Do Until EOF(1) Line Input #1, linha$ tudo$ = tudo$ + linha$ + enter Loop Text1.Text = tudo$ Text2.Text = cd.FileName Text3.Text = FileLen(cd.FileName) Text4.Text = FileDateTime(cd.FileName) Close #1 fim: Para gravar um arquivo: cd.ShowSave On Error GoTo fim monta = cd.FileName Open monta For Output As #1 Print #1, Text1.Text Close #1 fim: Para imprimir um arquivo: cd.ShowOpen On Error GoTo fim cd.ShowPrinter monta = cd.FileName enter = Chr$(13) + Chr$(10) Open monta For Input As #1 Do Until EOF(1) Line Input #1, linha$ Printer.Print linha$ Loop Printer.EndDoc Close #1 fim: Centro Universitário Salesiano de Campinas 31 Programação de Computadores IV – Prof. Gale FAÇA VOCÊ!!!! Centro Universitário Salesiano de Campinas 32 Programação de Computadores IV – Prof. Gale 8ª AULA VISUAL BASIC – PROF. GALE Dinamic Library Link (DLL) Inclua no seu projeto um módulo: Project Add Module Existing Procure “port.dll” Este arquivo contém: Public Declare Sub OutPort Lib "port" (ByVal porta As Integer, ByVal Valor As Byte) Public Declare Function InPort Lib "port" (ByVal porta As Integer) As Byte Enviando e Recebendo dados Enviar OutPort &H378, valor Ler valor = InPort(&H378) Exemplo: Progress Bar Microsoft Windows Common Controls 5.0 Propriedades (max, min, value) Centro Universitário Salesiano de Campinas 33 Programação de Computadores IV – Prof. Gale Faça Você!!! Monte todas as seqüências; deixe-as funcionando. Os “options” servem apenas para acionar os leds com a seqüência desejada. Todas as seqüências na tela ficam funcionando sucessivamente até que seja pressionado o botão terminar. Além de criar o arquivo executável, para que seja possível rodar o programa em outro computador que não possua VB instalado, é necessário criar o "Setup" de instalação. Isso nada mais é que um pacote de arquivos que o VB cria (com base no arquivo executável criado anteriormente) e que inclui todos os arquivos adicionais/DLL's, necessários à execução do programa. Para criar esse "Setup", acesse: => Iniciar Programas Microsoft Visual Basic 6.0 Microsoft Visual Basic 6.0 Tools Package & Deployment Wizard Esse aplicativo do VB irá pedir que você aponte qual é o arquivo de projeto (*.VBP) e seguirá adiante criando o executável, mesmo que já exista. Daí em diante, basta finalizar a execução do aplicativo. Centro Universitário Salesiano de Campinas 34 Programação de Computadores IV – Prof. Gale 9ª AULA VISUAL BASIC – PROF. GALE Comunicação Serial – MSCOMM Termos e Definições CommPort seta e retorna o número da porta de comunicação Settings configura velocidade de transmissão(baud rate), paridade, bits de dados e Stop bit PortOpen configura e retorna o estado atual da porta de comunicação (abre e fecha a porta) Input recebe caracteres do buffer Output envia uma string de caracteres para um buffer de transmissão Inbuffercount retorna o número de caracteres que estão esperando para serem enviados. InputLen configura o número de caracteres que o buffer pode ler. Exemplo Simples Private Sub Form_Load () Dim Instring As String ' Utilizando a COM1. MSComm1.CommPort = 1 ' 9600 baud, no parity, 8 data, and 1 stop bit. MSComm1.Settings = "9600,N,8,1" MSComm1.InputLen = 0 ' Open the port. MSComm1.PortOpen = True ' Envia um aviso para o modem MSComm1.Output = "ATV1Q0" & Chr$(13) Do DoEvents Buffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$, "OK" & vbCRLF) ' Fecha a porta serial. MSComm1.PortOpen = False End Sub MSCOMM Microsoft Comm Control 6.0 Centro Universitário Salesiano de Campinas 35 Programação de Computadores IV – Prof. Gale Centro Universitário Salesiano de Campinas 36 Programação de Computadores IV – Prof. Gale 10ª AULA VISUAL BASIC – PROF. GALE Banco de Dados O Visual Basic disponibiliza meios de se construir aplicativos de bancos de dados de maneira rápida. De modo geral, bancos de dados são conjuntos de tabelas, índices e relações potencializados por algum driver de banco de dados. O VB possibilita a conexão com os seguintes drivers: • • • • • Microsoft Access; dBase III, IV e 5.0; FoxPro 2.0, 2.5 e 3.0; Paradox 3.x, 4.x e 5.x; ODBC, entre outros. Os bancos de dados do VB são potencializados pelo Jet Engine, que é o mesmo driver do Access. Alguns termos merecem definição: • DBEngine: é um objeto que representa o Jet Engine da MicroSoft e contém todos os outros objetos de bancos de dados. • Worspace: é um objeto que define uma seção de trabalho do usuário. Quando um banco de dados é iniciado, um Workspace default é criado, com senha “” e nome “ Admin”. • DataBase: é o objeto banco de dados por excelência; • TableDef: representa a estrutura de uma tabela, que pode conter vários campos (Fields) e vários índices (Indexes); • Field: representa um campo dentro de uma tabela. • Index: representa um índice dentro de uma tabela. • QueryDef: representa a estrutura de uma consulta (query) em uma tabela. • RecordSet: representa uma tabela ou parte dela. O Recorset pode ser do tipo Table (Tabela), Dynaset ou SnapShot (Instantâneo). Dynaset é uma estrutura mais versátil do que uma tabela, podendo ser gerado por uma consulta ou uma declaração SQL. Snapshot é o tipo mais restritivo de tabelas e seus dados não pode ser alterados pelo usuário. O CONTROLE DE DADOS A maneira mais fácil de manipular bancos de dados é por meio do Data Control, ou Controle de Dados. Este controle, disponível desde a versão 2.0, abre um banco de dados, conecta-se a uma tabela especificada e mostra o conteúdo dos campos em “controles ligados”. Para usar o Controle de Dados, proceda da seguinte maneira: a) Desenhe o Controle de Dados no formulário; b) Na janela de propriedades, especifique a propriedade DataBaseName. Esta propriedade deve conter um banco de dados já existente, com todo o caminho; c) Especifique a propriedade RecordSource, que deve corresponder a uma tabela válida do banco de dados; d) Desenhe uma caixa de texto para cada campo da tabela; e) Defina a propriedade DataSource de cada caixa de texto como sendo Data1 (ou o nome do Controle de Dados).Da mesma forma, especifique a propriedade DataField de cada caixa de texto como uma campo distinto da tabela. Resumindo: Centro Universitário Salesiano de Campinas 37 Programação de Computadores IV – Prof. Gale Banco de Dados Tabelas Linhas (registros) Colunas (campos) O Controle DATA Databasename: (Banco de Dados) Recordsource: (tabela) Recordsets (conjunto de registros): são objetos que representam coleções de registros de uma ou mais tabelas. Recordsets são equivalentes as variáveis da programação tradicional. Nas textbox devemos observar as seguintes propriedades: • • Datasource (enxerga o Banco) Datafield (nome do campo) O Controle Data: MoveFirst MoveLast MovePrevious MoveNext Ex: Data1.Recordset.movefirst If Data1.Recordset.EOF then Data1.Recordset.moveLast Endif Método Find: FindFirst FindLast FindNext FindPrevious Ex: Data1.Recorset.FindFirst “ “ Crie uma tabela através do Add-Ins / Visual Data Manager, contendo: Número / Nome / Apelido / Cidade / Estado / Data_Nasc / Profissão / Estado Civil UMA AGENDA DE ENDEREÇOS O VB pode ser usado para criar um formulário simples do tipo agenda. Você precisará de um banco de dados com os seguintes campos: Centro Universitário Salesiano de Campinas 38 Programação de Computadores IV – Prof. Gale • • • • • • • • Nome; Endereço; Telefone; FAX; E-mail; Cidade; Estado; CEP. Este banco de dados pode ser criado em Access ou por meio do Data Manager. Denomine este banco de dados de AGENDA.MDB. Será necessário criar apenas uma tabela dentro deste banco de dados, a qual chamaremos de NOMES. Formulário frmAgenda conectar o Controle de Dados ao banco de dados e as caixas de texto ao Controle de Dados: a) Na janela de propriedades de Data1, especifique a propriedade DataBaseName para AGENDA.MDB, incluindo todo o caminho; b) Especifique a propriedade RecordSource de Data1, que deve corresponder à tabela Nomes; c) Defina a propriedade DataSource de cada caixa de texto como sendo Data1. Da mesma forma, especifique a propriedade DataField de cada caixa de texto como o campo correspondente Código 3 5 6 7 9 10 11 13 14 16 17 18 20 Descrição Return without GoSub Invalid procedure call Overflow Out of memory Subscript out of range This array is fixed or temporarily locked Division by zero Type mismatch Out of string space Expression Too Complex Can't perform requested operation User interrupt occurred Resume without error Centro Universitário Salesiano de Campinas Descrição em português Return sem GoSub Chamada inválida de procedimento Sobrecarga Falta de memória Subescrito fora do intervalo Este array é fixo ou temporariamente travado Divisão por zero Tipo incorreto Falta de espaço no string Expressão muito complexa Impossível realizar a operação requisitada Interrupção do usuário Continuar sem erro 39 Programação de Computadores IV – Prof. Gale Código 28 35 47 48 49 51 52 53 54 55 57 58 59 61 62 63 67 68 70 71 74 75 76 91 92 93 94 444 452 453 457 460 461 480 481 482 483 484 485 520 521 Descrição Out of stack space Sub, Function, or Property not defined Too many DLL application clients Error in loading DLL Bad DLL calling convention Internal error Bad file name or number File not found Bad file mode File already open Device I/O error File already exists Bad record length Disk full Input past end of file Bad record number Too many files Device unavailable Permission denied Disk not ready Can't rename with different drive Path/File access error Path not found Object variable or With block variable not set For loop not initialized Invalid pattern string Invalid use of Null Method not applicable in this context Invalid ordinal Specified DLL function not found Duplicate Key Invalid Clipboard format Specified format doesn't match format of data Can't create AutoRedraw image Invalid picture Printer error Printer driver does not support specified property Problem getting printer information from the system. Make sure the printer is set up correctly Invalid picture type Can't empty Clipboard Can't open Clipboard Centro Universitário Salesiano de Campinas Descrição em português Falta de espaço na pilha Sub, Função ou propriedade não definida Demasiados aplicativos DLL clientes Erro no carregamento de DLL Má convenção de chamada de DLL Erro interno Número ou nome de arquivo incorreto Arquivo não encontrado Modo de arquivo incorreto Arquivo jã aberto Erro de dispositivo de entrada/saída Arquivo já existe Tamanho de registro incorreto Disco cheio Entrada depois do fim do arquivo Número de registro incorreto Arquivos em damasia Dispositivo inacessível Permissão nagada Disco não pronto Impossível renomear com drive diferente Erro de acesso a caminho ou arquivo Caminho não encontrado Variável objeto ou bloco With não definida Laço For não inicializado Padrão de string inválido Uso inválido de Null Métod não aplicável neste contexto Ordinal inválido Função DLL especificada não encontrada Chave duplicada Formato do Clipboard inválido Formato especificado não casa com formato do dado Impossível criar imagem AutoRedraw Figura inválida Erro de impressão Driver de impressão não suporta a proprieadade especificada Problemas em conseguir informação da impressora do sistema. Certifique-se de que a impressora está configurada corretamente. Tipo de figura inválida Impossível esvaziar o Clipboard Impossível abrir o Clipboard 40 Programação de Computadores IV – Prof. Gale 11ª AULA VISUAL BASIC – PROF. GALE Componente Winsock O controle Winsock permite a comunicação de uma ou mais estações através dos protocolos TCP/IP ou UDP. Protocolo TCP/IP -> é o protocolo usado na Internet. Como podemos notar, andam sempre em dupla o TCP (Transmission Control Protocol) e o IP (Internet Protocol). O protocolo TCP realiza as seguintes tarefas: Divisão da informação em pequenos pacotes, enviar/receber informações pela rede, verificar/reagrupar informações pela rede. Número IP -> O número IP é na verdade formado por um conjunto de quatro números e permite a identificação de cada computador conectado na Internet. UDP -> User Datagram Protocol. Utilizada um sistema de transmissão sem a verificação se existe uma conexão. É um protocolo lento e que pode perder pacotes de informação. Porta -> A porta é um canal de comunicação e permite que existam várias conexões em uma mesma máquina. Propriedades e métodos do controle Winsock Principais Propriedades Propriedade Localport Remoteport Protocol RemoteHostIP LocalIP LocalHostName BytesReceived State Descrição É a porta que seu computador usará. Máx 4 dígitos (9999). É a porta da qual sua máquina recebe dados. Protocolo a ser usado na transmissão (TCP ou UDP). Retorna o endereço IP da uma máquina remota. Retorna o endereço IP da máquina local. Retorna o nome da máquina local. Determina a quantidade de dados recebidos (bytes). Define o estado atual do controle. Definições abaixo: Definições da propriedade State: Constante sckClose sckOpen sckListening sckConnectionPending sckResolvingHost sckHostResolved sckConnecting sckConnected sckClosing sckError Valor 0 1 2 3 4 5 6 7 8 9 Descrição Default Closed Open Listening Connection Pending Resolving Host Host resolved Connecting Connected Peer is closing the connection. Error Principais métodos e eventos do controle winsock: Método/Evento Accept Connect Close DataArrival GetData Listen SendData SendProgress SendComplete ConnectionRequest Error Descrição Aceita uma conexão TCP. Solicita uma conexão TCP. Ocorre quando há uma conexão com outro computador. Fecha uma conexão TCP. Onde você coloca o código fonte que você deseja executar quando a informação chegar pela portal local. Efetua a recepção de dados Espera por uma conexão TCP. Envia dados. Indica que você quer controlar a conexão enquanto ela estiver enviando os dados. Indica o que você quer que aconteça depois que a transferência foi terminada. Ex. Exibir uma mensagem. Solicita uma conexão. Ocorreu um erro. Centro Universitário Salesiano de Campinas 41 Programação de Computadores IV – Prof. Gale Usando o Controle Winsock Ao rodar sua aplicação, se ela estiver no modo servidor esperando alguma solicitação você deverá definir a propriedade LocaPort e invocar o método Listen para deixar o computador disponível. winsock1.LocalPort = 1001 winsock1.Listen Se estiver no modo cliente você vai precisar definir as propriedades RemoteHost ou RemoteHostIP e RemotePort . Depois basta usar o método Connect para solicitar uma conexão. Winsock1.RemoteHost = "geocities.com/" Winsock1.RemotePort = 80 Winsock1.Connect Quando você se conecta usando Connect é executado o evento ConnectionRequest do controle Winsock o qual possui o parâmetro requestID. Este parâmetro serve para identificar a conexão de forma única. Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) If Winsock1.State <> sckClosed Then Winsock1.Close Winsock1.Accept requestID End Sub Após a conexão ter sido estabelecida podemos enviar e receber dados, para enviar dados usamos o método SendData : Winsock1.SendData "dados a serem enviados" Para receber os dados devemos utilizar o método GetData tendo como parâmetro o nome da variável que irá receber os dados. Quando os dados sao recebidos eles são colocados no buffer de entrada do controle Winsock e o evento DataArrival é disparado, assim devemos usar o método GetData neste evento: Private Winsock1_DataArrival() Dim variavel winsock1.GetData variavel ... ... End Sub Centro Universitário Salesiano de Campinas 42 Programação de Computadores IV – Prof. Gale SQL O nome SQL significa “Structure Query Language” – Linguagem estruturada de pesquisa. É uma linguagem estruturada para manipulação de dados. É padronizada para os bancos de dados relacionais, mas cada gerenciador pode assumir uma extensão própria dessa linguagem. Vantagens e Desvantagens da linguagem SQL: Independência de fabricante: é oferecido a todos os sistemas gerenciadores de banco de dados Portabilidade entre computadores: pode ser usada em um computador pessoal, passando a uma estação de trabalho, até um computador de grande porte. • Inglês estruturado de alto nível: é formada por um conjunto bem simples de sentenças em inglês • Consulta interativa: A SQL provê um acesso rápido aos dados, fornecendo respostas ao usuário, a questões complexas • Definição dinâmica dos dados: pode-se alterar, expandir ou incluir, as estruturas dos dados armazenados Desvantagem: • • • Como é feita uma padronização, ocorre assim uma inibição da criatividade, pois quem desenvolve aplicações fica preso a soluções padronizadas. Criação e Distribuição de Tabelas: CREATE TABLE Segue a seguinte forma: Create table <tabela> (<descrição das colunas>); (<descrição das chaves>); onde: <tabela>: é o nome da nova tabela a ser criada <descrição das colunas> : é uma lista de colunas (campos) e seus respectivos tipos de dados. (smallint, char, money, varchar, integer, decimal, float, real, date, time, logical) <descrição das chaves> : é a lista de colunas que são tratadas como chave estrangeira Alguns campos podem receber o valor NULL (nulo) e o campo definido como chave primária, além de não poder receber NULL, deve ser um campo UNIQUE (sem repetiçòes – chave primária). Exemplo: Figura 1 Create Table cliente (código_cliente smallint not nul unique, nome_cliente char(20), endereço char(30), cidade char(15), CEP char(8), UF char(2), CGC char(20), IE char(20) ); Centro Universitário Salesiano de Campinas 43 Programação de Computadores IV – Prof. Gale Create Table Pedido (num_pedido int not null unique, prazo_entrega smallint not null, código_cliente smallint not null, código_vendedor smallint not null, FOREIGN KEY (código_cliente) REFERENCES CLIENTE) ; Para eliminar uma tabela criada é utilizado o comando DROP: Drop table <tabela>; Extraindo Dados de uma Tabela: Comando SELECT: Forma: Select <nome(s) da(s) coluna(s)> from <tabela>; Exemplo: listar todos os produtos com respectivas descrições, unidades e valores unitários? (Diagrama 1) select descrição, unidade, valor_unitário from produto; (Diagrama 2) • Selecionando todas as colunas da tabela: Select * From <tabela>; • Selecionando somente alguns registros da tabela: Select <nome(s) da(s) coluna(s)> From <tabela> Where <restrições>; Onde: where <nome da coluna> <operador> <valor> OBS1: quando a coluna é do tipo caractere, o <valor> deve estar entre apóstrofes OBS2: Em SQL existe diferenciação entre maiúscula e minúscula Exemplo: Listar o num_pedido, o código_produto e a quantidade dos itens do pedido com a quantidade igual a Centro Universitário Salesiano de Campinas 44 Programação de Computadores IV – Prof. Gale 35. Select num_pedido, código_produto, quantidade From item_pedido Where quantidade = 35 Exemplo2: Quais os clientes moram em Niterói? Operadores Lógicos: • • • And Or Not Exemplo: listar os produtos que tenham unidade igual a ‘M’ e valor unitário igual a R$ 1,05 Select descricão_produto From produto Where unidade = ‘M’ and val_unit = 1.05; Exemplo: Liste os clientes e seus respectivos endereços, que moram em ‘São Paulo’ou estejam na faixa de CEP entre ‘30077000’ e ‘30079000’. Select nome_cliente, endereço From cliente Where (CEP >= ‘30077000’ AND CEP <= ‘30079000’) OR cidade = ‘São Paulo’ Obs: A utilização de parênteses é fundamental para a construção correta da frase, pois sem eles as consultas podem ser analisadas de forma errada, devido a prioridade do operador AND ser maior que a prioridade do operador OR. Exemplo: Mostrar todos os pedidos que não tenham prazo de entrega igual a 15 dias Select num_pedido From pedido Where NOT (prazo_entrega = 15); • Operadores Between e NOT Between - where <nome da coluna> BETWEEN <valor1> AND <valor2> where <nome da coluna> NOT BETWEEN <valor1> AND <valor2> Este operador propicia a pesquisa por uma determinada coluna e que esteja dentro de uma faixa de valores, sem a necessidade dos operadores >=, <= e AND. Tanto o valor1 quanto o valor2 tem que ser do mesmo tipo de dado da coluna. Exemplo: Listar o código e a descrição dos produtos que tenham o valor unitário na faixa de R$ 0,32 até R$ 2,00. Centro Universitário Salesiano de Campinas 45 Programação de Computadores IV – Prof. Gale Select codigo_produto, descricão From produto Where valor between 0.32 and 2.00; • Operadores LIKE e NOT LIKE - Where <nome da coluna> LIKE <valor>; Os operadores LIKE e NOT LIKE só trabalham sobre colunas que sejam do tipo CHAR. Eles têm praticamente o mesmo funcionamento que os operadores = e <>, porém o poder desses operadores está na utilização dos símbolos (%) e ( _ ) que podem fazer o papel de coringa: % - substitui uma palavra _ - substitui um caractere Ex: ‘Lápis %’ pode enxergar os seguintes registros: Lápis Preto Lápis Cera Lápis Borracha Exemplo: Listar os produtos que tenham a sua unidade começando por K: Select codigo, descrição From produto Where unidade LIKE ‘K_’; Exemplo2: Listar os vendedores que não começam por ‘Jo’ Select codigo, nome_vendedor From vendedor Where nome_vendedor NOT LIKE ‘Jo%’; • Operadores IN e NOT IN - Where <nome da coluna> IN <valores>; Where <nome da coluna> NOT IN <valores>; Estes operadores pesquisam registros que estão ou não contidos no conjunto de <valores> fornecido. Exemplo: Listar os vendedores que são da faixa de comissão A e B Select nome_vendedor From vendedor Where faixa_comissão IN (‘A’, ‘B’); • Operadores IS NULL e IS NOT NULL - Where <nome da coluna> IS NULL; Centro Universitário Salesiano de Campinas 46 Programação de Computadores IV – Prof. Gale - Where <nome da coluna> IS NOT NULL; A utilização do valor nulo (NULL) é muito problemática, pois cada implementação da linguagem pode adotar qualquer representação para o valor nulo. Exemplo: mostrar os clientes que não tenham inscrição estadual Select * From cliente Where IE IS NULL; • Ordenando os dados Selecionados Quando se realiza uma seleção, os dados recuperados não estão ordenados. A SQL prevê a cláusula ORDER BY para realizar uma ordenação dos dados selecionados. Forma: Select < nome da (s) coluna(s)> From <tabela> <where < condição(ões)> > order by <nome da(s) coluna(s)> ASC ou order by <número da(s) coluna(s)> DESC Obs: o default é ASC Exemplo: Mostrar em ordem alfabética a lista de vendedores e seus respectivos salários fixos Select nome_vendedor, salário_fixo From vendedor Order by nome_vendedor; Exemplo2: listar os nomes, cidades e estados de todos os clientes, ordenados por estado e cidade de forma descendente. Select nome_cliente, cidade, UF From cliente Order by UF DESC, cidade DESC; Exemplo3: mostrar a descrição e o valor unitário de todos os produtos que tenham a unidade ‘KG’, em ordem de valor unitário ascendente. Select descrição, val_unit From produto Where unidade = ‘KG’ Centro Universitário Salesiano de Campinas 47 Programação de Computadores IV – Prof. Gale Order by val_unit ASC; • Realizando Cálculos com informação Selecionada Com a SQL pode-se criar um campo que não pertença à tabela original, e que seja fruto do cálculo sobre alguns campos da tabela. Exemplo: Mostrar o novo salário fixo dos vendedores, de faixa de comissão ‘C’, calculado com base no reajuste de 75% acrescido de R$ 120,00 de bonificação. Ordenar pelo nome do vendedor. Select nome_vendedor, Novo_salário = (salário_fixo * 1.75) + 120 From vendedor Where faixa_comissão = ‘C’ Order by nome_vendedor; • Utilizando funções sobre conjuntos • Buscando máximos e mínimos (MAX, MIN) Exemplo: Mostrar o menor e o maior salário de vendedor. Select MIN(salário_fixo), MAX (salário_fixo) From vendedor; • Totalizando colunas (SUM) Exemplo: Mostrar a quantidade total pedida para o produto ‘VINHO’ de código ‘78’ Select SUM(quantidade), From pedido Where código = ‘78’; • Calculando Médias: (AVG) Exemplo: Qual a média dos salários fixos dos vendedores? Select AVG(salário_fixo), From vendedor; Centro Universitário Salesiano de Campinas 48 Programação de Computadores IV – Prof. Gale • Contando os Registros (COUNT) Exemplo: Quantos vendedores ganham acima de R$ 2.500,00 de salário fixo? Select COUNT (*), From vendedor Where salario_fixo > 2500; • Utilizando a cláusula DISTINCT Normalmente, vários registros dentro de uma tabela podem conter os mesmos valores, com exceção da chave primária. Com isso muitas consultas podem trazer informações erradas. Exemplo: quais as unidades de produtos, diferentes, na tabela produto? Select DISTINCT unidade, From produto; • Agrupando informações selecionadas (GROUP BY) Utilizando a cláusula GROUP BY, é possível organizar a seleção de dados em grupos determinados. • Forma: Select <nome da(s) coluna(s)> From <tabela> <where condição(ões)> group by <nome da(s) coluna(s)>; order by <nome da(s) coluna(s)>; Exemplo: Listar o número de produtos que cada pedido contém. Select num_pedido, total_produtos = COUNT (*) From item_pedido Group by num_pedido Centro Universitário Salesiano de Campinas 49