|
|
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
День добрый! Возникла следующая проблема: имеется приложение, которое работает с базой mdb. Это приложение осуществляет загрузку данных через выполнение SQL-скрипта на ADO-соединении. Отработан скрипт для соединения с базами Paradox. Он выглядит как набор команд вида: Код: plaintext 1. 2. 3. Возникла необходимость написать такой же для соединения с базами SQL Server. В хелпе про указание такого внешнего источника ничего внятно не сказано. Для уточнения сразу: ни Access, ни adp не используются. работа ведётся исключительно через ADO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 10:18:46 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
судя по хэлпам никак - In для ISAM баз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 10:43:09 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
ЧТо-то не понятно так соединение идет с клиента или с сервера? Если с сервера, то причем тут ADO? И может этот вопрос задать на MSSQL форуме? PS: Мне кажется что копать надо в сторону Linked Server ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 10:45:24 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
С клиента, с клиента. Если с сервера - там, я понимаю, до ушей разного геморроя должно возникать. Хотя, в принципе, меня устроило бы подключение любому к ODBC-источнику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 11:32:39 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
_MaxLife_С клиента, с клиента. Если с сервера - там, я понимаю, до ушей разного геморроя должно возникать. Хотя, в принципе, меня устроило бы подключение любому к ODBC-источнику. ODBC inna (MsSql2000) + ADO Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 12:25:22 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Спасибо, конечно, но как мне этот скрипт через ADO прогнать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 12:37:53 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
_MaxLife_Спасибо, конечно, но как мне этот скрипт через ADO прогнать? автор Это приложение осуществляет загрузку данных через выполнение SQL-скрипта на ADO-соединении. тады расскажи на чём скрипт писан: - vbs; - PHP; - Perl; - ???; или чё за приложение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 13:02:00 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Скрипт писан на SQL. Приложение - редактор геологической модели :) Оперирует проектами, которые хранят в себе данные о скважинах - историю добычи, координаты пластопересечения и всё такое прочее. Хранилище данных - база mdb. Само собой, набивать данные руками, если они есть в других источниках, идиотов нет. Другие источники представлены в виде текстовых файлов, таблиц Paradox, баз SQL Server 2000. Соединение с базой проекта ведётся через ADO. До сих пор операции импорта прекрасно решались через выполнение sql-файлов. Имеется сильное желание сделать такую же вещь для SQL Server. А вернее, надо ко вторнику :). Через лобовое - два соединения, одно к mdb, другое к SQL Server, встать-скопировать - решать не хочется, ибо тормозит страшно, причём тормоза на 90% из-за болтания курсора по выборкам, даже при упорядочении. Для примера - аналогичная байда, сделанная через BDE (первая версия для уже упомянутых выше таблиц Paradox) работает до суток, что нихрена никому не интересно, тогда как SQL-версия работает всего двадцать минут, что вполне приемлемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 13:22:40 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
а сколь часто надо данные с sql сервера перебрасывать в mdb ? чем не годится вариант написания синхронизатора в виде mdb файла к которому линкуются : - Хранилище данных - mdb; - sql server; на рабочий стол иконку форма на автомат в ней currentproject.connection.execute при запуске mdb выполняет тот-же запрос но в упрощённом виде: Код: plaintext 1. 2. после чего закрывается 2-ой вариант можно mdb отстреливать sql сервером по расписанию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 14:22:48 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Так, так, ну-ка, а чуть подробнее. Во первых строках вашего письма: автор вариант написания синхронизатора в виде mdb файла к которому линкуются : - Хранилище данных - mdb; - sql server; на рабочий стол иконку форма на автомат в ней currentproject.connection.execute при запуске mdb выполняет тот-же запрос но в упрощённом виде: Код: plaintext 1. 2. Это как? То есть имею mdb (назовём его Оператор), всё значение коего состоит в том, что он слинкован с другим mdb (назовём Приёмник) и сервером (соответственно, Источник). При наличии требы слить нужные данные загружаем Оператор, выдаём ему на хобот имена/строки соединения Приёмника и Источника, после чего дёргаем в нём за что-то, и привет - "пошла качаться"? Я правильно понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 14:32:02 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Ага - какой у тебя Access(версия 97/2002 ?) - мне будет быстрее склепать mdb и выложить на конфу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 14:39:36 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Access у меня XP. С конфы, к сожалению, забрать не смогу - админы рвут - но есть боевой адрес maxlife(#)sibniinp.ru. Другие вопросы: 1. (Самый важный) - без наличия установленного Access'а точно будет ли работать? На юзерах он не установлен за ненужностью. 2. Смогу ли я динамически устанавливать параметры линков в Операторе? (в смысле, есть ли возможность это закрутить на VB, а потом дёргать за функции?) В любом случае спасибо за мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 14:51:50 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
А не проще в mdb-хе создать запрос к серверу и сохранить его содержимое в таблице? Set q = db.CreateQueryDef("spq") q.Connect = "ODBC;DRIVER={SQL Server};SERVER=МойSQLСервер;DATABASE=Моябаза;Trusted_Connection=yes;dsn=;" q.SQL = "insert into access_table_1 exec МояХП" запрос очень просто создается из мастера потом останется его только запустить. Тоже самое можно сделать со стороны MSSQL сервера он с MDB базами очень хрошо дружит. проще всего зайти со стороны ADP проекта и тоже воспользоватся мастером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 14:56:43 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Мастера не катят, так как вся музыка должна идти незаметно от пользователя. Другой вопрос, как вызвать VB-шый метод через ADO-соединение. Чем-то вроде "select * from myMethod(param1, .. ,paramN)"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 15:01:23 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
без Access - плохо! Не ясен функционал встроенного ADO - он ограничен "запуском" текстовой (sql) строки и работает с заранее "прибитой" к нему Mdb ? если только с одной mdb и только строка,то вижу длинный путь: - в mdb создаём табличку+поля в ней (Create Table + Alter Table) - один раз Insert - в табличке будет флажок + набор параметров всё остальное на sql - я бы делал через DTS по таймеру: - проверка флага; - считывание путей/параметров; - отстрел данных в mdb; - зачистка флага; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 15:33:07 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Из мастера я тебе предлагаю только создать запрос к серверу. а выполнять его будеш методом ADOConection.Execute Но если совсем не хочеш мастером, то вот VB код для DAO Dim dbe As DAO.DBEngine Dim ws As DAO.Workspace Dim db As DAO.Database Dim q As DAO.QueryDef Set db = dbe.Workspaces(0).CreateDatabase("\\СетевойПутьКФайлу\ФайлБД.mdb", dbLangGeneral) 'создаю запрос к серверу spq -просто имя запроса можно использовать какое хочеш Set q = db.CreateQueryDef("spq") 'при подключении использована доменная аутентификация 'но при желании можно сформировать строку с SQL юзером и паролем q.Connect = "ODBC;DRIVER={SQL Server};SERVER=МойSQLСервер;DATABASE=Моябаза;Trusted_Connection=yes;dsn=;" 'собственно T-SQL запрос формирующий данные на SQL сервере q.SQL = "SELECT * FROM MyTbl" 'запоминаю изменения свойств запроса к серверу q.Close 'выполняю вставку полученных данных в mdb таблицу db.Execute "insert into access_table_1 бла-бла-бла From spq" Можно и через ADO+ADOX но DAO быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 15:40:36 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
2 Latuk: большое спасибо. Как раз сейчас пригодится. 2 Shuhard: Не сошёлся свет клином на Access'e. На приложении, в смысле, коли есть дравера OLE DB :). По поводу insert'ов - всё может быть проще. Я думаю, примерно так: Код: 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. Единственное, не могу вызвать функцию из запроса - пишет, что нет такой, не определена. Обидно... Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 15:49:18 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
дык имеется VB ? и к нему пристёгнут ADODB, а DAO отсутствует - верно-ли мы тебя понимаем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 16:29:54 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Еще учти, что CreateDatabase и CreateQueryDef создают новую базу и запрос в ней Если подключаешся к уже существующей то используй OpenDatabase и QueryDefs ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 16:31:43 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Я думал, что имеется. А не имеется, видимо :( Никак не могу вызвать функцию через ADO из mdb. Получается, что модули функционируют только в среде Access. Перевод в mde не помог. Думаю и ищу стенку покрасивше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 16:34:34 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
>select LinkDBs() Это бред Какая связь между VB функцией из модуля и запросом к данным ? Задача-то тривиальная. сохранил внутри MDB запрос к серверу, который вернет при запуске нужный набор данных с сервера. (делается через мастер в access на раз-два) сделал в MDB второй запрос, который используя данные из первого добавит что нужно в MDB таблицу Выполнил второй запрос через ADO (если надо передав параметры) ВСЕ -данные в таблице. А вообще-то специально для таких вещей у MSSQL есть DTS пакеты нарисовал такой пакет с какими надо преобразованиями и запускай себе по расписанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 17:43:54 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Nick из сибири - вернётся наверно завтра автор без наличия установленного Access'а точно будет ли работать? На юзерах он не установлен за ненужностью я так понял ,что каждый оператор должен выдёргивать в mdb строки из разных источников. возможно сейчас они подменяют db на фиксированном пути ? ждём. P.S.по расписанию я тоже предлагал - возможно надо по событию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 17:51:06 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
DTS пакет можно выполнить и через ADO запустив соотв ХП-ку и передав ей его имя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 17:59:20 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
Ага - осталось понять что за программная среда у автора и может -ли он запустить XP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2004, 18:23:48 |
|
||
|
From ... In [SQL Server]
|
|||
|---|---|---|---|
|
#18+
День добрый, ребята. Поясняю в коий уже раз: Есть просто ADO-соединение с mdb. Всё, больше нет ничего. В соединение уходят SQL-команды. Их провайдер Jet выполняет. Программа представляет собой клиент, который должен уметь присосаться к внешнему источнику данных - сейчас только Paradox и текстовые файлы - и вытянуть всё, что ей интересно. Объёмы данных большие. Копая данные Paradox, можно отправлять скрипты вида, указанного в первом посте. Очень хотелось сделать так же для SQL Server. Вчера у меня родилась с вашей подачи идея, как оказалось, дохлая, что, если в mdb засунуть ряд скриптов и настроек, то можно будет это самое mdb использовать как промежуточный модуль-конвертор. Однако вчера же и выяснилось, что эта музыка не катит, так как скрипты и прочее явно выполняются исключительно в VB-контексте Access, а этот контекст использовать нельзя. Всевозможные советы насчёт серверных примочек вроде DTS не канают, так как требуют: а) динамического создания на клиенте ресурса доступа к конктерному mdb (а их, mdb, может быть произвольное количество), б) наличия серверного инструментария для перекачки - тех же DTS-пакетов, в) там, где будет стоять программа, отнюдь не обязательно будет доступ к потрохам сервера, так что совершенно необходимо тянуть данные просто из ODBC-источника. В общем, усложнение задачи несёт за собой вагоны геморроя, который придётся расхлёбывать постоянно, а на это в подавляющем большинстве случаев нет ни времени, ни ресурсов. Увезут программу куды-нить в один из городов Лукойла, и привет горячий - за каждым чихом в командировку. Никаких денег не хватит. Так что, видно, придётся плюнуть мне на все эти хохмы "слюной, как плевали до исторического материализма", и писать в лоб, используя блочную передачу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2004, 08:16:17 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32600324&tid=1673252]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 294ms |

| 0 / 0 |
