Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / From ... In [SQL Server] / 25 сообщений из 25, страница 1 из 1
12.07.2004, 10:18:46
    #32599136
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
День добрый!

Возникла следующая проблема: имеется приложение, которое работает с базой mdb. Это приложение осуществляет загрузку данных через выполнение SQL-скрипта на ADO-соединении.

Отработан скрипт для соединения с базами Paradox. Он выглядит как набор команд вида:

Код: plaintext
1.
2.
3.
insert into access_table_1 
select [fields list] from paradox_table_1 
in 'ParadoxPath' [Paradox  4 .x;HDR=NO;IMEX= 2 ]

Возникла необходимость написать такой же для соединения с базами SQL Server.

В хелпе про указание такого внешнего источника ничего внятно не сказано.

Для уточнения сразу: ни Access, ни adp не используются. работа ведётся исключительно через ADO.
...
Рейтинг: 0 / 0
12.07.2004, 10:43:09
    #32599180
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
судя по хэлпам никак - In для ISAM баз.
...
Рейтинг: 0 / 0
12.07.2004, 10:45:24
    #32599185
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
ЧТо-то не понятно
так соединение идет с клиента или с сервера?
Если с сервера, то причем тут ADO?

И может этот вопрос задать на MSSQL форуме?

PS: Мне кажется что копать надо в сторону Linked Server
...
Рейтинг: 0 / 0
12.07.2004, 11:32:39
    #32599291
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
С клиента, с клиента. Если с сервера - там, я понимаю, до ушей разного геморроя должно возникать.

Хотя, в принципе, меня устроило бы подключение любому к ODBC-источнику.
...
Рейтинг: 0 / 0
12.07.2004, 12:25:22
    #32599410
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
_MaxLife_С клиента, с клиента. Если с сервера - там, я понимаю, до ушей разного геморроя должно возникать.

Хотя, в принципе, меня устроило бы подключение любому к ODBC-источнику.

ODBC inna (MsSql2000) + ADO
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim MyConn As ADODB.Connection
Dim MyStr As String
Set MyConn = New ADODB.Connection
MyConn.Open "Provider=MSDASQL;DSN=inna;DATABASE=inga;UID=sa;PWD=xxx;"
MyStr = "Insert Into Tcorp (Corp_Name) Values ('test')"
MyConn.Execute MyStr
MyConn.Close
Set MyConn = Nothing
]
...
Рейтинг: 0 / 0
12.07.2004, 12:37:53
    #32599451
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Спасибо, конечно, но как мне этот скрипт через ADO прогнать?
...
Рейтинг: 0 / 0
12.07.2004, 13:02:00
    #32599509
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
_MaxLife_Спасибо, конечно, но как мне этот скрипт через ADO прогнать?
автор
Это приложение осуществляет загрузку данных через выполнение SQL-скрипта на ADO-соединении.

тады расскажи на чём скрипт писан:
- vbs;
- PHP;
- Perl;
- ???;
или чё за приложение ?
...
Рейтинг: 0 / 0
12.07.2004, 13:22:40
    #32599562
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Скрипт писан на SQL.

Приложение - редактор геологической модели :)

Оперирует проектами, которые хранят в себе данные о скважинах - историю добычи, координаты пластопересечения и всё такое прочее. Хранилище данных - база mdb.

Само собой, набивать данные руками, если они есть в других источниках, идиотов нет. Другие источники представлены в виде текстовых файлов, таблиц Paradox, баз SQL Server 2000.

Соединение с базой проекта ведётся через ADO. До сих пор операции импорта прекрасно решались через выполнение sql-файлов. Имеется сильное желание сделать такую же вещь для SQL Server. А вернее, надо ко вторнику :). Через лобовое - два соединения, одно к mdb, другое к SQL Server, встать-скопировать - решать не хочется, ибо тормозит страшно, причём тормоза на 90% из-за болтания курсора по выборкам, даже при упорядочении. Для примера - аналогичная байда, сделанная через BDE (первая версия для уже упомянутых выше таблиц Paradox) работает до суток, что нихрена никому не интересно, тогда как SQL-версия работает всего двадцать минут, что вполне приемлемо.
...
Рейтинг: 0 / 0
12.07.2004, 14:22:48
    #32599731
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
а сколь часто надо данные с sql сервера перебрасывать в mdb ?
чем не годится вариант написания синхронизатора в виде mdb файла
к которому линкуются :
- Хранилище данных - mdb;
- sql server;

на рабочий стол иконку
форма на автомат в ней
currentproject.connection.execute

при запуске mdb выполняет тот-же запрос но в упрощённом виде:
Код: plaintext
1.
2.
insert into access_table_1 
select [fields list] sql_server_1 

после чего закрывается

2-ой вариант можно mdb отстреливать sql сервером по расписанию
...
Рейтинг: 0 / 0
12.07.2004, 14:32:02
    #32599756
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Так, так, ну-ка, а чуть подробнее.

Во первых строках вашего письма:

автор
вариант написания синхронизатора в виде mdb файла
к которому линкуются :
- Хранилище данных - mdb;
- sql server;

на рабочий стол иконку
форма на автомат в ней
currentproject.connection.execute

при запуске mdb выполняет тот-же запрос но в упрощённом виде:

Код: plaintext
1.
2.
insert into access_table_1 
select [fields list] sql_server_1 



Это как? То есть имею mdb (назовём его Оператор), всё значение коего состоит в том, что он слинкован с другим mdb (назовём Приёмник) и сервером (соответственно, Источник). При наличии требы слить нужные данные загружаем Оператор, выдаём ему на хобот имена/строки соединения Приёмника и Источника, после чего дёргаем в нём за что-то, и привет - "пошла качаться"? Я правильно понял?
...
Рейтинг: 0 / 0
12.07.2004, 14:39:36
    #32599773
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Ага - какой у тебя Access(версия 97/2002 ?) - мне будет быстрее склепать mdb и выложить на конфу!
...
Рейтинг: 0 / 0
12.07.2004, 14:51:50
    #32599815
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Access у меня XP. С конфы, к сожалению, забрать не смогу - админы рвут - но есть боевой адрес maxlife(#)sibniinp.ru.

Другие вопросы:

1. (Самый важный) - без наличия установленного Access'а точно будет ли работать? На юзерах он не установлен за ненужностью.

2. Смогу ли я динамически устанавливать параметры линков в Операторе? (в смысле, есть ли возможность это закрутить на VB, а потом дёргать за функции?)

В любом случае спасибо за мысль.
...
Рейтинг: 0 / 0
12.07.2004, 14:56:43
    #32599832
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
А не проще в 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 проекта
и тоже воспользоватся мастером.
...
Рейтинг: 0 / 0
12.07.2004, 15:01:23
    #32599840
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Мастера не катят, так как вся музыка должна идти незаметно от пользователя. Другой вопрос, как вызвать VB-шый метод через ADO-соединение.

Чем-то вроде "select * from myMethod(param1, .. ,paramN)"?
...
Рейтинг: 0 / 0
12.07.2004, 15:33:07
    #32599928
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
без Access - плохо!

Не ясен функционал встроенного ADO - он ограничен "запуском"
текстовой (sql) строки и работает с заранее "прибитой" к нему Mdb ?

если только с одной mdb и только строка,то вижу длинный путь:
- в mdb создаём табличку+поля в ней (Create Table + Alter Table)
- один раз Insert
- в табличке будет флажок + набор параметров

всё остальное на sql - я бы делал через DTS по таймеру:
- проверка флага;
- считывание путей/параметров;
- отстрел данных в mdb;
- зачистка флага;
...
Рейтинг: 0 / 0
12.07.2004, 15:40:36
    #32599949
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Из мастера я тебе предлагаю только создать запрос к серверу.
а выполнять его будеш методом 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 быстрее.
...
Рейтинг: 0 / 0
12.07.2004, 15:49:18
    #32599968
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
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.
Option Compare Database

Public Source As String
Public Destination As String
Public LayersList As String
Public PromObjsList As String
Public WellsList As String

Public Static Function SetSource(Value)
    ' установка строки соединения с базой данных SQL Server - источника'
    Source = Value
    SetSource =  0 
End Function


Public Static Function SetDestination(Value)
    ' установка адреса базы данных - приёмника'
    Destination = Value
    SetDestination =  0 
End Function


Public Static Function LinkDBs()
    ' связываемся с источником и приёмником'
End Function


Public Static Function SetTransferParameters()
    ' устанавливаем дополнительные параметры процесса'
End Function


Public Static Function TransferStep1()
    ' выполняем первый шаг процесса'
End Function

Public Static Function TransferStepN()
    ' выполняем N-й шаг процесса'
End Function

Единственное, не могу вызвать функцию из запроса - пишет, что нет такой, не определена. Обидно...

Код: plaintext
select LinkDBs()
...
Рейтинг: 0 / 0
12.07.2004, 16:29:54
    #32600067
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
дык имеется VB ?
и к нему пристёгнут ADODB, а DAO отсутствует - верно-ли мы тебя понимаем?
...
Рейтинг: 0 / 0
12.07.2004, 16:31:43
    #32600070
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Еще учти, что
CreateDatabase и CreateQueryDef
создают новую базу и запрос в ней
Если подключаешся к уже существующей
то используй OpenDatabase и QueryDefs
...
Рейтинг: 0 / 0
12.07.2004, 16:34:34
    #32600081
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Я думал, что имеется. А не имеется, видимо :(

Никак не могу вызвать функцию через ADO из mdb. Получается, что модули функционируют только в среде Access. Перевод в mde не помог. Думаю и ищу стенку покрасивше :)
...
Рейтинг: 0 / 0
12.07.2004, 17:43:54
    #32600274
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
>select LinkDBs()
Это бред
Какая связь между VB функцией из модуля и запросом к данным ?

Задача-то тривиальная.
сохранил внутри MDB запрос к серверу,
который вернет при запуске нужный набор данных с сервера.
(делается через мастер в access на раз-два)

сделал в MDB второй запрос,
который используя данные из первого
добавит что нужно в MDB таблицу

Выполнил второй запрос через ADO (если надо передав параметры)

ВСЕ -данные в таблице.

А вообще-то специально для таких вещей
у MSSQL есть DTS пакеты
нарисовал такой пакет с какими надо преобразованиями
и запускай себе по расписанию.
...
Рейтинг: 0 / 0
12.07.2004, 17:51:06
    #32600304
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Nick из сибири - вернётся наверно завтра
автор
без наличия установленного Access'а точно будет ли работать? На юзерах он не установлен за ненужностью

я так понял ,что каждый оператор должен выдёргивать в mdb строки из разных
источников.
возможно сейчас они подменяют db на фиксированном пути ?
ждём.

P.S.по расписанию я тоже предлагал - возможно надо по событию.
...
Рейтинг: 0 / 0
12.07.2004, 17:59:20
    #32600324
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
DTS пакет можно выполнить и через ADO
запустив соотв ХП-ку и передав ей его имя.
...
Рейтинг: 0 / 0
12.07.2004, 18:23:48
    #32600390
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
Ага - осталось понять что за программная среда у автора и может -ли он запустить XP.
...
Рейтинг: 0 / 0
13.07.2004, 08:16:17
    #32600763
_MaxLife_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
From ... In [SQL Server]
День добрый, ребята.

Поясняю в коий уже раз:

Есть просто ADO-соединение с mdb. Всё, больше нет ничего.

В соединение уходят SQL-команды. Их провайдер Jet выполняет.

Программа представляет собой клиент, который должен уметь присосаться к внешнему источнику данных - сейчас только Paradox и текстовые файлы - и вытянуть всё, что ей интересно. Объёмы данных большие.

Копая данные Paradox, можно отправлять скрипты вида, указанного в первом посте. Очень хотелось сделать так же для SQL Server.

Вчера у меня родилась с вашей подачи идея, как оказалось, дохлая, что, если в mdb засунуть ряд скриптов и настроек, то можно будет это самое mdb использовать как промежуточный модуль-конвертор. Однако вчера же и выяснилось, что эта музыка не катит, так как скрипты и прочее явно выполняются исключительно в VB-контексте Access, а этот контекст использовать нельзя.

Всевозможные советы насчёт серверных примочек вроде DTS не канают, так как требуют:

а) динамического создания на клиенте ресурса доступа к конктерному mdb (а их, mdb, может быть произвольное количество),
б) наличия серверного инструментария для перекачки - тех же DTS-пакетов,
в) там, где будет стоять программа, отнюдь не обязательно будет доступ к потрохам сервера, так что совершенно необходимо тянуть данные просто из ODBC-источника.

В общем, усложнение задачи несёт за собой вагоны геморроя, который придётся расхлёбывать постоянно, а на это в подавляющем большинстве случаев нет ни времени, ни ресурсов. Увезут программу куды-нить в один из городов Лукойла, и привет горячий - за каждым чихом в командировку. Никаких денег не хватит.

Так что, видно, придётся плюнуть мне на все эти хохмы "слюной, как плевали до исторического материализма", и писать в лоб, используя блочную передачу...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / From ... In [SQL Server] / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]