Sign in Join
Wiki copytemporary

Lazarus Database Tutorial/es: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Introducción
22
33   Este documento explica cómo hacer trabajar a Lazarus con una variedad de bases de datos.
44
55   Lazarus admite varias bases de datos externas, sin embargo, el desarrollador debe instalar los paquetes requeridos (liberías de cliente) para cada uno de los SGBD. Puede acceder a la base de datos a través de código o poniendo componentes en un formulario. Los componentes ligados a datos representan los campos y se conectan mediante dando valor a la propiedad DataSource para que apunte a un origen de datos (*TDataSource*). El origen de datos representa una tabla y se conecta a los componentes de base de datos (por ejemplo: TPSQLDatabase y TSQLiteDataSet) estableciendo la propiedad **DataSet**. Los componentes de datos se encuentran en la pestaña "Data Controls". El origen de datos y los controles de bases de datos se encuentran en la pestaña "Data Access".
66
77## Lazarus e Interbase / Firebird
88
99### Soporte integrado (componentes SQLDB)
1010
1111   Ver las páginas de turorías y consejos:
1212
1313- [[Firebird]]
1414- [[SQLdb Tutorial1]]
1515
1616   Ver tambien [[Install Packages/es|Instalar paquetes]]. En esta página hay un pequeño ejemplo y una explicación acerca de cómo conectarse a un servidor de IB o FB.
1717
1818### Zeos
1919
2020   Firebird tambien funciona con la última versión de la librería Zeos (desde cvs).
2121
2222### Librería FBLib Firebird
2323
2424   [FBLib](http://fblib.altervista.org) es una librería de fuentes abiertas, para acceder directamente a las BD relacionales Firebird desde Borland Delphi, Kylix, Free Pascal y Lazarus.
2525
2626   La funcionalidad actual incluye:
2727
2828- Acceso directo a Firebird 1.0.x 1.5.x, 2.x Classic o SuperServer
2929- Multiples plataformas \[Win32,Gnu/Linux,FreeBSD)
3030- Selección automática de la librería cliente 'fbclient' o 'gds32'
3131- Consultas SQL parmetrizables
3232- Suporta el dialecto 1/3 de SQL
3333- Licencia LGPL
3434- Extrae Metadatos
3535- Analizador simple de guiones
3636- Únicamnete añade 100-150 KB al EXE final
3737- Suporta campos BLOB
3838- Exporta Datos a HTML, SQL, Script
3939- Gestor de servicios (copias de seguridad,volcados,gfix...)
4040- Alertas de Eventos
4141
4242   Puedes bajar la documentación de [sitio de FBLib](http://fblib.altervista.org/).
4343
4444[Aquí](http://www.firebirdnews.org/?p=1769) puedes encontrar versiones actualizadas. O, mira en el [svn](https://tiopf.svn.sourceforge.net/svnroot/tiopf/3rdParty/FBLib/Trunk) (Consejo de [Guionardo](http://wiki.lazarus.freepascal.org/User:Guiosoft))
4545
4646## Lazarus y MySQL
4747
4848by ChrisKirk
4949
50501. Poner a trabajar MySQL en Linux o Windows, en modo consola.
51512. Poner a trabajar MySQL con FPC en modo texto.
52523. Poner a trabajar MySQL en un formulario Lazarus.
53534. Descargue el Código fuente de ejemplo de MySQL
5454
5555### 1 - Poner a trabajar MySQL en Linux o Windows
5656
5757Siga las instrucciones del Manual del Usuario de MySQL. Asegúrese que el demonio mysqld esté corriendo adecuadamente, y que todos los potenciales usuarios (incluyendo a root, mysql, usted mismo y cualquier otro que lo necesite) tengan tantos privilegios como requieran, desde la cantidad de hosts que sean necesarios (incluyendo a 'localhost', el nombre de la misma máquina y de las otras integrantes de su red) hasta el grado de seguridad que se requiera. Es recomendable que todos los usuarios, incluyendo a root, tengan contraseña. Pruebe el funcionamiento del sistema de base de datos usando los ejemplos dados en el manual y verifique que todos los usuarios posean acceso a la misma.
5858
5959### 2 - Poniendo a trabajar MySQL con FPC en modo texto
6060
6161Hay un directorio con un ejemplo en \$(FreePascal_directory)/packages/base/mysql/, este directorio también contiene las unidades mysql.pp, mysql_com.pp y mysql_version.pp. Antes de correr los scripts de testeo debe crear la base de datos llamada testdb: Hágalo conectándose en la consola de mysql (como root con privilegios totales) y escriba la siguiente sentencia SQL
6262
63-` CREATE DATABASE testdb;`
63+```text
64+ CREATE DATABASE testdb;
65+```
6466
6567asegúrese que todos los usuarios que lo necesiten tengan el apropiado privilegio de acceso a ésta base.
6668
67-` GRANT ALL ON testdb TO johnny-user IDENTIFIED BY 'johnnyspassword'; `
69+```text
70+ GRANT ALL ON testdb TO johnny-user IDENTIFIED BY 'johnnyspassword';
71+```
6872
6973Hay un script llamado mkdb que debería tratar de correr:
7074
71-` sh ./mkdb`
75+```text
76+ sh ./mkdb
77+```
7278
7379Ésto probablemente fallará, debido a que el sistema no debería permitir a un usuario anónimo acceder a la base de datos. Por consiguiente modifique el script utilizando un editor para que la línea que invoca a mysql diga:
7480
75-` mysql -u root -p  ${1-testdb} << EOF >/dev/null`
81+```text
82+ mysql -u root -p ${1-testdb} << EOF >/dev/null
83+```
7684
7785pruebe correrlo nuevamente, ingresando su contraseña cuando se la pida. Con suerte Ud. ya habría creado la base de datos de prueba, verifíquelo (conectado a la consola de mysql) escribiendo la siguiente sentencia
7886
79-` select * from FPdev;`
87+```text
88+ select * from FPdev;
89+```
8090
8191Debería ver la tabla listando el ID, nombre y dirección de email de algunos de los desarrolladores de FPC.
8292
8393Ahora trate de correr el programa de testeo testdb.pp (puede ser necesario compilarlo y ¡seguramente fallará en el primer intento!).
8494
8595He encontrado que el programa no puede conectarse a mysql por diversas razones:
8696
8797- Mi sistema (SuSE Linux v9.0) instala mysql v4.0.15, no la versión 3 para la cual fue diseñado el programa.
8898
8999- El programa necesita tener nombres de usuarios y contraseñas para acceder a la base de datos.
90100
91101- El compilador necesita saber dónde encontrar las bibliotecas mysql ( SI AÚN NO HA INSTALADO LAS BIBLIOTECAS DE DESARROLLO DE MYSQL, ¡HÁGALO AHORA!)
92102
93103Generé una copia de testdb.pp llamada trydb.pp, en lugar de modificar el original (ésto significa que el archivo original se actualizará automáticamente en las siguientes actualizacione por CVS). También copié los archivos encontrados en el subdirectorio mysql/ver40/ en el subdirectorio principal mysql/ , renombrandolos mysql_v4.pp, mysql_com_v4.pp y mysql_version_v4.pp, asegúrese de renombrar las unidades dentro de cada archivo según corresponda. Modifique la sentencia uses en trydb.pp a
94104
95105``` pascal
96106 uses mysql_v4
97107```
98108
99109y la sentencia en mysql_v4.pp a
100110
101111``` pascal
102112 uses mysql_com_v4
103113```
104114
105115Agregué una línea a /etc/fpc.cfg que apunta a mis bibliotecas:
106116
107-` -Fl/lib;/usr/lib`
117+```text
118+ -Fl/lib;/usr/lib
119+```
108120
109121y en /usr/lib debo encontrar el nombre real de la biblioteca mysqlclient. En mi caso utilicé la línea de comandos:
110122
111-` ln -s libmysqlclient.so.12.0.0 lmysqlclient`
123+```text
124+ ln -s libmysqlclient.so.12.0.0 lmysqlclient
125+```
112126
113127para crear un enlace simbólico permitiendo a FPC encontrar la biblioteca. Como buena media también creé el link
114128
115-` ln -s libmysqlclient.so.12.0.0 mysqlclient`
129+```text
130+ ln -s libmysqlclient.so.12.0.0 mysqlclient
131+```
116132
117133y ubiqué varios enlaces similares en otros directorios: no son estrictamente necesarios, ¡pero por si acaso!. Parece que algunos usuarios necesitan agregar tembién el siguiente link:
118134
119-` ln -s libmysqlclient.so.12.0.0 libmysqlclient.so`
135+```text
136+ ln -s libmysqlclient.so.12.0.0 libmysqlclient.so
137+```
120138
121139Modifiqué trydb.pp para incluir el detalle del usuario, inicialmente agregando el host, usuario y contraseña como constantes:
122140
123141``` pascal
124142 const
125143 host : Pchar= 'localhost';
126144 user : Pchar= 'myusername';
127145 passwd: Pchar = 'mypassword';
128146```
129147
130148También me encontré que no podía conectarme a mysql usando la llamada mysql_connect(), la cual tiene muchos más parámetros. Para complicar las cosas aún más, el número de parámetros parece haber cambiado entre la versión 3 (donde son siete) y la versión 4 (donde son ocho). Antes de usar mysql_real_connect tengo que usar mysql_init() la cual no se encuentra en el archivo original mysql.pp, pero si está en mysql_v4.pp.
131149
132150Por lo tanto, el código para la conexión a la base de datos ahora es:
133151
134152``` pascal
135153 { a few extra variables}
136154 var
137155 alloc : PMYSQL;
138156 {main program fragment}
139157 begin
140158 if paramcount=1 then
141159 begin
142160 Dummy:=Paramstr(1)+#0;
143161 DataBase:=@Dummy[1];
144162 end;
145163 Writeln ('Allocating Space...');
146164 alloc := mysql_init(PMYSQL(@qmysql));
147165 Write ('Connecting to MySQL...');
148166 sock := mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
149167 if sock=Nil then
150168 begin
151169 Writeln (stderr,'Couldn''t connect to MySQL.');
152170 Writeln (stderr, 'Error was: ', mysql_error(@qmysql));
153171 halt(1);
154172 end;
155173 Writeln ('Done.');
156174 Writeln ('Connection data:');
157175 {$ifdef Unix}
158176 writeln ('Mysql_port : ',mysql_port);
159177 writeln ('Mysql_unix_port : ',mysql_unix_port);
160178 {$endif}
161179 writeln ('Host info : ',mysql_get_host_info(sock));
162180 writeln ('Server info : ',mysql_stat(sock));
163181 writeln ('Client info : ',mysql_get_client_info);
164182 Writeln ('Selecting Database ',DataBase,'...');
165183 if mysql_select_db(sock,DataBase) < 0 then
166184 begin
167185 Writeln (stderr,'Couldn''t select database ',Database);
168186 Writeln (stderr,mysql_error(sock));
169187 halt (1);
170188 end;
171189 {... as original contents of testdb.pp}
172190```
173191
174192Ahora, ¿preparado para comenzar a compilar trydb.pp?
175193
176-`fpc trydb`
194+```text
195+fpc trydb
196+```
177197
178198¡éxito! Ahora lo ejecutamos:
179199
180-`./trydb`
200+```text
201+./trydb
202+```
181203
182204¡Epaaa! ¡Ya tengo la lista de desarrolladores de FPC!
183205
184206Unos cuantos refinamientos extras: haga interactivos la entrada del nombre de usuario y de los comandos a la base de datos, usando variables en vez de constantes y permita varias sentencias SQL usuarios, vea el código fuente del programa donde el usuario es ingresado desde la consola, y el programa entra en un ciclo donde se aceptan comandos SQL (sin el punto y coma final) y se visualizan las respuestas, hasta que se ingresa la palabra 'quit'.
185207
186208Vea un ejemplo de salida
187209
188210### 3 - Conectando a MySQL desde una Aplicación Lazarus
189211
190212Este documento muestra cómo conectar Lazarus a la base de datos MySQL, y ejecutar consultas simples, usando sólo los componentes básicos de Lazarus; no utiliza componentes conectados a datos, pero ilustra los principios de interacturar con la base de datos.
191213
192214Cree un nuevo proyecto en Lazarus:
193215
194216Project -\> New Project -\> Application
195217
196218Automáticamente aparecerá un nuevo Form.
197219
198220Aumente el tamaño del form hasta la mitad de la pantalla, lugo renómbre el formulario y su título como 'TryMySQL'.
199221
200222Desde la pestaña de Componentes Standard ubique tres controles de edición en el lado superior izquierdo e inmediatamente arriba de cada control ubique una etiqueta. Cambie los nombres y los títulos a 'Host' (y HostLabel, HostEdit), 'UserName' (and UserLabel, UserEdit) y 'Password' (con PasswdLabel y PasswdEdit). Como alternativa podría haber utilizado el componente LabelledEdit desde la pestaña Adicionales.
201223
202224Seleccione el cuadro de edición Passwd y busque la propiedad PasswordChar: cambiela a * o algún otro caracter, para que cuando ingrese la contraseña no aparezcan los caracteres en su pantalla y sólo se muestren una serie de *. Asegúrese que la propiedad Texto de cada cuadro de edición está en blanco.
203225
204226Ahora ubique otra caja de edición y una etiqueta en el extremo superior derecho de su formulario. Cambie la etiqueta a 'Ingrese el comando SQL' y nómbrelo como CommandEdit.
205227
206228Ubique tres botones en el formulario: dos en la parte izquierda, bajos los cuadros de edición y uno a la derecha bajo el cuadro de comando.
207229
208230Nombre los botones en la izquierda como 'Conectar a la base de datos' (ConnectButton) y 'Salir' (ExitButton) y al de la derecha como 'Enviar consulta' (QueryButton).
209231
210232Ubique un campo memo largo etiquetado 'Resultado' (ResultMemo) en la parte inferior derecha que cubra la mayor parte del espacio. Busque su propiedad ScrollBars y seleccione ssAutoBoth, para que ambas barras aparezcan automáticamente si el texto llena el espacio. Marque la propiedad WordWrap como Verdadera.
211233
212234Inserte una barra de estado (desde la pestaña Common Controls) en el fondo del formulario y ponga en la propiedad SimpleText 'TryMySQL'.
213235
214236Una captura de pantalla del formulario puede ser vista en: Ejemplo de pantalla Mysql
215237
216238Ahora necesitamos escribir el código para manejar las acciones.
217239
218240Los tres cuadros de edición de la izquierda son para el ingreso del nombre del host, usuario y contraseña. Cuando éstos han sido completados satisfactoriamente, se debe hacer click en el botón Connect. El manejador del evento OnClick está basado en parte del programa en modo texto del FPC que describimos antes.
219241
220242Las respuestas desde la base de datos no pueden ser visualizadas usando las sentencias de Pascal write o writeln: en lugar de eso deben ser convertidas en strings y mostradas en el campo memo. Mientras que las sentencias write y writeln de Pascal son capaces de una conversión de tipos "al vuelo", el uso de un campo memo para visualizar la salida de texto necesita la explícita conversión de los tipos de datos al formato string, por ende las variables Pchar deben ser convertidas a string usando StrPass y los enteros se convierten con IntToStr.
221243
222244Las strings son mostradas en el campo Memo usando
223245
224246``` pascal
225247 procedure ShowString (S : string);
226248 (* display a string in a Memo box *)
227249 begin
228250 |trymysqlForm1.ResultsMemo.Lines.Add (S)
229251 end;
230252```
231253
232254El evento en el botón ConnectButton queda como:
233255
234256``` pascal
235257 procedure TtrymysqlForm1.ConnectButtonClick(Sender: TObject);
236258 (* Connect to MySQL using user data from Text entry boxes on Main Form *)
237259 var strg: string;
238260 begin
239261 dummy1 := trymysqlForm1.HostEdit.text+#0;
240262 host := @dummy1[1];
241263 dummy2 := trymysqlForm1.UserEdit.text+#0;
242264 user := @dummy2[1] ;
243265 dummy3 := trymysqlForm1.PasswdEdit.text+#0;
244266 passwd := @dummy3[1] ;<br>
245267 alloc := mysql_init(PMYSQL(@qmysql));
246268 sock := mysql_real_connect(alloc, host, user, passwd, database, 0, nil, 0);
247269 if sock=Nil then
248270 begin
249271 strg :='Couldn''t connect to MySQL.'; showstring (strg);
250272 Strg :='Error was: '+ StrPas(mysql_error(@qmysql)); showstring (strg);
251273 end
252274 else
253275 begin
254276 trymysqlForm1.statusBar1.simpletext := 'Connected to MySQL';
255277 strg := 'Now choosing database : ' + database; showstring (strg);
256278 {$ifdef Unix}
257279 strg :='Mysql_port : '+ IntToStr(mysql_port); showstring (strg);
258280 strg :='Mysql_unix_port : ' + StrPas(mysql_unix_port); showstring (strg);
259281 {$endif}
260282 Strg :='Host info : ' + StrPas(mysql_get_host_info(sock));
261283 showstring (strg);
262284 Strg :='Server info : ' + StrPas(mysql_stat(sock)); showstring (strg);
263285 Strg :='Client info : ' + Strpas(mysql_get_client_info); showstring (strg);
264286 trymysqlForm1.statusbar1.simpletext := 'Selecting Database ' + DataBase +'...';
265287 if mysql_select_db(sock,DataBase) < 0 then
266288 begin
267289 strg :='Couldn''t select database '+ Database; ShowString (strg);
268290 Strg := mysql_error(sock); ShowString (strg);
269291 end
270292 end;
271293 end;
272294```
273295
274296El campo texto en la derecha permite el ingreso de una sentencia SQL, sin el punto y coma final, cuando ud. ya ha completado la misma, el botón SendQuery es presionado y la sentencia es ejecutada, con los resultados devueltos dentro del cuadro ResultsMemo.
275297
276298El manejador del evento SendQuery es basado también en la versión de texto de FPC, con la salvedad que se deben convertir explícitamente los tipos de datos a formato string antes que sean visualizados en el cuadro.
277299
278300Una diferencia respecto del programa FPC modo texto es que, si ocurre un error en la sentencia, el programa no se detiene y no se cierra la conexión a MySQL, en lugar de eso, el control es devuelto al formulario principal y se da la oportunidad de corregir la misma antes de reenviar la sentencia. La aplicación finaliza (con el cierre de la conexión a MySQL) cuando se hace click en el botón Exit.
279301
280302El código para SendQuery es:
281303
282304``` pascal
283305 procedure TtrymysqlForm1.QueryButtonClick(Sender: TObject);
284306 var
285307 dumquery, strg: string;
286308 begin
287309 dumquery := TrymysqlForm1.CommandEdit.text;
288310 dumquery := dumquery+#0;
289311 query := @dumquery[1];
290312 trymysqlForm1.statusbar1.simpletext := 'Executing query : '+ dumQuery +'...';
291313 strg := 'Executing query : ' + dumQuery; showstring (strg);
292314 if (mysql_query(sock,Query) < 0) then
293315 begin
294316 Strg :='Query failed '+ StrPas(mysql_error(sock)); showstring (strg);
295317 end
296318 else
297319 begin
298320 recbuf := mysql_store_result(sock);
299321 if RecBuf=Nil then
300322 begin
301323 Strg :='Query returned nil result.'; showstring (strg);
302324 end
303325 else
304326 begin
305327 strg :='Number of records returned : ' + IntToStr(mysql_num_rows (recbuf));
306328 Showstring (strg);
307329 Strg :='Number of fields per record : ' + IntToStr(mysql_num_fields(recbuf));
308330 showstring (strg);
309331 rowbuf := mysql_fetch_row(recbuf);
310332 while (rowbuf <>nil) do
311333 begin
312334 Strg :='(Id: '+ rowbuf[0]+', Name: ' + rowbuf[1]+ ', Email : ' + rowbuf[2] +')';
313335 showstring (strg);
314336 rowbuf := mysql_fetch_row(recbuf);
315337 end;
316338 end;
317339 end;
318340 end;
319341```
320342
321343Guarde su Proyecto y presione Run -\> Run
322344
323345El código completo del programa está disponible en Código fuente del ejemplo
324346
325347by ChrisKirk
326348
327349## Lazarus y PostgreSQL
328350
329351Este es un tutorial muy corto que explica como conectar mediante Lazarus (0.9.12\>) con el gestor de base de datos PostgreSQL, tanto en conexión local como remota, utilizando TPQconnection.
330352
331353Después de una correcta instalación tanto de Lazarus como de PostgreSQL, debemos seguir los siguientes pasos:
332354
3333551.- Situar en el formulario los siguientes componentes:
334356
335357**COMPONENTE / UBICACION EN EL IDE**
336358
337359- PQConnection ---------\> SQLdb
338360- SQLQuery ---------------\> SQLdb
339361- SQLTransaction -------\> SQLdb
340362- DataSource ----------\> DataAccess
341363- DBGrid ----------------\> DataControls
342364
3433652.- En el inspector de objetos una vez seleccionado en el formulario PQConnection rellenar los valores de las siguientes propiedades:
344366
345367- "transaction": objeto SQLTransaction.
346368- "Database name": nombre de la base de datos.
347369- "HostName": nombre de equipo que contiene el gestor de la base de datos que conecta a la base de datos.
348370- "UserName": login de usuario con acceso a dicha base de datos.
349371- "password": contrasena de acceso a la base de datos para el Username.
350372
3513733.- Comprobar que SQLTransaction ha cambiado automáticamente para apuntar a PQConnection.
352374
3533754.- En SQLQuery rellenar lo siguiente:
354376
355377- "transaction": con su respectivo objeto.
356378- "database": con su respectivo objeto.
357379- "SQL" : debemos rellenarlo con la consulta SQL que deseamos realizar (algo así como 'select * from anytable')
358380
3593815.- En el objeto DataSource rellenar:
360382
361383- "DataSet": objeto SQLQuery.
362384
3633856.- En el componente DBGrid rellenar:
364386
365387- "DataSource": objeto DataSource.
366388
3673897.- Modificar todo para que figure como conectado (connected) y activo (active)
368390
369391- TDBText y TDBEdit parecen funcionar pero (al menos para mí) solamente muestra datos en la grid.
370392
371393Para cambiar contenido de la base de datos realizo la llamada al motor de la base de datos (DB Engine) mediante las siguientes sentencias de código:
372394
373395``` pascal
374396 try
375397 sql:= 'UPDATE table SET setting=1';
376398 PQDataBase.Connected:=True;
377399 PQDataBase.ExecuteDirect('Begin Work;');
378400 PQDataBase.ExecuteDirect(sql);
379401 PQDataBase.ExecuteDirect('Commit Work;');
380402 PQDataBase.Connected:=False;
381403 except
382404 on E : EDatabaseError do
383405 MemoLog.Append('DB ERROR:'+sql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message);
384406 on E : Exception do
385407 MemoLog.Append('ERROR:'+sql+chr(13)+chr(10)+E.ClassName+chr(13)+chr(10)+E.Message);
386408 end;
387409```
388410
389411- Notas:
390412 - Testeado en windows, Lazarus 0.9.12 + PgSQL 8.3.1
391413 - Algunos test realizados en linux, Lazarus 0.9.12 and PgSQL 8.0.x.
392414
393415- Instalación y errores:
394416 - En los test realizados con la version 0.9.12 de Lazarus, presentan errores los campos de tipo "text" y "numeric".
395417 - Se usan sin problemas los tipos char de tamaño fijo, los int y float8.
396418 - Algunas veces con tan solo reiniciar Lazarus se resuelven algunos errores estúpidos.
397419 - Después de suceder algunos errores, las transacciones permanecen activas y deben desactivarse manualmente.
398420 - Los cambios realizados en Lazarus por supuesto no son visibles hasta realizar una "transaction commited".
399421 - El depurador integrado parece tener errores (al menos en la versión para windows) - en ocasiones trabajar fuera del IDE puede ayudar a encontrar los errores.
400422 - En Linux ciertos mensajes de error se imprimen en la consola -- ejecutar los programas mediante la línea de mandatos resulta útil para obtener información extra para su depuracion.
401423 - Error: "No puedo cargar el cliente PostgreSQL. ¿ Está instalado (libpq.so) ?"
402424 - Añade la ruta (variable de entorno path) de búsqueda para libpq* donde se instaló PostgreSQL.
403425 - En Linux añade la ruta al fichero libpq.so a la sección de librerias dentro del fichero /etc/fpc.cfg. Por ejemplo: -Fl/usr/local/pgsql/lib
404426 - En windows, añade simplemente estas librerias en alguna de las rutas que figuren en la variable de entorno o bien en el directorio o carpeta donde se tenga guardado el proyecto.
405427 - En windows yo copio todas las librerias que necesito de C:\Program Files\PostgreSQL\8.1\bin a otro directorio que figure en el PATH.
406428 - También se puede añadir este directorio C:\Program Files\PostgreSQL\8.1\bin al path que resulta bastante mas sencillo y sin tener que mover ficheros de sitio.
407429
408430Como un buen ejemplo funcional es más útil que mucho que se pueda contar, aquí os dejo un enlace a un programa escrito directamente para Lazarus y que con pequeñas modificaciones os puede permitir conectar con PostgreSQL 8.x en mi caso la prueba la realicé con 8.3 y funcionó. La versión de Lazarus la 0.9.26 Beta. Lo compila sin problemas.
409431
410432- <http://paginas.fe.up.pt/~asousa/wiki/doku.php?id=proj:lazarus_projects>
411433
412434[easyDB](http://paginas.fe.up.pt/~asousa/wiki/doku.php?id=proj:lazarus_projects), en la fecha en la que se traduce este párrafo en la web de descarga figura el fichero easy_db_plus.zip
413435
414436Es importante cambiar los valores de usuario, contraseña, base de datos a conectar y equipo con el que conectar que puede estar en red o no. Si no está en red puede valer con localhost ó 127.0.0.1 y si lo está pués el nombre del equipo. Lógicamente que el usuario y contraseña estén correctos y que permita realizar lecturas, escrituras, borrado, por lo que es mejor tener un postgreSQL en prueba con acceso total (que no esté en producción). En mi caso verifico el funcionamiento teniendo al mismo tiempo abierto PGADMIN III. Fijaos en la cantidad de librerias que ha incluido en el fichero comprimido, ya que a mi al menos no me ha pedido nada adicional. Un cambio que he realizado es copiar todas las librerias de C:\Archivos de programa\PostgreSQL\8.3\bin sobreescribiendo las que vienen, lo he vuelto a compilar y funciona aceptable (sobre todo para que librerias como libpq.dll al tratarse de una versión más nueva debería estar más optimizada).
415437
416438Otros enlaces interesantes que he encontrado son:
417439
418440- <http://hdcm.sytes.net/documentos/programacion/lazarus/Lazarus_postgresql.html>
419441
420442Permite obtener un documento con el título **Postgresql y Freepascal en FreeBSD**.
421443
422444## Lazarus y SQLite
423445
424446### Introducción
425447
426448Para poder acceder a bases de datos basadas en el motor de SQLITE son necesarios los siguientes componentes (Ambos descendientes de TDataset) :
427449
428450- TSqliteDataset: para acceder a bases de datos cuya versión sea 2.8.x.
429451- TSqlite3Dataset: para acceder a bases de datos cuya versión sea 3.x.x.
430452
431453Relación de Ventajas/Desventajas:
432454
433455Ventajas:
434456
435457- Flexibilidad: Los programadores pueden elegir entre usar o no el lenguaje sql, permitiéndoles trabajar con tablas de datos simples o tan complejas como se desee.
436458- Actualización automatica de las bases de datos: no hay necesidad de actualizar la base de datos manualmente desde comandos sql, una serie de procedimientos establecidos se encargaran de ello.
437459- Rapidez: realiza una cache en memoria de los datos, lo que permite una visualización y navegación por los datos rápida.
438460- Estructura NO cliente/servidor: sólo es necesario distribuir la librería de sqlite.
439461
440462Desventajas:
441463
442464- Requiere la librería sqlite.
443465
444466### Requerimientos
445467
446468- Para bases de datos sqlite2:
447469 - fpc 2.0.0
448470 - Lazarus 0.9.10
449471 - sqlite runtime library 2.8.15 o superior
450472
451473- Para bases de datos sqlite3:
452474 - fpc 2.0.2
453475 - Lazarus 0.9.11
454476 - sqlite runtime library 3.2.1 o superior )
455477
456478**Recomendaciones:**
457479
458480- La libreria sqlite está en el system PATH o en el directorio de trabajo.
459481- Bajo Linux ponga cmem como la primera unidad en *uses* .
460482 - En debian y derivadas ( ubuntu, Mepis, Mint... ), para construir Lazarus serán necesarios los paquetes libsqlite-dev/libsqlite3-dev además de los sqlite/sqlite3 (También se aplica a OpenSuSe)
461483
462484- **Las últimas versiones de Lazarus ( 0.9.23 o superiores ) ya incluyen por defecto el componente sqlite3, por lo que se recomienda su uso ya que es automáticamente configurado por el entorno.**
463485
464486### Como usar la base de datos
465487
466488Instalar el paquete SQLITE en lazarus. **Se recomienda usar la versión con el componente ya instalado.**
467489
468490\- **En tiempo de diseño asignar las siguientes propiedades básicas:**
469491
470492- *FileName:* ruta al archivo slqlite \[Obligatorio\]
471493- *TableName:* nombre de la tabla que se quiere acceder \[Obligatorio\]
472494- *Sql:* una sentencia SQL \[opcional\]
473495
474496\- **Crear una tabla de datos**
475497
476498Hacer doble clic en tiempo de diseño sobre el componente o usar el comando 'Create Table' del menú contextual (aparece al pulsar con el botón derecho del ratón) y se mostrará un simple editor auto explicado de tabla.
477499
478500\- **Listado de tipos de datos soportados por TSqliteDataset y TSqlite3Dataset:**
479501
480-` Integer`\
481-` AutoInc`\
482-` String`\
483-` Memo`\
484-` Bool `\
485-` Float`\
486-` Word`\
487-` DateTime`\
488-` Date`\
489-` Time`\
490-` LargeInt`\
491-` Currency`
502+```text
503+ Integer
504+ AutoInc
505+ String
506+ Memo
507+ Bool
508+ Float
509+ Word
510+ DateTime
511+ Date
512+ Time
513+ LargeInt
514+ Currency
515+```
492516
493517\- **Leer los datos de la base de datos**
494518
495519Una vez que se ha creado la tabla basta usar el procedimiento 'Open' si la propiedad SQL no se estableció se devuelven todas las entradas de la tabla especificada en la propiedad 'TableName', es equivalente a ejecutar la sentencia SQL:
496520
497-` SQL:='Select * from TABLENAME'; `
521+``` pascal
522+ SQL:='Select * from TABLENAME';
523+```
498524
499525**Actualizar / Modificar los datos de la base de datos**
500526
501527Para actualizar los datos se usa la función 'ApplyUpdates'. Para poder usar la función la tabla de datos ha de contener alguna entrada que cumpla las condiciones de clave primaria ( los valores tienen que ser UNIQUE y not NULL).
502528
503529**Se recomienda encarecidamente el diseño de la base de datos mediante paradigmas relacionales como el modelo relacional de Chen u otros antes de implementar la base de datos, de esta forma se garantiza la integridad referencial, el uso de claves primarias etc, que evitaran problemas en la implementación**
504530
505531Para que las tablas tengan claves primarias se puede:
506532
507533- Establecer el nombre de la propiedad 'PrimaryKey' al nombre de la clave primaria de la tabla.
508534- Añadir la opción AutoInc (autoincremento) al campo que deseamos que sea la clave primaria. De esta forma sqlite adoptará por defecto este campo como la clave primaria.
509535
510536## Lazarus y MSSQL
511537
512-`   Por favor, escríbame!`
538+```text
539+ Por favor, escríbame!
540+```
513541
514542## Mensajes de error
515543
516544Se pueden generar errores que debemos leer detenidamente para tratar de solventarlos o gestionarlos.
517545
518546- Cannot Open a non-select Statement: En este caso nos indica claramente que no podemos utilizar una sentencia SQL que sea diferente de SELECT al utilizar el componente SQLQUERY. Para estos casos diferentes de SELECT utilizar EXECSQL por ejemplo (caso de UPDATE, INSERT por ejemplo).
519547
520548Dejo aquí los enlaces al foro donde se habla sobre esto:
521549
522550<http://forum.lazarus.freepascal.org/index.php?topic=8319.0>
523551
524552- Error Database not assigned:
525553
526554## Contribuidores y Cambios
527555
528556- Por favor, vea Log de actualizaciones para conocer la historia de modificaciones y agregados a esta página.
529557
530558<http://lazarus-ccr.sourceforge.net/index.php?wiki=DbSpanishTutorial>
531559
532560## Programas Lazarus que utilizan acceso a bases de datos
533561
534562'''Como ejemplo práctico podemos encontrar los siguientes programas:
535563
536-`  - Facturlinex: `[`http://sourceforge.net/projects/facturlinex/`](http://sourceforge.net/projects/facturlinex/)\
537-`  - Contalinex: `[`http://sourceforge.net/projects/contalinex/`](http://sourceforge.net/projects/contalinex/)
564+```text
565+ - Facturlinex: http://sourceforge.net/projects/facturlinex/
566+ - Contalinex: http://sourceforge.net/projects/contalinex/
567+```
538568
539569En el caso de facturlinex2 aparte de los paquetes dcpcrypt-2.0.4.1, powerpdf_20100305 e Inet utiliza el paquete de acceso a bases de datos ZEOSDBO-6.6.6-stable.
540570
541571---
542572*From the Free Pascal wiki, page "Lazarus Database Tutorial/es", as it stood on 2020-02-18 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
543573Category: Castellano
544574Category: Español

Back to history