|
v7: SQLLite. Как выполнить запрос по двум ИБ одновременно? | ☑ | ||
---|---|---|---|---|
0
КонецЦикла
модератор
22.04.12
✎
19:42
|
Привык к ИБ.dbo.Таблица в SQL
Допустим базы находятся на одном сервере Тут как? Через временную таблицу? В классе ПрямойЗапрос есть ПрисоединитьБазуДанных, но что-то пока не взлетает Подкиньте примерчик использования |
|||
1
Aleksey
22.04.12
✎
19:44
|
SQLLite он работает только с текущей БД, к левым нельзя
|
|||
2
Aleksey
22.04.12
✎
19:45
|
Даже нельзя обратится к двум БД одновременно, если они лежат в разных файлах
|
|||
3
Torquader
22.04.12
✎
19:55
|
Если не нужно их собирать вместе, то можно выполнить запрос к одной базе, потом переключиться и выполнить запрос к другой.
|
|||
4
КонецЦикла
модератор
22.04.12
✎
20:06
|
Это DBF
Хотелось бы левое соединение с аналогичным справочником другой базы, расположенной на том же сервере |
|||
5
Torquader
22.04.12
✎
20:09
|
В DBF я знаю только, как через Visual FoxPro драйвер и ADODB можно заглянуть, причём, написав запрос и несколько файлов, но что-то мне кажется, что вам это не подходит.
|
|||
6
КонецЦикла
модератор
22.04.12
✎
20:14
|
Через VFPOLEDB получилось
Но фишка в том чтобы не городить огород А временная таблица не поможет? |
|||
7
Torquader
22.04.12
✎
20:15
|
(6) Ну, если одну таблицу запихнуть во временную (ну или вообще в таблицу значений), а потом выбирая её сделать соединение с другой (или выбрать другую и пристыковать к первой), то можно, но, похоже, что огород ещё больше выходит.
|
|||
8
КонецЦикла
22.04.12
✎
20:29
|
(7) Через временную тоже не прокатит
Ведь ее не будет существовать в другой базе Получается нужно создать копию файла DBF в базе-приемнике (для которой он будет родным)? Вот жеж не очень красиво |
|||
9
Torquader
22.04.12
✎
20:32
|
(8) А если индексированную таблицу в памяти и выбирать ручками ?
Просто, всё зависит от того, сколько в этих таблицах данных - если много, то время копирования может превзойти время выполнения отчёта (копировать-то нужно с индексированием, чтобы потом можно было выполнить запрос). |
|||
10
КонецЦикла
модератор
22.04.12
✎
20:35
|
(9) В смысле ИТЗ = СоздатьОбъект("ИндексированнаяТаблица") и погнали?
С копированием я погорячился тоже... в базе же будут работать люди, а там хз что может скопироваться |
|||
11
Torquader
22.04.12
✎
20:41
|
(10) Ну в таблицу тоже данные не быстро залезут, просто из индексированной будет проще выбирать.
|
|||
12
КонецЦикла
модератор
22.04.12
✎
21:08
|
(11) Спс
Покамист отлучусь Если кто-то применял более интересные решения буду очень благодарен OLE в последнюю очередь рассматриваем |
|||
13
Туц
22.04.12
✎
21:21
|
Данный часто изменяются? Если что-то типа продаж, то грузи в скуль.
|
|||
14
badboychik
22.04.12
✎
21:34
|
http://www.sqlite.org/lang_select.html
вроде как никто не мешает написать Select * from dbname1.table1 join dbname2.table2 ... |
|||
15
КонецЦикла
модератор
22.04.12
✎
23:40
|
Да вроде должно работать, но...
ATTACH DATABASE 'G:\DB77\LQБух' AS Buh Приводит к "unable to open database: G:\DB77\LQБух" ХЗ куда копать? Или не так делается? |
|||
16
КонецЦикла
модератор
22.04.12
✎
23:43
|
(13) Загружать нужно каждый день и возможно не один раз
Справочники, документы и всякие остатки-продажи по бух. итогам Должно работать "для чайников". Грузить некому в SQL Да и все отчеты написал уже под DBF |
|||
17
kiruha
23.04.12
✎
00:29
|
Используй foxpro драйвер
Элементарно, хоть к 10 базам |
|||
18
КонецЦикла
модератор
23.04.12
✎
00:46
|
(17) Кидани пример плиз
У меня такая строка соединения (это запрос к базе-источнику): Соединение = "Provider=VFPOLEDB.1; Set Deleted =Yes; data Source=G:\DB77\LQБух; Mode=ReadWrite;Extended Properties=""; User ID=""; Password=""; Mask Password=False; Collating Sequence=MACHINESN="""; Что мне писать для базы приемника в том же запросе? Можно простой примерчик? Хрен с ними, с метаименами, главное чтобы принципиально работало |
|||
19
orefkov
23.04.12
✎
01:00
|
Тут важно не путать.
Со своими "родными" базами и таблицами sqlite может работать с целой толпой, attach database и вперед. А вот виртуальные таблицы, отображающие 1Сные дбф-файлы в 1sqlite - подключаются только от текущей базы. |
|||
20
Torquader
23.04.12
✎
01:03
|
Если базы в разных директориях,то придётся писать две строки подключения-то есть использовать два объекта.
Также можно попробовать написать подключение без файла,а в строке команды попробовать подключить два различных файла и не забыть про индексы. |
|||
21
КонецЦикла
модератор
23.04.12
✎
01:16
|
Вот попробовал, получилось
Но... без монопольного и без метаимен А как придется мучаться с иерархией и главное бух запросами... ужос :) База =СоздатьОбъект("ODBCDatabase"); Если База.Соединение("Driver={Microsoft dBase Driver (*.dbf)};datasource=dBase Files") = 0 Тогда Предупреждение("Ошибка открытия файла", 20); Возврат; КонецЕсли; RS =СоздатьОбъект("ODBCRecordSet"); RS.УстБД(База); ТекстЗапроса =" |select BuhGoods.Code |, Goods.Code |from G:\DB77\LQБух\sc245.dbf as BuhGoods |left join G:\DB77\LQ\sc19.dbf as Goods on BuhGoods.Code = Goods.Code |"; ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроку(); |
|||
22
Torquader
23.04.12
✎
01:19
|
За монопольность можно не переживать - при записи можно писать with lock,и таблица будет блокироваться автоматически - только эти блокировки не совместимы с 1С.
|
|||
23
КонецЦикла
модератор
23.04.12
✎
01:19
|
(19) Рассчитываю на помощь
Цель - хотя бы подключиться нормально с помощью SQLLite к другой базе, у меня не получилось А в идеале - соединиться еще с таблицами "родной" базы Как бы использовать наработки сообщества, чтобы не писать офигенные запросы для бух. итогов |
|||
24
Torquader
23.04.12
✎
01:27
|
Насколько я понимаю,обращение в базу 1С требует,чтобы она не была запущена,так как различные способы подключения могут нарушить работу.
Если файловая система ntfs,то можно попробовать изготовить ссылки на dbf-файлы в одной директории-тогда как сами файлы будут в разных. После этого их можно будет рассматривать как одну базу. P.S.интересно попробовать на справочниках из разных баз. Проблему я пока вижу только в удалении индекса при реиндексации - индекс окажется свой в каждой директории. |
|||
25
КонецЦикла
23.04.12
✎
01:30
|
(24) Нет, там нормально в моем примере
Просто не будет работать если 1С запушена в монопольном режиме |
|||
26
КонецЦикла
23.04.12
✎
03:11
|
Кстати, в варианте (21) еще фигня с кодировкой
В общем пишите умные мысли если будут |
|||
27
wsxedc83
23.04.12
✎
16:18
|
ТС, если у тебя есть тестовый полигон для отработки вариантов, то можно, мне кажется, попробовать в одной базе в файле 1cv7.dd дописать дополнительные таблицы, а в тех местах где пишется имя файла - написать файлы с unc-путями второй базы.
Ну и, конечно, обращения ко всем полям таких "присоединенных" таблиц - только по внутренним их идентификаторам. Сам такого не делал, но теоретически может сработать - главное чтобы sqlite брал информацию о расположении таблиц из файла 1cv7.dd, а не из каталога бд. |
|||
28
kiruha
23.04.12
✎
18:53
|
||||
29
КонецЦикла
23.04.12
✎
20:40
|
(28) Спасибо :)
Забылось уже Использовал ОбрМетаСКЛ и 2 базы на СКЛ, но тут что-то не так видно пытался сделать С примером все получилось |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |