Sign in Join
Wiki copytemporary

fcl-db: what changed

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

OldNewLine
1-The package **fcl-db** contains most of FPC's higher level database system, plus table drivers for some popular systems. (<LAZDIR>/fpc/3.0.0/source/packages/fcl-db)
1+The package **fcl-db** contains most of FPC's higher level database system, plus table drivers for some popular systems. (\<LAZDIR\>/fpc/3.0.0/source/packages/fcl-db)
22
33## Known issues/shortcomings
44
5- * Master - detail relations are not complete; however you can implement it using [[MasterDetail]]
6- * Calculated field support is not complete
7- * No binary data transfer using parameters (everything is converted to ASCII) in most drivers.
8- * There are some floating point issues, with precision and scale parameters only minimally supported in some drivers (amongst others mysql)
9- * Most character encoding issues are solved fairly ad hoc. There is no way to set the fundamental encodings manually:
10- 1. the encoding of the connection
11- 2. the encoding of the components' internal storage
12- 3. the encoding of GUI components
13- 4. (optionally, encoding of exports, or fileformats)
14- * Many driver dependent issues in datetime types and timezone support.
15- * Between the drivers, Firebird is used the most, then Mysql, SQLite, PostgreSQL and ODBC. Finally comes Oracle which is mostly still at a proof of concept level. The Microsoft SQL Server and Sybase ASE drivers are a recent addition to FPC (2.6.1 and higher) and Lazarus.
16- * Before FPC 2.6: no stored procedure resultset >1 row
5+- Master - detail relations are not complete; however you can implement it using [[MasterDetail]]
6+- Calculated field support is not complete
7+- No binary data transfer using parameters (everything is converted to ASCII) in most drivers.
8+- There are some floating point issues, with precision and scale parameters only minimally supported in some drivers (amongst others mysql)
9+- Most character encoding issues are solved fairly ad hoc. There is no way to set the fundamental encodings manually:
10+ 1. the encoding of the connection
11+ 2. the encoding of the components' internal storage
12+ 3. the encoding of GUI components
13+ 4. (optionally, encoding of exports, or fileformats)
14+- Many driver dependent issues in datetime types and timezone support.
15+- Between the drivers, Firebird is used the most, then Mysql, SQLite, PostgreSQL and ODBC. Finally comes Oracle which is mostly still at a proof of concept level. The Microsoft SQL Server and Sybase ASE drivers are a recent addition to FPC (2.6.1 and higher) and Lazarus.
16+- Before FPC 2.6: no stored procedure resultset \>1 row
1717
18-Most of these are being worked on, and the status changes on a regular basis, so be sure to do your own testing and source inspection, since this will be most certainly out of date.
18+Most of these are being worked on, and the status changes on a regular basis, so be sure to do your own testing and source inspection, since this will be most certainly out of date.
1919
20-A [[Databases|testsuite]] exists (test/testresult-db) and is expanded when new bugs and functionality occur.
20+A [[Databases|testsuite]] exists (test/testresult-db) and is expanded when new bugs and functionality occur.
2121
2222## Units
2323
24-(In the below table the subdirectory is listed as "submodule", so one can see easily to which subsystem the unit belongs.
24+(In the below table the subdirectory is listed as "submodule", so one can see easily to which subsystem the unit belongs.
2525
26-Unit | submodule | comment
27----|---|---
28-[browseds](</index.php?title=browseds&action=edit&redlink=1> "browseds \(page does not exist\)") | sqlite |
29-[bufdataset](</index.php?title=bufdataset&action=edit&redlink=1> "bufdataset \(page does not exist\)") | base | In memory dataset. More capable than memds. See [[How to write in-memory database applications in Lazarus/FPC|TBufDataSet]] for some usage examples
30-[bufdataset_parser](</index.php?title=bufdataset_parser&action=edit&redlink=1> "bufdataset parser \(page does not exist\)") | base |
31-[concurrencyds](</index.php?title=concurrencyds&action=edit&redlink=1> "concurrencyds \(page does not exist\)") | sqlite |
32-[createds](</index.php?title=createds&action=edit&redlink=1> "createds \(page does not exist\)") | sqlite |
33-[customsqliteds](</index.php?title=customsqliteds&action=edit&redlink=1> "customsqliteds \(page does not exist\)") | sqlite |
34-[db](</index.php?title=db&action=edit&redlink=1> "db \(page does not exist\)") | base |
35-[dbcoll](</index.php?title=dbcoll&action=edit&redlink=1> "dbcoll \(page does not exist\)") | base |
36-[dbconst](</index.php?title=dbconst&action=edit&redlink=1> "dbconst \(page does not exist\)") | base |
37-[dbf](</index.php?title=dbf&action=edit&redlink=1> "dbf \(page does not exist\)") | dbase | TDBF components for DBase/FoxPro/Visual Foxpro tables (upstream code: Sourceforge TDBF project). See also [[Lazarus Tdbf Tutorial]]
38-[dbf_avl](</index.php?title=dbf_avl&action=edit&redlink=1> "dbf avl \(page does not exist\)") | dbase |
39-[dbf_collate](</index.php?title=dbf_collate&action=edit&redlink=1> "dbf collate \(page does not exist\)") | dbase |
40-[dbf_common](</index.php?title=dbf_common&action=edit&redlink=1> "dbf common \(page does not exist\)") | dbase |
41-[dbf_cursor](</index.php?title=dbf_cursor&action=edit&redlink=1> "dbf cursor \(page does not exist\)") | dbase |
42-[dbf_dbffile](</index.php?title=dbf_dbffile&action=edit&redlink=1> "dbf dbffile \(page does not exist\)") | dbase |
43-[dbf_fields](</index.php?title=dbf_fields&action=edit&redlink=1> "dbf fields \(page does not exist\)") | dbase |
44-[dbf_idxcur](</index.php?title=dbf_idxcur&action=edit&redlink=1> "dbf idxcur \(page does not exist\)") | dbase |
45-[dbf_idxfile](</index.php?title=dbf_idxfile&action=edit&redlink=1> "dbf idxfile \(page does not exist\)") | dbase |
46-[dbf_lang](</index.php?title=dbf_lang&action=edit&redlink=1> "dbf lang \(page does not exist\)") | dbase |
47-[dbf_memo](</index.php?title=dbf_memo&action=edit&redlink=1> "dbf memo \(page does not exist\)") | dbase |
48-[dbf_parser](</index.php?title=dbf_parser&action=edit&redlink=1> "dbf parser \(page does not exist\)") | dbase |
49-[dbf_pgcfile](</index.php?title=dbf_pgcfile&action=edit&redlink=1> "dbf pgcfile \(page does not exist\)") | dbase |
50-[dbf_pgfile](</index.php?title=dbf_pgfile&action=edit&redlink=1> "dbf pgfile \(page does not exist\)") | dbase |
51-[dbf_prscore](</index.php?title=dbf_prscore&action=edit&redlink=1> "dbf prscore \(page does not exist\)") | dbase |
52-[dbf_prsdef](</index.php?title=dbf_prsdef&action=edit&redlink=1> "dbf prsdef \(page does not exist\)") | dbase |
53-[dbf_prssupp](</index.php?title=dbf_prssupp&action=edit&redlink=1> "dbf prssupp \(page does not exist\)") | dbase |
54-[dbf_reg](</index.php?title=dbf_reg&action=edit&redlink=1> "dbf reg \(page does not exist\)") | dbase |
55-[dbf_str](</index.php?title=dbf_str&action=edit&redlink=1> "dbf str \(page does not exist\)") | dbase |
56-[dbf_str_es](</index.php?title=dbf_str_es&action=edit&redlink=1> "dbf str es \(page does not exist\)") | dbase |
57-[dbf_str_fr](</index.php?title=dbf_str_fr&action=edit&redlink=1> "dbf str fr \(page does not exist\)") | dbase |
58-[dbf_str_ita](</index.php?title=dbf_str_ita&action=edit&redlink=1> "dbf str ita \(page does not exist\)") | dbase |
59-[dbf_str_nl](</index.php?title=dbf_str_nl&action=edit&redlink=1> "dbf str nl \(page does not exist\)") | dbase |
60-[dbf_str_pl](</index.php?title=dbf_str_pl&action=edit&redlink=1> "dbf str pl \(page does not exist\)") | dbase |
61-[dbf_str_pt](</index.php?title=dbf_str_pt&action=edit&redlink=1> "dbf str pt \(page does not exist\)") | dbase |
62-[dbf_str_ru](</index.php?title=dbf_str_ru&action=edit&redlink=1> "dbf str ru \(page does not exist\)") | dbase |
63-[dbf_wtil](</index.php?title=dbf_wtil&action=edit&redlink=1> "dbf wtil \(page does not exist\)") | dbase |
64-[[mssqlconn|dblib]] | | Wrapper around FreeTDS; required for the mssqlconn SQLDB driver for Microsoft SQL Server and Sybase ASE
65-[dbwhtml](</index.php?title=dbwhtml&action=edit&redlink=1> "dbwhtml \(page does not exist\)") | base |
66-[fillds](</index.php?title=fillds&action=edit&redlink=1> "fillds \(page does not exist\)") | sqlite |
67-[fpcgcreatedbf](</index.php?title=fpcgcreatedbf&action=edit&redlink=1> "fpcgcreatedbf \(page does not exist\)") | codegen |
68-[fpcgdbcoll](</index.php?title=fpcgdbcoll&action=edit&redlink=1> "fpcgdbcoll \(page does not exist\)") | codegen |
69-[fpcgsqlconst](</index.php?title=fpcgsqlconst&action=edit&redlink=1> "fpcgsqlconst \(page does not exist\)") | codegen |
70-[fpcgtiopf](</index.php?title=fpcgtiopf&action=edit&redlink=1> "fpcgtiopf \(page does not exist\)") | codegen |
71-[fpcsvexport](</index.php?title=fpcsvexport&action=edit&redlink=1> "fpcsvexport \(page does not exist\)") | export |
72-[fpdatadict](</index.php?title=fpdatadict&action=edit&redlink=1> "fpdatadict \(page does not exist\)") | datadict |
73-[[fpDBExport|fpdbexport]] | export | See the dbftool example included in FPC 2.7.1+: creating, using DBF files and exporting data using db export. Also used in the Lazarus db export component.
74-[[fpdbfexport]] | export |
75-[fpddcodegen](</index.php?title=fpddcodegen&action=edit&redlink=1> "fpddcodegen \(page does not exist\)") | codegen |
76-[fpdddbf](</index.php?title=fpdddbf&action=edit&redlink=1> "fpdddbf \(page does not exist\)") | datadict |
77-[fpdddiff](</index.php?title=fpdddiff&action=edit&redlink=1> "fpdddiff \(page does not exist\)") | datadict |
78-[fpddfb](</index.php?title=fpddfb&action=edit&redlink=1> "fpddfb \(page does not exist\)") | datadict |
79-[fpddmysql40](</index.php?title=fpddmysql40&action=edit&redlink=1> "fpddmysql40 \(page does not exist\)") | datadict |
80-[fpddmysql41](</index.php?title=fpddmysql41&action=edit&redlink=1> "fpddmysql41 \(page does not exist\)") | datadict |
81-[fpddmysql50](</index.php?title=fpddmysql50&action=edit&redlink=1> "fpddmysql50 \(page does not exist\)") | datadict |
82-[fpddodbc](</index.php?title=fpddodbc&action=edit&redlink=1> "fpddodbc \(page does not exist\)") | datadict |
83-[fpddoracle](</index.php?title=fpddoracle&action=edit&redlink=1> "fpddoracle \(page does not exist\)") | datadict |
84-[fpddpopcode](</index.php?title=fpddpopcode&action=edit&redlink=1> "fpddpopcode \(page does not exist\)") | codegen |
85-[fpddpq](</index.php?title=fpddpq&action=edit&redlink=1> "fpddpq \(page does not exist\)") | datadict |
86-[fpddregstd](</index.php?title=fpddregstd&action=edit&redlink=1> "fpddregstd \(page does not exist\)") | datadict |
87-[fpddsqldb](</index.php?title=fpddsqldb&action=edit&redlink=1> "fpddsqldb \(page does not exist\)") | datadict |
88-[fpddsqlite3](</index.php?title=fpddsqlite3&action=edit&redlink=1> "fpddsqlite3 \(page does not exist\)") | datadict |
89-[fpfixedexport](</index.php?title=fpfixedexport&action=edit&redlink=1> "fpfixedexport \(page does not exist\)") | export | Dataset export to fixed width text format
90-[fprtfexport](</index.php?title=fprtfexport&action=edit&redlink=1> "fprtfexport \(page does not exist\)") | export | Dataset export to RTF format
91-[fpsimplejsonexport](</index.php?title=fpsimplejsonexport&action=edit&redlink=1> "fpsimplejsonexport \(page does not exist\)") | export | Dataset export to JSON format
92-[fpsimplexmlexport](</index.php?title=fpsimplexmlexport&action=edit&redlink=1> "fpsimplexmlexport \(page does not exist\)") | export | Dataset export to ASCII encoded XML
93-[[fpsqlexport]] | export | Dataset export to SQL Insert/Update statements
94-[fpstdexports](</index.php?title=fpstdexports&action=edit&redlink=1> "fpstdexports \(page does not exist\)") | export |
95-[fptexexport](</index.php?title=fptexexport&action=edit&redlink=1> "fptexexport \(page does not exist\)") | export | Dataset export to Latex format
96-[[fpXMLXSDExport]] | export | Dataset export to various XML formats: Access, ADO.Net, Excel, Delphi ClientDataset
97-[ibconnection](</index.php?title=ibconnection&action=edit&redlink=1> "ibconnection \(page does not exist\)") | sqldb/interbase |
98-[memds](</index.php?title=memds&action=edit&redlink=1> "memds \(page does not exist\)") | memds | In memory dataset. Not as capable as bufdataset. See [How_to_write_in-memory_database_applications_in_Lazarus](</index.php?title=How_to_write_in-memory_database_applications_in_Lazarus&action=edit&redlink=1> "How to write in-memory database applications in Lazarus \(page does not exist\)") for some usage examples
99-[[mssqlconn]] | sqldb/mssqlconn | Microsoft SQL Server and Sybase ASE drivers, introduced in FPC 2.6.1. Requires dblib.
100-[[mysql|mysql40conn]] | sqldb/mysql | Connector for MySQL server using MySQL 4.0 client library
101-[[mysql|mysql41conn]] | sqldb/mysql | Connector for MySQL server using MySQL 4.1 client library
102-[[mysql|mysql4conn]] | sqldb/mysql | Connector for MySQL server using MySQL 4?? client library
103-[[mysql|mysql50conn]] | sqldb/mysql | Connector for MySQL server using MySQL 5.0 client library
104-[[mysql|mysql51conn]] | sqldb/mysql | Connector for MySQL server using MySQL 5.1 client library
105-[[mysql|mysql55conn]] | sqldb/mysql | Connector for MySQL server using MySQL 5.5 client library
106-[[ODBCConn|odbcconn]] | sqldb/odbc | Connector for ODBC databases (e.g. Microsoft Access, DB2)
107-[oracleconnection](</index.php?title=oracleconnection&action=edit&redlink=1> "oracleconnection \(page does not exist\)") | sqldb/oracle | Connector for Oracle (XE) databases
108-[[postgresql|pqconnection]] | sqldb/postgres | Connector for PostgreSQL databases
109-[[SQLite|sqlite3conn]] | sqldb/sqlite |
110-[paradox](</index.php?title=paradox&action=edit&redlink=1> "paradox \(page does not exist\)") | paradox |
111-[sdfdata](</index.php?title=sdfdata&action=edit&redlink=1> "sdfdata \(page does not exist\)") | sdf | CSV dataset support
112-[sqldb](</index.php?title=sqldb&action=edit&redlink=1> "sqldb \(page does not exist\)") | sqldb |
113-[sqlite3ds](</index.php?title=sqlite3ds&action=edit&redlink=1> "sqlite3ds \(page does not exist\)") | sqlite |
114-[sqliteds](</index.php?title=sqliteds&action=edit&redlink=1> "sqliteds \(page does not exist\)") | sqlite |
115-[sqlscript](</index.php?title=sqlscript&action=edit&redlink=1> "sqlscript \(page does not exist\)") | base | SQL scripting component that lets you run multiple SQL statement as a batch. Has support for Firebird SET TERM. See example in Lazarus examples/database/tsqlscript and [[Firebird|Firebird#Creating_objects_programmatically]]
116-[tdbf_l](</index.php?title=tdbf_l&action=edit&redlink=1> "tdbf l \(page does not exist\)") | dbase |
117-[testcp](</index.php?title=testcp&action=edit&redlink=1> "testcp \(page does not exist\)") | memds |
118-[testdbf](</index.php?title=testdbf&action=edit&redlink=1> "testdbf \(page does not exist\)") | dbase |
119-[testds](</index.php?title=testds&action=edit&redlink=1> "testds \(page does not exist\)") | sqlite |
120-[testfix](</index.php?title=testfix&action=edit&redlink=1> "testfix \(page does not exist\)") | sdf |
121-[testld](</index.php?title=testld&action=edit&redlink=1> "testld \(page does not exist\)") | memds |
122-[testopen](</index.php?title=testopen&action=edit&redlink=1> "testopen \(page does not exist\)") | memds |
123-[testpop](</index.php?title=testpop&action=edit&redlink=1> "testpop \(page does not exist\)") | memds |
124-[testsdf](</index.php?title=testsdf&action=edit&redlink=1> "testsdf \(page does not exist\)") | sdf |
125-[testsqldb](</index.php?title=testsqldb&action=edit&redlink=1> "testsqldb \(page does not exist\)") | sqldb |
126-[xmldatapacketreader](</index.php?title=xmldatapacketreader&action=edit&redlink=1> "xmldatapacketreader \(page does not exist\)") | base |
127-[[fpjsondataset]] | json | Dataset for JSON data
128-
26+| Unit | submodule | comment |
27+|----|----|----|
28+| [[browseds]] | sqlite | |
29+| [[bufdataset]] | base | In memory dataset. More capable than memds. See [[How to write in-memory database applications in Lazarus/FPC|TBufDataSet]] for some usage examples |
30+| [[bufdataset parser]] | base | |
31+| [[concurrencyds]] | sqlite | |
32+| [[createds]] | sqlite | |
33+| [[customsqliteds]] | sqlite | |
34+| [[db]] | base | |
35+| [[dbcoll]] | base | |
36+| [[dbconst]] | base | |
37+| [[dbf]] | dbase | TDBF components for DBase/FoxPro/Visual Foxpro tables (upstream code: Sourceforge TDBF project). See also [[Lazarus Tdbf Tutorial]] |
38+| [[dbf avl]] | dbase | |
39+| [[dbf collate]] | dbase | |
40+| [[dbf common]] | dbase | |
41+| [[dbf cursor]] | dbase | |
42+| [[dbf dbffile]] | dbase | |
43+| [[dbf fields]] | dbase | |
44+| [[dbf idxcur]] | dbase | |
45+| [[dbf idxfile]] | dbase | |
46+| [[dbf lang]] | dbase | |
47+| [[dbf memo]] | dbase | |
48+| [[dbf parser]] | dbase | |
49+| [[dbf pgcfile]] | dbase | |
50+| [[dbf pgfile]] | dbase | |
51+| [[dbf prscore]] | dbase | |
52+| [[dbf prsdef]] | dbase | |
53+| [[dbf prssupp]] | dbase | |
54+| [[dbf reg]] | dbase | |
55+| [[dbf str]] | dbase | |
56+| [[dbf str es]] | dbase | |
57+| [[dbf str fr]] | dbase | |
58+| [[dbf str ita]] | dbase | |
59+| [[dbf str nl]] | dbase | |
60+| [[dbf str pl]] | dbase | |
61+| [[dbf str pt]] | dbase | |
62+| [[dbf str ru]] | dbase | |
63+| [[dbf wtil]] | dbase | |
64+| [[mssqlconn|dblib]] | | Wrapper around FreeTDS; required for the mssqlconn SQLDB driver for Microsoft SQL Server and Sybase ASE |
65+| [[dbwhtml]] | base | |
66+| [[fillds]] | sqlite | |
67+| [[fpcgcreatedbf]] | codegen | |
68+| [[fpcgdbcoll]] | codegen | |
69+| [[fpcgsqlconst]] | codegen | |
70+| [[fpcgtiopf]] | codegen | |
71+| [[fpcsvexport]] | export | |
72+| [[fpdatadict]] | datadict | |
73+| [[fpDBExport|fpdbexport]] | export | See the dbftool example included in FPC 2.7.1+: creating, using DBF files and exporting data using db export. Also used in the Lazarus db export component. |
74+| [[fpdbfexport]] | export | |
75+| [[fpddcodegen]] | codegen | |
76+| [[fpdddbf]] | datadict | |
77+| [[fpdddiff]] | datadict | |
78+| [[fpddfb]] | datadict | |
79+| [[fpddmysql40]] | datadict | |
80+| [[fpddmysql41]] | datadict | |
81+| [[fpddmysql50]] | datadict | |
82+| [[fpddodbc]] | datadict | |
83+| [[fpddoracle]] | datadict | |
84+| [[fpddpopcode]] | codegen | |
85+| [[fpddpq]] | datadict | |
86+| [[fpddregstd]] | datadict | |
87+| [[fpddsqldb]] | datadict | |
88+| [[fpddsqlite3]] | datadict | |
89+| [[fpfixedexport]] | export | Dataset export to fixed width text format |
90+| [[fprtfexport]] | export | Dataset export to RTF format |
91+| [[fpsimplejsonexport]] | export | Dataset export to JSON format |
92+| [[fpsimplexmlexport]] | export | Dataset export to ASCII encoded XML |
93+| [[fpsqlexport]] | export | Dataset export to SQL Insert/Update statements |
94+| [[fpstdexports]] | export | |
95+| [[fptexexport]] | export | Dataset export to Latex format |
96+| [[fpXMLXSDExport]] | export | Dataset export to various XML formats: Access, ADO.Net, Excel, Delphi ClientDataset |
97+| [[ibconnection]] | sqldb/interbase | |
98+| [[memds]] | memds | In memory dataset. Not as capable as bufdataset. See [[How to write in-memory database applications in Lazarus]] for some usage examples |
99+| [[mssqlconn]] | sqldb/mssqlconn | Microsoft SQL Server and Sybase ASE drivers, introduced in FPC 2.6.1. Requires dblib. |
100+| [[mysql|mysql40conn]] | sqldb/mysql | Connector for MySQL server using MySQL 4.0 client library |
101+| [[mysql|mysql41conn]] | sqldb/mysql | Connector for MySQL server using MySQL 4.1 client library |
102+| [[mysql|mysql4conn]] | sqldb/mysql | Connector for MySQL server using MySQL 4?? client library |
103+| [[mysql|mysql50conn]] | sqldb/mysql | Connector for MySQL server using MySQL 5.0 client library |
104+| [[mysql|mysql51conn]] | sqldb/mysql | Connector for MySQL server using MySQL 5.1 client library |
105+| [[mysql|mysql55conn]] | sqldb/mysql | Connector for MySQL server using MySQL 5.5 client library |
106+| [[ODBCConn|odbcconn]] | sqldb/odbc | Connector for ODBC databases (e.g. Microsoft Access, DB2) |
107+| [[oracleconnection]] | sqldb/oracle | Connector for Oracle (XE) databases |
108+| [[postgresql|pqconnection]] | sqldb/postgres | Connector for PostgreSQL databases |
109+| [[SQLite|sqlite3conn]] | sqldb/sqlite | |
110+| [[paradox]] | paradox | |
111+| [[sdfdata]] | sdf | CSV dataset support |
112+| [[sqldb]] | sqldb | |
113+| [[sqlite3ds]] | sqlite | |
114+| [[sqliteds]] | sqlite | |
115+| [[sqlscript]] | base | SQL scripting component that lets you run multiple SQL statement as a batch. Has support for Firebird SET TERM. See example in Lazarus examples/database/tsqlscript and [[Firebird|Firebird#Creating_objects_programmatically]] |
116+| [[tdbf l]] | dbase | |
117+| [[testcp]] | memds | |
118+| [[testdbf]] | dbase | |
119+| [[testds]] | sqlite | |
120+| [[testfix]] | sdf | |
121+| [[testld]] | memds | |
122+| [[testopen]] | memds | |
123+| [[testpop]] | memds | |
124+| [[testsdf]] | sdf | |
125+| [[testsqldb]] | sqldb | |
126+| [[xmldatapacketreader]] | base | |
127+| [[fpjsondataset]] | json | Dataset for JSON data |
128+
129129## See also
130130
131- * [[Package List|Packages List]]
131+- [[Package List|Packages List]]
132132
133133---
134-*From the Free Pascal wiki, page "fcl-db", as the Internet Archive kept it on 2026-02-07. 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).*
134+*From the Free Pascal wiki, page "fcl-db", as it stood on 2021-04-01 after a change by Socke, 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