VB/ASP – Trabalhando com Arrays

Arrays ???? Rápido um dicionário !!! Uhn… Vejamos :

Arrays – Tipo de variável que armazena um conjunto de valores do mesmo tipo ; Um arranjo de elementos em uma ou mais dimensões ; Uma coleção de elementos do mesmo tipo no qual a posição de cada elemento está definida de forma única por um inteiro.

Obs: Os arrays são semelhantes aos vetores , se você já ouviu falar em vetores e conhece algo sobre eles verá que os conceitos envolvidos são semelhantes.

Acho que não foi um bom começo , mas , vamos tentar melhorar. Primeiro : não vou traduzir a palavra array , array será entendido como um tipo de variável especial. Segundo: vamos ser mais práticos…

Vamos supor que você precise atribuir a três variáveis o nome de três pessoas que constam de uma relação. Como você faria ? Ora, ora… abaixo as três etapas básicas envolvidas no tedioso processo…

'declarando as variáveis
dim snome1 as string
dim snome2 as string
dim snome3 as string

'atribuindo valores
snome1="João da Silva
snome2="Maria Lima"
snome3="Pedro Sabino"

'exibindo o conteúdo
for i=1 to 3
   msgbox snome & i
Next

Você teve que declarar 3 variáveis diferentes , uma para armazenar cada nome, mesmo cada nome sendo do uma variável do tipo string.

Muito Bem, e se a relação tiver 5 pessoas e você precisar atribuir os nomes a variáveis ??? Ô Loco !!!!

Ora por isso é que inventaram os arrays . Vejamos como ficaria…:

'declarando
Dim sNomes(1 to 5) as String
'atribuindo valores
sNomes(1)="João da Silva"
sNomes(2)="Maria Lima"
sNomes(3)="Pedro Sabino"
sNomes(4)="Marcia de Souza"
sNomes(5)="Carlos Manga"
'exibindo o conteúdo
for i=1 to 5
   msgbox snomes(i)
Next

O que há de novo ?

Você declarou somente uma variável – sNomes
Cada nome foi atribuído à variável sNomes , sendo diferenciado apenas por um índice numérico: sNomes(1), sNomes(2), sNomes(3) , sNomes(4) , sNomes(5)
Para recuperar o conteúdo de cada variável usamos o numero que identifica de forma única cada nome em cada variável.

Tudo se passa como se você tivesse um “armário” com 5 “gavetas ” , cada gaveta possuindo um número de identificação , e armazenando um nome distinto.

Conclusão :

Os Arrays permitem que definamos uma série de variáveis pelo mesmo nome diferenciando-as através de um número inteiro chamado índice.
Todos os elementos de um array devem ser do mesmo tipo de dado: string , integer, etc…. ( para que os elementos possam conter diferentes tipos de dados (strings , integers, objects, etc…) você deve definir o array como do tipo Variant )
A quantidade de variáveis definidas por cada índice (número) determina o tamanho do array.

Nota – Os arrays possuem a seguinte característica:

Ao declarar um array da seguinte forma: Dim Teste(4) o array possuirá 5 elementos pois o primeiro elemento terá como índice o número zero. Assim : Teste(0) ,Teste(1), Teste(2), Teste(3) , Teste(4)
Para fugir a esta característica basta você definir o índice inferior e superior do array , assim : Dim Teste(1 to 5) irá produzir :Teste(1) ,Teste(2), Teste(3), Teste(4) , Teste(5)

O VB trabalha com dois tipos de arrays : os fixos , que sempre permanece do mesmo tamanho e os dinâmicos cujo tamanho pode ser alterado em tempo de processamento.

Arrays Fixos

A sintaxe para declarar um array fixo é:

Dim Nome_do_Array(Índíce_Inferior To Índice_Superior) As Tipo_de_Dados

Onde:

Nome_do_Array – O nome dado ao array
Indice_Inferior – o primeiro elemento do array
Indice_Superior – o último elemento
Tipo_de_Dados – um tipo de dados válido. (Integer, Double, String, Date, etc…)

Ex: Dim Numeros(10) as Integer , Dim Nomes(10) as String

ASP – Acessando sua base de dados via OBDC

  'Microsoft SQL Server ODBC Driver example
    cnstr = "driver={SQL Server};server=myserver;" & _
      "database=pubs;uid=sa;pwd="
   cn.Connect = cnstr

   'Microsoft Access ODBC Driver example (version 2.x)
   cnstr = "Driver={Microsoft Access Driver (*.mdb)};" & _
     "Dbq=c:\program files\devstudio\vb\biblio.mdb;" & _
     "Uid=Admin; Pwd="
   cn.Connect = cnstr

   'Microsoft ODBC Driver for Oracle example
   cnstr = "Driver={Microsoft ODBC Driver for Oracle};" & _
    "Server=OracleServer.world; Uid=demo; Pwd=demo"
   ' Note that 1.0 version of the Microsoft  Oracle driver used
   ' "ConnectString" notation instead of "Server" 

