Arquivo da tag: programação

ADO – Localizando Informações

Quando falamos a nível de dados (campos e registros), estamos tratando com o objeto Recordset. Vamos ver como encontrar dados específicos em um Recordset ADO. Lembrando que um objeto Recordset possui muitas funções úteis, dentre elas, as mais usadas são bookmark, Find, Seek e Filter.

Usando Bookmarks (marcadores)

Um bookmark de um recordset é como um cursor que aponta para um registro específico dentro do Recordset, identificando-o de forma única. Fazendo uma analogia: ao ler um livro, você não costuma usar um marcador para indicar em qual página parou? O bookmark funciona da mesma forma. Para usá-lo em um objeto Recordset, as etapas são as seguintes:

  • Defina uma variável para ser usada como marcador:
    Dim marcador as variant
  • Quando desejar marcar uma posição em um recordset no registro atual usando a variável definida acima, faça:
    marcador = rs.bookmark
  • Para retornar à posição marcada, faça:
    rs.bookmark = marcador

Mas, atenção! Nem todos os registros suportam bookmarks. Para verificar se um recordset suporta bookmarks, use a instrução:

blnmarcador = rs.Supports(adBookmarks)

O método Supports, usando o argumento adBookmark retorna True se o recordset suporta bookmarks e FALSE caso contrário.

Localizando dados com ADO

Basicamente, temos dois métodos para localizar dados em um recordset usando ADO: Find e Seek.

Usando o método Find

O método Find é usado para encontrar um registro que contém um determinado valor em um determinado campo do registro. Você define um critério de busca e se o critério for satisfeito, o ponteiro do registro se posiciona no registro que atendeu o critério, se não, o ponteiro se posiciona no fim do recordset. A sintaxe é:

Find (criterio, SkipRows, searchDirection, star)

onde:

criterio – é uma string contendo o nome da coluna, o operador de comparação e o valor que desejamos localizar. Exemplos:

"FornecedorID >= 7"
"DataPedido = #07/08/2014#"
"Codigo > 7"
"Nome = '" & variavel & "'"

