base de dados vb6

15
Bases de dados com ADO em VB6 – João A. Ferreira – [email protected] 1 Bases de dados com ADO Exercício 1 – Criar uma aplicação para adicionar, alterar e remover registos de uma tabela Neste exercício vamos criar um acesso simples à base de dados Northwind.MDB do Office/VB. A funcionalidade básica do programa será movimentar-se entre registos, adicionar registos, eliminar registos e gravar alterações a registos. Este primeiro exercício usará o componente ADO (ADODC). 1. Crie um novo projecto VB6 2. Adicione o componente ADODC fazendo Project | Components e procure por Microsoft ADO Data Control 6.0 (OLEDB). Seleccione-o e faça OK. 3. Arraste-o para o formulário e defina as suas propriedades da seguinte forma: Propriedade Valor Name BaseDados 4. Agora, na propriedade ConnectionString do controlo ADODC clique no botão para iniciar o formulário de configuração da base de dados. 5. Seleccione “Use Connection String”. Faça Build. 6. No “Fornecedor” seleccione Microsoft Jet 4.0 OLE DB Provider. Faça seguinte. 7. Depois, especifique a base de dados Northwind.mdb. Aqui deve especificar sempre a base de dados que está a aceder. Nota: C:\Programas\Microsoft Office\Office\1033 8. Faça “Testar Ligação” para verificar que a base de dados está correctamente ligada à sua aplicação. Faça OK e depois novamente OK. 9. Analise a ConnectionString que o VB criou para si: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Programas\Microsoft Office\Office\1033\FPNWIND.MDB;Persist Security Info=False 10. Agora, vá até à propriedade RecordSource. Aqui deve especificar as tabelas que deseja extrair da base de dados para trabalhar no Visual Basic. Pode escrever uma sintaxe SQL ou um próprio objecto do Access (Tabela, consulta, etc). 11. No nosso caso, vamos usar uma simples consulta SQL. Assim, seleccione adCmdText de Command Type e escreva: SELECT * FROM CUSTOMERS

Upload: clayton-souza

Post on 25-Jul-2015

657 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

1

Bases de dados com ADO Exercício 1 – Criar uma aplicação para adicionar, alterar e remover registos de uma tabela Neste exercício vamos criar um acesso simples à base de dados Northwind.MDB do Office/VB. A funcionalidade básica do programa será movimentar-se entre registos, adicionar registos, eliminar registos e gravar alterações a registos. Este primeiro exercício usará o componente ADO (ADODC).

1. Crie um novo projecto VB6 2. Adicione o componente ADODC fazendo Project | Components e procure por Microsoft ADO

Data Control 6.0 (OLEDB). Seleccione-o e faça OK. 3. Arraste-o para o formulário e defina as suas propriedades da seguinte forma:

Propriedade Valor Name BaseDados

4. Agora, na propriedade ConnectionString do controlo ADODC clique no botão para iniciar o formulário de configuração da base de dados.

5. Seleccione “Use Connection String”. Faça Build.

6. No “Fornecedor” seleccione Microsoft Jet 4.0 OLE DB Provider. Faça seguinte.

7. Depois, especifique a base de dados Northwind.mdb. Aqui deve especificar sempre a base de

dados que está a aceder. Nota: C:\Programas\Microsoft Office\Office\1033

8. Faça “Testar Ligação” para verificar que a base de dados está correctamente ligada à sua aplicação. Faça OK e depois novamente OK.

9. Analise a ConnectionString que o VB criou para si:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Programas\Microsoft Office\Office\1033\FPNWIND.MDB;Persist Security Info=False

10. Agora, vá até à propriedade RecordSource. Aqui deve especificar as tabelas que deseja extrair da base de dados para trabalhar no Visual Basic. Pode escrever uma sintaxe SQL ou um próprio objecto do Access (Tabela, consulta, etc).

11. No nosso caso, vamos usar uma simples consulta SQL. Assim, seleccione adCmdText de

Command Type e escreva: SELECT * FROM CUSTOMERS

Page 2: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

2

12. Agora, desenhe a seguinte interface no VB tendo em conta as propriedades definidas abaixo:

NOTA: pode desenhar as Labels alterando apenas a propriedade Caption. 1ª Caixa de texto Propriedade Valor Name TxtID Text (vazio) 2ª Caixa de texto Propriedade Valor Name TxtCompanhia Text (vazio) 3ª Caixa de texto Propriedade Valor Name TxtEndereco Text (vazio) 4ª Caixa de texto Propriedade Valor Name TxtCidade Text (vazio) 1º botão de comando Propriedade Valor Name cmdUltimo Caption <<