NOTE: O nome do driver precisa estar entre {}, assim : “{SQL Server}”

ASP – Como abrir uma conexão com ADO

Existem três maneiras de abrir uma objeto conexão (Connection Object) usando a ADO:

Configurando a propriedade ConnectionString com uma Connect String válida e chamando o método Open(). Esta string de conexão depende de um provedor OLEDB.
Passando uma Connect String valida para o primeiro argumento do método Open()
Passando o OBDC DSN (Data Source Name) e opcionalmente a identificação e a senha para o objeto Connection via método Open()

Existem três maneiras de abrir um Objeto Recordset usando a ADO:

Abrindo um Recordset usando o método Execute(). Sem um objeto Connection.
Abrindo um Recordset usando o método Execute(). Sem um objeto Command.
Abrindo um objeto Recordset sem um objeto Connection ou Command e passando um string de conexão válida para o segundo argumento do Recordset. Usando o método Open().

Vejamos abaixo os exemplos:

      Private Sub cmdOpen_Click()

          Dim Conn1 As New adodb.Connection
          Dim Cmd1 As New adodb.Command
          Dim Errs1 As Errors
          Dim Rs1 As New adodb.Recordset
          Dim i As Integer
          Dim AccessConnect As String

          ' Error Handling Variables
          Dim errLoop As Error
          Dim strTmp As String

          AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
                        "Dbq=nwind.mdb;" & _
                        "DefaultDir=C:\vb6;" & _
                        "Uid=Admin;Pwd=;"

          '---------------------------------------
          ' Métodos do Object Connection
          '---------------------------------------

          On Error GoTo AdoError  ' Tratamento de erros
                                  ' Connection object

          ' Connection Open método 1 -  Open via ConnectionString Property
          Conn1.ConnectionString = AccessConnect
          Conn1.Open
          Conn1.Close
          Conn1.ConnectionString = ""

          ' Connection Open metodo 2 -  Open("[ODBC Connect String]","","")
          Conn1.Open AccessConnect
          Conn1.Close

          ' Connection Open metodo  3 -  Open("DSN","Uid","Pwd")
          Conn1.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
                     "DBQ=nwind.mdb;" & _
                     "DefaultDir=C:\program files\devstudio\vb;" & _
                     "Uid=Admin;Pwd=;"

          Conn1.Close

          '---------------------------------
          ' Métodos do Recordset Object
          '---------------------------------

         ' Não assume que temos um  connection object.
          On Error GoTo AdoErrorLite

          ' Recordset Open Metodo 1 -  Open via Connection.Execute(...)
          Conn1.Open AccessConnect
          Set Rs1 = Conn1.Execute("SELECT * FROM Employees")
          Rs1.Close
          Conn1.Close

          ' Recordset Open Metodo 2 -  Open via Command.Execute(...)
          Conn1.ConnectionString = AccessConnect
          Conn1.Open
          Cmd1.ActiveConnection = Conn1
          Cmd1.CommandText = "SELECT * FROM Employees"
          Set Rs1 = Cmd1.Execute
          Rs1.Close
          Conn1.Close
          Conn1.ConnectionString = ""

          ' Recordset Open Metodo 3 -  Open sem Connection &  e sem Connect String
          Rs1.Open "SELECT * FROM Employees", AccessConnect, adOpenForwardOnly
          Rs1.Close
Done:

          Set Rs1 = Nothing
          Set Cmd1 = Nothing
          Set Conn1 = Nothing
          Exit Sub
AdoError:
          i = 1
          On Error Resume Next
          'numera a coleção erros e mostra as propriedades de cada objeto error
          Set Errs1 = Conn1.Errors
          For Each errLoop In Errs1
           With errLoop
              strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
              strTmp = strTmp & vbCrLf & "   ADO Error   # " & .Number
              strTmp = strTmp & vbCrLf & "   Description   " & .Description
              strTmp = strTmp & vbCrLf & "   Source        " & .Source
              i = i + 1
           End With
          Next

AdoErrorLite:

          ' Informação do objeto Error do VB
          strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
          strTmp = strTmp & vbCrLf & "   Generated by " & Err.Source
          strTmp = strTmp & vbCrLf & "   Description  " & Err.Description
          MsgBox strTmp
          ' Encerra o tratamento de erros
          On Error GoTo 0
          GoTo Done

End Sub