Lembrando que os valores strings devem vir entre aspas simples (‘teste’) e as datas devem ser iniciadas e terminadas com o símbolo (#).

SkipRows – define o deslocamento da linha atual ou o bookmark padrão para iniciar a busca. O padrão é começar na linha atual e terminar na última linha.

searchDirection – indica a direção em que o recordset é percorrido. Os valores podem ser:

adSearchForward ou adSearchBackward – a busca irá parar no início ou no fim do recordset dependendo destes valores. Se a busca é iniciada para frente e nada for encontrado, o cursor do recordset é definido para além do último registro e a propriedade EOF (En Of File) retorna TRUE. Se a busca é feita para trás e nada for achado, o cursor é definido para além do início do arquivo e a propriedade BOF (Beginning Of File) retorna TRUE.

start – define um bookmark de início para a busca.

OBS.: Se você não definir a posição do cursor na linha atual quando for iniciar a busca, irá ocorrer um erro. Por isso, antes de usar o método Find, você pode mover o cursor para o início do arquivo usando o método MoveFirst.

Na prática

  • Inicie um novo projeto no VB e faça referência a biblioteca ADO na opção do menu Project -> References.
  • Insira o codigo abaixo no projeto:
'Define as variáveis objetos que serão usadas para a conexão e para o recordset
Dim cnn As New ADODB.connection
Dim rst As New ADODB.connection

Private Sub Form_Load()

Dim criterio As String

'Abre uma conexão
cnn.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Northwind.mdb;"

'Abre o recordset
'Definimos o tipo de cursor usado, no caso usamos o cursor do lado do cliente (adUseClient) e abrimos um recordset com os parâmetros adOpenKeyset (permite alteração) e adLockOptimistic (usa bloqueio pessimista, ou seja, mantém o bloqueio até usar o método para atualizar)
rst.CursorLocation = adUseClient
rst.Open "Select * From Suppliers", cnn, adOpenKeyset, adLockOptimistic, adCmdText

'Move para o primeiro registro
rst.MoveFirst

'Define o critério para busca e a inicia com o método Find usando o parâmetro adSearchForward, que busca do início para o fim
criterio = "Country Like 'A%'"

'Inicia busca no recordset
rst.Find criterio, 0, adSearchForward

'Percorre o recordset até o final, imprimindo o campo CompanyName e posicionando a partir do bookmark anterior, com avanço de um registro para frente a partir do bookmark marcador. Note que usamos o bookmark para armazenar a posição atual do registro e usamos esta posição inicial para a próxima busca
While Not rst.EOF
   Debug.Print rs("CompanyName")
   marcador = rst.Bookmark
   rs.Find criterio, 1, adSearchForward, marcador
Wend
End Sub

Usando o método Seek

O método Seek permite procurar em uma coluna. Ele só encontra valores iguais ao valor da procura e precisa de um provedor de dados que permita a utilização da propriedade Index. Além disso, o método Seek requer um cursor do lado do servidor.

Atualmente, somente alguns provedores permitem usar a propriedade Index e o método Seek do objeto Recordset para procurar por valores em um índice de uma tabela. O provedor OLE DB – Provider for Microsoft Jet 4.0 (utilizado para conectar a um banco de dados Access) permite a utilização do método Seek.

Para verificar se o provedor suporta a propriedade Index e o método Seek, utilize o método Supports com os parâmetros adIndex e adSeek.

If rs.Supports(adIndex) then
   msgbox "Este Provedor suporta a propriedade Index"
End If

If rs.Supports(adSeek) then
   msgbox "Este Provedor suporta a propriedade Seek"
End If

É necessário definir a propriedade Index assim que o recordset for aberto para depois usar o método Seek. A propriedade Index indica o nome do índice que estará ativo. Assim, supondo que você possua uma tabela chamada Clientes e queira fazer uma busca pela coluna Nome da tabela, vai precisar definir um índice para esta coluna na tabela dando um nome a ele. O nome do índice pode ser o mesmo do nome da coluna. Para o caso em questão, poderíamos ter criado um índice chamado Nome. Teríamos então:

rs.index = "nome"

Em muitos casos, quando você usa um campo autonumérico no Access e define este campo como uma chave primária, o índice PrimaryKey será criado para esta coluna da tabela. Então, se for usar esta coluna para fazer uma busca usando o Seek, deverá usar a sintaxe:

rs.index = "PrimaryKey"

Depois que a propriedade Index foi definida para o nome do índice existente na tabela, podemos usar o método Seek para procurar na coluna desejada. Quando o método Seek encontrar o registro desejado, o ponteiro irá se posicionar neste registro. Se nada for encontrado, o ponteiro é definido para EOF. A sintaxe é:

rs.Seek Array(ValordaColuna)

Aqui você deve tomar cuidado. Como um índice pode ser constituído de uma ou mais colunas, o termo ValordaColuna indica os valores da coluna. Vamos supor que você tenha uma tabela de Cliente com um campo CodigoID definido como chave primária e queira procurar pelo cliente de código 120. Você deverá procurar pelo valor 120 na coluna CodigoID e deverá fazer:

rs.index = "PrimaryKey"
rs.Seek Array(120)

Se o índice possuir mais de uma coluna, você deverá informar no vetor (array) os valores de todas as colunas contidas no índice. Por exemplo, se uma tabela Pedidos possuir um índice chamado PrimaryKey e for constituído pelos campos CodigoPedido e CodigoProduto, ao usar o método Seek para procurar pelo pedido 23 e código de produto igual a 50, você deverá fazer:

rs.index = "PrimaryKey"
rs.Seek Array(23, 50)

Vejamos agora um exemplo completo usando a propriedade Index e o método Seek. Neste exemplo usaremos o banco de dados Northwind.mdb e a tabela Funcionários. A estrutura e os índices criados são dados abaixo.

Iremos usar o índice chave primária CodigoDoFuncionario para localizar o funcionário e exibir o seu nome.

O projeto usará um formulário, uma caixa de texto e um botão de comando.

Defina as variáveis objeto na seção General Declarations.

Dim cnn As New ADODB.connection
Dim rst As New ADODB.Recordset

O código do botão de comando é:

Private Sub Command1_Click()
If Text1.Text = "" Then
   MsgBox "Informe um valor para a busca"
   Exit Sub
End If

'Abre a conexão
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Northwind.mdb;"

'Abre o recordset
rst.CursorLocation = adUseServer
rst.Open "Funcionarios", cnn, adOpenKeyset, adLockReadOnly, adCmdTableDirect

If rst.Supports(adIndex) And rst.Supports(adSeek) then
   rst.index = "CodigoDoFuncionario"
   rst.MoveFirst
   rst.Seek Array(CLng(Text1.Text))

   If rst.EOF Then
      MsgBox "Funcionário não localizado"
   Else
      MsgBox rst("CodigoDoFuncionario") & " - " & rst("nome") & vbCrLf
   End If
Else
   MsgBox "O Provedor utilizado não suporta Index e Seek"
End If

rst.Close
cnn.Close

Set rs = Nothing
Set cnn = Nothing

End Sub

Observe que antes de iniciar a busca, verificamos se o provedor suporta a utilização de Index e Seek. Se o método Supports é novo para você, ele pode ser usado com as seguintes constantes:

  • adAddNew – verifica se novos registros podem ser adicionados
  • adApproxPosition – verifica se as propriedades AbsolutePage e AbsolutePosition estão disponíveis
  • adBookMark – verifica se podemos usar um marcador no recordset
  • adDelete – verifica se os registros poderão ser excluídos
  • adHoldRecords – verifica se podemos recuperar os registros sem submeter as alterações
  • adResync – verifica se o método Resynd está disponível
  • adUpdate – verifica se o conjunto de registros permite a atualização
  • adUpdateBatch – verifica se o recordset permite a atualização em lote (via UpdateBatch)

Escrevendo com PHP

Este post é bem básico, pois é destinado a quem está começando com PHP.

O primeiro passo para começar a programar com PHP é inicializar o servidor, como vimos em post anterior.

Após inicializar o servidor temos que abrir um editor para escrever nosso código. Vamos usar um bem simples, o Bloco de Notas.

Todo código PHP deve obrigatoriamente estar entre as tags <?php ?>.

Escrevendo o primeiro código

Dentro do Bloco de Notas digite o seguinte comando:

<?php
  echo 'Escrevendo meu primeiro comando';
?>

Após escrever o primeiro comando, salve o arquivo dentro da pasta do servidor para que seja possível visualizar o resultado no navegador.

Clique em Arquivo > Salvar.

Na opção Tipo, altere para Todos os arquivos (*.*), como mostra na imagem abaixo.

php-comandos-echo

 

 

 

 

 

 

 

 

Selecione o local onde este arquivo deve ser salvo. O Xampp tem uma pasta especifica chamada htdocs, que é onde ficam os projetos/arquivos salvos para visualização no navegador.

Selecione o diretório C:/xampp/htdocs

Observação: Se você instalou o servidor em outro diretório, seu caminho pode ser diferente.

Digite o seguinte nome comandoecho.php, não esquecendo de digitar o ‘.php’.

Sua tela deve estar assim:

php-comandos-echo-salvando

Clique em Salvar.

Para visualizar o resultado do código, abra o navegador.

Digite o seguinte endereço: http://localhost/comandoecho.php

php-comandos-echo-navegador

 

Começar a Programar

Antes de começar a programar, é necessário saber algumas noções de programação, e essas noções envolvem principalmente o raciocínio lógico. A programação destina-se a resolver problemas da forma mais simples possível, eliminando processos redundantes e melhorando a obtenção de resultados.

Estrutura da programação

  • Análise do problema (dados de entrada, dados de saída, relações de transformação)
  • Desenvolvimento do algoritmo
  • Codificação na linguagem de programação
  • Execução e testes.

Dados de entrada: dados que são necessários fornecer para que possam ser calculados os dados de saída.

Dados de saída: resultados a obter.

Relações de transformação: relações matemáticas ou de qualquer outra espécie que permitam transformar os dados de entrada nos dados de saída.

Algoritmo: escrita, numa linguagem normalizada, da sequência de operações que definem o problema.

Noções de Algoritmo

Para resolver os problemas em programação, recorreremos à utilização de algoritmos.

E o que é um algoritmo?

Um algoritmo é, nada mais nada menos, do que a sequência de passos a realizar para que possamos chegar à solução de um determinado tipo de problema.

A utilização de algoritmos apenas visa tornar mais fácil a programação, visto que, ao elaborarmos um algoritmo, subdividimos o problema sistematicamente em partes mais pequenas e menos complexas, chegando a um ponto em que compreendemos claramente cada uma das partes.

Assim,podemos indicar sem ambiguidade os passos (algoritmo) para a resolução de problemas:

  • Analisar o problema
  • Conhecer o problema: ouvir o problema, entendê-lo, perceber qual o objetivo
  • Descrever o problema: subdividir o problema (esquematizar), detalhar
  • Resolver o problema: escrever passo-a-passo o raciocínio da solução do problema; verificar se não existe ambiguidade
  • Implementar: esta fase acontece apenas após o problema estar resolvido e consiste em implementar o algoritmo numa linguagem de programação

Linguagens de Programação

Para que um computador produza resultados úteis é necessário indicar as ordens que ele deve obedecer. Essas ordens são uma série de instruções binárias – as únicas instruções que o computador entende, também designadas por código de máquina.

Apesar de ser possível escrever um programa diretamente em código de máquina, dar ordens em número binários é difícil, lento e sujeito a erros. Assim, se desenvolveram linguagens de programação de baixo e alto nível, que são próximas do código de máquina ou da linguagem humana, respectivamente.

É nessas linguagens que são escritos os programas com que os computadores funcionam e que se formam por programas fonte. Assim, uma linguagem de programação é constituída por um conjunto de palavras (ou símbolos) que, colocados segundo determinadas regras, significam operações que o computador deve realizar.

As linguagens de programação têm como função descrever todas as operações a serem efetuadas por um computador, necessárias para se resolver um determinado problema. Desta forma, uma linguagem de programação deve apresentar as seguintes facilidades:

  • Um vocabulário limitado
  • Regras gramaticais simples
  • Ser clara e concisa
  • De aprendizagem simples

Existe uma grande variedade de linguagens de programação:

Linguagens de baixo nível:

  • Linguagem de máquina e linguagens Assembly
  • Vocabulário elementar
  • Processamento de execução rápida
  • Formulação dos problemas extremamente complicada e sujeita a erros

Linguagens de alto nível:

  • BASIC, Fortran, Cobol, C, Pascal, Java, etc.
  • Vocabulário adequado à expressão de grande complexidade
  • Processamento de execução morosa
  • Facilitam a tarefa do programador