Page 3: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

3

2º botão de comando Propriedade Valor Name CmdPrimeiro Caption << 3º botão de comando Propriedade Valor Name CmdAnterior Caption < 4º botão de comando Propriedade Valor Name CmdSeguinte Caption > 5º botão de comando Propriedade Valor Name CmdUltimo Caption << 6º botão de comando Propriedade Valor Name CmdAdicionar Caption Adicionar 7º botão de comando Propriedade Valor Name CmdGravar Caption Gravar 8º botão de comando Propriedade Valor Name CmdEliminar Caption Eliminar

13. Neste momento, possui uma ligação e uma interface, mas necessita que os campos da interface sejam preenchidos com os dados da base de dados. Para isso, em cada caixa de texto vamos fazer com que surja um determinado campo da tabela Customers (especificada na propriedade RecordSource).

14. Edite as propriedades DataSource e DataMember de cada caixa, ou seja, em DataSource

especifique o Controlo ADODC que está no formulário, neste caso BaseDados. Em DataMember, o campo da tabela que quer que a caixa de texto mostre.

Page 4: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

4

15. Vamos agora programar os controlos de navegação. 16. No evento Click de cmdPrimeiro escreva o seguinte código:

'mover para o primeiro registos BaseDados.Recordset.MoveFirst

17. No evento Click de cmdAnterior escreva o seguinte: Private Sub cmdAnterior_Click() 'mover para o registo anterior BaseDados.Recordset.MovePrevious 'se está no último registo... If BaseDados.Recordset.BOF = True Then

BaseDados.Recordset.MoveNext MsgBox "Atingiu o último registo..Não há mais registos", vbCritical End If End Sub

18. No evento Click de cmdSeguinte: Private Sub cmdSeguinte_Click() 'navegar par o registo seguinte BaseDados.Recordset.MoveNext 'se atingiu o último registo.. If BaseDados.Recordset.AbsolutePosition < 0 Then BaseDados.Recordset.MovePrevious MsgBox "Atingiu o último registo..não há mais registos", vbCritical End If End Sub

19. No evento Click de cmdUltimo: Private Sub cmdUltimo_Click() BaseDados.Recordset.MoveLast End Sub

20. Neste momento, o programa já navega pelos registos da tabela Customers da base de dados Northwind. Faça F5 e experimente.

Page 5: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

5

21. Agora, vamos aprender a adicionar novos registos. No evento Click de cmdAdicionar escreva o seguinte código:

Private Sub cmdAdicionar_Click() 'adicionar novo registo BaseDados.Recordset.AddNew End Sub

22. Com esta instrução colocou o Recordset (conjunto de dados da tabela) em modo de “Adição”. Automaticamente os campos ficaram vazios para que o utilizador possa inserir novos valores. Após preencher os campos de forma correcta, o utilizador irá fazer clique em Gravar o qual irá gravar as alterações efectuadas. Para isso, use o evento Click de cmdGravar:

Private Sub cmdGravar_Click() 'actualizar as alterações BaseDados.Recordset.Update End Sub NOTA: para além de gravar o novo registo, a função UPDATE possibilita gravar qualquer alteração feita a um registo.

23. Finalmente, vamos aprender como eliminar registos. Para isso, programe o evento Click de cmdEliminar:

Private Sub cmdEliminar_Click() 'perguntar If MsgBox("Vai eliminar o actual registo. Tem a certeza?", vbQuestion + vbYesNo) = vbYes Then 'eliminar BaseDados.Recordset.Delete 'mover para o anterior BaseDados.Recordset.MovePrevious End If End Sub

24. Execute o projecto e adicione, altere e elimine registos ao seu gosto.

Page 6: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

6

Exercício 2 – Pesquisar por dados numa tabela usando ADODC. Neste projecto vamos pesquisar dados usando o controlo ADO. Abra o projecto do exercício 3.2 e adicione um botão com a propriedade Name definida para cmdPesquisar. No evento Click deste botão adicione o seguinte código para pesquisar e localizar “cidades” de acordo com o critério especificado pelo utilizador: Private Sub cmdPesquisar_Click() Dim str As String str = InputBox("Que cidade deseja procurar?") BaseDados.Recordset.Find ("City = '" & str & "'") If BaseDados.Recordset.EOF Then BaseDados.Recordset.MoveFirst MsgBox "Não achou nenhuma cidade!" End If End Sub No método Find tem de especificar uma instrução SQL usando o campo que deseja pesquisar. Poderá usar operadores como AND, OR ou mesmo LIKE. Exercício 3 – Ordenar os dados de uma tabela com ADODC.

