powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLEXEC
22 сообщений из 22, страница 1 из 1
SQLEXEC
    #33795242
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет алл.
=SQLSETPROP(oApp.hServer, 'Asynchronous', .F.)
if SQLEXEC(oApp.hServer,cCommand,'BUF')#-1
...
endif
т.е ка я понимаю, при синхронном режиме мне должен вернуться либо курсор либо -1. По факту иногда получаю 0(т.е. процес еще идет !!) и моя прога выполняя после if .... благополучно валиться...
как это избежать ? Я ил ничего не понимаю ил при синхронном режиме ( на то он и синхронный) что результат я получю или не получу совсем... откуда тогда 0 ?
...
Рейтинг: 0 / 0
SQLEXEC
    #33795267
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверить св-во соединения

Код: plaintext
SQLGETPROP(nConnectionHandle,BatchMode)

должно быть = .t.
...
Рейтинг: 0 / 0
SQLEXEC
    #33795405
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
?SQLGETPROP(oApp.hServer,"BatchMode")
=.t.
...
Рейтинг: 0 / 0
SQLEXEC
    #33795411
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну .т. и что ??? результат после 2х частых запусков проги 0 и ошибка..
...
Рейтинг: 0 / 0
SQLEXEC
    #33795419
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот код :
*-- Установление соединения с 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
...
Рейтинг: 0 / 0
SQLEXEC
    #33795426
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
получаю oApp.hServer с ним и работаю....
...
Рейтинг: 0 / 0
SQLEXEC
    #33795440
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия VFP ?
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC
    #33795445
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VFP 8,0
...
Рейтинг: 0 / 0
SQLEXEC
    #33795462
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно взглянуть на вызов какой-нибудь команды через SQLEXEC ?

С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC
    #33795468
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
....
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
....
...
Рейтинг: 0 / 0
SQLEXEC
    #33795503
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я в сети можно на мыло или icq 135-827-911
...
Рейтинг: 0 / 0
SQLEXEC
    #33795510
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
M.KK=SQLEXEC(oApp.hServer,cCommand,'BUF')
IF M.KK =  1 
	SELECT BUF
	ThisForm.SQLnParent=ALLTRIM(STR(BUF.nParent))
	USE IN SELECT('BUF')
ELSE
             =AERROR(lErr)
	ThisForm.SQLnParent='0'
           *-- Обработка содержимого массива  lErr
ENDIF
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC
    #33795516
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1 это понятно но откуда берется 0 вот вопрос...
...
Рейтинг: 0 / 0
SQLEXEC
    #33795534
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ладно фиг с этим нулем.. Вопрос как отловить завершение процесса при синхронном режиме т.е .
if SQLEXEC(oApp.hServer,cCommand,'BUF')=0
что делать (команды) для получения 1 или -1
endif
...
Рейтинг: 0 / 0
SQLEXEC
    #33795630
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если команда SQLEXEC выполняется в синхронном режиме, то ваш код на VFP не получит управление пока команда SQLEXEC не закончит выполняться.
А далее анализируйте флаг возврата команды SQLEXEC, который показывает, сколько курсоров вернул ваш пакет. Если команда выполнилась успешно, и вернула 1 или меньше курсоров, то вернется 1.
А 0 вообще не должне возвращаться в синхронном режиме (и не важно какой режим установлен Batch или No Batch).
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC
    #33795639
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это я и сам знаю что недолжно буть 0 но факт есть факт
цитирую еще раз
=SQLSETPROP(oApp.hServer, 'Asynchronous', .F.)
? SQLEXEC(oApp.hServer,cCommand,'BUF')

4 частых запуска и на 3-тем результат 0, остальные 1
...
Рейтинг: 0 / 0
SQLEXEC
    #33795650
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее так :
=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
...
Рейтинг: 0 / 0
SQLEXEC
    #33795663
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей , прости за повтор в твоей гостевой книге (Arkady rosshome@khakasnet.ru ), каюс.. случайно ...
ответ можно сюда.. (
...
Рейтинг: 0 / 0
SQLEXEC
    #33795691
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Так может меня авторизуешь по ICQ :)
2. У меня были когда-то такие проблемы с VFP 8.0, но без SP и только в ассинхронном режиме. Приходилось даже не только отлавливать флаг <> 0, но еще и использовать что-то типа USED('BUF')

С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC
    #33795756
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо думать, что переключение

=SQLSETPROP(oApp.hServer, 'Asynchronous', .F.)

сделано не случайно? Поскольку это настройка по умолчанию, значит, где-то ДО этой команды ты переключился в асинхронный режим? Так может, та "асинхронная" команда просто еще не закончила выполнение?

Попробуй так:

Код: plaintext
1.
2.
3.
4.
5.
=SQLSETPROP(oApp.hServer, 'Asynchronous', .F.) 
* Бесконечный цикл с пустой командой, пока не завершится выполнение 
* ранее запущенного асинхронного процесса
DO WHILE SQLExec(oApp.hServer,'')= 0 
ENDDO

Т.е. простого переключения в синхронный режим - недостаточно. Надо дождаться завершения всех асинхронных процессов и только после этого рапортовать о том, что переключение в синхронный режим прошло успешно.
...
Рейтинг: 0 / 0
SQLEXEC
    #33795777
Arkady03
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
команда =SQLSETPROP(oApp.hServer, 'Asynchronous', .F.)
сделана при инициализации и нигде я ее не меняю
...
Рейтинг: 0 / 0
SQLEXEC
    #33795888
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С учетом того, что все крутится на одном компе, может поиграй с SQLSETPROP(oApp.hServer, "WaitTime" , nmS).
По умолчанию 100. Может надо больше.

С уважением, Алексей
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLEXEC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]