|
|
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
Сейчас перевожу приложение с VB6 на VB.NET. Встала задача в приложении-клиенте с помощью ADO.NET получить набор записей, представляющий из себя union-соединение двух таблиц из разных источников данных (пока - Access + Access, но в дальнейшем придется поддерживать Access + SQL Server). Допустим, если б данные находились в одной БД, то запрос выглядел бы следующим образом: Код: plaintext 1. 2. 3. но таблицы CCustoms и TCustomType находятся в разных БД. Как этого добиться на ADO.NET? Раньше мною это решалось созданием локальной Access-БД, в которую были подключены все таблицы из двух (трех, четырех) разных БД - понятно, что таким образом обращаясь к этой БД можно было получать запросы-соединения любой сложности. P.S. Поискал в форуме подобные темы - предлагали метод relation - но с какого боку его прикрутить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2006, 11:38 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
Средствами ADO.NET это не решается. Решается средствами SQL Server. Создайте в нем Linked Server, смотрящий на БД Access. После этого сможете написать соответствующее представление. Подробнее Books Online и форум по MS SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2006, 13:17 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
авторСредствами ADO.NET это не решается. Решается средствами SQL Server. Создайте в нем Linked Server, смотрящий на БД Access. После этого сможете написать соответствующее представление. Подробнее Books Online и форум по MS SQL. а почему вы не посмоветовали ему метод, который часто здес советуети?! (+ который можно считать изврашением) :) тоесть всех на один дататабле потом филтер :) потом что то ешё! хмммм... ---- www.hramin.jino-net.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2006, 14:52 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
2 Ramin. Можно хотя бы пару ссылок на мои посты, где я бы советовал этот способ для аналогичных задач. Для данной конкретной задачи я считаю наиболее подходящим то решение, которое я предложил выше. Тянуть все данные на клиента, а потом фильтровать (кстати а зачем здесь фильтр???), считаю неоправданным. Кстати для связки Access-Access тоже можно реализовать нечто похожее. Только там нет Linked Server, есть некий аналог. К сожалению, не помню как называется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2006, 15:00 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
еще какие-нибудь идеи имеются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 14:38 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
а чем вас не устраивает старое решение с бд, где подключены таблицы из обоих бд? в случае sql server-а вам уже сказали как это решить? имхо, это оптимальный путь потому что если решать это в ADO.NET - значит тянуть это все на клиента, что не оптимально, не кажется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 15:31 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
winsky!а чем вас не устраивает старое решение с бд, где подключены таблицы из обоих бд? Меня, честно говоря, и VB6 пока вполне устраивает по сравнению с VB.NET - переписыванием я занялся в рамках изучения этого зверя - .NET. А у "старого решения с БД", кстати, есть свои недостатки. winsky!в случае sql server-а вам уже сказали как это решить? В случае с SQL Server (если обе базы данных находятся на нем) это будет решаться не linkedserver, т.к. базы будут лежать на одном серваке. winsky!потому что если решать это в ADO.NET - значит тянуть это все на клиента, что не оптимально, не кажется? не понял... :-O т.е. если я укажу "select ID, Name from Table1 where ID IN (10,11,12)", то на клиента будет передано "select * from Table1", так что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 15:59 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
Merge см. http://msdn.microsoft.com/library/rus/default.asp?url=/library/RUS/cpref/html/frlrfSystemDataDataSetClassMergeTopic3.asp Шайтан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 16:22 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
nibblesт.е. если я укажу "select ID, Name from Table1 where ID IN (10,11,12)", то на клиента будет передано "select * from Table1", так что ли? - нет, конечно я вот в свете всего вышеизложенного перестал понимать - вам вертикальное нужно слияние таблиц (UNION) или горизонтальное (JOIN)? nibblesполучить набор записей, представляющий из себя union-соединение - тут вы пишете о union, а в запросе у вас join? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 17:58 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
winsky! nibblesт.е. если я укажу "select ID, Name from Table1 where ID IN (10,11,12)", то на клиента будет передано "select * from Table1", так что ли? - нет, конечно я вот в свете всего вышеизложенного перестал понимать - вам вертикальное нужно слияние таблиц (UNION) или горизонтальное (JOIN)? nibblesполучить набор записей, представляющий из себя union-соединение - тут вы пишете о union, а в запросе у вас join? нужен join ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 22:02 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
тогда, согласитесь, используя механизмы ADO.NET (тот же предложенный вам метод Merge)вам необходимо будет загрузить на клиента как минимум всю таблицу TCustomType и часть таблицы CCustoms... и этот join на клиенте отработает медленнее (имхо), чем на сервере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 10:36 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
nibblesполучить набор записей, представляющий из себя union-соединение двух таблиц из разных источников данных nibblesнужен join ты уж определись, что именно тебе надо :) если join, то смотри DataSet.Relations ( тут ) согласен с winsky! : тащить всё на клиента - нонсенс Шайтан ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 10:43 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
winsky!тогда, согласитесь, используя механизмы ADO.NET (тот же предложенный вам метод Merge)вам необходимо будет загрузить на клиента как минимум всю таблицу TCustomType и часть таблицы CCustoms... и этот join на клиенте отработает медленнее (имхо), чем на сервере сервера нет, есть две базы данных Access, которые лежат на сетевом ресурсе. "Вся таблица TCustomType" - это 15 записей. Две базы на одном SQL-сервере - это перспектива, которая к сегодняшней реальности никакого отношения не имеет ))) Шайтан nibblesполучить набор записей, представляющий из себя union-соединение двух таблиц из разных источников данных nibblesнужен join ты уж определись, что именно тебе надо :) про union я погорячился-описАлся... нужен (и с самого начала был нужен) - join. В следующий раз в этом топике увидите "union" - можете смело менять на "join" )) Шайтанесли join, то смотри DataSet.Relations ( тут ) согласен с winsky! : тащить всё на клиента - нонсенс Шайтан нууу, батенька... это зависит от задачи, согласитесь тащить на клиента все равно придется - другого выхода при текущей конфигурации нет: есть таблица с заказами (типовая выборка для клиента содержит около 100-200 записей) и есть таблица-справочник (вся таблица - 15 записей). Соединить join'ом эти две таблицы на клиенте - это ж сам бог велел! :)) За подсказку спасибо - посмотрю вечером дома (занимаюсь этой задачей во внерабочее время) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 13:25 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
под сервером я имел в виду бд (будь то access или sql server) - в любом случае ТАМ join отработает быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 15:51 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
Первое. Огромная благодарность Шайтану! Relation - как раз то, что было нужно. Я таки шел верным путем ))) Второе. Хотелось бы услышать предложения по оптимизации этого венегрета (на будущее, а сейчас на реальных моих данных он срабатывает за секунду). Третье - и такая мысль уже проскальзывала на форуме - позволяет ли DataSet (раз уж это фактически представление базы данных на компе клиента) выполнять запросы select "внутри себя" на имеющихся у него таблицах не дергая сервер? Ну и четвертое - как через адаптер "доливать" данные в таблицу в DataSet'e? Киньте ссылочку на пример. (тут, наверно, понадобится злополучный merge, да? )))) Код: 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. 50. 51. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2006, 00:22 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
метод Merge позволит вам сделать подобие join-а без гемора с рилейшинами, вот немного переделанный пример из MSDN-а, который это демонстрирует, извните, что на c# - лень писать на VB, я думаю, разберетесь(на форме должен быть dataGridView c именем dataGridView1): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2006, 11:04 |
|
||
|
Соединить таблицы (представления) из двух баз данных (Access и SQL Server)
|
|||
|---|---|---|---|
|
#18+
winsky!метод Merge позволит вам сделать подобие join-а без гемора с рилейшинами, вот немного переделанный пример из MSDN-а, который это демонстрирует, извните, что на c# - лень Стыдно признаться, но я не понял, каким боком этот пример можно прикрутить к решению озвученной проблемы с двумя (тремя и более) реальными таблицами - одной таблицы-справочника и таблицы со вторичным ключем, ссылающимся на первичный ключ первой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2006, 17:42 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=34190694&tid=1353004]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 365ms |

| 0 / 0 |
