Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5

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

08.09.2009, 13:21. Показов 1830. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
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, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru