|
|
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
Привет алл. =SQLSETPROP(oApp.hServer, 'Asynchronous', .F.) if SQLEXEC(oApp.hServer,cCommand,'BUF')#-1 ... endif т.е ка я понимаю, при синхронном режиме мне должен вернуться либо курсор либо -1. По факту иногда получаю 0(т.е. процес еще идет !!) и моя прога выполняя после if .... благополучно валиться... как это избежать ? Я ил ничего не понимаю ил при синхронном режиме ( на то он и синхронный) что результат я получю или не получу совсем... откуда тогда 0 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 12:29 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
Проверить св-во соединения Код: plaintext должно быть = .t. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 12:35 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
?SQLGETPROP(oApp.hServer,"BatchMode") =.t. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:03 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
ну .т. и что ??? результат после 2х частых запусков проги 0 и ошибка.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:05 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
вот код : *-- Установление соединения с SQL- сервером LOCAL lTmp,lConnect,lcCommand * lDatabase, lPass, lnSet, lcDSNLess WITH THIS *-- Читаем параметры соединения в INI - файле конфигурации *-- Имя SQL-Сервера m.lTmp = ReadFromINIFile("ServerName", "Connection", "CONFIG.INI") IF EMPTY(m.lTmp) *-- Нет секции в INI-файле .ErrMessage("Отсутствует запись ServerName в разделе Connection файла конфигурации: " + "CONFIG.INI", "ОШИБКА!!!") RETURN .F. ENDIF .SQLServer = m.lTmp *-- Имя Базы данных m.lTmp = ReadFromINIFile("DataBase", "Connection", "CONFIG.INI") IF EMPTY(m.lTmp) *-- Нет секции в INI-файле .ErrMessage("Отсутствует запись DataBase в разделе Connection файла конфигурации: " + "CONFIG.INI", "ОШИБКА!!!") RETURN .F. ENDIF .SQLDatabase = m.lTmp *-- Порог срабатывания ProgressBar при чтения данных с сервера m.lTmp = INT(VAL(ReadFromINIFile("ShowDelay", "Options", "CONFIG.INI"))) .TimeLevel = IIF(EMPTY(m.lTmp), 1, m.lTmp/1000) *-- Параметр LowSpeedConnection m.lTmp = INT(VAL(ReadFromINIFile("LowSpeedConnection", "Connection", "CONFIG.INI"))) .LowSpeedConnection = IIF(EMPTY(m.lTmp), 1, m.lTmp) *-- Установление соедининие с SQL Сервером от имени SQL_LOGIN m.lTmp="Driver=SQL Server;SERVER=" + ALLTRIM(.SQLServer) + ";" ; + "UID=" + ALLTRIM(.SQL_Login) + ";PWD=" + ALLTRIM(.SQL_LoginPassw)+ ";DATABASE=Master;APP=" ; + .cMainWindCaption m.lConnect = SQLSTRINGCONNECT(m.lTmp) IF m.lConnect <= 0 RETURN .F. ENDIF .hServer = m.lConnect *-- Проверяем наличие базы данных на сервер m.lcCommand = [select * FROM INFORMATION_SCHEMA.SCHEMATA WHERE CATALOG_NAME = '] + ; ALLTRIM(.SQLDatabase) + ['] IF SQLEXEC(.hServer, m.lcCommand, "temp") < 0 RETURN .F. ENDIF IF EOF("temp") .ErrMessage("База данных " + .SQLDatabase + " на сервере " + ; .SQLServer + " не найдена!") RETURN .F. ENDIF USE IN temp *-- Устанавливаем параметры активного соедининия IF SQLSETPROP(.hServer, 'Asynchronous', .F.) < 0 && Синхронный режим RETURN .F. ENDIF *-- Инициализация параметров сессии IF SQLEXEC(.hServer, "SET NOCOUNT ON") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET IMPLICIT_TRANSACTIONS OFF") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET DATEFORMAT dmy") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET DATEFIRST 1") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET LOCK_TIMEOUT 18000") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET TRANSACTION ISOLATION LEVEL READ COMMITTED") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET QUOTED_IDENTIFIER ON") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET ANSI_NULLS ON") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET ARITHABORT OFF") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET ANSI_WARNINGS OFF") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET ANSI_PADDING ON") < 0 RETURN .F. ENDIF IF SQLEXEC(.hServer, "SET XACT_ABORT ON") < 0 RETURN .F. ENDIF *-- Переход на нужную базу данных m.lcCommand = "USE " + .SQLDatabase IF SQLEXEC(.hServer, m.lcCommand) < 0 RETURN .F. ENDIF *-- Читаем с сервера его полное имя IF SQLEXEC(.hServer, "SELECT SERVERPROPERTY ('ServerName') AS ServerName", "temp") < 0 RETURN .F. ENDIF .sql_fullname = ALLTRIM(temp.ServerName) USE IN temp RETURN .T. ENDWITH ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:06 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
получаю oApp.hServer с ним и работаю.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:08 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
Какая версия VFP ? С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:13 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
Можно взглянуть на вызов какой-нибудь команды через SQLEXEC ? С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:17 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
.... IF SQLSETPROP(oApp.hServer, 'Asynchronous', .F.) < 0 && Синхронный режим RETURN .F. ENDIF IF M.lnKey#-1 AND ThisForm.fYesGrup=.T. && Есть группы cCommand='SELECT nParent FROM '+ALLTRIM(THIS.Namebd)+' WHERE nKEY='+ALLTRIM(STR(M.lnKey)) M.KK=SQLEXEC(oApp.hServer,cCommand,'BUF') IF M.KK<0 ThisForm.SQLnParent='0' ELSE SELECT BUF ThisForm.SQLnParent=ALLTRIM(STR(BUF.nParent)) USE IN SELECT('BUF') ENDIF ENDIF .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:18 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
я в сети можно на мыло или icq 135-827-911 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:26 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
Arkady03 M.KK=SQLEXEC(oApp.hServer,cCommand,'BUF') IF M.KK<0 ThisForm.SQLnParent='0' ELSE SELECT BUF ThisForm.SQLnParent=ALLTRIM(STR(BUF.nParent)) USE IN SELECT('BUF') ENDIF .... Я думаю, что лучше так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:27 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
1 это понятно но откуда берется 0 вот вопрос... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:28 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
ладно фиг с этим нулем.. Вопрос как отловить завершение процесса при синхронном режиме т.е . if SQLEXEC(oApp.hServer,cCommand,'BUF')=0 что делать (команды) для получения 1 или -1 endif ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:31 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
Если команда SQLEXEC выполняется в синхронном режиме, то ваш код на VFP не получит управление пока команда SQLEXEC не закончит выполняться. А далее анализируйте флаг возврата команды SQLEXEC, который показывает, сколько курсоров вернул ваш пакет. Если команда выполнилась успешно, и вернула 1 или меньше курсоров, то вернется 1. А 0 вообще не должне возвращаться в синхронном режиме (и не важно какой режим установлен Batch или No Batch). С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:55 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
это я и сам знаю что недолжно буть 0 но факт есть факт цитирую еще раз =SQLSETPROP(oApp.hServer, 'Asynchronous', .F.) ? SQLEXEC(oApp.hServer,cCommand,'BUF') 4 частых запуска и на 3-тем результат 0, остальные 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 13:58 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
точнее так : =SQLSETPROP(oApp.hServer, 'Asynchronous', .F.) ? SQLEXEC(oApp.hServer,cCommand,'BUF') 1 ? SQLEXEC(oApp.hServer,cCommand,'BUF') 1 ? SQLEXEC(oApp.hServer,cCommand,'BUF') 0 ? SQLEXEC(oApp.hServer,cCommand,'BUF') 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 14:00 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
Алексей , прости за повтор в твоей гостевой книге (Arkady rosshome@khakasnet.ru ), каюс.. случайно ... ответ можно сюда.. ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 14:04 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
1. Так может меня авторизуешь по ICQ :) 2. У меня были когда-то такие проблемы с VFP 8.0, но без SP и только в ассинхронном режиме. Приходилось даже не только отлавливать флаг <> 0, но еще и использовать что-то типа USED('BUF') С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 14:11 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
Надо думать, что переключение =SQLSETPROP(oApp.hServer, 'Asynchronous', .F.) сделано не случайно? Поскольку это настройка по умолчанию, значит, где-то ДО этой команды ты переключился в асинхронный режим? Так может, та "асинхронная" команда просто еще не закончила выполнение? Попробуй так: Код: plaintext 1. 2. 3. 4. 5. Т.е. простого переключения в синхронный режим - недостаточно. Надо дождаться завершения всех асинхронных процессов и только после этого рапортовать о том, что переключение в синхронный режим прошло успешно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 14:28 |
|
||
|
SQLEXEC
|
|||
|---|---|---|---|
|
#18+
команда =SQLSETPROP(oApp.hServer, 'Asynchronous', .F.) сделана при инициализации и нигде я ее не меняю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2006, 14:34 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33795888&tid=1591395]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 390ms |

| 0 / 0 |