1. Voltando ao projecto anterior, crie um novo botão chamado “cmdOrdenar” e com Caption definido para “Ordenar”. No seu evento Click, adicione o seguinte código para ordenar o campo Cidade alfabeticamente de forma ascendente:

NOTA: para definir outros campos, teria que criar caixas de opção para o utilzador. Private Sub cmdOrdenar_Click() BaseDados.Recordset.Sort = "City ASC" BaseDados.Recordset.MoveFirst End Sub

2. Agora faça F5 para e clique sobre Ordenar para ver o efeito. NOTA: Para ordenar de forma descendente use DESC. Também pode usar SORT.

Page 7: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

7

Exercício 4 – Filtrar dados usando o ADODC

1. Se ainda houver espaço, adicione um botão para filtrar os dados da tabela. Queremos apenas mostrar a cidade especifica pelo utilizador. Para isso, dê o nome ao novo botão de cmdFiltrar e a caption para “Filtrar”. No evento Click faça:

Private Sub cmdFiltrar_Click() Dim str As String str = InputBox("Que cidade deseja listar?") BaseDados.Recordset.Filter = "City = '" & str & "'" BaseDados.Recordset.MoveFirst End Sub

2. Faça F5. Escreva London, por exemplo. Irá verificar que apenas irão estar presentes os clientes de Londres.

Exercício 5 – Imprimir um relatório com o Data Report e um RecordSet

1. Abra o projecto que temos vindo a desenvolver e, se ainda houver espaço, desenhe um botão de comando chamado “cmdImprimir” e com Caption definida para Imprimir.

2. Agora, faça Project | Add Data Report para adicionar um relatório ao seu projecto

3. Modifique a propriedade Name do relatório para rptClientes

4. Agora, arraste duas rptTextBox (textbox dos relatórios) para a secção Detail. Defina a propriedade DataField da primeira caixa de texto para CompanyName e a segunda caixa para City.

5. Arraste duas rptLabel (label dos relatórios) para a secção Page Header. Defina a propriedade

Caption da primeira como “Nome” e a segunda como “Cidade”.

6. Neste momento tem criado um pequeno relatório que irá listar todas as empresas (nome) e as respectivas cidades. Antes disso, necessita de indicar ao relatório quais os dados a serem listados. Para isso, adicione o seguinte código ao evento Click de cmdImprimir:

Private Sub cmdImprimir_Click() 'criar uma nova instância do relatório Dim relatorio As New rptClientes 'definir a fonte de dados como a nossa base de dados Set relatorio.DataSource = BaseDados.Recordset

Page 8: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

8

BaseDados.Refresh 'actualizar relatorio.Show 'mostrar o relatório End Sub

7. Faça F5 e depois clique em Imprimir. Deverá surgir o relatório onde depois poderá fazer Zoom, exportar e mesmo imprimir o próprio relatório especificando uma dada impressora.

NOTA: Faça Filtrar por “London” e depois clique em Imprimir. Irá verificar que o relatório apenas imprimirá as companhias de Londres. Exercício 6 – Usar a biblioteca ADODC para estabelecer ligação a base de dados CursorType:

���������� ���� ��� ������

��������������� �� ��������������������������

������������������ �� ������������������������������������������������������ ���!�"�����������"�������������������# �������$�%�����&�����%���'���(�)��������������*������*����"���������������������!�������"�������������"�����������+����

,�����-������ �� ����"��.��������)���"!�"��������������������������������������������/��������������������"������,��"����+0��������!�����������!���1������

������)���"� 2� 3�������������+0������������������4�"��"�����������+0���������������������������/������������������ ������5���� ����

,����� ���� 6� 7��8��!�����9!�����������������������������������������������:���*����������+����������������������/�����������9���1������

Constantes de segurança:

���������� ���� ��� ������

��'�;��������� �� ���������������������������,���"���"�����.�����������������;������������������������

��'�;5�������� �� ,��������������������������

��'�;����"��� 2� ����"���!�����9!������������������������.��������������������+����

��'�;���"��� 6� ���"���!�����9!����������������������.������������������������.�"�������������

��'�;<��.���"��� =� ��"��"��*��������"��!�"��������<��.!���*�>�������"��������

1. Crie um novo projecto no VB 2. Adicione um módulo em Project | Add Module e defina a sua propriedade Name para

modBaseDados.

3. Agora, faça Project | Add References e escolha Microsoft ActiveX Data Objects 2.x da lista de

livrarias para ter acesso à livraria do ADO.

