End Sub
  1. Representação de Conhecimento em Forma de Regras
O conhecimento sobre um domínio específico é muitas vezes representado em forma de regras. Considere, por exemplo, o problema de concessão de crédito pessoal. Suponha que foi decidido considerar os seguintes aspectos:  

Em cada caso, pretende-se decidir se se pode conceder o crédito ou não, considerando a situação específica do cliente. A questão que se coloca é como elaborar um sistema informatizado que possa aconselhar ou não o crédito caso a caso.

Uma maneira de atingir este objectivo é seguir a estratégia de concessão de crédito já definida. Assim, é possível contactar o responsável pelas operações de crédito e pedir-lhe transcrever a sua estratégia em forma de regras. Suponha, que as regras obtidas desta maneira são:

r1: montante = baixo -> empréstimo = sim

r2: montante = alto e conta = sim -> empréstimo = sim

r3: salário = normal -> empréstimo = sim

r4: montante = alto e conta = não -> empréstimo = não

r5: montante = médio -> empréstimo = não

r6: e se nenhuma regra antes aplicar -> empréstimo = sim

Assim, se seguir as regras acima, o cliente na seguinte tabela teria o seu pedido recusado (empréstimo = não), devido à regra r5.
 
cliente montante Idade salário conta
1 médio Senior baixo sim
 

Em seguida mostramos a representação de regras utilizando uma função com instruções tipo If ..Then ..

Em primeiro lugar vamos determinar como representar os dados sobre os respectivos clientes. A representação natural é utilizar uma tabela chamada clientes, com os seguintes campos - nº cliente, montante, idade, salário e conta. Além disso é necessário criar um módulo (podemos usar, por exemplo, o nome operações) com os seguintes elementos:

 

As declarações necessárias são:

Dim dboperacoes As Database

Dim tclientes As Recordset

A seguinte subrotina permite abrir a base de dados e a tabela clientes:

Sub opendb ()

Set dboperacoes = CurrentDb()

Set tclientes = dboperacoes.OpenRecordset("clientes")

End Sub

A função apresentada segue a estratégia definida com as regras r1 até r6:

Function emprestimo() As String

¢ regra r1

If tclientes![montante]="baixo" Then

emprestimo="sim"

¢ regra r2

ElseIf tclientes![montante]="alto" And tclientes![conta]="sim" Then

emprestimo="sim"

¢ regra r3

ElseIf tclientes![salário]="normal" Then

emprestimo="sim"

¢ regra r4

ElseIf tclientes![montante]="alto" And tclientes![conta]="não" Then

emprestimo="não"

¢ regra r5

ElseIf tclientes![montante]="medio" Then

emprestimo="não"

¢ regra r6

Else: emprestimo="sim"

End If

End Function

 

Para verificar qual é a recomendação do sistema para o primeiro caso na tabela, basta executar a função emprestimo() a partir da janela de diálogo (Immediate Window):

Call opendb() (executar a subrotina opendb() )

?emprestimo() (executar a função emprestimo() )

nao (resposta)

 

Se pretender obter a recomendação acerca de todos os casos na tabela, podia ou definir uma consulta (query) com o campo calculado com a função emprestimo() ou alternativamente, executar a seguinte função:

Function emprestimos()

tclientes.MoveFirst

Do Until tclientes.Eof

Debug.Print tclientes![cliente], emprestimo()

tclientes.MoveNext

Loop

End Function

Se a tabela de clientes contiver os seguintes dados:


 
cliente montante idade salário conta
1 médio senior baixo sim
2 médio senior baixo não
3 baixo senior baixo sim
4 alto média baixo sim
5 alto jovem normal sim
 

a execução da função emprestimos(), a partir da janela de diálogo, daria o seguinte resultado:

? emprestimos()

1 nâo

2 não

3 sim

4 sim

