powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (MSQLServer) VFP80 (через SQLEXEC( ) Function)
8 сообщений из 8, страница 1 из 1
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
    #32962202
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 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
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
    #32962211
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так m.v_sel = SQLEXEC(gnCon1, m.c_sql)
...
Рейтинг: 0 / 0
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
    #32962216
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMedА так m.v_sel = SQLEXEC(gnCon1, m.c_sql)
То же самое...
...
Рейтинг: 0 / 0
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
    #32962223
Фотография Диченка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
    #32962230
Фотография Диченка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я после dbo точку пропустил
...
Рейтинг: 0 / 0
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
    #32962241
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диченкоя после 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
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
    #32962245
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем-то, Диченко уже исправил все твои ошибки. Поясню, в чем они состояли:

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
(MSQLServer) VFP80 (через SQLEXEC( ) Function)
    #32962261
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно, все дело в двойных кавычках. Всем спасибо. За подробное объяснение ВладимируМ особое.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (MSQLServer) VFP80 (через SQLEXEC( ) Function)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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