Módulo 14- Acesso a Bases de Dados no VB 6.0




                      Conceição Maroco / Rui Inácio   1
   Front-end – Aplicação que operamos e que
      interage com o back-end (user-friendly).
     Back-end – Base de dados, local onde a
      informação fica armazenada.

                        Gestão Base de dados
Back-end

Front-end
              Aplicação        Aplicação                        Aplicação
               Cliente          Cliente                          Cliente
             Utilizador A     Utilizador B                     Utilizador C


                               Conceição Maroco / Rui Inácio                  2
   2 aproximações com Objectos de Dados.
    ◦ DAO (Data Access Objects)
       Estratégia de acesso original (até ao VB 6.0)
       Extremamente ligado ao MS Access
    ◦ ADO (ActiveX Data Objects)
       Uma nova aproximação (a partir do VB 6.0)
       Mais genérica
       Também utilizada com ASP (VB Script active server
        pages)



                                Conceição Maroco / Rui Inácio   3
   Jet Database Engine: Motor de base de dados do VB
    para MS Access e bases de dados ISAM (Indexed
    Sequential Access Method)
   ODBC (Open Database Connectivity): Interface para
    bases de dados relacionais SQL.
   RDO (Remote Data Objects): Componente original
    para aceder a bases de dados numa rede
   OLE DB (Object Linking & Embedding Databases):
    nova interface de acesso a bases de dados SQL e
    não-SQL.



                             Conceição Maroco / Rui Inácio   4
   Motores de bases de dados: Executam as
    operações de criação, inserção, alteração,
    eliminação, … nas bases de dados.




                            Conceição Maroco / Rui Inácio   5
Aplicação VB

                      ADO

                 OLE DB

 ODBC

 Dados SQL                    Dados não-SQL
ex: MS Access                 ex: ficheiros de
  (JET) , SQL                 texto, folhas de
    Server,..                    cálculo,..



                      Conceição Maroco / Rui Inácio   6
   Baseados em Controlos de dados
    ◦ Nenhuma programação (ou pouca)
    ◦ Associada a algumas formas de controlos (como
      DataGrid, DataList, etc)
    ◦ Visão dos dados é limitada

   Baseada na programação
    ◦ Utiliza o objecto Connection (ADO)
    ◦ Permite um melhor controlo dos dados




                             Conceição Maroco / Rui Inácio   7
   Componentes (Project/Components)
    ◦ Microsoft ADO Data Control 6.0 (OLEDB)
    ◦ Microsoft Data Grid Control 6.0 (OLEDB)
    ◦ Microsoft Data List Controls 6.0 (OLEDB)
      DataList
      DataCombo


   Bibliotecas (Project/References)
    ◦ Microsoft ActiveX Data Objects 2.0 Library (ou mais
      recente possível)



                                Conceição Maroco / Rui Inácio   8
Conceição Maroco / Rui Inácio   9
Conceição Maroco / Rui Inácio   10
   Data Control Object (Adodc1)
    ◦ Connection String: Carregar botão Build, indicar o
      motor da base de dados (JET) e escolher a localização
      da base de dados. Testar a ligação.
    ◦ Record Source: escrever um expressão SQL (SELECT *
      FROM Fornecedores;) ou escolher a tabela
      Fornecedores
    ◦ Command Type: 1-adCmdText para expressão SQL
      query ou 2-adCmdTable para tabela/consulta

   Textbox (Text1)
    ◦ Data Source - Adodc1
    ◦ Data Field - NomeForn

                               Conceição Maroco / Rui Inácio   11
   Requer o objecto ADO library
    (Project|References)
   Requer a criação, configuração e iniciação
    das variáveis:
    ◦ Objecto Connection (Connection String)
    ◦ Objecto Recordset (Expressão/Tabela SQL)
   Processamento do objecto Recordset
   Término de Recordset e Connection

                           Conceição Maroco / Rui Inácio   12
Conceição Maroco / Rui Inácio   13
   Connection Object
   Recordset Object
   Field Object
   Command Object
   Parameter Object
   Error Object




                        Conceição Maroco / Rui Inácio   14
