使用 MySQL,我可以访问来自不同模式的表。例如,当通过 ADO 在 Delphi 中使用 MySQL 时,即使我明确设置了默认模式(在本例中为 - dna_homo_2015may):
var
ADO1:TADOConnection;
<...>
ADO1.ConnectionString:='Provider=MSDASQL.1;Password=password;'+
'Persist Security Info=True;User ID=user1;Extended Properties="Driver=MySQL ODBC 5.3 ANSI Driver;'+
'SERVER=localhost;UID=user1;PWD=password;DATABASE=dna_homo_2015may;'+
'PORT=3306;COLUMN_SIZE_S32=1"';
我可以通过完全命名它们来访问来自多个模式的表:
Query:='select A.*, B.`id`, B.`name`'+
'from `dna_homo_2015may`.`temp_pos` A, `dna_homo_2016june`.`genes_list` B'+
'where <...>';
我可以使用 SQLite 并在 base1.sdb 中有两个表 table1 和 base2.sdb 中的 table2,执行相同的查询,同时获取这两个表吗?如果是这样,怎么做?
最后我会回答自己。这是可能的,而且不是以一种方式,尽管它们都在实现工具上有所不同,而不是在他们的方法上。
我尝试过 ADO、FireDAC、一个对象包装器、直接使用 SQLite3.DLL,甚至是 DevArt 的试用组件。我会马上说 - 使用 ADO 来使用两个不同的文件作为表提供程序是行不通的。至少我没有成功。所有其他工具或多或少都有效。重点是,尽管最初访问了表文件(我举了一个使用包装器的例子)
其次是第二个碱基附件
再次初始化第一个表,已经是 db1:
一切。现在您可以从不同的文件安全地访问不同的表:
从不同的文件访问表。使用 SQLite 的其他方式也是如此。
然而,在使用 SQLite 度过了几个晚上之后,我意识到我不得不放弃使用它:尽管有很多技巧,但它的速度不如 MySQL,并且无法处理基因组级别的大量数据。对于通过包装器工作尤其如此 - 它不是为在 64 位模式下工作而编写的。
很遗憾:我想摆脱 MySQL 服务器的强制存在以及如何更新数据库的说明。