0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5

Служба работающая с БД MS SQL

08.09.2009, 13:21. Показов 1834. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа программисты, доброго вам времени суток.

Прошу помочь со следующей проблемой.

Программа работает с тремя БД MS SQL. Из двух "тянет" данные, а в третьей создает запись с данными из впервых двух. Все это оформлено как служба работающая на компьютере с Windows XP, которая работает с интервалом в 1 сек. Но при работе самой службы работа с данными не проиходит, по той причине, что служба не может установить коннект ни с одной БД. Проблема происходит сразу на этапе проверки соединения с БД.

Привожу косок кода:

C++
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
void __fastcall TCopyPasteService::ServiceExecute(TService *Sender)
{
    TADOQuery *adoquery;
    AnsiString strConnOUT;
    AnsiString strSqlOUT;
    int cnt;
    AnsiString str;
 
    str = "\nРабота службы CopyPasteSvr начата";
    CopyPasteService->LogMessage(str,ETYPE,CATEGORY,5000);
    while (!Terminated) {
        if (CopyPasteService->CheckConnection()) { // Проверка соединения с БД
            if (CopyPasteService->ClearTBL("_hc_ContactExt")) {
                str = "\nДанные из таблицы _hc_ContactExt удалены";
                CopyPasteService->LogMessage(str,ETYPE,CATEGORY,5001);
            }
            str = "\nПроцедура копирования данных  начата";
            CopyPasteService->LogMessage(str,ETYPE,CATEGORY,5002);
            strConnOUT = "<Connection String>";
            strSqlOUT = "<Query>";
            adoquery = new TADOQuery(this);
            adoquery->ConnectionString = strConnOUT;
            adoquery->SQL->Clear();
            adoquery->SQL->Add(strSqlOUT);
            adoquery->Active = true;
            cnt = adoquery->RecordCount;
            adoquery->First();
            for (int i = 0; i < cnt; i++) {
                                                   <Некоторая работа с данными>
                adoquery->Next();
            }
            str = "\nПроцедура копирования данных завершена";
            CopyPasteService->LogMessage(str,ETYPE,CATEGORY,5003);
        }
        else {
            str = "\nНе удалось установить соединение с базой данных";
            CopyPasteService->LogMessage(str,ETYPE,CATEGORY,5005);
        }
        str = "\nУстановлен таймаут - " + IntToStr(TIME_OUT) + " миллисекунд";
        CopyPasteService->LogMessage(str,ETYPE,CATEGORY,5004);
        Sleep(TIME_OUT);
        ServiceThread->ProcessRequests(false);
    }
}
Прошу подсказать как решить данную проблему.

Заранее благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.09.2009, 13:21
Ответы с готовыми решениями:

Переход (совмещение) Access и SQL (работающая база Access в SQL)
Имеется вот какая задача: существует база данных Access (работает более 5 лет, более 160 таблиц и более 15000 запросов, макросы),...

SQL Server 2012 Management Studio Express не появляется служба SQL Server
Здравствуйте. Установил SQL Server Management Studio Express 2012 , необходимый для работы одной программы конфигурирования устройства. Там...

Не запускается служба SQL
Добрый день Сломался компьютер который используется как сервер Касперского(так же как файлопомойка и лицензии1с) Поменяли железо...

8
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.09.2009, 13:39
а где само подключение к БД? смыл приведенного кода в чем?
0
0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5
08.09.2009, 14:05  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
а где само подключение к БД? смыл приведенного кода в чем?
Если вы имеете ввиду проверку соединения с БД, то привожу код:

