fcl-db: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: fcl-db
| Old | New | Line | |
|---|---|---|---|
| 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).* |
