|
|
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Добрый день! Существует N баз данных, структура у всех одинаковая, таблицы одинаковые, данные в таблицах на разных серверах разные. Cоздаю конекты, запросы к БД, получаю ответы в виде N рекордсетов. Вопрос: как объеденить все рекордсеты в одни? Пробовал по детски: set recordserT = recordset1+recordset2+...+recordsetN Ошибка: Type mismatch, и больше нечего в голову не приходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 16:30:46 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Azartкак объеденить все рекордсеты в одни? если рекордсеты ADO, то можно создать рекордсет, с такими же полями, как и в N исходных (Вы говорите, что они по структуре одинаковые), затем слить в него данные из всех исходных рекордсетов... При этом, конечно, будет потеряна возможность менять данные в БД через этот рекордсет, да и дорогая, и на мой взгляд бессмысленная операция... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 16:53:50 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Если не секрет, зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 16:55:39 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
авторесли рекордсеты ADO, то можно создать рекордсет, с такими же полями, как и в N исходных Да использую ADODB. Как слить данные в один рекордсет?? Менять данные в БД не тербуется. Это будет ДЛЛ, требуется их только оттуда считывать(БД много), объеденять и уже дальше сними будут другие работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:14:58 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Есть подозрение, что рекордсеты нельзя объединять. Можно только через промежуточную таблицу ... или открыть рекордсет через запрос типа: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:18:52 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Вот тоже думаю про то чтобы загнать всё во временную таблицу, а потом вернуть всё в один рекордсет. Если это конечно возможно. Есть у кого линки про временные таблицы?? Код: plaintext 1. 2. 3. 4. Не очень понял к чему это, сервера БД раскиданы далеко, они НЕ объеденены локалкой. Или ты предлагаешь делать так Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:28:21 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Есть один, не изящный, но работающий способ: Создать синтетический рекордсет и в него "залить" все остальные. В циклах конечно, по этому "не изящный". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:40:40 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Azart Не очень понял к чему это, сервера БД раскиданы далеко, они НЕ объеденены локалкой. Или ты предлагаешь делать так Код: plaintext 1. 2. 3. 4. 5. 6. тяжкий случай однако. запрос может накрыться медным тазом, если конекта к одной из баз не будет. однако, вдруг получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:42:19 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
2Worobjoff: Как сделать синтетический рекордсет и в него "залить" все остальные. Если можно пример кода или линк на чтонить похожее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:42:52 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
2marvan, даже очень возможно, что будет отсутствовать коннект к каким то серверам, но я не могу знать точный путь к mdb. К тому же задача стоит так чтобы, конект ко всем БД был одновременный, т.е. ещё надо многопоточность делать, а при машем методе это не возможно. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:45:57 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:46:43 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Поправка: не надо обращать на строку Код: plaintext "Горячий" пример - сейчас с ним работаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:50:36 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
До AddNew уже добрался, ну что то пока не как не получается заполнить его из другово рекордасета. Будем работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 17:53:39 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
AzartДо AddNew уже добрался, ну что то пока не как не получается заполнить его из другово рекордасета. Будем работать. Код: plaintext 1. 2. 3. 4. 5. Замечание: лучше задать типы полей "руками", не копировать типы из исходника - меньше проблем будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 18:05:17 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
а зачем по строчкам копировать? гораздо быстрее будет создать временную таблицу на диске и запросами на добавление сливать в неё данные из доступных баз, как предлагал LKO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 18:24:24 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
авторrsFlt.AddNew Array("Вкладка", "Условие", "Галка", "Параметр") Каждый раз возвращается рекордсет с разными полями. Или предполагается каждый раз доставать имена полей и уже потом руками их занасить. Большая куча циклов получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 18:27:49 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
как создать временную таблицу? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 18:28:53 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
как вариант: Один раз в базе данных создаём таблицу c определённой структутой (раз она во всех базах одинаковая) 1. Перед каждым обновлением выполняем sql запрос на удаление всех записей в этой таблице. 2. В цикле перечисляем все удалённые БД. Проверяем доступность базы. И если доступна, то INSERT INTO [локальная таблица] SELECT * FROM [удалённая таблица] 3. открываем recordset на основе локальной таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 19:40:07 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
1. компьютер на котором будет запускаться данная прога не будет базы данных. 2. на счёт таблицы. В каждой БД их определённое количество(одинаковое) и их структура одинаковая, НО их больше чем одна!!! и надо отрабатывать запросы на все таблици. Правильно ли я предпологаю после выше сказанно, что выход, это создавать локально самому БД(файлик mdb), далее каждый раз создавать таблицу с определёными полями(имена можно вытащить из запроса, а вот тип незнаю как достать). а после этого автор2. В цикле перечисляем все удалённые БД. Проверяем доступность базы. И если доступна, то INSERT INTO [локальная таблица] SELECT * FROM [удалённая таблица] 3. открываем recordset на основе локальной таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2005, 20:13:11 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
AzartВ каждой БД их определённое количество(одинаковое) и их структура одинаковая, НО их больше чем одна!!! и надо отрабатывать запросы на все таблици. Если так, то зачем создавать БД. Проще иметь шаблон БД с пустыми таблицами. (mdb). Для каждого сеанса делать с него копию, и заполнять запросами из удалённых баз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 09:45:06 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Гм. А не проще ли настроить репликацию на серверах? Сливать данные автоматом в одну базу, а потом уже показывать как вздумается? Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 14:23:25 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
авторЕсли так, то зачем создавать БД. Проще иметь шаблон БД с пустыми таблицами. (mdb). Для каждого сеанса делать с него копию, и заполнять запросами из удалённых баз. Интересный вариант, но запросто может быть не к одной таблицы, а к группе таблиц, которые в свою очередь связаны по ключу. авторА не проще ли настроить репликацию на серверах? Нет не проще, всё уше описанное делается для уменьшения межсетевого трафика, а с репликацией он не уменьшается а увеличивается, хотя репликация снималабы все проблемы. А можнали заполнить рекордсет из датагрида? если да, то можно поочередно заполнять один датагрид инфой из всех рекордсетов, а потом из него всё слить в один рекордсет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 15:46:22 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Тестировал синтетический рекордсет таким способом (самому надо): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. (запрос без сортировок и фильтров) Копирование их в синтетический рекордсет за 4 секунды Сортировка первый раз по одному полю за 10 секунд, второй раз и все следующие за 0 секунд Способ копирования записей в синтетический рекордсет на скорость не влияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 17:17:06 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
Что то я не догоняю как твой пример решит(поможет решить) мою проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 17:24:57 |
|
||
|
Объеденение(сложение) рекордсетов.
|
|||
|---|---|---|---|
|
#18+
AzartЧто то я не догоняю как твой пример решит(поможет решить) мою проблему?Здесь rs - только один источник. Для примера. Поставь сколько надо этих rs-истчников с разных коннектов и "заливай" их последовательно во все тот же rsx. Или условия задачи изменились? Azartструктура у всех одинаковая, таблицы одинаковые, данные в таблицах на разных серверах разные Cоздаю конекты, запросы к БД, получаю ответы в виде N рекордсетов. Вопрос: как объеденить все рекордсеты в один? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2005, 17:50:51 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=337&tid=2168138]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 331ms |

| 0 / 0 |