C++
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
bool TCopyPasteService::CheckConnection()
{
    AnsiString strConn;
    bool connect = false;
    AnsiString str;
    TADOConnection *adoconn;
try {
    adoconn = new TADOConnection(this);
    strConn = "<БД1>";
    adoconn->ConnectionString = strConn;
    adoconn->Connected = true;
    if (adoconn->Connected == true) {
        adoconn->Connected = false;
        connect = true;
    }
    else {
        return false;
    }
    strConn = "<БД2>";
    adoconn->ConnectionString = strConn;
    adoconn->Connected = true;
    if (adoconn->Connected == true) {
        adoconn->Connected = false;
        connect = true;
    }
    else {
        return false;
    }
    strConn = "<БД3>";
    adoconn->ConnectionString = strConn;
    adoconn->Connected = true;
    if (adoconn->Connected == true) {
        adoconn->Connected = false;
        connect = true;
    }
    else {
        return false;
    }
    return connect;
} catch (...) {
    return connect;
}
}
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.09.2009, 14:20
чо, прям реально так:
Цитата Сообщение от neur0tr0n Посмотреть сообщение
strConn = "<БД1>";
подключаешься?
вообще то в строке подключения надо сервер указывать, БД, юзера, пароль и еще кучу всего
вот примеры строк подключения
0
0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5
08.09.2009, 14:48  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
чо, прям реально так:

подключаешься?
вообще то в строке подключения надо сервер указывать, БД, юзера, пароль и еще кучу всего
вот примеры строк подключения
Господа, харэ стебаться! :-)

Ну конечно же не так подключаюсь, просто я не стал выкладывать строки подключения с паролями и аккаунтами, а просто укзал их условно!
По поводу строк подключения, отвечаю, что с БД, а именно MS SQL, а именно, в интеграции с cbuilder'ом, я работаю уже более 5 лет, поэтому проблем со строками подключений не испытываю.
А эта программа, о которой идет речь в посте, работает без проблем (ее EXE вариант).
Вот я и захотел сделать ее в формате службы выполняющейся резидентно на компьютере.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.09.2009, 14:53
попробуй
C++
1
OleInitialize(NULL);
где нидь в самом начале программы поставить (до создания TADO....)
0
0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5
08.09.2009, 16:47  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
попробуй
C++
1
OleInitialize(NULL);
где нидь в самом начале программы поставить (до создания TADO....)
Благодарствую сердечно :-), помогло!
Правда пришлось еще немного повозиться с кодом, но это уже не имеет отношения к проблеме.
Вот только в книге, а конкретнее в той главе, где описывается создание служб, ничего не сказано о данной функции!

Но тем не менее спасибо большое, выручили.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.09.2009, 16:55
Цитата Сообщение от neur0tr0n Посмотреть сообщение
Благодарствую сердечно :-), помогло!
Правда пришлось еще немного повозиться с кодом, но это уже не имеет отношения к проблеме.
Вот только в книге, а конкретнее в той главе, где описывается создание служб, ничего не сказано о данной функции!

Но тем не менее спасибо большое, выручили.
это к службам не относится, просто в службе в отличии от обычного приложения не производится инициализация OLE, а ADO это и есть OLE.
ЗЫ: к стати и в длл тоже самое надо делать
0
0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5
08.09.2009, 17:14  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
это к службам не относится, просто в службе в отличии от обычного приложения не производится инициализация OLE, а ADO это и есть OLE.
Так вот в том то и дело.

Цитата Сообщение от oxotnik Посмотреть сообщение
ЗЫ: к стати и в длл тоже самое надо делать
Спасибо. Учту на будущее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2009, 17:14
Помогаю со студенческими работами здесь

Не запускается служба SQL Server 2008
Приветствую. Приключилась такая беда... незапланированное отключение электричества в последствии с выходом из строя ибп и внезапным...

Не запускается служба Агент SQL Server
Здравствуйте. Помогите разобраться. Не запускается Агент SQL Server. Пишет что мол, служба была запущена, а затем остановлена. В логах...

Не запускается служба SQL Servera 2005
Всем доброго дня! педистория: по работе возникла необходимость установки SQL Servera, на ПК, установка прошла без ошибок, служба сервера...

Не запускается служба SQL Server 2017
Доброго времени.) У меня возникла следущая проблема: В апреле ставила SQL Server 2017 Enterprise edition, всё прекрасно работало, но в...

Служба агент sql server переодически перезапускается сама
Добрый поменял IP сети стала сама перезапускаться служба агент sql server, что можно предпринять?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru