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

Откуда:
Сообщений: 7881
В VFP раньше работал с MSQLServer через REMOTE VIEWS (RV). Все вроде устраивает, но хочется через ручки все прощупать и составил такой код:
CLEAR
LOCAL gnCon1
gnCon1 = SQLCONNECT('Con1')
?'Номер соединения ='
??gnCon1

IF gnCon1 < 0
  = MESSAGEBOX('Не могу установить соединение', 16, 'Ошибка SQL Connect')
ELSE
  LOCAL m.id_prov, m.c_sql, m.v_sel

  m.id_prov = 4
  m.c_sql = 'INSERT INTO [order_uchet].[dbo].[Provod]([id_prov], [c_prim]) '+;
            'VALUES ('+;
            ALLTRIM(STR(m.id_prov,25))+;
            ',"Попытка записаться")'
  ?m.c_sql

  m.v_sel = SQLEXEC(gnCon1, (c_sql))
  ?m.v_sel

  IF m.v_sel = 1	&& Все ушло нормально
    WAIT 'Все ушло нормально!!!'
  ELSE
    WAIT 'НЕНОРМАЛЬНО!!!'
  ENDIF

  = SQLDISCONNECT(gnCon1)
ENDIF
И выдает m.v_sel = -1 ??? НЕНОРМАЛЬНО!!!
Работая через SQL Query Analyzer идет все нормально!!!
Может кто прописывал ручками, посоветуйте, или где ошибка.
16 мар 05, 09:08    [1388824]     Ответить | Цитировать Сообщить модератору
 Re: (MSQLServer) VFP80 (через SQLEXEC( ) Function)  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
А так m.v_sel = SQLEXEC(gnCon1, m.c_sql)
16 мар 05, 09:11    [1388841]     Ответить | Цитировать Сообщить модератору
 Re: (MSQLServer) VFP80 (через SQLEXEC( ) Function)  [new]
Владимир СА
Member

Откуда:
Сообщений: 7881
AleksMed
А так m.v_sel = SQLEXEC(gnCon1, m.c_sql)

То же самое...
16 мар 05, 09:14    [1388850]     Ответить | Цитировать Сообщить модератору
 Re: (MSQLServer) VFP80 (через SQLEXEC( ) Function)  [new]
Диченка
Member

Откуда: ИТ-Олимп, 58.1-летний супермен
Сообщений: 3989
CLEAR
LOCAL gnCon1
gnCon1 = SQLCONNECT('Con1')
?'Номер соединения ='
??gnCon1

IF gnCon1 < 0
  = MESSAGEBOX('Не могу установить соединение', 16, 'Ошибка SQL Connect')
ELSE

  PRIVATE id_prov, c_sql, v_sel

  id_prov = ALLTRIM(STR(4,25))
  c_sql = "INSERT INTO order_uchet.dboProvod (id_prov, c_prim) "+;
            "VALUES (?id_prov,'Попытка записаться')"
  ?c_sql

  v_sel = SQLEXEC(gnCon1, c_sql)
  ?v_sel

  IF v_sel = 1	&& Все ушло нормально
    WAIT 'Все ушло нормально!!!'
  ELSE
    WAIT 'НЕНОРМАЛЬНО!!!'
  ENDIF

  = SQLDISCONNECT(gnCon1)
ENDIF
16 мар 05, 09:18    [1388861]     Ответить | Цитировать Сообщить модератору
 Re: (MSQLServer) VFP80 (через SQLEXEC( ) Function)  [new]
Диченка
Member

Откуда: ИТ-Олимп, 58.1-летний супермен
Сообщений: 3989
я после dbo точку пропустил
16 мар 05, 09:21    [1388868]     Ответить | Цитировать Сообщить модератору
 Re: (MSQLServer) VFP80 (через SQLEXEC( ) Function)  [new]
Владимир СА
Member

Откуда:
Сообщений: 7881
Диченко
я после dbo точку пропустил


m.c_sql = 'INSERT INTO [order_uchet].[dbo].[Provod]([id_prov], [c_prim]) '+;
'VALUES ('+;
ALLTRIM(STR(m.id_prov,25))+;
',"Попытка записаться")'

Точка точно была. Просто может после копирования из VFP в IE, что то плохо скопировалось.
16 мар 05, 09:26    [1388884]     Ответить | Цитировать Сообщить модератору
 Re: (MSQLServer) VFP80 (через SQLEXEC( ) Function)  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Вобщем-то, Диченко уже исправил все твои ошибки. Поясню, в чем они состояли:

1) MS SQL по умолчанию не понимает двойных кавычек. Надо либо делать специальные настройки, либо писать символьные константы в одинарных кавычках.

2) Чтобы не мучаться с конвертацией данных в символьный тип, лучше использовать параметры. Символ вопросительного знака указывает, что следом за ним идет параметр - переменная памяти FoxPro из которой и надо считать значение.

3) На сервер передается символьная строка, а не ее содержимое. Т.е. использовать макроподстановку в SQLExec() не надо.

Кроме того, для уточнения причины ошибки, следует использовать функцию AERROR(). Примерно так:

IF SQLExec()<0
	LOCAL laError(1)
	=AERROR(laError)
	* Анализ содержимого массива laError для выяснения причины ошибки
ENDIF
16 мар 05, 09:27    [1388888]     Ответить | Цитировать Сообщить модератору
 Re: (MSQLServer) VFP80 (через SQLEXEC( ) Function)  [new]
Владимир СА
Member

Откуда:
Сообщений: 7881
Точно, все дело в двойных кавычках. Всем спасибо. За подробное объяснение ВладимируМ особое.
16 мар 05, 09:34    [1388914]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить