Para os testes usamos o usuário do Oracle hr, que é criado em uma nova instalação. Depois de instalado o banco de dados, o usuário hr deve ser desbloqueado pelo DBA e definida uma senha. Esse usuário tem acesso às tabelas do schema hr, também instalado junto com o banco. No entanto criamos uma nova tabela para os testes, de forma a manter as tabelas originais inalteradas. Criamos então nossa famosa tabela CIDADE.
CREATE TABLE "CIDADE" ( "ID_CIDADE" NUMBER NOT NULL ENABLE, "NOME" VARCHAR2(40), CONSTRAINT "CIDADE_PK" PRIMARY KEY ("ID_CIDADE") ENABLE )
Existe ferramenta de administração visual na instalação do Oracle, mas não é objetivo deste artigo expor a utilização da mesma.
Conexão com SQLdb
Para fazer a conexão vamos usar como sempre um Data Module onde os componentes de banco de dados serão colocados.
Localize na aba SQLdb o componente TOracleConnection e coloque no Data Module. Defina suas propriedades como segue:
DatabaseName - informe aqui o SID do banco de dados. No nosso caso é XE, o SID do Oracle Database Express Edition.
Hostname - informe o nome ou IP da máquina onde está o servidor do banco de dados. Como meu teste foi feito na máquina onde está o servidor, eu informei localhost, ou poderia ter informado 127.0.0.1.
Password - informe a senha do usuário hr. Ou de qualquer usuário com acesso ao banco de dados.
UserName - informe hr, ou outro usuário com acesso ao banco de dados.
Para fazer um teste na conexão, mude a propriedade Connected para True. Depois volte para False.
Coloque um TSQLTransaction e defina a propriedade Database com o nome do TOracleConnection que foi colocado anteriormente.
Coloque um TSQLQuery. Defina suas propriedades como mostrado a seguir:
Database - selecione o TOracleConnection anterior.
SQL - informe SELECT * FROM CIDADE.
Finalize colocando um TDataSource da aba Data Access. Defina a propriedade DataSet com a SQLQuery colocada antes.
No evento AfterPost da TSQLQuery digite o código:
SQLQuery1.ApplyUpdates;
SQLTransaction1.CommitRetaining;
No evento AfterDelete selecione o mesmo método para não repetir código.
Pronto. Está feita a configuração de acesso, tanto para leitura quanto para escrita, em uma tabela do Oracle. Crie uma interface seguindo os passos descritos no post Lazarus - Acessando banco de dados com SQLdb - Parte I.
Lembre de abrir a conexão. Pode ser no evento OnCreate do Data Module, com o código:
OracleConnection1.Open;
Conexão com ZeosLib
Coloque um TZConnection no Data Module. Defina as propriedades:
AutoCommit - deixe em True para que as transações no banco sejam comitadas automaticamente.
Database - informe o nome ou IP da máquina do servidor do banco de dados, por exemplo: localhost se estiver na mesma máquina.
HostName - informe o SID do banco de dados. XE no nosso caso. Observe que as propriedades HostName e Database são informadas de forma invertida em relação ao SQLdb.
Password - informe a senha do usuário com acesso ao banco. Neste caso foi usado hr.
Protocol - informe oracle ou oracle-9i. Ambos funcionam.
User - informe o nome do usuário. Neste caso é hr.
Mude Connected para True para testar a conexão. Depois de conectar com sucesso volte Connected para False.
Coloque um TZQuery e um TZUpdateSQL e configure-os como foi feito no artigo Lazarus - Conectando PostegreSQL com ZeosLib.
No TZUpdateSQL defina essas propriedades assim:
DeleteSQL - DELETE FROM CIDADE WHERE ID_CIDADE = :OLD_ID_CIDADE;
InsertSQL - INSERT INTO CIDADE VALUES (:ID_CIDADE, :NOME);
ModifySQL - UPDATE CIDADE SET NOME = :NOME WHERE ID_CIDADE = :OLD_ID_CIDADE;
Coloque um TDataSource da aba Data Access e na propriedade DataSet selecione a TZQuery anterior. Está pronta nossa conexão e acesso a uma tabela. Agora crie a interface com nos posts anteriores. Não esqueça de abrir a conexão com o comando:
ZConnection1.Connect;
Pode ser no evento OnCreate do Data Module.
4 comentários:
ola professor.
tenho uma duvida nada a ver com o post, la vai, estou tentando passar uma procedure para a procedure on.change de um campo TField da Query e retrona erro. poderia me passar uma explicação.
EX. DM.QOrcItemQuantidade.onChange := quantidadeChange;
toda ves que o campo quantidade sofrer alteração executar a procedure quantidadechange; for alterado.suzimarmeurer@gmail.com
Olá
Coloque um arroba antes do nome da procedure
DM.QOrcItemQuantidade.onChange := @quantidadeChange;
Bom dia Professor,
Não estou conseguindo conectar ao banco de dados Oracle usando o componente TOracleConnection. Certamente, não estou sabendo configura-lo. Poderia me ajudar? O erro que está dando é esse: "ORA-061: NETCMN: designador de driver inv?lido".
Obs.: Sendo que uso o Oracle normalmente com o Delphi 7.
Aguardo e desde já agradeço.
Att.,
Thiago
Oi Thiago
Não sei como ajudar, pois fiz esses testes há algum tempo. Muita coisa mudou desde então, inclusive o Oracle e o Lazarus. Não tenho como testar aqui.
Postar um comentário