Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ODBC в сервисе / 17 сообщений из 17, страница 1 из 1
31.03.2009, 19:34
    #35904287
IMOL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Для написания сервиса использовал приведенный здесь пример Сергея Мерзликина VB6SVC.

Можно ли (и как) из сервиса "законектиться" через ODBC к БД (MS SQL). Что-то типа:

Set AdoConn = New ADODB.Connection
Set AdoCmd = New ADODB.Command

AdoConn.ConnectionString="DSN=......"
AdoConn.Open
AdoCmd.ActiveConnection=AdoConn

AdoCmd.CommandText="Select ....."
AdoCmd.CommandType=....
AdoCmd.Execute

и т.д.
...
Рейтинг: 0 / 0
31.03.2009, 23:50
    #35904589
IMOL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
IMOLДля написания сервиса использовал приведенный здесь пример Сергея Мерзликина VB6SVC.

Да, прошу прощения, вот ссылка на пример:

http://www.sql.ru/forum/actualthread.aspx?tid=178105&hl=vb6svc
...
Рейтинг: 0 / 0
01.04.2009, 12:26
    #35905412
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Auth_for_MS(pass)
On Error GoTo erLabel1
ConnectString_MS = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=User;Initial Catalog=mydb;Data Source=127.0.0.1"
Set cn = New ADODB.Connection
Set rsset = New ADODB.Recordset
cn.ConnectionString = ConnectString_MS
cn.Open

Exit Sub
erLabel1:
            ErrorLog (Date & " " & Time & " " & Error$ & " - Auth_for_MS")
End Sub
...
Рейтинг: 0 / 0
01.04.2009, 12:36
    #35905442
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Посмотрите IP адрес и юзера, в DSN сервисе и подставляйте их, вместо User и Data Source. Все работает замечательно.
...
Рейтинг: 0 / 0
01.04.2009, 14:05
    #35905733
IMOL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Я, наверное, плохо изложил проблему или немного туплю... :)

Проблема в следующем. При подстановке рабочего кода в сервис, последний при запуске сообщает, что "Процесс был неожиданно завершен (ош.1067)". Я думаю, проблема в возможности использования объекта ADODB, а не в значении параметра ADOConn.ConnectionString?


Пример кода:

.....

If IsNTService Then



Set ADOConn = New ADODB.Connection
Set ADOCmd = New ADODB.Command
ADOConn.ConnectionString = "......"
ADOConn.Open
ADOCmd.ActiveConnection = ADOConn



SetServiceState SERVICE_RUNNING
App.LogEvent "AutoScet started"

Do


.....
ADOCmd.CommandText = "SELECT * FROM ....."
ADOCmd.CommandType = adCmdText
If Not (ADOCmd.Execute.BOF Or ADOCmd.Execute.EOF) Then
SetNum = ADOCmd.Execute.Fields("SetNum").Value
OtherDate = ADOCmd.Execute.Fields("OtherDate").Value
End If
......



Loop While MsgWaitObj(1000&, hStopPendingEvent, 1&) = WAIT_TIMEOUT


SetServiceState SERVICE_STOPPED
App.LogEvent "AutoScet stopped"
SetEvent hStopEvent
MsgWaitObj INFINITE, hnd, 1&
CloseHandle hnd
End If

.....
...
Рейтинг: 0 / 0
01.04.2009, 14:08
    #35905747
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
DSN вы какой сделали? вам нужен machine(system) DSN. проверьте под каким аккаунтом запускаеться сервис (через консоль управления сервисами, закладка LogOn у вашего сервиса)
...
Рейтинг: 0 / 0
01.04.2009, 16:11
    #35906197
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
IMOL, проверьте работоспособность самой базы данных и протестируйте коннект (Test Connection). Вариантов на сброс коннекта множество. И погуглите немного.
...
Рейтинг: 0 / 0
01.04.2009, 17:44
    #35906497
IMOL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
БД работоспособна, как и сам код. Просто понадобилось некоторые операции "запихнуть" в сервис.
Где-то в поиске я нашел указание на то, что в "теле" сервиса могут стоять операции типа: "+", "-" :) и API-шные функции. Оно вообщем-то на подсознательном уровне понятно почему :). Но вот очень хочется :) послать несколько запросов в БД (MS SQL) из сервиса.

