Привет всем, кто нашел возможным это прочитать ...
Неожиданно для себя столкнулся с проблемой, там где ее не ждал.
Среда C62 ABC Win2000 MSSQL2000 (если это имеет значение).
Есть простая программка состоящая из Frame в котором запускается MDI процедура (Source) по таймеру с очень простой задачей:
- получить доступ к БД MS SQL;
- выполнить хранимую процедуру (которая добавляет запись в БД);
- полностью отключиться от БД;
Я написал что-то вроде:
Glo:MSSQL = "Server,Base,User,Password"
MSQLFile{Prop:LogonScreen} = False
Open(MSQLFile)
If ~ErrorCode()
MSQLFile{Prop:SQL} = 'CALL ....'
Close(MSQLFile)
MSQLFile{Prop:Disconnect}
end
Вот. Код интеллектом не блещет - но вроде все правильно.
И работает. Но в какой-то момент после нескольких вызовов
этот код не отключается от БД MS SQL и соответственно наотрез
отказывается к ней подключаться. После перезапуска программы
все опять некоторое время работает - потом проблема повторяется ...
У меня есть такое нехорошее ощущение, что я как-то вообще не правильно получаю доступ к БД MS SQL. Справку читал и пробовал разные варианты. Результат один и тот же, на разных компьютерах, серверах и сетях.
Вопрос: подскажите пожалуйста, кто имеет опыт работы из Clarion с MS SQL - как правильно выполнить эту элементарную операцию (код, последовательность операций подключения и отключения от БД) ?
Заранее огромное спасибо ...
MS SQL и граблы ...
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7390
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
Re: MS SQL и граблы ...
два варианта:Игорь Столяров писал(а):Привет всем, кто нашел возможным это прочитать ...
Неожиданно для себя столкнулся с проблемой, там где ее не ждал.
Среда C62 ABC Win2000 MSSQL2000 (если это имеет значение).
Есть простая программка состоящая из Frame в котором запускается MDI процедура (Source) по таймеру с очень простой задачей:
- получить доступ к БД MS SQL;
- выполнить хранимую процедуру (которая добавляет запись в БД);
- полностью отключиться от БД;
Я написал что-то вроде:
Glo:MSSQL = "Server,Base,User,Password"
MSQLFile{Prop:LogonScreen} = False
Open(MSQLFile)
If ~ErrorCode()
MSQLFile{Prop:SQL} = 'CALL ....'
Close(MSQLFile)
MSQLFile{Prop:Disconnect}
end
Вот. Код интеллектом не блещет - но вроде все правильно.
И работает. Но в какой-то момент после нескольких вызовов
этот код не отключается от БД MS SQL и соответственно наотрез
отказывается к ней подключаться. После перезапуска программы
все опять некоторое время работает - потом проблема повторяется ...
У меня есть такое нехорошее ощущение, что я как-то вообще не правильно получаю доступ к БД MS SQL. Справку читал и пробовал разные варианты. Результат один и тот же, на разных компьютерах, серверах и сетях.
Вопрос: подскажите пожалуйста, кто имеет опыт работы из Clarion с MS SQL - как правильно выполнить эту элементарную операцию (код, последовательность операций подключения и отключения от БД) ?
Заранее огромное спасибо ...
Код: Выделить всё
до CLOSE FILE получить HDBC
HDBC = FILE{PROP:HDBC}
после CLOSE FILE явно закрыть соединение
SQLFreeHandle(SQL_HANDLE_DBC,HDBC)
Код: Выделить всё
FILE_DESTROY надо сделать после CLOSE(FILE)
функция не продекларирована в BUILTINS.CLW, но она есть, в ClaListe её обсуждали, примерно так:
FILE_DESTROY(FILE),NAME('CLa$FILE_DESTROY')
- Игорь Столяров
- Ветеран движения
- Сообщения: 7390
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 15 раз
- Поблагодарили: 49 раз
За помощь спасибо - не помогло, т.к. причина оказалась совсем в другом. Код программы делает простую вещь в цикле - запрос к MS SQL и сброс данных на E-mail. С MS SQL работал через штатный драйвер, для отправки e-mail через SMTP использовал пример Дмитрия Осипова из архива ClarionLife.NET. Т.е. что-то вроде:
Loop
MSBase{Prop:SQL} = 'CALL ...'
....
- обработка данных из запроса, криптозащита и т.д.
....
Error# = Email_QuickSend( .....
end
первый цикл проходит нормально, на втором обращение к MS SQL глухо блокируется без выдачи ошибок. Повторные переоткрытия БД и переподключения к БД (что я пытался сделать) - эффекта не дают. Только перезапуск всего приложения. После замены отправки почты на SMTP Catalyst Library - все стало работать прекрасно. Похоже какой-то конфликт с сокетами у ODBC драйвера MS SQL и функции отправки почты Email_QuickSend(). Может кому пригодиться мой печальный опыт. ;(
Loop
MSBase{Prop:SQL} = 'CALL ...'
....
- обработка данных из запроса, криптозащита и т.д.
....
Error# = Email_QuickSend( .....
end
первый цикл проходит нормально, на втором обращение к MS SQL глухо блокируется без выдачи ошибок. Повторные переоткрытия БД и переподключения к БД (что я пытался сделать) - эффекта не дают. Только перезапуск всего приложения. После замены отправки почты на SMTP Catalyst Library - все стало работать прекрасно. Похоже какой-то конфликт с сокетами у ODBC драйвера MS SQL и функции отправки почты Email_QuickSend(). Может кому пригодиться мой печальный опыт. ;(