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

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

08.09.2009, 13:21. Просмотров 1453. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2009, 13:21
Ответы с готовыми решениями:

Не работающая функция floor()
Либо я что-то криво написал, либо я дурак, но она не работает. Где я мог...

Нужна прога работающая с com-портом и Rs232
Прога должна видеть порты больше 9. И соответственно работать с ними

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

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

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

8
oxotnik
1625 / 1098 / 75
Регистрация: 21.08.2008
Сообщений: 4,619
Записей в блоге: 1
08.09.2009, 13:39 2
а где само подключение к БД? смыл приведенного кода в чем?
0
neur0tr0n
0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5
08.09.2009, 14:05  [ТС] 3
Цитата Сообщение от 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
1625 / 1098 / 75
Регистрация: 21.08.2008
Сообщений: 4,619
Записей в блоге: 1
08.09.2009, 14:20 4
чо, прям реально так:
Цитата Сообщение от neur0tr0n Посмотреть сообщение
strConn = "<БД1>";
подключаешься?
вообще то в строке подключения надо сервер указывать, БД, юзера, пароль и еще кучу всего
вот примеры строк подключения
0
neur0tr0n
0 / 0 / 0
Регистрация: 08.09.2009
Сообщений: 5
08.09.2009, 14:48  [ТС] 5
Цитата Сообщение от oxotnik Посмотреть сообщение
чо, прям реально так:

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

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

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

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

Цитата Сообщение от oxotnik Посмотреть сообщение
ЗЫ: к стати и в длл тоже самое надо делать
Спасибо. Учту на будущее.
0
08.09.2009, 17:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2009, 17:14

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru