14
VIEWS Article Discussion Edit History NAVIGATION Main Page Documentation FAQ Downloads Glossary Index Recent changes Random page Help TOOLBOX What links here Related changes Upload file Special pages Printable version Permanent link WIKI SEARCH Go Search HOME NEWS DOWNLOAD WIKI FORUMS DOCUMENTATION BUG TRACKER Log in / create account lazarus wiki OPEN SOURCE GUI RAD IDE FOR FREE PASCAL LAZARUS DATABASE TUTORIAL/PT From Lazarus-ccr Deutsch (de) English (en) Español (es) Français (fr) Italiano (it) Japanese (ja) Nederlands (nl) Português (pt) Русский (ru) 中文((zh_CN) 中文(正體)(zh_TW) Contents 1 Introdução 2 Lazarus e MySQL 2.1 Comece a trabalhar com MySQL no Linux ou Windows 2.2 Comece a trabalhar com FPC no modo texto 2.3 Conectando ao MySQL uma Aplicação Lazarus 2.3.1 Download do Código-Fonte do MYSQL 3 Lazarus and PostgreSQL 4 Lazarus and SQLite 4.1 Introduction 4.2 Requirementos 4.3 How To Use (Basic Usage) 4.4 Remarks 5 Lazarus and MSSQL 6 Lazarus e Interbase / Firebird 6.1 FBLib Firebird Library 7 Lazarus and dBase 8 Related Links 9 Contributors and Changes Introdução Este tutorial mostra como usar o Lazarus com uma variedade de Bancos de dados. O Lazarus suporta uma diversidade de banco de dados fora-da-caixa, entretanto os desenvolvedores instalam os pacotes adequados para cada um. Você pode acessar o banco de dados por código ou jogando componentes no formulário. Os componentes do tipo data-aware (que precisam de uma fonte de dados para funcionar) representam campos e são conectados ajustando a propriedade DataSource para apontar para o

3bancoDados_lazarus

Embed Size (px)

Citation preview

Page 1: 3bancoDados_lazarus

VIEWS

ArticleDiscussionEditHistory

NAVIGATION

Main PageDocumentationFAQDownloadsGlossaryIndexRecent changesRandom pageHelp

TOOLBOX

What links hereRelated changesUpload fileSpecial pagesPrintable versionPermanent link

WIKI SEARCH

Go Search

HOME NEWS DOWNLOAD WIKI FORUMS DOCUMENTATION BUG TRACKER

Log in / create account

lazarus wikiOPEN SOURCE GUI RAD IDE FOR FREE PASCAL

LAZARUS DATABASE TUTORIAL/PT

From Lazarus-ccr

Deutsch (de) English (en) Español (es) Français (fr) Italiano (it) Japanese (ja) Nederlands (nl)

Português (pt) Русский (ru) 中文(简体)(zh_CN) 中文(正體)(zh_TW)

Contents

1 Introdução2 Lazarus e MySQL

2.1 Comece a trabalhar com MySQL no Linux ou Windows2.2 Comece a trabalhar com FPC no modo texto2.3 Conectando ao MySQL uma Aplicação Lazarus

2.3.1 Download do Código-Fonte do MYSQL3 Lazarus and PostgreSQL4 Lazarus and SQLite

4.1 Introduction4.2 Requirementos4.3 How To Use (Basic Usage)4.4 Remarks

5 Lazarus and MSSQL6 Lazarus e Interbase / Firebird

6.1 FBLib Firebird Library7 Lazarus and dBase8 Related Links9 Contributors and Changes

Introdução

Este tutorial mostra como usar o Lazarus com uma variedade de Bancos de dados.

O Lazarus suporta uma diversidade de banco de dados fora-da-caixa, entretanto osdesenvolvedores instalam os pacotes adequados para cada um. Você pode acessar obanco de dados por código ou jogando componentes no formulário. Os componentesdo tipo data-aware (que precisam de uma fonte de dados para funcionar) representamcampos e são conectados ajustando a propriedade DataSource para apontar para o

Page 2: 3bancoDados_lazarus

TDataSource. O Datasource representa a tabela e é conectado ao componente dobanco de dados (exemplos: TPSQLDatabase, TSQLiteDataSet) ajustando apropriedade DataSet. Os componentes data-aware ficam localizados na aba "DataControls". Os controles Datasource e o Database estão localizados na aba "DataAccess".

Lazarus e MySQL

Comece a trabalhar com MySQL no Linux ou Windows

Siga as instruções no Manual do usuário MySQL. Certifique-se que o mysqld daemonestá rodando satisfatoriamente, e que todos os potencias usuários(incluindo root,mysql,você mesmo e qualquer outro que possa necessitá-lo) tenham os privilégios aeles necessários, para os possíveis hosts que possam necessitá-lo(incluindo 'localhost',o hostname local, e outros hosts na sua rede) para manter consistência e segurança. Épreferivel que todos os usuários incluindo o root tenham passwords. Teste as ações dosistema de banco de dados usando os exemplos dados no manual do mysql, ecertifique-se que todos os usuários sejam confiáveis no acesso.

Comece a trabalhar com FPC no modo texto

Este é o diretório com programa de exemplo $(fpcsrcdir)/packages/base/mysql/. Vocepode encontrar código fonte do FPC (Free Pascal Compiler) no Lazarus: MenuEnvironment -> Environment Options -> Paths tab -> FPC source directory.Possivelmente o endereço para o mysql seja em /usr/share/fpcsrc/packages/base/mysql(RPM) ou c:\lazarus\fpcsrc\packages\base\mysql\ (no windows). Este diretório contémtambém as units mysql.pp, mysql_com.pp e mysql_version.pp. Antes de rodar o scriptde teste, voce necessita criar o banco de dados chamada testdb: faça isso logando-seno prompt do mysql (o root com todos os privilegios) e dando o seguinte comando:

CREATE DATABASE testdb;

Certifique-se que todos os usuário tenham privilegios de acesso apropriados:

GRANT ALL ON testdb TO johnny-user IDENTIFIED BY 'johnnyspassword';

Existe um script chamado mkdb que você deve tentar executar:

sh ./mkdb

Este vai provavelmente falhar, já que o sistema não vai autorizar um usuário anônimo aacessar o banco de dados. Então mude o script usando um editor de modo que a linhainvocando o MySQL seja:

mysql -u root -p ${1-testdb} << EOF >/dev/null

e tente executá-lo novamente entrando o seu password no prompt. Com sorte vocêdeve ter conseguido criar o banco de dados de teste: teste-o (enquanto logado nomonitor do MySQL) issuing o estamento do MySQL.

select * from FPdev;

Page 3: 3bancoDados_lazarus

Você deve ver uma tabela listando o ID, nome de usuário e e-mail de alguns dosdesenvolvedore do FPC.

Agora tente executar o program de teste testdb.pp (ele pode precisar ser compilado evai quase certamente falhar na primeira tentativa!!).

Eu obtive que o programa não poderia se conectar ao mysql por várias razões:

Meu sistema (SuSE Linux v9.0) instal o mysql v4.0.15, não a versão 3 para aqual o pacote foi desenhado.

O programa precisa ter nomes de usuários e passwords para ter acesso aobanco de dados.

O compilador precisa saber onde encontrar as bibliotecas mysql (se você nãoinstalou as bibliotecas de desenvolvimento MySQL, faça-o agora).

Eu criei uma cópia de testdb.pp chamada trydb.pp em vez de editar o original - issoquer dizer que os arquivos originais ainda são reparados em subseqüentes atualizaçõesdo CVS. Também copiei os arquivos do subdiretório mysql/ver40/ para o subdiretórioprincipal mysql/, renomeando-os para mysql_v4.pp, mysql_com_v4.pp andmysql_version_v4.pp, certificando-me de nomear cada unidade dentro de cada arquivocorrespondente. Modifiquei o estamento uses em trydb.pp para uses mysql_v4 e oestamento em mysql_v4 para

uses mysql_com_v4

Adicionei uma linha em /etc/fpc.cfg para apontar para minhas bibliotecas:

-Fl/lib;/usr/lib

O passo seguinte pode não ser necessário se as devel-libraries estiverem instaladascomo os links que serão criados para você, mas não custa verificar. Eu tive que achar onome real da biblioteca mysqlclint no diretório /usr/lib e no meu caso tive que entrar ocomando:

ln -s libmysqlclient.so.12.0.0 lmysqlclient

para fazer um link simbólico permitindo o FPC achar a biblioteca. Eu também criei o link

ln -s libmysqlclient.so.12.0.0 mysqlclient

e pus links similares em vários outros subdiretórios. Alguns usuários podem precisaradicionar o seguinte link:

ln -s libmysqlclient.so.12.0.0 libmysqlclient.so

Eu modifiquei o trydb.pp para incluir detalhes de usuários, inicialmente adicionandohost, usuário e password como constantes:

const host : Pchar= 'localhost'; user : Pchar= 'myusername'; passwd: Pchar = 'mypassword';

Page 4: 3bancoDados_lazarus

Também achei que não poderia conectar ao mysql usando a chamadamysql_connect(), mas tive que usar mysql_real_connect() que tem muitos maisparâmetros. Para complicar, o número de parâmetros parece ter mudado entre aversão 3 (quando eram sete) e a versão 4 (em que há oito). Antes de usarmysql_real_connect eu tive que usar mysql_init() que não é encontrada no mysql.pporiginal mas o é no mysql_v4.pp.

Assim o código para a conexão ao banco de dados agora é:

{ umas poucas variáveis extra }var alloc : PMYSQL; {fragmento do programa principal } begin if paramcount=1 then begin Dummy:=Paramstr(1)+#0; DataBase:=@Dummy[1]; end; Writeln ('Allocating Space...'); alloc := mysql_init(PMYSQL(@qmysql)); Write ('Connecting to MySQL...'); sock := mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0); if sock=Nil then begin Writeln (stderr,'Couldnt connect to MySQL.'); Writeln (stderr, 'Error was: ', mysql_error(@qmysql)); halt(1); end; Writeln ('Done.'); Writeln ('Connection data:');{$ifdef Unix} writeln ('Mysql_port : ',mysql_port); writeln ('Mysql_unix_port : ',mysql_unix_port);{$endif} writeln ('Host info : ',mysql_get_host_info(sock)); writeln ('Server info : ',mysql_stat(sock)); writeln ('Client info : ',mysql_get_client_info); Writeln ('Selecting Database ',DataBase,'...'); if mysql_select_db(sock,DataBase) < 0 then begin Writeln (stderr,'Couldnt select database ',Database); Writeln (stderr,mysql_error(sock)); halt (1); end;{... as original contents of testdb.pp}

Agora - pronto para começar a compilar trydb.pp?

fpc trydb

successo! Agora execute:

./trydb

Oba! Consegui a lista dos desenvolvedores do FPC!

Uns poucos refinamentos mais: faça a entrada de detalhes dos usuários e os comandosdo mysql interativos, usando variáveis em vez de constantes, e permita que várioscomandos SQL sejam inseridos, até que o comando quit seja encontrado: veja fullprogram listing, onde os detalhes de usuário são inseridos do console e o programa vai

Page 5: 3bancoDados_lazarus

para um loop onde os comandos SQL são inseridos do console (sem ponto e vírgula nofinal) e as respostas são impressas na tela, até que 'quit' é inserido pelo teclado.

Veja Sample Console Listing.

Conectando ao MySQL uma Aplicação Lazarus

Este tutorial mostra como conectar o Lazarus ao banco de dados MySQL e executarqueries simples usando somente os componentes básicos do Lazarus; ele não usacomponentes Data Aware, mas ilustra os princípios de interface com banco de dados.

Crie um novo projeto no Lazarus:

Projeto -> Novo Projeto -> Application

Um novo formulário gerado automaticamente vai aparecer.

Aumente a área do formulário até preencher aproximadamente a metade da tela erenomeie o formulário e o seu caption para 'TryMySQL'.

Da aba Standard Component ponha três Edit Boxes do lado superior esquerdo doformulário e imediatamente acima de cada Box ponha um Label. Mude os nomes ecaptions para 'Host' (e HostLLabel, HostEdit), 'UserName' (e UserLabel, UserEdit) e'Password' (com PasswdLabel e PasswdEdit). Alternativamente você pode usarcomponentes LabelledEdit da aba Additional.

Selecione a caixa Passwd Edit e encontre a propriedade PasswordChar : mude-a para"*" ou algum outro caractere de modo que quando você escreva uma senha oscaracteres não apareçam na tela mas sejam representados por uma série decaracteres "*". Certifique-se de que a propriedade Text para cada Edit Box esteja embranco.

Agora ponha outra Edit Box e o Label correspondente no topo direito do formulário.Mude o Label para 'Enter SQL Command' e o seu nome para CommandEdit.

Coloque três Buttons no formulário: dois do lado esquerdo sob as Edit Boxes e um dolado direito sob a Command Box.

Rotule os botões do lado esquerdo como 'Connect to Database' (ConnectButton) e'Exit' (ExitButton) e o que está do lado direito como 'Send Query' (QueryButton).

Ponha um Memo grande rotulado e nomeado como 'Results' (ResultMemo) abaixo dolado direito, preenchendo a maior parte do espaço disponível. Encontre a propriedadeScrollBars do Memo e selecione ssAutoBoth , de modo que as Scroll Bars apareçamautomaticamente se o texto preencheer o espaço. Configure a propriedade WordWrapcomo True.

Ponha uma Status Bar (da aba Common Controls) embaixo no formulário e faça apropriedade SimpleText igual a 'TryMySQL'.

Um screenshot do formulário pode ser visto aqui: Mysql Example Screenshot(http://lazarus-ccr.sourceforge.net/kbdata/trymysqldb.png)

Agora você precisa escrever alguns event handlers.

As três caixas de edição à esquerda são para a inserção do hostname, do username eda password. Quando elas são inseridas satisfatoriamente, o botão de conexão éclicado. O eventhandler OnClick para este botão é baseado em parte do seguinte

Page 6: 3bancoDados_lazarus

programa FPC em modo texto.

As respostas do banco de dados não podem agora ser escritas usando os estamentosPascal write e writeln: em vez disso, as respostas têm que ser convertidas em strings emostradas no Memo. Mesmo que os estamentos Pascal write e writeln sejam capazesde realizar muitas conversões rápidas de tipo, o uso do Memo para saída de textonecessita da conversão explícita de tipo de dados para a forma correta de string,portanto variáveis PChar têm que ser convertidas para strings usando StrPas e inteirosprecisam ser convertidos com IntToStr.

Strings são mostradas no Memo fazendo

procedure ShowString (S : string);(* display a string in a Memo box *)begin trymysqlForm1.ResultsMemo.Lines.Add (S)end;

The ConnectButton event handler thus becomes:

procedure TtrymysqlForm1.ConnectButtonClick(Sender: TObject);(* Connect to MySQL using user data from Text entry boxes on Main Form *)var strg: string; begin dummy1 := trymysqlForm1.HostEdit.text+#0; host := @dummy1[1]; dummy2 := trymysqlForm1.UserEdit.text+#0; user := @dummy2[1] ; dummy3 := trymysqlForm1.PasswdEdit.text+#0; passwd := @dummy3[1] ;

alloc := mysql_init(PMYSQL(@qmysql)); sock := mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0); if sock=Nil then begin strg :='Couldnt connect to MySQL.'; showstring (strg); Strg :='Error was: '+ StrPas(mysql_error(@qmysql)); showstring (strg); end else begin trymysqlForm1.statusBar1.simpletext := 'Connected to MySQL'; strg := 'Now choosing database : ' + database; showstring (strg);{$ifdef Unix} strg :='Mysql_port : '+ IntToStr(mysql_port); showstring (strg); strg :='Mysql_unix_port : ' + StrPas(mysql_unix_port); showstring (strg);{$endif} Strg :='Host info : ' + StrPas(mysql_get_host_info(sock)); showstring (strg); Strg :='Server info : ' + StrPas(mysql_stat(sock)); showstring (strg); Strg :='Client info : ' + Strpas(mysql_get_client_info); showstring (str trymysqlForm1.statusbar1.simpletext := 'Selecting Database ' + DataBase +'... if mysql_select_db(sock,DataBase) < 0 then begin strg :='Couldnt select database '+ Database; ShowString (strg); Strg := mysql_error(sock); ShowString (strg); end end;end;

A caixa de texto à direita permite inserção de um estamento SQL, sem um ponto evírgula no final. Quando você estiver satisfeito com o seu conteúdo ou sintaxe, o botãoSendQuery é pressionado e a query é processada, com os resultados sendo escritos no

Page 7: 3bancoDados_lazarus

ResultsMemo.

O event handler SendQuery é baseado na versão modo texto do FPC, exceto queconversões explícitas de tipo têm que ser feitas antes de a string ser mostrada.

Uma diferença do modo texto do programa FPC é que se uma condição de erro fordetectada, o programa não pára e a MySQL não é fechada. Em vez disso, o controleretorna ao formulário principal e é dada uma oportunidade de corrigir a inserção antesque o comando seja enviado. A aplicação finalmente fecha (com o fechamento daMySQL) quanto o botão Exit é clicado.

O código para SendQuery é o seguinte:

procedure TtrymysqlForm1.QueryButtonClick(Sender: TObject);var dumquery, strg: string;begin dumquery := TrymysqlForm1.CommandEdit.text; dumquery := dumquery+#0; query := @dumquery[1]; trymysqlForm1.statusbar1.simpletext := 'Executing query : '+ dumQuery +'...'; strg := 'Executing query : ' + dumQuery; showstring (strg); if (mysql_query(sock,Query) < 0) then begin Strg :='Query failed '+ StrPas(mysql_error(sock)); showstring (strg); end else begin recbuf := mysql_store_result(sock); if RecBuf=Nil then begin Strg :='Query returned nil result.'; showstring (strg); end else begin strg :='Number of records returned : ' + IntToStr(mysql_num_rows (recbuf Showstring (strg); Strg :='Number of fields per record : ' + IntToStr(mysql_num_fields(recbu showstring (strg); rowbuf := mysql_fetch_row(recbuf); while (rowbuf <>nil) do begin Strg :='(Id: '+ rowbuf[0]+', Name: ' + rowbuf[1]+ ', Email : ' + rowbuf[2] +')'; showstring (strg); rowbuf := mysql_fetch_row(recbuf); end; end; end;end;

Salve seu projeto, pressione Run -> Run

Download do Código-Fonte do MYSQL

Uma listagem completa do programa está disponível aqui Sample Source Code(http://lazarus-ccr.sourceforge.net/kbdata/mysqldemo.tar.gz)

Lazarus and PostgreSQL

This is a very short tutorial to get Lazarus 0.9.12 or later to connect to a PostgreSQLdatabase, local or remote, using TPQConnection.

After correct install, follow these steps:

Page 8: 3bancoDados_lazarus

Place a PQConnection from the SQLdb tabPlace a SQLQuery from the SQLdb tabPlace a SQLTransaction from the SQLdb tabPlace a DataSource from the DataAccess tabPlace a DBGrid from the DataControls tab

In the PQConnection fill in:transaction property with the respective SQLTransaction objectDatabase nameHostNameUserName + password

Check that the SQLTransaction was automatically changed to point to thePQConnection

In the SQLQuery fill in:transaction property with the respective objectdatabase property with respective objectSQL (something like 'select * from anytable')

In the DataSource object fill in the DataSet property with the SQLQuery object

In the DBGrid fill in the datasource as the DataSource Object

Turn everything to connected and active and the DBGrid should be filled in design time.TDBText and TDBEdit seem to work but (for me) they only _show_ _data_.

To change contents in the database, I called the DB Engine direct with the followingcode:

try sql:= 'UPDATE table SET setting=1'; PQDataBase.Connected:=True; PQDataBase.ExecuteDirect('Begin Work;'); PQDataBase.ExecuteDirect(sql); PQDataBase.ExecuteDirect('Commit Work;'); PQDataBase.Connected:=False; except on E : EDatabaseError do MemoLog.Append('DB ERROR:'+sql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E. on E : Exception do MemoLog.Append('ERROR:'+sql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Mes end;

Notes:Tested on windows, Lazarus 0.9.12 + PgSQL 8.3.1Some tests in linux, Lazarus 0.9.12 and PgSQL 8.0.x

Instalation and errors:In the tested version of Lazarus .12, fields of type "text" and "numeric" havebugsI used with no problems char fixed size, int and float8

Page 9: 3bancoDados_lazarus

Sometimes restarting Lazarus solves stupid errors...After some errors, the transactions remain active and should be deactivatedmannuallyChanges made in Lazarus are of course not visible until transactioncommitedThe integrated debugger seems buggy (at least in windows) - sometimesrunning outside of the IDE may help to find errorsIn linux certain error messages are printed in the console -- run yourprogram in the command line, sometimes there is some extra usefuldebugging infoError: "Can not load Postgresql client. Is it installed (libpq.so) ?"

Add the path to seach libpq* from the PostgreSQL installation.In linux add the path to the libpq.so file to the libraries section in your/etc/fpc.cfg file. For example : -Fl/usr/local/pgsql/libIn windows, add these libs anywhere in the Path environmentvariable or project dirI windows, I copied all the DLLs in my C:\ProgramFiles\PostgreSQL\8.1\bin dir to another dir in the PATHOr add this postgres\bin dir to the path

Lazarus and SQLite

by Luiz Américo Translated by Edson Leonel de oliveira

Introduction

TSqliteDataset e TSqlite3Dataset são comandos TDataset que acessam,respectivamente, bases de dados sqlite versões 2.8.x e 3.2.x. Abaixo está uma lista dasprincipais vantagens e desvantagens:

Vantagens:

Flexível: programadores podem escolher usar ou não a linguagem SQL,acessando tabelas com layouts simples ou qualquer layout complexo disponívelno SQL/sqliteAtualização automática da base de dados: não precisa comandar manualmente aatualização com comandos SQL, um método simples a executaRápido: faz um cache dos dados na memória, navegando rapidamente nosdadosSem configuração e instalação de servidor: conecta-se usando a bibliotecadinâmica sqlite

Disvantagens

Requer arquivo externo (biblioteca sqlite)

Requirementos

Para bases de dados sqlite2:fpc 2.0.0

Page 10: 3bancoDados_lazarus

Lazarus 0.9.10biblioteca runtime sqlite 2.8.15 ou acima (pegar em www.sqlite.org)

Para bases de dados sqlite3:fpc 2.0.2Lazarus 0.9.11 (svn revisão 8443 ou acima)biblioteca runtime sqlite 3.2.1 ou acima (pegar em www.sqlite.org)

Antes de inicalizar um projeto lazarus, tenha certeza que:

a biblioteca sqlite esteja no PATH do sistema ou em um diretório executávelsob o Linux, colocar cmem como a primeira unidade nas cláusulas em uso narotina principal (main)

How To Use (Basic Usage)

Install the package found at /components/sqlite directory (see instructions here)

At design time set the following properties:

FileName: path of the sqlite file [required]TableName: name of the table used in the sql statement [required]Sql: a SQL select statement [optional]

Creating a Table (Dataset)

Double click in the component icon or use the 'Create Table' item of the popup menuthat appears when clicking the right mouse button. A simple self-explaining table editorwill be show.

Here is all field types supported by TSqliteDataset and TSqlite3Dataset: Integer AutoInc String Memo Bool Float Word DateTime Date Time LargeInt Currency

Retrieving the data

After creating the table or with a previously created Table, open the dataset with Openmethod. If the SQL property was not set then all records from all fields will be retrieved,the same if you set the SQL to:

SQL:='Select * from TABLENAME';

Applying changes to the underlying datafile

To use the ApplyUpdates function, the dataset must contain at least one field that fillsthe requirements for a Primary Key (values must be UNIQUE and not NULL)

Page 11: 3bancoDados_lazarus

It's possible to do that in two ways:

Set PrimaryKey property to the name of a Primary Key fieldAdd an AutoInc field (This is easier since the TSqliteDataSet automaticallyhandles it as a Primary Key)

If one of the two conditions is set then just call

ApplyUpdates;

PS1: If both conditions are set, the field corresponding to PrimaryKey is used to applythe updates.

PS2: Setting PrimaryKey to a field that is not a Primary Key will lead to loss of data ifApplyUpdates is called, so ensure that the chosen field contains not Null and Uniquevalues before using it.

Remarks

Although it has been tested with 10000 records and worked fine, TSqliteDatasetkeeps all the data in memory, so remenber to retrieve only the necessary data(principally with Memo Fields).The same datafile (Filename property) can host several tables/datasetsSeveral datasets (different combinations of fields) can be created using the sametable simultaneouslyIt's possible to filter the data using WHERE statements in the sql, closing andreopening the dataset (or calling RefetchData method). But in this case, the orderand number of fields must remain the sameIt's also possible to use complex SQL statements using aliases, joins, views inmultiple tables (remember that they must reside in the same datafile), but in thiscase ApplyUpdates won't work. If someone wants to use complex queries and toapply the updates to the datafile, mail me and I will give some hints how to do thatSetting filename to a sqlite2.x datafile not created by TSqliteDataset and openingit is allowed but some fields won't have the correct field type detected. These willbe treated as string fields.

Generic examples can be found at fpc/fcl/db/sqlite CVS directory

Luiz Américo pascalive(at)bol(dot)com(dot)br

Lazarus and MSSQL

It is working with Zeoslib (latest cvs), see the links on bottom of page.

Lazarus e Interbase / Firebird

Olhe Install Packages. On this page is a first small example en explanation about how toconnect to an IB or FB server. Aqui o início de tradução (e atualização):

No diretório onde o Lazarus é instalado você vai encontrar subdiretórios, e o primeiro(alfabeticamente) chama-se components. Este, por sua vez, tem subdiretórios comosqlite e sqldb. O primeiro contém componentes de conexão com o BD e descendentes

Page 12: 3bancoDados_lazarus

de Tdataset para o respectivo banco, enquanto o sqldb é mais genérico pois consistede TSQLQuery (um TDataset) e TSQLTransaction usados para todos os tipos de BD euma T??Conection para realizar a conexão. Nesse artigo vamos instalar o pacotesqldb juntamente com a conexão para Interbase. Antes, porém, de iniciar a instalaçãodo pacote seria bom discutir o porque de Lazarus não instalar componentes de conexãocom o BD. Esses componentes precisam das bibliotecas clientes para funcionar no PConde são usados. Como o Lazarus atualmente não suporta ligações dinâmicas, todasas bibliotecas precisam ser compiladas para a IDE. Como não se espera que osdesenvolvedores tenham todos os BD instalados, não é possível ter como padrãoinstalar os componentes de conexão. Delphi também só instala os componentes de BDque são prontamente encontrados no computador (componentes ADO) e componentesque não necessitam bibliotecas (BDE: Paradox, DBase). Para instalar o pacote vá emPacotes → Abrir arquivo de pacote. No diálogo seguinte navegue para/usr/bin/lazarus/components/sqldb ou ao diretório correspondente em OS X ouWindows e escolha o arquivo sqldblaz.lpk. Se tudo correr como planejado você verá oGerenciador de Pacotes, que exibe uma árvore com os arquivos do pacote e ospacotes requeridos. Então pressione Compilar se você não quer instalar o componentena IDE, caso contrário clique em Instalar. Nesse caso aparecerá uma advertênciaexplicando que o Lazarus suporta apenas ligações a bibliotecas estáticas e pergunta sequer reconstruir Lazarus. Pressione Sim e o programa será reconstruido. Se tudocorreu bem você verá uma nova palheta chamada SQLdb e seu último componente dadireita é justamente o de conexão com bancos Firebird ou InterBase.

Para instalar o Firebird e criar/gerenciar banco de dados, olhe esse artigo de JoséRibeiro: http://www.vivaolinux.com.br/artigo/Criando-um-banco-de-dados-no-Flamerobin-(Firebird)/

Also work with the latest Zeoslib (from cvs).

FBLib Firebird Library

FBLib (http://fblib.altervista.org/) é uma biblioteca open source para acesso direto (semData Aware) ao Firebird.

Características atuais incluem:

Acesso direto ao Firebird 1.0.x 1.5.x Classic ou SuperServerMultiplataforma (Win32, Gnu/Linux, FreeBSD)Seleção automática da biblioteca cliente 'fbclient' ou 'gds32'Query com parâmetrosSuporta dialetos SQL 1 e 3Licença LGPLExtração de MetadataParser Simples de ScriptsApenas 100-150 KB adicionados ao executávelSuporta campos BLOBExporta dados para HTML SQL ScriptGerenciador de Serviço (backup, restore, gfix...)Alerta de Eventos

Você pode acessar a documentação em FBLib's website (http://fblib.altervista.org/) .

Aqui (http://www.firebirdnews.org/?p=1769) você encontra uma versão atualizada. Ou,

Page 13: 3bancoDados_lazarus

diretamente pelo SVN: [1](https://tiopf.svn.sourceforge.net/svnroot/tiopf/3rdParty/FBLib/Trunk)

Lazarus and dBase

Tony Maro

You might also want to visit the beginnings of the TDbf Tutorial page

FPC includes a simple database component that is similar in function to the DelphiTTable component called "TDbf" (TDbf Website (http://tdbf.sourceforge.net/) ) thatsupports a very basic subset of features for dBase files. It is not installed by default, soyou will first need to install the Lazarus package from the "lazarus/components/tdbf"directory and rebuild your Lazarus IDE. It will then appear next to the TDatasource inyour component palette.

The TDbf component has an advantage over other database components in that itdoesn't require any sort of runtime database engine, however it's not the best option forlarge database applications.

It's very easy to use. Simply, put, drop a TDbf on your form, set the runtime path to thedirectory that your database files will be in, set the table name, and link it to yourTDatasource component.

Real functionality requires a bit more effort, however. If a table doesn't already exist,you'll need to create it programmatically, unless there's a compatible table designer I'mnot familiar with.

Attempting to open a non-existant table will generate an error. Tables can be createdprogrammatically through the component after the runtime path and table name are set.

For instance, to create a table called "dvds" to store your dvd collection you would dropit on your form, set the runtime path, and set the table name to "dvds". The resulting filewill be called "dvds.dbf".

In your code, insert the following:

Dbf1.FilePathFull := '/path/to/my/database'; Dbf1.TableName := 'dvds'; With Dbf1.FieldDefs do begin Add('Name', ftString, 80, True); Add('Description', ftMemo, 0, False); Add('Rating', ftString, 5, False); end; Dbf1.CreateTable;

When this code is run, your DVD collection table will be created. After that, all dataaware components linked through the TDatasource to this component will allow easyaccess to the data.

Adding indexes is a little different from your typical TTable. It must be done after thedatabase is open. It's also the same method you use to rebuild the indexes. Forinstance:

Dbf1.Exclusive := True; Dbf1.Open; Dbf1.AddIndex('dvdsname','Name',[ixPrimary, ixUnique, ixCaseInsensitive]); Dbf1.AddIndex('rating.ndx', 'Rating', [ixCaseInsensitive]); Dbf1.Close;

Page 14: 3bancoDados_lazarus

The first (primary) index will be a file called "dvdsname.mdx" and the second will be afile named "rating.ndx" so in a multiple table database you must be careful not to use thesame file name again.

I will try to add a more detailed example at a later date, but hopefully this will get thoseold Delphi programmers up and running with databases in Lazarus!

Related Links

Creating Databases Applications with Lazarus using the DB-unitCreating a database application using MySQLCreating a database application using the Zeos componentsPascal Data Objects is a database API that worked for both FPC and Delphi andutilises native MySQL libraries for version 4.1 and 5.0. It's inspired by PHP's PDOclass.

https://trac.synsport.com:8000/index.php/pdo/wiki (username/password is guest/guest)

Contributors and Changes

This page has been converted from the epikwiki version (http://lazarus-ccr.sourceforge.net/index.php?wiki=LazarusDatabase) .

Retrieved from "http://wiki.lazarus.freepascal.org/Lazarus_Database_Tutorial/pt"

This page was last modified 13:05, 23 December 2009.

Content is available under .