Atualizei o Lazarus para a versão
Lazarus-0.9.29-24055-fpc-2.4.1-20100317-win32. E foi usando esse snapshot que criei o exemplo usado neste post. Pode-se baixar o mais recente snapshot em
http://www.hu.freepascal.org/lazarus/
Nem todas as fontes de dados estão contempladas pelo SQLdb ou pelo ZeosLib. Algumas vezes é necessário migrar ou mesmo atualizar fontes de dados como Paradox, Access e outros. Para essa nobre tarefa o Lazarus disponibiliza o componente TODBCConnection, encontrado na aba SQLdb. Ou seja, podemos acessar qualquer banco de dados (mesmo aqueles que não merecem essa denominação) através de ODBC, desde que tenhamos o driver específico. Devo observar que fiz esse exemplo no Windows.
Então o primeiro passo é criar uma fonte de dados ODBC e isso é feito no sistema operacional. Usei uma fonte MSAccess - o dbdemos.mdb que vem com o Delphi. Após isso vamos ao Lazarus.
No
Data Module coloque um
TODBCConnection. Mude a propriedade
Name para
dbAccess, por exemplo. Em
DatabaseName digite o nome da fonte de dados criada no sistema anteriormente. Mude
Connected para
True para testar a conexão. Depois volte para
False.
Coloque um
TSQLTransaction, mude
Name para
trAccess e em
Database selecione
dbAccess. Feito isso coloque um
TSQLQuery e mude
Name para
queEmployee, em
Database selecione
dbAccess. Na propriedade
SQL informe
SELECT * FROM EMPLOYEE e em
Transaction selecione
trAccess. Se você mudar a propriedade
Active de
queEmployee para
True, ela deveria abrir sem erro. No meu caso não funcionou e, depois de muito apanhar, mudei a propriedade
UsePrimaryKeyAsKey de
queEmployee para
False e deu certo. Não sei explicar porque. Na propriedade
InsertSQL digite:
INSERT INTO EMPLOYEE VALUES (:EMPNO, :LASTNAME, :FIRSTNAME, :PHONEEXT, :HIREDATE, :SALARY);
Em
UpdateSQL:
UPDATE EMPLOYEE SET LASTNAME = :LASTNAME, FIRSTNAME = :FIRSTNAME, PHONEEXT = :PHONEEXT, HIREDATE = :HIREDATE, SALARY = :SALARY WHERE EMPNO = :EMPNO;
E em
DeleteSQL:
DELETE FROM EMPLOYEE WHERE EMPNO = :EMPNO;
Agora coloque um
TDataSource da aba
Data Access. Defina
Name como
dsEmployee e
DataSet como
tbEmployee.
Crie uma interface. Se tiver dúvida de como fazer isso, dê uma olhada nos posts
Lazarus - Acessando banco de dados com SQLdb - Parte I e
Parte II.
Lembre de abrir e fechar a conexão do TODBCConnection. Pode fazer isso nos eventos OnShow e OnClose de form, usando os métodos
Open e
Close. Abra e feche
tbEmployee nos mesmos eventos. Para finalizar, no evento
AfterPost de
tbEmployee escreva o seguinte código:
tbEmployee.ApplyUpdates;
E ligue o evento
AfterDelete a esse mesmo método. Clique
aqui para fazer o download do exemplo. Qualquer dúvida ou sugestão comente.
Comentários
Sabe cmo psso dar a volta á questão.
Obrigado
Que versão do lazarus você está rodando?
Toda inserção é descartada, mesmo usando a barra de navegação do Lazarus