Banco de Dados - Oracle
Desvendando o Method OO4O
O Method OO4O, ou seu nome original, Oracle Objects for OLE, depois conhecido como OO4O, seria a solução criada pela empresa Oracle para acabar com todos os problemas de acesso as restrições que o banco de dados Oracle colocava sobre os outros componentes (ODBC ou OLE DB)...
por Rodrigo da Silva AlmeidaEssa solução teria como meta, acabar com os grandes problemas dos programadores em acessar Large Objects, blocos de condições em PL\SQL e outros serviços do banco de dados, com isso acharam melhor desenvolver seu próprio driver.
Sua Origem
O Method OO4O, ou seu nome original, Oracle Objects for OLE, depois conhecido como OO4O, seria a solução criada pela empresa Oracle para acabar com todos os problemas de acesso as restrições que o banco de dados Oracle colocava sobre os outros componentes (ODBC ou OLE DB). O OO4O é um componente de automação no servidor, construído em tecnologia COM, com funções semelhante ao Microsoft ADO, onde teria como diferencial a função de otimizar a performance de acesso aos APIs, blocos PL/SQL, LOBs e MTS. Ele é totalmente voltado ao banco de dados Oracle, afim de trabalhar com as tecnologias Visual Basic, ASP, Aplicativos Office todos da Microsoft e aplicativos da linguagem C/C++.
Instalação Ao entrar no site da OTN (http://otn.oracle.com) para fazer o download do componente, deverá existir várias versões do OO4O, como utilizamos a versão DataBase Oracle 9i Release 9.2.0.1.0, então iremos fazer o download do Componente OO4O Release 9.2.0.4.0, que é uma versão compatível com o banco de dados corrente do nosso sistema operacional. Ao acabar de baixar o arquivo na máquina, apenas execute o arquivo com extensão (.exe), e espere até ele copiar todos os arquivos e concluir a instalação automaticamente.
Após o término, basta abrir seu windows explorer e procurar a pasta oo4o que está em (C:\oracle\ora92\oo4o) para confirmar a cópia do componente.
NOTA:
Para fazer o download do componente acesse o website da OTN (Oracle Tecnology Network - http://otn.oracle.com/software/tech/windows/ole/index.html) e abaixe para seu computador o arquivo. Lembrando que será necessário criar uma conta de usuário para poder realizar o download e aceitar alguns condições de uso, esse conta de usuário também é gratuita.
O Method OO4O é compactivel com quase todas as versões do sistema operacional Windows (98/2000/NT 4.0 e XP), e é recomendado deixar cerca de 30 MB livres em hard disk para os arquivos do OO4O e 128 MB RAM de memória para uma boa performance.
Características e objetos do OO4O
Um dos principais motivos que os programadores escolhem o OO4O para desenvolver seus aplicativos é a gama de serviços que ele pode oferecer para enriquecer seu aplicativo, abaixo está uma relação de serviços que está presente na versão RELEASE 9.2.0.4.0 do Method OO4O.
- Geração de XML usando os métodos GetXML e GetXMLToFile.
- Suporte a LOBs temporárias, onde quando chamadas as stored procedures ou funções que contém argumentos do tipo LOB (Large Objects).
- Assistente Código OO4O, onde através dele consegue executar stored procedures em PL/SQL e JAVA.
- Objeto de suporte para detectar conexões perdidas com o banco de dados.
- Suporte para notificações de falhas do aplicativo.
- Suporte a classes de biblioteca CPP e ao objeto InProcServer do Oracle.
- Suporte a programação Dot.Net.
- Serviços para Microsoft Transaction Server.
- Oracle ODBC Driver.
Além de apresentar todas essas características em nível de desenvolvimento, o Method OO4O conta com 28 objetos e 148 Métodos de programação, fazendo o aplicativo ter um bom controle sobre o banco de dados.
Cada objeto tem importâncias diferentes na programação, sendo que os objetos OraSession, OraDataBase e OraDynaset são de uso indispensável no programa, pois eles são os responsáveis pela comunicação com a o banco de dados e as informações a serem utilizadas.
Fazendo uma análise sobre cada objeto, podemos entender o funcionamento de cada uma delas dentro do aplicativo e saber suas limitações de desenvolvimento caso haja possíveis erros de execução após a compilação ou execução dos programas. Abaixo está a relação dos objetos mais importantes.
OraSession – Esse é o objeto responsável pela “comunicação” entre o usuário e o banco de dados, de uso indispensável pelo programador, ele que faz a autenticação do usuário (Cliente) dentro do servidor Oracle e cria automaticamente o objeto OraConnection, permitindo o acesso a base de dados. É o primeiro objeto a ser declarado dentro do programa. Problemas com os privilégios do usuário no banco de dados podem ocasionar erros na linha de comando que ele for executado.
OraDataBase – Objeto necessário para criar o objeto OraDynaset, assim como no ADO onde precisa ter uma conexão ativa para criar os RecordSets, o Method OO4O também utilizo essa mesma filosofia de programação e deixo encarregado para o objeto OraDataBase deixar ativa a conexão com a base de dados, porque apartir da linha de comando do OraDataBase, será passado, o nome do banco de dados, usuário e senha para acesso ao banco e o tipo de método que será aplicado ao OraDynaset.
OraDynaset – Como citado acima, o objeto OraDynaset é o recordset do aplicativo, seu serviço é fazer a comunicação do aplicativo com as tabelas do banco de dados e aplicar as futuras mudanças ou consultas do sistema, como por exemplo inserir, alterar e deletar dados e utilizar outros métodos de consulta.
Após sabermos como funcionam esses essenciais objetos de programação, devemos analisar os outros que trabalham em conjunto com o aplicativo e verificar sua função dentro do aplicativo. São eles :
OraField – Seguindo a mesma linha de raciocínio do RecordSet, o OraField é onde se traz a informação do registro de uma determinada coluna da tabela do banco de dados e onde será passado o novo valor do registro.
OraConnection – Criado automaticamente quando o objeto OraSession é compilado, podendo ser mudadas algumas propriedades padrão.
OraClient – Objeto que armazena as informações do OraSession, em forma de propriedades e métodos .
OraParameter – Utilizado para passar valores em parâmetros pelo Method OO4O, muito utilizado em stored procedures.
OraParameterArray – Tem a mesma utilização que o objeto acima, porém ele tem o recurso de passar múltiplos valores por parâmetros em forma de vetor ou matriz.
OraSQLStmt – É um objeto que trabalha em conjunto com o objeto OraDataBase, pois apartir dele será executada uma instrução SQL, como por exemplo, uma instrução SELECT ou algum comando DML (Insert, Delete ou Update), equivalente ao comando ADO.Command . Após a utilização do objeto e executada a instrução SQL, o Method OO4O sempre executa um COMMIT dentro do banco de dados validando os valores da instrução. Por isso é bom sempre prestar atenção quando for utilizar um comando DML dentro do OraSQLStmt.
Os outros 19 objetos que restam para completar a lista, são de utilização adicional ao programador e sua funções são especificas para cada tipo de serviço.
OraAQ * – Esse objeto tem como finalidade iniciar o método CreateAQ, assim possibilita o envio de mensagens utilizando o banco de dados Oracle e o objeto OraAQMsg.
OraAQAgent * – Objeto que irá dizer a qual destinatário será enviada a mensagem, tem a capacidade de enviar somente uma lista de 10 Agentes por cada vez.
OraAQMsg * – Objeto responsável por enviar a mensagem até um usuário determinado.
OraAttribute – Capaz de atribuir um valor para o objeto OraRef ou OraObject.
OraBLOB e OraCLOB – Objeto especifico do Oracle para ler tabelas do tipo Large Objects, dando mais performance e agilidade na troca dos dados, porém a diversas restrições de uso e métodos a ser aplicados a eles.
OraCollection – Representa um conjunto de tipos de dados e tabelas do Oracle.
OraConnections Collection, OraFields Collection, OraParameters Collection, OraSessions Colletion, OraSubscription Collection – Contém uma lista de parâmetros de iniciação e execução dos objetos do OO4O, esses valores não podem ser alterados, adicionados e nem excluídos pelo usuário.
OraMetaData – Representa uma descrição sobre cada informação do schema do usuário dentro da banco de dados.
OraMDAttribute – Descreve cada atributo individual do schema.
OraNumber – Objeto que trabalha com operações vindas das tabelas com colunas do tipo NUMBER, onde mantém a precisão de contas e operações matemáticas. Ótimo objeto para fazer serviços que precisem de valores absolutos.
OraObject – Apresenta o valor de cada instancia do Oracle.
OraRef – Objeto que faz referencia a um outro objeto instanciado no sistema.
OraServer – Ele é o responsável em fazer a conexão física da rede com o banco de dados Oracle e seu aplicativo, é um adjunto do objeto OraDataBase.
OraSubscription – Concede visualizar os eventos do banco de dados.
( * ) Esses objetos poderão ser somente utilizados em Microsoft Visual Basic. Conseguimos compreender cada objeto do sistema e entender suas funções, falta saber os métodos que podem fazer esses objetos se tornarem mais poderosos no desenvolvimento do aplicativo.
Métodos de utilização do objeto OraDataBase
O OraDataBase tem como função criar uma espécie de Recordset do ADO para o aplicativo, no method OO4O podemos chamar de Views ou snapshots. As Views são linhas e colunas de uma determinada tabela que foram passadas através de uma instrução SQL e funciona como uma tabela virtual para o cliente. É o método de iniciação do objeto OraDynaset, podendo informar que tipo será o OraDynaset e qual será seu modo de execução dos registros. Abaixo está um exemplo de como utilizar sua sintaxe.
Existem para o OraDataBase, 8 métodos de se construir um OraDynaset, são:
Método | Descrição |
Close | Método utilizado para fechar a conexão com o banco de dados. |
CreateDynaset | Método para os dynasets (Recordsets). |
CreateCustomDynaset | Ótimo método para obter uma excelente sintonização de performance e memória do servidor para o dynaset. |
CreatePLSQLDynaset | Método para criar um dynaset em volta de um curso PL/SQL. |
CreatePLSQLCustomDynaset | Método para criar um dynaset sobre um cursos de PL/SQL com excelente aproveitamento de performance e memória do servidor. |
CreateSQL | Método para criar o objeto OraSQLStmt. |
ExecuteSQL | Método para executar instruções SQL. |
LastServerErrReset | Método para limpar todos os erros do servidor |
NOTA:
Alguns métodos acima não poderá funcionar corretamente com algumas tecnologias e poderá ocasionar alguns erros de execução.
Trabalhando com o CreateDynaset
O método mais utilizado ao elaborar um software que tenha como base de dados o Oracle é o método CreateDynaset, devido aos seus diversos recursos facilitam a vida do programador. O método CreateDynaset pode ser chamado com uma única linha de comando onde poderá passar alguns argumentos para ter controle sobre os registros. Em comparação com o ADO, o CreateDynaset irá gerar um Dynaset que seria o mesmo que um RecordSet gerado pela ADO.
Set OraDynaset = OraDataBase.CreateDynaset (sSQL, Opção)
Ou
Set OraDynaset = OraDataBase.CreateCustomDynaset (sSQL, Opção)
sSQL = Instrução SQL passada ao banco de dados com os valores que deveram ser apresentados ao cliente.
Opção = Será o número a ser informado da opção escolhendo o modo de exibição, são 9 opções.
Desta forma o CreateDynaset oferece algumas opções de como o Dynaset será criado e seu mode de execução, abaixo tem todas as opções do Dynaset.
Número |
Constante |
Descrição |
0 |
ORADYN_DEFAULT |
Valor padrão, onde valores de edição e inserção é nulo. |
1 |
ORADYN_NO_AUTOBIND |
Utilizado apenas quando a instrução SQL não tiver parâmetros. |
2 |
ORADYN_NO_BLANCKSTRIP |
Passar por campos que tiveram caracteres brancos. |
4 |
ORADYN_READONLY |
Deixar as informações apenas para leitura. |
8 |
ORADYN_NOCACHE |
Apenas um registro é guardado na memória, deixando apenas as opções de MoveNext e MovePrevious habilitados. |
16 |
ORADYN_ORAMODE |
Esse opção deixa os valores padrões do banco de dados nas colunas não especificas da consulta, assim quando for atualizar os registros, os valores iniciais que foram passados ficarão sem alteração. (Recomendado) |
32 |
ORADYN_NO_REFETCH |
Mesmo que a opção 16, porém atualiza os valores vazios. |
64 |
ORADYN_NO_MOVEFIRST |
Quando o Dynaset não é populado, ocupa o primeoiro registro do banco para inserir novas linhas. |
128 |
ORADYN_NO_DIRTY_WRITE |
Criado para evitar o erro 4119 no banco de dados quando ele está muito ocupado (Time out), porém ele permite reescrever os valores e atualizar de forma imprópria. (Essa opção não é recomendada a utilizar porque pode comprometer a “saúde” das suas informações e deixa-las incorretas). |
Entendendo todos os métodos do OO4O
Sabemos que todo o componente é composto por 148 métodos, no qual podem nos auxiliar na transição entre registros, como se fosse um ponteiro, deixando o aplicativo mais leve e melhorando a performance entre o cliente e o servidor. A tabela abaixo está mostrando todos os métodos que o programador pode utilizar no aplicativo. Lembrando que abaixo está uma tabela com o nome do método, descrição e objeto, pois existem dentro do OO4O, métodos que só podem ser aplicados a um tipo de objeto especifico do Oracle.
Método |
Descrição |
Objeto |
Abs |
Calcula o valor absoluto. |
OraNumber |
Add |
Adiciona novos parametros. |
OraParameter |
Add |
Adiciona argumentos numéricos. |
OraNumber |
Add |
Adiciona novos conceitos. |
OraSubscription Colletion |
AddNew |
Limpa o buffer e adiciona um novo registro ao banco de dados. |
|
AddTable |
Adiciona novo valor para um vetor. |
OraParameter |
Append |
Extende o valor de um variável variant. |
OraColletion |
Append |
Ajunta o valor de uma OraLob com o valor intanciado de uma Lob. |
OraLob |
AppendChunk |
Ajunta o valor de campo string LONG ou LONG RAW no buffer. |
|
AppendChuckByte |
Ajunta o valor de campo byte LONG ou LONG RAW no buffer. |
|
AQAgent |
Cria a instancia para enviar a mesagem. |
OraAQMsg |
AQMsg |
Envia a menssagem ao destino. |
OraAq |
ArcCos |
Cálcula o ArcCos de um valor, o resultado é em radianos. |
OraNumber |
ArcSin |
Cálcula o ArcSen de um valor, o resultado é em radianos. |
OraNumber |
ArcTan |
Cálcula o ArcTan de um valor, o resultado é em radianos. |
OraNumber |
ArcTan2 |
Cálcula o ArcTan de 2 valores usando uma operação, o resultado é em radianos. |
OraNumber |
Attribute |
Atribui um valor ao objeto, especificando o índice. |
OraMetaData |
AutoBindDisable |
Reseta os valores AutoBind dos parametros. |
OraParameter |
AutoBindEnable |
Monta os vaores AutoBind dos parametros. |
OraParameter |
BeginTrans |
Inicia a transação com o banco de dados de uma determinada sessão. |
|
Cancel |
Cancela uma instrução SQL. |
|
CancelEdit |
Destrava a referencia de um objeto e cancela a operação de atualização no servidor. |
OraRef |
Ceil |
Cácula o teto de um valor. |
OraNumber |
ChangePassword |
Troca a senha do usuário no servidor. |
OraServer |
ChangePassword |
Troca a senha do usuário no servidor. |
OraSession |
Clone |
Duplica o valor de um determinado Dynaset. |
|
Clone |
Clona o OraColletion. |
OraColletion |
Clone |
Clona o OraLob ou OraBFile |
OraLob / OraBfile |
Clone |
Retorna a cópia de um valor. |
OraNumber |
Clone |
Clona o OraObject ou OraRef. |
OraObject / OraRef |
Close |
Fecha a conexão. |
|
Close |
Fecha um determinado OraBFile |
OraBFile |
CloseAll |
Fecha todos os objetos OraBFile abertos. |
OraBFile |
CommitTrans |
Valida a transação no banco de dados. |
|
Compare |
Compara valores entre OraLobs. |
OraLob |
CopyToClipBoard |
Cópia as linhas de um Dynaset para um clipboard em formato de texto. |
|
Copy |
Cópia as linhas de uma OraLob. |
OraLob |
CopyFromFile |
Carrega, ou cópia partes, ou todo o arquivo local para uma Lob interna. |
OraLob |
CopyToFile |
Carrega, ou cópia partes, ou toda uma Lob interna para um arquivo local. |
OraLob / OraBFile |
Cos |
Calcula o cosseno. |
OraNumber |
CreateAQ |
Cria um ainstancia do objeto OraAq. |
|
CreateCustomDynaset |
Cria um Dynaset para o sistema mais rápido e com fecth parameters. |
|
CreateDatabasePool |
Cria um Pool para o banco de dados. |
|
CreateIterator |
Cria um interação com o banco de dados para rastrear valores de uma coleção. |
|
CreateNameSession |
Cria ou retorna o nome de uma nova sessão. |
|
CreateOraNumber |
Cria um objeto OraNumber. |
|
CreateOraObject |
Cria um objeto OraObject |
|
CreatePLSQLCustonDynaset |
Cria um Dynaset mais rápido e com fetch parameters usando cursores em PL/SQL e instruções SQL. |
|
CreatePLSQLDynaset |
Cria um Dynaset utilizando um cursor em PL/SQL. |
|
CreateSession |
Cria uma sessão com o banco de dados. |
|
CreateSQL |
Execute uma instrução SQL ou cria o objeto OraSQLStmt para executar uma instrução com alguma opção de utilização interna. |
|
CreateTempBLOB/CLOB |
Cria LOBs temporarios dentro do banco de dados. |
|
Delete |
Apaga valores de um Dynaset. |
|
Delete |
Apaga algum elemento indexado na coleção. |
OraCollection |
Delete |
Apaga algum objeto referenciado no servidor. |
OraRef |
DeleteIterator |
Apaga alguma interação criado. |
|
Dequeue |
Deleta as mensagens. |
OraAQ |
Describe |
Descreve o schema do usuário. |
|
DestroyDatabasePool |
Destroi o Dynaset Pool criado para o banco de dados. |
|
DisableBuffering |
Desabilita o buffer para as LOBs. |
|
Div |
Operação de divisão matemático com valores inteiros. |
OraNumber |
DynasetCacheParams |
Especifica o cache de um Dynaset criado apartir de um cursor em PL/SQL. |
|
Edit |
Edita algum valor especifico de Dynaset. |
|
Edit |
Edita algum objeto com refrencia indexada no servidor |
OraRef |
ElementValue |
Retorna o valor corrente de um elemento apontado pelo Iterator. |
|
EnableBuffering |
Habilitando o buffer para as operações com LOBs. |
|
Enqueue |
Enviando as menssagens. |
OraAQ |
Erase |
Apagando uma parte da LOB |
OraLob |
ExecuteSQL |
Executando um instrução SQL. |
|
Exist |
Retorna TRUE se o elemento existe dentro da coleção, caso contrario retorna FALSO. |
OraColletion |
Exp |
Calcula o exponente de um valor. |
OraNumber |
FetchOraRef |
Busca as referencias de um objeto através do cachê do sistema á um objeto referenciado. |
|
FieldSize |
Retorna um valor em bytes de um campo LONG ou LONG RAW. |
|
FindFirst |
Vai para o primeiro registro encontrado pelo Dynaset. |
|
FindLast |
Vai para o último registro encontrado pelo Dynaset. |
|
FindNext |
Passa para o próximo registro. |
|
FindPrevious |
Faz um preview do registro. |
|
Floor |
Calcula o piso de um valor. |
OraNumber |
FlushBuffer |
Descarrega os valores de uma LOB guardada no buffer. |
|
GetDatabaseFromPool |
Retorna a avaliação do próximo POOL no banco de dados. |
|
GetChuck |
Retorna os bytes de uma string de um campo LONG ou LONG RAW. |
|
GetChuckByte |
Retorna os bytes de um campo tipo byte de uma LONG ou LONG RAW. |
|
GetChuckByteEx |
Lê todos os bytes de um campo LONG e LONG RAW e traz a soma de todos os dados lidos. |
|
GetXML |
Gera um documento XML baseado nos valores de um Dynaset. |
|
GetXMLToFile |
Gera um documento XML e escreve dentro de um arquivo. |
|
GetRows |
Recebe multiplos registros de um objeto Dynaset e guarda numa matrix. |
|
Get Value |
Retorna o valor especifico de um elemento ou de uma index. |
|
HypCos |
Calcula o cosseno hiperbolico |
OraNumber |
HypSin |
Calcula o seno hiperbolico |
OraNumber |
HypTan |
Calcula a tangente hiperbolica |
OraNumber |
InitIterator |
Inicia a interação no sistema |
|
IsEqual |
Retorna TRUE se um valor é igual ao outro. |
OraNumber |
IsGreater |
Retorna TRUE se um valor é maior que o outro. |
OraNumber |
IsLess |
Retorna TRUE se um valor é menor que o outro. |
OraNumber |
IterNext |
Próxima interação. |
|
IterPrev |
Preview da interação dos elementos. |
|
LastServerErrReset |
Limpa o última erro e atribui valor 0 para o objeto. |
|
Ln |
Calcula um numero natural na base E. |
OraNumber |
Log |
Pega o logaritmo utilizado na operação. |
OraNumber |
MatchPos |
Retorna a posição de um determinado registro na LOB. |
OraLob / OraBFile |
Mod |
Operação de divisão em módulos.. |
OraNumber |
MonitorForFailover |
Registra as ocorrencias de erros do servidor. |
|
MonitorStart |
Inicia o serviço Failover. |
|
MonitorStop |
Para o serviço Failover. |
|
MoveFirst |
Move o Dynaset para o primeiro regsitro. |
|
MoveLast |
Move o Dynaset para o último regsitro. |
|
MoveNext |
Passa o Dynaset para o próximo registro. |
|
MovePrevious |
Passa o Dynaset para o registro anterior. |
|
MoveNextn |
Passa o cursor do Dynaset para a próxima linha especifica no banco de dados. |
|
MovePreviousn |
Passa o cursor do Dynaset para a linha anterior especifica no banco de dados. |
|
MoveRel |
Passa o cursor para uma linha especifica no banco de dados. |
|
MoveTo |
Muda o cursor para uma linha especifica na busca. |
|
Mul |
Operação de Multiplcação. |
OraNumber |
Neg |
Para números negativos. |
OraNumber |
Open |
Abrir um BFile |
OraBFile |
Open |
Abrir conexão com o servidor. |
OraServer |
OpenDatabase |
Abrir o banco de dados para trocar informações. |
|
OriginalIItem |
Retorna o OraField com o nome original utilizado na coluna dentro da instrução SQL. |
|
OriginalName |
Retorna o nome original do OraField que foi utilizado na coluna dentro da instrução SQL. |
|
Power |
Operação com raiz. |
OraNumber |
Put Value |
Utilizado para inserir valores através dos parâmetros de tabela. |
|
Read |
Lê através do buffer partes especificas de um OraLob ou BFile. |
OraLob / OraBFile |
ReadChuck |
Retorna uma String contendo bytes de partes ou um todo de campos LONG ou LONG RAW. |
|
Refresh |
Força imediatamente a atualização do Dynaset com o banco de dados. |
|
Refresh |
Atualiza as referencias no OraRef utilizados em algum tipo de snapshot. |
OraRef |
Register Method |
Ativas a aplicação de Subscription. |
OraSubscription |
Remove |
Remove algum tipo de parametro. |
OraParameter |
Remove |
Remove os Subscription. |
OraSubscription |
RemoveFromPool |
Remove o objeto Database em Pool. |
|
ResetTrans |
Efetua automaticamente um Rollback e limpa a iniciação de transação com o banco de dados. |
|
RollBack |
Corrige a transação se os valores estiverem errados. |
|
Round |
Arredonda os valores, especificando as casas decimais. |
OraNumber |
SetPi |
Retorna o número do Pi, usado em funções trigonométricas. |
OraNumber |
Sin |
Calcula o valor do seno. |
OraNumber |
Sqrt |
Calcula raiz quadrada. |
OraNumber |
Sub |
Operação de Subtração. |
OraNumber |
Tan |
Calcula o tangente. |
OraNumber |
Trim |
Retira um numero de elementos usando na coleção. |
OraColletion |
Trim |
Trunca os valores de uma LOB. |
OraLob |
Trunc |
Trunca os valores em casas decimais. |
OraNumber |
Unregister Method |
Desativa as aplicações de Subscription. |
|
Update |
Salva tudo que está no buffer para um Dynaset. |
|
Update |
Atualiza um objeto referenciado no servidor. |
OraRef |
Write |
Escreve no buffer através de um objeto BLOB ou CLOB e retorna a soma dos dados escritos. |
OraLob |
Os 148 métodos citados acima, estão com uma pequena descrição, apenas para saber qual é sua funcionalidade, porém mesmo assim existem restrições de utilização e mais opções dentro deles que não foram ditos. Oracle Data Control
A Oracle além de fazer um componente que atende-se os programadores web, deu um presente para os programadores que trabalham principalmente com Visual basic ou outras linguagens que aceita Active-X ou controle de dados.
O chamado Oracle Data Control é um componente Active-X desenhado para simplificar a troca de informações entre o banco de dados Oracle e o aplicativo em desenvolvimento, dando mais agilidade, segurança e performance na troca dos dados diretos com o servidor.
O componente é composto por 36 Controles de propriedades, 6 Métodos de utilização e diferente do OO4O, ele inclui 8 Eventos, para manipulação de DBGrids, múltiplos Dynasets e múltiplas conexões.
Esse é um bom recurso para programadores de tecnologia que aceitam controle de dados visual, permitindo ter todas as opções de controle sobre os registros que o Oracle oferece e ainda melhorar a sincronização entre cliente e servidor.
Conhecendo o OO4O na prática
Para conhecer melhor o componente e entender a utilização de cada objeto e método, nada melhor que fazer um sistema desenvolvido em ASP 3.0 com um banco de dados Oracle 9i e escolher um tema para colocar em prática a maioria dos serviços.
Para se torna mais cômodo, projetei um sistema e abaixo está sua descrição.
Nome |
Cadastro de Usuário e Grupos |
Autor |
Rodrigo Almeida |
Descrição |
Possibilitar o cadastro, alteração e apagar usuários do departamento financeiro e sobre grupos financeiros de controle. |
Observação |
O Method OO4O deixou o sistema 3 vezes mais rápido em comparação ao ADO. |
NOTA:
Todo o sistema está desenvolvido em um único arquivo, apenas um arquivo externo em CSS para dar interatividade aos links e o nome para a criação das tabelas, views e alias são de total escolha do programador.
* Preparando o banco de dados
Para conseguimos executar o sistema sem erros e problemas. Temos que tomar algumas medidas perante ao banco de dados.
1º) Verificar o usuário de acesso.
Temos que ter um usuário com todos os privilégios no banco de dados, privilégios para SELECT, INSERT, UPDATE, DELETE e VIEWS. No exemplo utilizei um como GRANT DBA. Fica ao critério do DBA ou PROGRAMADOR da empresa, manter as permissões do usuário. Pois será com este usuário a iniciação de uma sessão do aplicativo com o banco de dados.
2º) Criar as tabelas e Views.
O sistema possui uma comunicação com 2 tabelas, onde há um campo para relacionamento e uma VIEW que traz os nomes dos usuários cadastrados no sistema geral, apenas para visualização, abaixo está o código para cria-las.
TABELA RA_USUARIOS_TAB
create table RA_USUARIOS_TAB ( USER_ID VARCHAR2(30) not null, USER_GRP_RLS VARCHAR2(30) not null );
TABELA RA_GRUPOS_TAB
create table RA_GRUPOS_TAB ( USER_GRP_RLS VARCHAR2(30) not null, RELEASE_AMOUNT NUMBER );
TABELA RA_USUARIO_TAB
create table RA_USUARIO_TAB ( IDENTITY VARCHAR2(30) not null, ROWVERSION NUMBER not null, DESCRIPTION VARCHAR2(2000) not null, ORACLE_USER VARCHAR2(30), WEB_USER VARCHAR2(30), ACTIVE VARCHAR2(5) not null );
VIEW RA_USUARIO
CREATE OR REPLACE VIEW RA_USUARIO AS SELECT identity identity, description description, oracle_user oracle_user, web_user web_user, active active, rowid objid, ltrim(lpad(to_char(rowversion),2000)) objversion FROM fnd_user_tab WITH read only
OBSERVAÇÃO
Após criar as tabelas, principalmente a tabela RA_USUARIO_TAB, inserir registros dentro do banco de dados para poder efetuar os testes, pois sem registros poderá ocasionar alguns erros durante a execução do programa na parte de grupos.
Uma boa dica é criar Índices dentro do banco de dados para a tabela RA_USUARIO_TAB, no campo Oracle_user, isso deixará a performance do sistema mais rápido e deixará bem melhor as consultas.
* SISTEMA
Compreendendo alguns Erros do Method OO4O
Ao se programar com o Método OO4O podem ocorrer alguns erros que os programadores não esperam e ao mesmo tempo desistem de utilizar este método, são erros comuns gerados pelo motor OLAP da Oracle junto ao IIS.
Abaixo liste alguns erros comuns que o Method OO4O pode gerar e uma solução para contornar estes problemas.
ERROS
============================================
- Oracle Automation (0x800A01B8)
SQL execution error, ORA-01400: não é possível inserir NULL em ("USUARIO"."TABELA"."COLUNA")
SOLUÇÃO:
Para poder solucionar e adicionar registro ao bando de dados, verifique que esteja passando valores para o campo, pois quando ocorre este erro, o Dynaset está recebendo valores nulos. Se na tabela a coluna está como NOT NULL, automaticamente o OLAP irá gerar um erro.
- Oracle Automation (0x800A01B8)
OIP-04118: Attempt to update without edit or add operation
SOLUÇÃO:
Quando aparecer esse tipo de erro oferecido pelo ISS. Verifique no seu código o seu SELECT está com a opção FOR UPDATE no final e se realmente existe as opções Edit ou AddNew.
- Oracle Automation (0x800A01B8)
OIP-04108: Invalid row reference
SOLUÇÃO:
Seu SELECT ou parametros está chamando uma coluna inválida no banco de dados, para resolver de um DESC NOME_TABELA no SQL*PLUS e veja se todas as colunas do seu SELECT está escrito de forma correta ou no seu SELECT ao passar um valor após a cláusula WHERE, este valor está chegando nulo.
- Oracle Automation (0x800A01B8)
OIP-04127: For Update detected with no active transaction
SOLUÇÃO:
Ao criar um Dynaset para poder inserir, alterar e deletar dados, terá que ter iniciado uma transição de sessão com o banco de dados, com OraSession.BeginTrans antes de criar o Dynaset e depois de fechar o Dynaset efetuar um COMMITTRANS ou ROLLBACKTRANS, e verificar se seu SELECT está com a opção FOR UDATE no final para permitir a edição no banco de dados.
LEMBRETES:
* Sempre ao utilizar o método OO4O com os métodos Edit, AddNew e Delete, usar os SELECTs com a opções FOR UPDATE no final da instrução, para não ocorrer erros.
* Ao fazer alguma edição no registros ou qualquer tipo de alteração no banco de dados executar sempre após o BeginTrans as opções COMMIT ou ROLLBACK.
Conclusão
Após termos obordado todas as informações do Method OO4O, deu para compreender a sua utilização no dia-a-dia do programador para trabalhos feitos em cima de base de dados Oracle, onde há uma certa complicação ao desenvolver.
Esse método é muito pouco utilizado, porque existe muito pouco conteúdo sobre ele na internet e em livros, contudo espero ter abordado ao máximo o assunto, sendo que não foi um estudo profundo sobre o componente.