Command



Connection       Ligação                                            Field



Conexão activa
                                                              Fields Collection
                           RecordSet



                              Conceição Maroco / Rui Inácio                       15
   Connection String
    ◦ Provider (exemplo de Provider =
      Microsoft.Jet.OLEDB.4.0;)
    ◦ Data Source (ex. de Data Source =
      C:dbprojemp.mdb;)
    ◦ Username & Password (ex. de User ID = Admin;
      Password = ;)
        Dim <connection variable> As ADODB.Connection
        Set <connection variable> = New ADODB.Connection
        <connection variable>.Open ConnectionString




                                Conceição Maroco / Rui Inácio   16
Connection Object Methods   Descrição
Open                        Abre uma ligação à base de dados
Close                       Fecha a ligação à base de dados
Execute                     Executa uma instrução SQL
BeginTrans                  Começa uma transacção de dados
CommitTrans                 Faz o commit da transacção
RollBackTrans               Cancela todas as operações durante
                            uma transacção




                                Conceição Maroco / Rui Inácio    17
Connection Object   Descrição
Properties
ConnectionString    Contêm a informação necessária à ligação

ConnectionTimeOut   Tempo máximo da ligação

CommandTimeOut      Tempo máximo para execução de uma
                    instrução.
State               Indica o estado da ligação: ligado ou desligado
Provider            Indica o fornecedor do serviço.
Version             Versão
CursorLocation      Localização do cursor




                                 Conceição Maroco / Rui Inácio        18
   Array bidimensional que contêm uma tabela/resultado de SQL
   ADO permite a utilização de 4 tipos diferentes de cursores:
    ◦ Dynamic Cursor (CursorType = adOpenDynamic)
       Percorre livremente um RecordSet (avanços, recúos, BOF, EOF)
    ◦ Keyset Cursor (CursorType = adOpenKeyset)
       Semelhante ao Dynamic Cursor, mas não permite alterações
        em registos utilizados por outros utilizadores (lento)
    ◦ Static Cursor (CursorType = adOpenStatic)
       Não permite visualizar as alterações introduzidas por outros
        utilizadores (mais rápido)
    ◦ Forward Only Cursor (CursorType = adOpenForwardOnly)
       Como o static cursor mas não autoriza recúos no recordset (o
        mais rápido)


                                     Conceição Maroco / Rui Inácio     19
Dim rst As ADODB.Recordset
         Set rst = New ADODB.Recordset
   Os métodos principais do RecordSet:
    ◦ AddNew, Delete, Update
    ◦ Open, Close, Cancel
          rst.Open <SQL query/Table>, <connection variable>, <LockType>
       Exemplo: rst.Open “Fornecedores”, adoconn
    ◦ Move, MoveFirst, MoveNext, MovePrevious, MoveLast
    ◦ Seek – procura o índice introduzido e desloca-se para a linha
      pretendida
    ◦ Find – procura a linha com o valor pedido (o seek é mais rápido
      mas implica a utilização de um índice)



                                       Conceição Maroco / Rui Inácio      20
   O objecto Fields é um Collection – significa que
    possui um conjunto de valores (neste caso,
    Field)
   Exemplos:
Dim fld As Field
rst.Open “Forncedores”  devolve todos os registos da tabela
   Fornecedores para o rst
Set fld = rst.Fields(1)  atribui o 2º recordset field (NomeForn) para fld

Debug.Print fld.Name  faz print do nome do Campo na janela Immediate
Debug.Print rst.Fields.(“CodForn”)  faz print do registo actual do
  recordSet para o campo CodForn
Debug.Print rst.Fields.Count  Faz print do número de campos presentes
  no RecordSet rst


                                         Conceição Maroco / Rui Inácio       21
rst.Open “SELECT * FROM Fornecedores;”, conn
Print “CodForn”, “NomeForn”, “Endereço”,
  “Telefone”
Do Until rst.EOF
 Print rst(0), rst(1), rst(2), rst(3)
 rst.MoveNext
Loop
rst.Close
conn.Close


                        Conceição Maroco / Rui Inácio   22