5 sim

  1. Representação de Consultas ("Queries") em SQL

    O sistema de base de dados Access permite a elaboração de consultas (queries) numa linguagem visual (QBE) e, além disso, em linguagem SQL (Structured Query Language).

    A linguagem SQL é hoje em dia, muito divulgada e utilizada, tendo sido adoptada por muitos sistemas de bases de dados. Assim, a linguagem SQL é utilizada como uma linguagem de comunicação entre sistemas diferentes (Access, Oracle, Informix ou outros).

    1. Consultas em SQL Orientadas para Seleccionar Dados

      O Access permite, em primeiro lugar, converter qualquer consulta (query) para um comando de SQL. Assim, se tiver uma consulta (query) aberta, pode simplesmente carregar no ícone de SQL e o sistema mostra a consulta em forma de SQL. Deste modo é possível aprender certos aspectos desta linguagem.

      Vejamos um exemplo. Se tiver uma consulta (query) que permite mostrar certos registos no écran, e converter esta consulta para a linguagem SQL, esta terá a seguinte forma:

      SELECT campos FROM tabela [WHERE condição]

      A consulta selecciona um conjunto de campos da tabela indicada. Por exemplo, a consulta SQL :

      SELECT No_empreg, Nome FROM Empreg

      irá seleccionar os campos No_empreg e Nome da tabela Empreg. Se a consulta for qualificada com WHERE condição, o sistema incluirá só aqueles registos que satisfazem a condição dada.

      As consultas que envolvem duas (ou mais) tabelas ligadas utilizam a operação de junção (join) na construção de resultado (tabela virtual). Por exemplo, a query:

      SELECT DISTINCTROW Depart.Depart, Empreg.Nome

      FROM Depart INNER.JOIN Empreg

      ON Depart.Dep_no = Empreg.Dep_no

      utilizará as tabelas Depart e Empreg. Neste exemplo, a operação da junção (join) envolve comparação de valores de Dep_no da tabela Depart com os valores de Dep_no da tabela Empreg. Este processo é semelhante ao utilizado na elaboração tabelas virtuais com consultas (queries).

    2. Execução de Consultas

      A maneira mais simples de executar com consultas (queries) é a partir da janela de diálogo (Debug Window). Assim, se escrever:

      DoCmd.RunSQL "Comando _de_SQL"

      o sistema irá executar o comando indicado. Por exemplo, o comando

      DoCmd.RunSQL "SELECT No_empreg, Nome FROM Empreg"

      executa a consulta "SELECT .. " indicada. Os comandos de SQL podem ser utilizados dentro de funções e/ou subrotinas. O processo é simples, pois basta incluir DoCmd.RunSQL "Comando_de_SQL" dentro da respectiva função e/ou subrotina.

    3. Consultas em SQL Orientadas para Modificar Dados ("Action Queries")
Como foi indicado numa secção anterior, há dois tipos de consultas (queries): select queries e action queries. Assim, há também dois tipos de consultas de SQL. Os nossos exemplos anteriores eram de tipo select queries. Nesta parte consideramos alguns action queries: permite actualizar os valores de registos. O formato desta consulta ("query") é:

UPDATE tabela SET tabela.campo = valor [WHERE condição]

Exemplo:

UPDATE [clientes] SET [clientes].[emprestimo] = NULL

 

permite permite inserir novos registos. O formato desta consulta ("query") é:

INSERT INTO tabela VALUES valores

Exemplo:

INSERT INTO Empregados(Dep_no,No_Empregado, Nome, Idade)

VALUES (001,103,"A.Lima", 30).

 

permite criar novas tabelas a partir de tabelas existentes. O formato desta consulta

("query") é:

SELECT DISTINCTROW campos INTO tabela1 FROM tabela [WHERE condição]

Exemplo:

SELECT DISTINCTROW * INTO clientes1 FROM clientes

 

    1. Representação de Regras com Consultas em SQL
As regras acerca de concessão de crédito podem ser representadas em forma de um programa que inclui comandos de SQL. Neste exemplo vamos utilizar a tabela clientes que é semelhante a tabela clientes da secção 9, mas contém um campo adicional empréstimo cujo valor é preenchido pelo programa apresentado a seguir (utilizando consultas de SQL tipo action queries).

Sub emprestimos_sql()

' Inicializa os valores do campo "empréstimo"

DoCmd.RunSQL "UPDATE [clientes] SET [clientes].[ empréstimo]= ' '"

' Regras r1,r2,r3

DoCmd.RunSQL

"UPDATE [clientes] SET [clientes].[empréstimo]= 'sim'

WHERE [clientes].[montante]='baixo'

OR

[clientes].[montante]='alto' AND

[clientes].[conta]='sim'

OR

[clientes].[salário]='normal'"

' Regras r4,r5

DoCmd.RunSQL

"UPDATE [clientes] SET [clientes].[ empréstimo]= 'não'

WHERE [clientes].[ empréstimo]= ' ' AND

[clientes].[montante]='alto' AND

[clientes].[conta]='não'

OR

[clientes].[ empréstimo]= ' ' AND

[clientes].[montante]='médio'"

' Regra r6

DoCmd.RunSQL

"UPDATE [clientes] SET [clientes].[ empréstimo]= 'sim'

WHERE [clientes].[empréstimo]= ' '"

End Sub

Todos os comandos tipo DoCmd.RunSQL "UPDATE .. SET .. WHERE .. " tem que aparecer numa linha. A apresentação dos comandos aqui não segue esta convenção para razões de legibilidade.

Hosted by www.Geocities.ws

1