Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (MSQLServer) VFP80 (через SQLEXEC( ) Function) / 8 сообщений из 8, страница 1 из 1
16.03.2005, 09:08
    #32962202
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
В VFP раньше работал с MSQLServer через REMOTE VIEWS (RV). Все вроде устраивает, но хочется через ручки все прощупать и составил такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
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 идет все нормально!!!
Может кто прописывал ручками, посоветуйте, или где ошибка.
...
Рейтинг: 0 / 0
16.03.2005, 09:11
    #32962211
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
А так m.v_sel = SQLEXEC(gnCon1, m.c_sql)
...
Рейтинг: 0 / 0
16.03.2005, 09:14
    #32962216
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
AleksMedА так m.v_sel = SQLEXEC(gnCon1, m.c_sql)
То же самое...
...
Рейтинг: 0 / 0
16.03.2005, 09:18
    #32962223
Диченка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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
...
Рейтинг: 0 / 0
16.03.2005, 09:21
    #32962230
Диченка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
я после dbo точку пропустил
...
Рейтинг: 0 / 0
16.03.2005, 09:26
    #32962241
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
Диченкоя после dbo точку пропустил

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

Точка точно была. Просто может после копирования из VFP в IE, что то плохо скопировалось.
...
Рейтинг: 0 / 0
16.03.2005, 09:27
    #32962245
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
Вобщем-то, Диченко уже исправил все твои ошибки. Поясню, в чем они состояли:

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

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

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

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

Код: plaintext
1.
2.
3.
4.
IF SQLExec()< 0 
	LOCAL laError( 1 )
	=AERROR(laError)
	* Анализ содержимого массива laError для выяснения причины ошибки
ENDIF
...
Рейтинг: 0 / 0
16.03.2005, 09:34
    #32962261
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
Точно, все дело в двойных кавычках. Всем спасибо. За подробное объяснение ВладимируМ особое.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (MSQLServer) VFP80 (через SQLEXEC( ) Function) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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