rst.Open “SELECT * FROM Fornecedores;”, conn
rst.Find = “CodForn = 1 ”
Print rst.Fields(2), rst.Fields(3)




                        Conceição Maroco / Rui Inácio   23

LDP mod 14 - Acesso a bases de dados

  • 1.
    Módulo 14- Acessoa Bases de Dados no VB 6.0 Conceição Maroco / Rui Inácio 1
  • 2.
    Front-end – Aplicação que operamos e que interage com o back-end (user-friendly).  Back-end – Base de dados, local onde a informação fica armazenada. Gestão Base de dados Back-end Front-end Aplicação Aplicação Aplicação Cliente Cliente Cliente Utilizador A Utilizador B Utilizador C Conceição Maroco / Rui Inácio 2
  • 3.
    2 aproximações com Objectos de Dados. ◦ DAO (Data Access Objects)  Estratégia de acesso original (até ao VB 6.0)  Extremamente ligado ao MS Access ◦ ADO (ActiveX Data Objects)  Uma nova aproximação (a partir do VB 6.0)  Mais genérica  Também utilizada com ASP (VB Script active server pages) Conceição Maroco / Rui Inácio 3
  • 4.
    Jet Database Engine: Motor de base de dados do VB para MS Access e bases de dados ISAM (Indexed Sequential Access Method)  ODBC (Open Database Connectivity): Interface para bases de dados relacionais SQL.  RDO (Remote Data Objects): Componente original para aceder a bases de dados numa rede  OLE DB (Object Linking & Embedding Databases): nova interface de acesso a bases de dados SQL e não-SQL. Conceição Maroco / Rui Inácio 4
  • 5.
    Motores de bases de dados: Executam as operações de criação, inserção, alteração, eliminação, … nas bases de dados. Conceição Maroco / Rui Inácio 5
  • 6.
    Aplicação VB ADO OLE DB ODBC Dados SQL Dados não-SQL ex: MS Access ex: ficheiros de (JET) , SQL texto, folhas de Server,.. cálculo,.. Conceição Maroco / Rui Inácio 6
  • 7.
    Baseados em Controlos de dados ◦ Nenhuma programação (ou pouca) ◦ Associada a algumas formas de controlos (como DataGrid, DataList, etc) ◦ Visão dos dados é limitada  Baseada na programação ◦ Utiliza o objecto Connection (ADO) ◦ Permite um melhor controlo dos dados Conceição Maroco / Rui Inácio 7
  • 8.
    Componentes (Project/Components) ◦ Microsoft ADO Data Control 6.0 (OLEDB) ◦ Microsoft Data Grid Control 6.0 (OLEDB) ◦ Microsoft Data List Controls 6.0 (OLEDB)  DataList  DataCombo  Bibliotecas (Project/References) ◦ Microsoft ActiveX Data Objects 2.0 Library (ou mais recente possível) Conceição Maroco / Rui Inácio 8
  • 9.
    Conceição Maroco /Rui Inácio 9
  • 10.
    Conceição Maroco /Rui Inácio 10
  • 11.
    Data Control Object (Adodc1) ◦ Connection String: Carregar botão Build, indicar o motor da base de dados (JET) e escolher a localização da base de dados. Testar a ligação. ◦ Record Source: escrever um expressão SQL (SELECT * FROM Fornecedores;) ou escolher a tabela Fornecedores ◦ Command Type: 1-adCmdText para expressão SQL query ou 2-adCmdTable para tabela/consulta  Textbox (Text1) ◦ Data Source - Adodc1 ◦ Data Field - NomeForn Conceição Maroco / Rui Inácio 11
  • 12.
    Requer o objecto ADO library (Project|References)  Requer a criação, configuração e iniciação das variáveis: ◦ Objecto Connection (Connection String) ◦ Objecto Recordset (Expressão/Tabela SQL)  Processamento do objecto Recordset  Término de Recordset e Connection Conceição Maroco / Rui Inácio 12
  • 13.
    Conceição Maroco /Rui Inácio 13
  • 14.
    Connection Object  Recordset Object  Field Object  Command Object  Parameter Object  Error Object Conceição Maroco / Rui Inácio 14
  • 15.
    Command Connection Ligação Field Conexão activa Fields Collection RecordSet Conceição Maroco / Rui Inácio 15
  • 16.
    Connection String ◦ Provider (exemplo de Provider = Microsoft.Jet.OLEDB.4.0;) ◦ Data Source (ex. de Data Source = C:dbprojemp.mdb;) ◦ Username & Password (ex. de User ID = Admin; Password = ;) Dim <connection variable> As ADODB.Connection Set <connection variable> = New ADODB.Connection <connection variable>.Open ConnectionString Conceição Maroco / Rui Inácio 16
  • 17.
    Connection Object Methods Descrição Open Abre uma ligação à base de dados Close Fecha a ligação à base de dados Execute Executa uma instrução SQL BeginTrans Começa uma transacção de dados CommitTrans Faz o commit da transacção RollBackTrans Cancela todas as operações durante uma transacção Conceição Maroco / Rui Inácio 17
  • 18.
    Connection Object Descrição Properties ConnectionString Contêm a informação necessária à ligação ConnectionTimeOut Tempo máximo da ligação CommandTimeOut Tempo máximo para execução de uma instrução. State Indica o estado da ligação: ligado ou desligado Provider Indica o fornecedor do serviço. Version Versão CursorLocation Localização do cursor Conceição Maroco / Rui Inácio 18
  • 19.
    Array bidimensional que contêm uma tabela/resultado de SQL  ADO permite a utilização de 4 tipos diferentes de cursores: ◦ Dynamic Cursor (CursorType = adOpenDynamic)  Percorre livremente um RecordSet (avanços, recúos, BOF, EOF) ◦ Keyset Cursor (CursorType = adOpenKeyset)  Semelhante ao Dynamic Cursor, mas não permite alterações em registos utilizados por outros utilizadores (lento) ◦ Static Cursor (CursorType = adOpenStatic)  Não permite visualizar as alterações introduzidas por outros utilizadores (mais rápido) ◦ Forward Only Cursor (CursorType = adOpenForwardOnly)  Como o static cursor mas não autoriza recúos no recordset (o mais rápido) Conceição Maroco / Rui Inácio 19
  • 20.
    Dim rst AsADODB.Recordset Set rst = New ADODB.Recordset  Os métodos principais do RecordSet: ◦ AddNew, Delete, Update ◦ Open, Close, Cancel rst.Open <SQL query/Table>, <connection variable>, <LockType>  Exemplo: rst.Open “Fornecedores”, adoconn ◦ Move, MoveFirst, MoveNext, MovePrevious, MoveLast ◦ Seek – procura o índice introduzido e desloca-se para a linha pretendida ◦ Find – procura a linha com o valor pedido (o seek é mais rápido mas implica a utilização de um índice) Conceição Maroco / Rui Inácio 20
  • 21.
    O objecto Fields é um Collection – significa que possui um conjunto de valores (neste caso, Field)  Exemplos: Dim fld As Field rst.Open “Forncedores”  devolve todos os registos da tabela Fornecedores para o rst Set fld = rst.Fields(1)  atribui o 2º recordset field (NomeForn) para fld Debug.Print fld.Name  faz print do nome do Campo na janela Immediate Debug.Print rst.Fields.(“CodForn”)  faz print do registo actual do recordSet para o campo CodForn Debug.Print rst.Fields.Count  Faz print do número de campos presentes no RecordSet rst Conceição Maroco / Rui Inácio 21
  • 22.
    rst.Open “SELECT *FROM Fornecedores;”, conn Print “CodForn”, “NomeForn”, “Endereço”, “Telefone” Do Until rst.EOF Print rst(0), rst(1), rst(2), rst(3) rst.MoveNext Loop rst.Close conn.Close Conceição Maroco / Rui Inácio 22
  • 23.
    rst.Open “SELECT *FROM Fornecedores;”, conn rst.Find = “CodForn = 1 ” Print rst.Fields(2), rst.Fields(3) Conceição Maroco / Rui Inácio 23