#delphi #sqlite #любой_язык
Используя MySQL, я могу обращаться к таблицам из разных схем. Например, работая с MySQL в Delphi через ADO, несмотря на то, что я явно задаю схему по умолчанию (в данном случае - 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 и имея две таблицы table1 в файле base1.sdb и table2 в файле base2.sdb, выполнить аналогичный запрос, с одновременной выборкой из этих двух таблиц? Если да, то как?
Ответы
Ответ 1
Отвечу, в итоге, сам. Можно, и не одним способом, хотя все они отличаются инструментами реализации, а не подходом. Я испробовал ADO, FireDAC, объектный враппер, непосредственную работу с SQLite3.DLL и даже триальные компоненты от DevArt. Скажу сразу - через ADO использовать два разных файла в качестве поставщиков таблиц не получится. У меня, по крайней мере, так и не получилось. Все остальные инструменты более или менее работают. Вся соль заключалась в том, что несмотря на начальное обращение к файлу таблицы (привожу пример с использованием враппера) s:='P:\SQLLite_DBs\hg38-genes.sdb.db'; base:=TSQLiteDatabase.Create(s); с последующим аттачем второй базы s:= 'attach `P:\SQLLite_DBs\hg38-repeats.sdb.db` as db2;'; base.ExecSQL(s); ещё раз инициализировать первую таблицу, уже как db1: s:= 'attach `P:\SQLLite_DBs\hg38-genes.sdb.db` as db1;'; base.ExecSQL(s); Всё. Теперь можно смело обращаться к разным таблицам из разных файлов: s:='select b.id from db1.`genes-g38-201505` a, db2.`repeats-g38` b where a.`chr` = b.`chr`;'; tb:=base.GetTable(s); Чтобы обращаться к таблицам из разных файлов. То же самое и с остальными способами работы с SQLite. Однако, провозившись несколько вечеров с SQLite, я понял, что придётся отказаться от её использования: несмотря на все ухищрения, она уступает в скорости MySQL и не может работать с огромными объёмами данных на уровне геномов. Особенно это касается работы через враппер - он писался не для работы в 64-битном режиме. А жаль: хотелось бы избавиться от обязательного наличия MySQL-сервера и инструкций, как обновлять базы.
Комментариев нет:
Отправить комментарий