Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 FoxPro ,SQL Server и sqlconnect()  [new]
AngelOKES
Member

Откуда: Россия г.Оренбург
Сообщений: 349
Подскажите как в Visual FoxPro отловить ошибку при соединение к серверу SQL Server через ODBC и как во время коннекта выдать сообщение типа "подождите идет присоединение к серверу".
24 сен 03, 10:45    [350445]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
cbani1
Member

Откуда:
Сообщений: 58
dimension laError(1)
wait window 'Подождите идет подключение к серверу' nowait noclear
lnConnect=sqlconnect(...)
if lnConnect<0 &&Подключение не удалось
AERROR(laError)
? laError(1)
? laError(2)
? laError(3)
? laError(4)
? laError(5)
? laError(6)
? laError(7)
endif

HELP AERROR

The following table describes the contents of each element when an ODBC error numbered 1526 occurs. When an ODBC error occurs, the array contains two or more rows; one row for each ODBC error.

Element number Description
1 Numeric. Contains 1526.
2 Character. The text of the error message.
3 Character. The text of the ODBC error message.
4 Character. The current ODBC SQL state.
5 Numeric. The error number from the ODBC data source.
6 Numeric. The ODBC connection handle.
7 The null value.
24 сен 03, 10:51    [350461]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
AngelOKES
Member

Откуда: Россия г.Оренбург
Сообщений: 349
Когда делаешь
lnConnect=sqlconnect(имя_соннекта ODBC)

на этой строчке выходит сообщение об ошибке, а если делать так

if lnConnect<0 &&Подключение не удалось
messagebox('Есть коннект',32,'Оповещение')
else
messagebox('Нет коннекта',32,'Оповещение')
endif

то это не успевает срабатывать, а срабатывает ошибка ODBC при попытке присоединиться.
24 сен 03, 11:17    [350496]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
Crip
Member

Откуда:
Сообщений: 2490
У меня это сделано где-то вот так

DEFINE CLASS DataConn AS AbstractClass 

SERVER = ''
SQLDataBase = ''
CONNECTHANDLE = NULL
DBUser = ''
DBPassword = ''
HostName = ""
*****************************
PROCEDURE Init
SQLSETPROP(0,'DispWarnings',.F.)
SQLSETPROP(0,'ConnectTimeOut',15)
SQLSETPROP(0,'DispLogin',3)
SQLSETPROP(0,"
Asynchronous",.F.)
SQLSETPROP(0,"
BatchMode",.T.)
SQLSETPROP(0,"
PacketSize",2048)
ENDPROC
************************
FUNCTION SetConnection
LOCAL lcConnString
IF EMPTY('DBUser')
lcConnString = [DRIVER=SQL Server;SERVER=]+THIS.SERVER+;
[;DATABASE=]+THIS.SQLDataBase+;
[;LANGUAGE=Русский;Trusted_Connection=Yes;Network=DBMSSOCN]
ELSE
lcConnString = [DRIVER=SQL Server;SERVER=]+THIS.SERVER+;
[;UID=]+THIS.DBUser+;
[;PWD=]+THIS.DBPassword+;
[;DATABASE=]+THIS.SQLDataBase+;
[;LANGUAGE=Русский;Network=DBMSSOCN]
ENDIF
THIS.CONNECTHANDLE = SQLSTRINGCONNECT(lcConnString)
IF THIS.CONNECTHANDLE = - 1
MESSAGEBOX("
Невозможно установить соединение")
ENDIF

THIS.DBUser = ''
THIS.DBPassword = ''

ENDFUNC
*******************************
FUNCTION DESTROY
IF TYPE("
THIS.CONNECTHANDLE") == [N] ;
.AND. THIS.CONNECTHANDLE >= 0
SQLDISCONNECT(THIS.CONNECTHANDLE)
this.ConnectHandle = 0
ENDIF
ENDFUNC
ENDDEFINE
24 сен 03, 11:26    [350511]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
AngelOKES
Member

Откуда: Россия г.Оренбург
Сообщений: 349
Спасибо Crip, я правда не до конца понял, но все же есть о чем подумать.

Я выдрал процедуру коннекта, прописал все значения, но коннект все равно = -1, но все-равно спасибо.
24 сен 03, 12:07    [350577]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
Crip
Member

Откуда:
Сообщений: 2490
Что-то я вам не совсем то подсунул.
Должно быть
IF EMPTY(THIS.DBUser)
вместо IF EMPTY('DBUser') (всегда .F.)
Заодно гляньте чему равно
lcConnString
24 сен 03, 12:17    [350593]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
AngelOKES
Member

Откуда: Россия г.Оренбург
Сообщений: 349
SERVER = 'star'
SQLDataBase = 'abon'
DBUser = 'ORENBURG\angel'
DBPassword = 'ekmnhjabjktn'
HostName = ""

lcConnString="DRIVER=SQL Server;SERVER=star;UID=ORENBURG\angel;PWD=ekmnhjabjktn;DATABASE=abon;LANGUAGE=русский;Network=DBMSSOCN"
24 сен 03, 12:46    [350653]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
Crip
Member

Откуда:
Сообщений: 2490
ORENBURG\angel
Больше похоже на WinNT юзера...Попробуйте trusted connection
(DBUser = "")
Если и это не поможет , то можно убрать ";Network=DBMSSOCN" ( принудительная установка протокола TCP/IP)
24 сен 03, 13:04    [350702]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
AngelOKES
Member

Откуда: Россия г.Оренбург
Сообщений: 349
Ты прав пользователи домена 2000 винды и на серваке SQL у меня прописаны пользователи домена ORENBURG.

Но я нашел вот строка коннекта:

lcConnString = [DSN=Abon;APP=Microsoft® Visual FoxPro®;WSID=VFP;DATABASE=Abon;LANGUAGE=us_english;Network=DBNMPNTW;AutoTranslate=No;Trusted_Connection=Yes;Regional=Yes]

Здесь уже не надо прописывать пользователей, вся эта информация береться из "DSN=Abon" - это настроики ODBC.

Можно даже написать :

lcConnString = [DSN=Abon]

И в принципе работает, но

Можно прописать в строке коннекта не опираясь на созданный коннект в ODBC, а в строке самому создать этот коннект ODBC?
24 сен 03, 13:10    [350719]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
Crip
Member

Откуда:
Сообщений: 2490
Вообще-то твой случай решается так
oCon = create('DataConn')

oCon.Server = 'star'
oCon.DataBase = 'Abon'
oCon.SetConnection()
24 сен 03, 13:41    [350805]     Ответить | Цитировать Сообщить модератору
 Re: FoxPro ,SQL Server и sqlconnect()  [new]
AngelOKES
Member

Откуда: Россия г.Оренбург
Сообщений: 349
2:Crip

Я немного переделал твою функцию

FUNCTION SetConnection

SQLSETPROP(0,'DispWarnings',.F.)
SQLSETPROP(0,'ConnectTimeOut',30)
SQLSETPROP(0,'DispLogin',3)
SQLSETPROP(0,"Asynchronous",.F.)
SQLSETPROP(0,"BatchMode",.T.)
SQLSETPROP(0,"PacketSize",2048)

lcConnString = "Driver=SQL Server;Server=star;Database=abon;Trusted_Connection=Yes"
aaa = SQLSTRINGCONNECT(lcConnString)
IF aaa = - 1
MESSAGEBOX('Присоединение к серверу невозможно',32,'Оповещение')
ENDIF

ENDFUNC

Вроде все работает и ошибка перехватываеться этой функцией, вообщем спасибо за помощь.
24 сен 03, 13:45    [350817]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить