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:
¢ 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
?emprestimo() (executar a função emprestimo() )
nao (resposta)
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
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).
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).
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.
UPDATE tabela SET tabela.campo = valor [WHERE condição]
UPDATE [clientes] SET [clientes].[emprestimo] = NULL
INSERT INTO tabela VALUES valores
INSERT INTO Empregados(Dep_no,No_Empregado, Nome, Idade)
VALUES (001,103,"A.Lima", 30).
("query") é:
SELECT DISTINCTROW campos INTO tabela1 FROM tabela [WHERE condição]
SELECT DISTINCTROW * INTO clientes1 FROM clientes
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.