Sign in Join
Wiki copytemporary

Lazarus Database Overview/es: what changed

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

OldNewLine
11## Descripción
22
33Este artículo es una descripción sobre que tipos de bases de datos pueden utilizarse con Lazarus.
44
55Lazarus soporta varios tipos de bases de datos (utilizando e.g. el framework de SQLDB), sin embargo el desarrollador debe instalar los paquetes requeridos (librerías cliente) para cada una.
66
77Se puede acceder a la base de datos por medio de código o ubicando componentes visuales en un formulario. Los componentes data-aware representan campos y se conectan estableciendo la propiedad de fuente de datos (DataSource) de manera que apunte a un TDataSource. El DataSource representa una tabla y se conecta a los componentes de bases de datos (ejemplos: *TPSQLDatabase*, *TSQLiteDataSet*) estableciendo la propiedad DataSet. Una vez establecido un DataSource correcto y accesible nos permite escoger un DataField concreto de los disponibles. Los componentes data-aware están localizados en la solapa "Data Controls". Los controles DataSource y DataBase están localizados en la solapa "DataAccess".
88
99Ver tutoriales para acceso a bases de datos BBDD con Lazarus/FPC, suitable para Firebird, MySQL, SQLite, PostgreSQL etc:
1010
1111- [[SQLdb Tutorial0]]
1212- [[SQLdb Tutorial1]]
1313- [[SQLdb Tutorial2]]
1414- [[SQLdb Tutorial3]]
1515- [[SQLdb Tutorial4]]
1616
1717## Lazarus e Interbase / Firebird
1818
1919- Por favor ver [[Firebird|Firebird en acción]] para detalles sobre los distintos métodos de acceso, los cuales incluyen:
2020
21211. Soporte incluido internamente de SQLDB.
22222. FBLib.
23233. IBX.
24244. PDO.
25255. Zeos.
2626
2727Para un tutorial que te guie a través de la manera de crear un GUI (Graphical User Interface) para una base de datos Firebird, ver:
2828
2929- [[SQLdb Tutorial1/es]]
3030
3131## Lazarus y MySQL
3232
3333- Por favor echa un vistazo a [[mysql]] para más detalles sobre los distintos métodos de acceso, los cuales incluyen:
3434
35351. Soporte incluido internamente en SQLDB.
36362. PDO.
37373. Zeos.
3838
3939--Jma sp 10:19, 19 June 2015 (CEST)== Lazarus y MSSQL/Sybase ==
4040
4141Se puede conectar a un servidor de bases de datos SQL de Microsoft utilizando:
4242
43431. Incluido internamente en **SQLdb** (recientemente con Lazarus/FPC 2.6.1+): **TMSSQLConnection** (MS SQL) y **TSybaseConnection** (Sybase ASE)
4444 1. Para Windows puedes descargar una versión reciente de la librería FreeTDS (disponible en versiones de 32 y 64 bits) **dblib.dll** desde: [\| aquí](ftp://ftp.freepascal.org/fpc/contrib/windows/) o bien compilarla a partir de sus fuentes de una versión actualizada que se encuentra [\| aquí](http://www.freetds.org/software.html)
4545
46461. 1. No necesario normalmente: mediante la modificación del fichero **dblib.pas** de FPC, SQLDB puede utilizar la librería "nativa" **ntwdblib.dll** en lugar de la librería por defecto FreeTDS **dblib.dll** (en este caso FPC necesita recompilarse).
4747
48481. 1. En Linux por defecto se utiliza la librería FreeTDS **libsybdb.so** (por ejemplo, en Debian se encuentra en el paquete **libsybd5**).
4949
50501. Componente **Zeos** mediante **TZConnection** (para el último CVS, ver enlaces a Zeos en esta página).
5151
52521. 1. En Windows se puede escoger entre la libería nativa **ntwdblib.dll** (protocolo **mssql**) o las librerías FreeTDS (protocolo **FreeTDS_MsSQL-nnnn**) donde nnnn es una de cuatro variantes dependiendo de la versión de servidor. Para Delphi (no Lazarus) existe además otro protocolo Zeos **ado** para MSSQL 2005 o posterior. Utilizando protocolos mssql o ado se genera código que no es independiente de la plataforma.
5353
54541. 1. En Linux el único camino es con los protocolos y librerías FreeTDS (debería utilizarse **libsybdb.so**).
5555
56561. **ODBC** (MSSQL y Sybase ASE) con SQLdb **TODBCConnection** ( \[<http://wiki.freepascal.org/ODBCConn#Connecting_to_Microsoft_SQL_Server>\| ver además\])
5757 1. En Windows utilizalas librerías nativas de Microsoft para ODBC (tales como sqlsrv32.dll para MSSQL 2000)
5858
59591. 1. En Linux utiliza unixODBC + FreeTDS (paquetes unixodbc o iodbc, y tdsodbc). Desde 2012 se tiene también un driver ODBC (versión 1.0) para Microsoft SQL Server. Existe además un driver ODBC (versión 1.0) para Linux que permite conectar con Microsoft SQL Server pero es un producto binario (no código abierto), de 64 bits y solamente para la distribución RedHat.
6060
6161Para más detalles sobre el uso de SQLDB orientado a Sybase ASE y MSSQL Server consultar los ficheros de ayuda de FPC y Lazarus.
6262
6363> **Note:** En cualquiera de las maneras mostradas se puede conectar utilizando el protocolo TCP/IP, e.g en el puerto 1433.
6464
6565Si se utilizan librerías nativas de Microsoft (bajo Windows) es posible conectar a un servidor remoto con Named Pipes. Por contra las libería FreeTDS no soportan Named Pipes.
6666
6767> **Note:** Lazarus 1.0 se ha creado con FPC 2.6.0 y no incluye TMSSQLConnection o TSybaseConnection. Si se necesitan la manera más sencilla es descargar el snapshot de la última compilación con FPC 2.6.1, instalándolo en un directorio diferente de la versión 1.0. Se puede utilizar --primary-config-path para establecer un ambiente diferente para que no interfiera con la existente.([[Multiple Lazarus|ver]])
6868
6969## Lazarus y ODBC
7070
7171ODBC es un estandar genérico de conexión a bases de datos que está disponible en Linux, Windows y OSX. Para la conexión a la base de datos se necesita un driver ODBC y establecer una fuente de datos (data source) que también se conoce con DSN. Se pueden utilizar los componentes SQLDB (TODBCConnection) para conectar a una fuente de datos ODBC.
7272
7373Para más detalles y ejemplos [[ODBCConn|ver enlace]].
7474
7575## Lazarus y Oracle
7676
7777- Los métodos de acceso incluyen:
7878
79791. Soporte implementado internamente en SQLDB.
8080
81811. Zeos.
8282
8383## Lazarus y PostgreSQL
8484
8585- Ver [[postgres/es|postgres]] para más detalles sobre los diversos métodos de acceso entre los que se incluyen:
8686
87871. Soporte implementado internamente SQLdb. Utilizar el componente **TPQConnection** de la paleta de **SQLdb**.
8888
89891. Zeos. Utilizar el componente **TZConnection** con el protocolo 'postgresql' de la paleta de **Zeos Access**.
9090
9191## Lazarus y SQLite
9292
9393SQLite es una base de datos embebida; el código de la base de datos puede distribuirse como una librería (.dll/.so/.dylib) con la aplicación para crear una autocontenida (comparable con Firebird embebido). SQLite es tan popular debido a su relativa simplicidad, velocidad, pequeño tamaño y soporte de plataforma cruzada.
9494
9595Ver la página sobre [[SQLite]] para más detalles de los distintos métodos de acceso, entre los que se incluyen:
9696
97971. Soporte implementado internamente por SQLDb.
9898
99991. Zeos.
100100
1011011. SQLitePass.
102102
1031031. TSQLite3Dataset.
104104
105105## Lazarus y dBase
106106
107107FPC incluye un componente simple de base de datos que está derivado del TTable de Delphi llamado "TDbf". [TDbf Website](http://tdbf.sourceforge.net/)). Soporta varios formatos DBase y Foxpro.
108108
109109TFbg no acepta mandatos SQL pero permite utilizar los métodos dataset, etc y también utilizar controles databound (asociados a datos) regulares como puede ser DBGrid. No requiere ningún tipo de motor de bases de datos para funcionar. También hay que recalcar que no es la mejor opción a escoger cuando la aplicación va a manejar grandes bases de datos.
110110
111111Ver la [[Lazarus Tdbf Tutorial|página de tutorial TDbf]] además de la documentación específica.
112112
113113Se puede utilizar e.g. OpenOffice/LibreOffice Base para crear/editar visualmente este tipo de ficheros.
114114
115115Cuando se ejecuta este código se crea una tabla con los datos de una colección de DVD's. Después de esto, todos los componentes data aware enlazados a través de TDataSource permitirá acceder a los datos de la tabla facilmente.
116116
117117## Utilizando TSdfDataset y TFixedDataset
118118
119119TSdfDataset y TFixedDataset son dos simples datasets que ofrecen un formato textual simple de almacenamiento.
120120
121-`Estos datasets son muy convenientes para pequeñas bases de datos, porque están completamente implementados en una unidad Object Pascal y por tanto no requiere de liberías externas y porque su formato textual permite que sean editados facilmente con un editor de texto.`
121+``` pascal
122+Estos datasets son muy convenientes para pequeñas bases de datos, porque están completamente implementados en una unidad Object Pascal y por tanto no requiere de liberías externas y porque su formato textual permite que sean editados facilmente con un editor de texto.
123+```
122124
123125Note: En diciembre de 2012/FPC 2.7.1: SDFDataset se supone que puede ya leer y escribir ficheros CSV (Comma Separated Values) de acuerdo con RFC4180, pero todavía tiene algunos problemas con quoted fields, etc. Para más detalles ver [[CSV]].
124126
125127Para comenzar con este formato se debe crear un fichero de base de datos inicial. El formato es muy simple por lo que puedes utilizar un editor de texto para ello.
126128
127129El ejemplo que sigue es una base de datos para TSdfDataset. Hay que fijarse en que la primera línea tiene los nombres de cada campoy que se utilizan comas como separadores o delimitadores.
128130
129131 ID,NAMEEN,NAMEPT,HEIGHT,WIDTH,PINS,DRAWINGCODE
130132 1,resistor,resistor,1,1,1,LINE
131133 2,capacitor,capacitor,1,1,1,LINE
132134 3,transistor npn,transistor npn
133135
134136Este es un ejemplo de base de datos utilizado con TFixedDataset.Cada registro ocupa una cantidad **fija** de espacio y ,si el campo es menor que el definido, deberían utilizarse espacios para rellenarlo a ese tamaño.
135137
136138 Name = 15 chars; Surname = 15 chars; Tell = 10 chars; e_mail = 20 chars;
137139 Piet Pompies piet@pompies.net
138140
139141### Utilizando datasets directamente
140142
141143Algunas veces resulta útil crear un dataset y trabajar con el completamente a nivel de código. Para lograr esto tenemos el siguiente ejemplo que permite hacer precisamente esto. Fíjate en algunas de las peculiaridades de TSdfDataset/TFixedDataset:
142144
143145- Las líneas en la base de datos pueden tener un tamaño máximo de 300. Se está preparando una solución para esto.
144146
145147- Es necesario añadir las definiciones de campo. Algunos datasets son capaces de rellenar esta información por si solos desde el fichero de base de datos.
146148
147149- Se debe establecer FirstLineAsSchema a true, para inidcar que la primera línea incluye los nombres y posiciones del campo.
148150
149151- La propiedad Delimiter (delimitador) contiene el separador para los campos. Dicho separador no podrá ser utilizado como carácter en las cadenas de la base de datos. Similarmente no será posible tener fines de línea en la base de datos porque marcan el cambio entre registros. Es posible salvar este inconveniente sustituyendo la coma que se necesita o el final de línea con cualquier otro carácter que sea poco o nada utilizado como puede ser el caso del carácter *\#*. Por ello cuando se muestran los caracteres por pantalla todos los caracteres *\#* pueden convertirse a finales de línea y a la inversa cuando se almacenan datos de nuevo en la base de datos. La rutina de reemplazado de cadena (ReplaceString) resulta útil para esto.
150152
151153``` pascal
152154uses sdfdata, db;
153155
154156constructor TComponentsDatabase.Create;
155157var
156158 FDataset: TSdfDataset;
157159begin
158160 inherited Create;
159161
160162 FDataset := TSdfDataset.Create(nil);
161163 FDataset.FileName := vConfigurations.ComponentsDBFile;
162164
163165 // No necesariamente con TSdfDataset
164166 // FDataset.TableName := STR_DB_COMPONENTS_TABLE;
165167 // FDataset.PrimaryKey := STR_DB_COMPONENTS_ID;
166168
167169 // Añade definiciones de campo.
168170
169171 FDataset.FieldDefs.Add('ID', ftString);
170172 FDataset.FieldDefs.Add('NAMEEN', ftString);
171173 FDataset.FieldDefs.Add('NAMEPT', ftString);
172174 FDataset.FieldDefs.Add('HEIGHT', ftString);
173175 FDataset.FieldDefs.Add('WIDTH', ftString);
174176 FDataset.FieldDefs.Add('PINS', ftString);
175177 FDataset.FieldDefs.Add('DRAWINGCODE', ftString);
176178
177179 // Necesario para TSdfDataset
178180 FDataset.Delimiter := ',';
179181 FDataset.FirstLineAsSchema := True;
180182 // Necesario para TSdfDataset
181183 FDataset.Delimiter := ',';
182184 FDataset.FirstLineAsSchema := True;
183185
184186 FDataset.Active := True;
185187
186188 // Establece el registro inicial
187189 CurrentRecNo := 1;
188190 FDataset.First;
189191end;
190192```
191193
192194Cuando se utilice directamente TSdfDataset hay que prestar atención a RecNo, a pesar de que está implementado, no funciona en el sentido de moverse a través del dataset pero si leyendo y escribiendo registros. Las rutinas de navegación estandar tales como First, Next, Prior y Last funcionan como es de esperar por lo que no hay necesidad de utilizar RecNo en su lugar. Si sueles utilizar números absolutos de registro para navergar por la base de datos no hay problema en que implementes tu propia versión de RecNo. Para ello hay que declarar una variable global del tipo longint llamada CurrentRecNo, la cual contendrá el valor actual de RecNo. Recuerda que esta variable tendrá la misma convención que RecNo, por lo que el primer registro tendrá el número 1 (no es de base 0). Después de activar la base de datos se inicializa la base de datos al primer registro con TSdfDataset.First y establecer CurrentRecNo := 1
193195
194196``` pascal
195197{@@
196198 Mueve al registro deseado utilizando TDataset.Next y TDataset.Prior
197199 Esto evita el uso de TDataset.RecNo el cual no navega fiablemente
198200 por el dataset.
199201
200202 @param AID indica el número de registro. El primer registro tiene
201203 el número 1 (no empieza por cero).
202204}
203205procedure TComponentsDatabase.GoToRec(AID: Integer);
204206begin
205207 // Estamos antes del registro deseado, avanzar.
206208 if CurrentRecNo < AID then
207209 begin
208210 while (not FDataset.EOF) and (CurrentRecNo < AID) do
209211 begin
210212 FDataset.Next;
211213 FDataset.CursorPosChanged;ID: Integer);
212214begin
213215 // Estamos antes del registro deseado, avanzar.
214216 if CurrentRecNo < AID then
215217 begin
216218 while (not FDataset.EOF) and (CurrentRecNo < AID) do
217219 begin
218220 FDataset.Next;
219221 FDataset.CursorPosChanged;
220222 Inc(CurrentRecNo);
221223 end;
222224 end
223225 // Estamos después del registro deseado, retroceder
224226 else if CurrentRecNo > AID then
225227 begin
226228 while (CurrentRecNo >= 1) and (CurrentRecNo > AID) do
227229 begin
228230 FDataset.Prior;
229231 FDataset.CursorPosChanged;
230232 Dec(CurrentRecNo);
231233 end;
232234 end;
233235end;
234236```
235237
236238### Utilizando controles data-aware
237239
238240## Lazarus y Advantage Database Server
239241
240242- Ver [[Advantage Database Server]] para más detalles sobre el uso de Advantage Database Server.
241243
242244## Ver además
243245
244246(Ordenados alfabéticamente)
245247
246248- [[Databases]]
247249- [[Database field type]]
248250- [[Firebird]]
249251- [[How to write in-memory database applications in Lazarus/FPC]]
250252- [[Lazarus DB Faq/es|Preguntas frecuentes sobre Lazarus DB]]
251253- [[Lazarus Tdbf Tutorial]]
252254- [[MS Access]]
253255- [[multi-tier options with fpc|Multi-tier options with FPC]]
254256- [[MySQLDatabases]]
255257- [[ODBCConn]]
256258- [[SQLdb Tutorial1]]
257259- [[SqlDBHowto]]
258260- [[SQLite]]
259261- [[tiOPF]] - un Object Persistence Framework libre y de código abierto.
260262- [[Zeos tutorial]]
261263
262264---
263265*From the Free Pascal wiki, page "Lazarus Database Overview/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).*

Back to history