Моим убогим в этой области умом я понимаю, что библиотеку с используемыми модулями надо как-то "особенно прикрутить" (минуя References) к сервису. Ясно, что сервис просто не находит "все эти ADODB". Но вот, как это сделать? Наверняка кто-то сталкивался.
...
Рейтинг: 0 / 0
01.04.2009, 17:51
    #35906515
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
adoddb тут не причем. проверяйте доступность вашей базы из под логина, под которым стартует ваш сервис
...
Рейтинг: 0 / 0
01.04.2009, 17:53
    #35906516
IMOL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Konst_One, DSN - system, account - System.
...
Рейтинг: 0 / 0
01.04.2009, 17:57
    #35906529
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
ну так и проверяйте доступность базы для этого акка. если у вас домен и сервер на другом компе, то я бы посоветовал вам установить сервис под той доменной учеткой, которая имеет доступ к SQL-серверу и в нужную вам базу.
...
Рейтинг: 0 / 0
01.04.2009, 22:53
    #35906970
IMOL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Konst_One, база данных стоит локально на сервере домена. На нем же пытаемся запустить сервис. Однако, думаю, что здесь нет проблемы "аккаунта" , так как я оставлял в тексте программы только одну строчку: Set ADOConn = New ADODB.Connection (а также:Set ADOConn = CreateObject("ADODB.Connection")) и получал тот же результат:"Процесс был неожиданно завершен...". С таким же успехом я создавал другие объекты, "прикрученные" в References - во всех случаях идентичный результат. То есть до самого "connect" мы, вроде бы, вообще не доходим. Однако, если в сервисе организовать какой-нибудь код на базе API, например, - все работает на ура.

Естественно, из "Источников данных (ODBC)" тест соединения к БД проходит успешно.
...
Рейтинг: 0 / 0
02.04.2009, 13:16
    #35908150
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Ну тогда Вам врядли кто поможет решить Вашу проблему, если коннект с ODBC идет, а с VB сбрасывается....Для меня немного непонятно. Попробуйте моим способом приконектится, у меня сервис и в ODBC, и также отдельно подключаюсь с VB, вышеуказанным способом. С VB даже все эффективней пашет.... И попробуйте вытащить инструмент ADODC (Microsoft ADO Data Control), и с помощью него подконектится, там есть вариант ODBC....
...
Рейтинг: 0 / 0
02.04.2009, 14:53
    #35908519
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
У меня такая же фигня происходила под w2k. Как победил, уже не помню.
...
Рейтинг: 0 / 0
02.04.2009, 15:12
    #35908594
IMOL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Собственно проблема разрешилась. Решение в топике чуть ниже:
http://www.sql.ru/forum/actualthread.aspx?tid=652008

При создании службы с использованием объекта NTService1 все "фунциклирует". Я пытался "слепить" службу на основе примера, представленного Сергеем Мерзликиным:
http://www.sql.ru/forum/actualthread.aspx?tid=178105&hl=vb6svc. Для нее не требуется NTService1.

Учитывая свою прикладную специальность и ограниченность в вопросах программирования, смею предположить, что это разные способы написание служб. При этом где-то в мозгах отложилось, что второй пример - это как раз "полноценная" служба, а микрософтовский модуль ее вроде как "иммитирует" :). Прошу прощения за свои бестолковые комментарии.

В заключение всем огромное спасибо и вопрос к уважаемому kiv-1980. Так сказать, для окончательного запутывания вопроса :). Ваш сервис работает с использованием NTService1 или нет?
...
Рейтинг: 0 / 0
03.04.2009, 10:23
    #35909931
kiv-1980
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Вышеуказанный способ использую давно. И проблем не наблюдаю. Запускается на всех компах с любыми MS оболочками, и это меня вполне устраивает.
...
Рейтинг: 0 / 0
03.04.2009, 14:49
    #35910838
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC в сервисе
Способ написания сервисов один — должен быть создан отдельный поток, с которым мог бы общаться диспетчер сервисов. Сервисконтролы берут на себя эту задачу. На VB с потоками работать невозможно без адских плясок с бубном, которых в примере Мерзликина нет. Этот пример лишь делает вид, что работает. Польза от него чисто академическая.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ODBC в сервисе / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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