Page 9: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

9

4. No módulo vamos declarar as variáveis/objectos fundamentais para o acesso à base de dados: a

ligação, o recordset e um comando;: Public ligacao As New Connection Public rs As New Recordset

5. Agora, desenhe no formulário uma ListBox e dê-lhe o nome de “Lista”. A finalidade será encher a ListBox com os nomes dos clientes da base de dados Northwind.

6. No evento Load, adicione o seguinte código:

Private Sub Form_Load() 'definir a ligação à base de dados ligacao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Programas\Microsoft Office\Office\1033\FPNWIND.MDB;Persist Security Info=False" 'abrir a ligação ligacao.Open 'encher o recordset com a tabela CUSTOMERS rs.Open "SELECT * FROM CUSTOMERS", ligacao, adOpenDynamic, adLockOptimistic (continua) (continuação) 'percorrer todos os dados do recordset Do While Not rs.EOF 'encher a lista com o campo ContactName Lista.AddItem rs("CompanyName") rs.MoveNext 'próximo Loop End Sub

7. Execute o projecto e verá que a lista encheu-se com os vários nomes das companhias.

Page 10: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

10

Exercício 7 – Usar DataList e DataCombo para ligação de tabelas relacionadas. O objectivo deste projecto é criar uma relação entre Fornecedores e Produtos da base de dados do Northwind.

1. Crie um novo projecto 2. Agora, crie um novo módulo chamado “modBaseDados.bas” fazendo Project | Add Module.

Adicione o seguinte código: Public ligacao As New Connection 'a ligação Public rsFornecedores As New Recordset 'para os fornecedores

3. Agora, adicione uma referência à livraria ADO usando Project | References.

4. Em seguida, vamos adicionar os controlos DataList em Project | Componentes (com interface) que nos irão dar acesso ao DataList e ao DataCombo.

5. Depois, desenhe uma interface semelhante ao da figura (vide as propriedades abaixo)

1 DataCombo Propriedade Valor Name CmbFornecedores Style 2 - dropdownList 1 DataList Propriedade Valor Name lstProdutos Style 2 - dbcDropDownList

6. Agora, no evento Load vamos encher a DataCombo com as várias empresas fornecedoras: Private Sub Form_Load()

Page 11: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

11

'definir a ligação à base de dados ligacao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Programas\Microsoft Office\Office\1033\FPNWIND.MDB;Persist Security Info=False" 'abrir a ligação ligacao.Open 'encher o recordset com os fornecedores (estático) rsFornecedores.Open "SELECT * FROM SUPPLIERS", ligacao, adOpenStatic, adLockOptimistic cmbFornecedores.DataField = "SupplierID" 'o campo chave cmbFornecedores.ListField = "CompanyName" 'o campo a mostrar cmbFornecedores.BoundColumn = "SupplierID" 'o campo chave de relação 'definir a fonte de dados Set cmbFornecedores.DataSource = rsFornecedores Set cmbFornecedores.RowSource = rsFornecedores End Sub

7. Agora, precisamos de programar um sub-procedimento que irá actualizar a lista com os produtos do fornecedor. Assim, este sub-procedimento tem como argumento o ID (chave) do fornecedor e preenche a lista com os produtos criando um novo Recordset:

Private Sub ActualizarLista(fornecedor As Integer) 'criar novo recordset Dim rsProdutos As New Recordset 'encher com os produtos de acordo com o fornecedor rsProdutos.Open "SELECT * FROM PRODUCTS WHERE SupplierID = " & fornecedor, ligacao, adOpenStatic, adLockBatchOptimistic lstProdutos.DataField = "ProductID" 'o campo chave lstProdutos.ListField = "ProductName" 'o campo a mostrar lstProdutos.BoundColumn = "ProductID" 'o campo chave 'definir a fonte de dados Set lstProdutos.DataSource = rsProdutos

Page 12: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

12

Set lstProdutos.RowSource = rsProdutos Set rsProdutos = Nothing 'destruir o objecto End Sub

8. Agora, no evento click da DataCombo, vamos chamar o procedimento criado anteriormente para actualizar a lista de acordo com o fornecedor que o utilizador seleccionou:

Private Sub cmbFornecedores_Click(Area As Integer) 'a propriedade BoundText da combo permite saber o item seleccionado ActualizarLista cmbFornecedores.BoundText End Sub

9. Corra o projecto e seleccione diferentes fornecedores para saber que produtos eles enviam. Exercício 8 – Usar a DataGrid com binding directo de dados.

