Sign in Join
Wiki copytemporary

fcl-db: what changed

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

Title: fcl-db

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)
2+
3+## Known issues/shortcomings
4+
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
17+
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.
19+
20+A [[Databases|testsuite]] exists (test/testresult-db) and is expanded when new bugs and functionality occur.
21+
22+## Units
23+
24+(In the below table the subdirectory is listed as "submodule", so one can see easily to which subsystem the unit belongs.
25+
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+
129+## See also
130+
131+ * [[Package List|Packages List]]
132+
133+---
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).*

Back to history