1. Crie um novo projecto 2. Adicione uma DataGrid escolhendo-a do Project | Components. 3. Desenhe-a no formulário e defina as suas propriedades para permitir o utilizador de adicionar

novos valores bem como eliminá-los. 1 DataGrid Propriedade Valor Name Grelha AllowAddNew True AllowDelete True

4. Para encher a grelha com uma tabela de uma base de dados temos que crier um recordset e “ligá-lo” à grelha. Qualquer alteração na grelha irá afectar directamente o Recordset que por sua vez afectará a base de dados.

Page 13: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

13

5. Para isso, adicione o seguinte código ao evento Load:

Private Sub Form_Load() 'criar o recordset Dim rs As New Recordset 'criar a ligação Dim mLigacao As New Connection 'definir a ligação mLigacao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Programas\Microsoft Office\Office\1033\FPNWIND.MDB;Persist Security Info=False" mLigacao.Open 'abrir rs.CursorLocation = adUseClient 'usar o cursor do lado do cliente 'encher o recordset rs.Open "SELECT * FROM CUSTOMERS", mLigacao, adOpenDynamic, adLockOptimistic 'definir os dados da grelha Set Grelha.DataSource = rs End Sub

6. Execute o projecto e adicione, altere e elimine registos da tabela. Exercício 9 – Usar a TreeView com RecordSet

1. Inicie o VB6 e crie mais um projecto... 2. Adicione uma TreeView em Project | Components. 3. Referencia a livraria do ADO no seu projecto. 4. Desenhe a TreeView no formulário e defina a propriedade Name para “Arvore” 5. Escreva o seguinte algoritmo para ter encher a TreeView com os fornecedores e, em cada

fornecedor, os respectivos produtos: Private Sub Form_Load() 'a ligação Dim ligacao As New Connection ligacao.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Programas\Microsoft Office\Office\1033\FPNWIND.MDB;Persist Security Info=False"

Page 14: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

14

ligacao.Open 'criar dois recordset - 1 para os fornecedores, outro para os produtos Dim rsFornecedores As New Recordset Dim rsProdutos As New Recordset 'encher com as tabelas rsFornecedores.Open "SELECT * FROM SUPPLIERS", ligacao, adOpenDynamic, adLockOptimistic rsProdutos.Open "SELECT * FROM PRODUCTS", ligacao, adOpenDynamic, adLockOptimistic 'adicionar o nó de raiz Arvore.Nodes.Add , , "Raiz", "Fornecedores" Dim sFornecedor As String 'o fornecedor actual Dim iCodigo As Integer 'o codigo do fornecedor actual actual 'percorrer os forneceodres Do While Not rsFornecedores.EOF 'adicionar fornecedor (relação RAIZ) Arvore.Nodes.Add "Raiz", tvwChild, rsFornecedores("CompanyName"), rsFornecedores("CompanyName") 'percorrer os produtos... Do While Not rsProdutos.EOF 'obter o nome do fornecedor actual e o ID sFornecedor = rsFornecedores("CompanyName") iCodigo = rsFornecedores("SupplierID") (continua) 'se o ID do produto for igual ao ID do fornecedor 'adicionar produto da empresa If rsProdutos("SupplierID") = iCodigo Then Arvore.Nodes.Add sFornecedor, tvwChild, , rsProdutos("ProductName") End If rsProdutos.MoveNext 'avançar Loop rsFornecedores.MoveNext 'avançar rsProdutos.MoveFirst 'voltar ao primeiro para o loop ter efeito

Page 15: Base de Dados Vb6

Bases de dados com ADO em VB6 – João A. Ferreira – [email protected]

15

Loop End Sub

6. Execute o projecto com F5 Exercício 10 – Usar a FlexGrid no VB6

1. Crie mais um projecto... 2. Agora, adicione o controlo FlexGrid em Project | Components e dê-lhe o nome de Grelha

Microsoft Hierarchical Flexgrid Control 6.0

3. Desenhe o controlo no formulário e estude as suas propriedades. 4. Adicione um ADODC em Project | Components

5. Depois ligue o controlo à base de dados Northwind

6. Defina o RecordSource do ADODC como SELECT * FROM CUSTOMERS

7. Defina a propriedade DataSource do FlexGrid como ADODC1.

8. Faça F5

9. Agora adicione um novo botão chamado cmdMudar com a definição para Mudar Célula.

10. Agora vamos modificar o aspecto da célula seleccionada. Para isso use o evento Click de cmdMudar:

Private Sub cmdMudar_Click() Me.Grelha.CellFontItalic = True Me.Grelha.CellBackColor = vbYellow End Sub