powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLEXEC() и WHERE?
19 сообщений из 19, страница 1 из 1
SQLEXEC() и WHERE?
    #33601725
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
люди подскажите пожалуста!
Столкнулся с проблемой:
в SQLEXEC() написал запрос
select main.number_out,ankd.ankfam,sprspec.dolg_rec
from main,ankd,sprspec
where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec
and main.out_r='01'

результат нулевой(курсор не создается),
но стоит убрать второй end (третье условие выборки)

select main.number_out,ankd.ankfam,sprspec.dolg_rec
from main,ankd,sprspec
where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec

то результат появляется и соответственно курсор создается

может в фоксе есть какие-то ограничения, так как до этого столкнулся проблемой длинного запроса в SQLEXEC и пришлось разбивать на строки.
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33601770
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denrazлюди подскажите пожалуста!
Столкнулся с проблемой:
в SQLEXEC() написал запрос
select main.number_out,ankd.ankfam,sprspec.dolg_rec
from main,ankd,sprspec
where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec
and main.out_r='01'

результат нулевой(курсор не создается),
но стоит убрать второй end (третье условие выборки)

select main.number_out,ankd.ankfam,sprspec.dolg_rec
from main,ankd,sprspec
where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec

то результат появляется и соответственно курсор создается

может в фоксе есть какие-то ограничения, так как до этого столкнулся проблемой длинного запроса в SQLEXEC и пришлось разбивать на строки.
Во второй запрос втолкни main.out_r :
select main.out_r,main.number_out,ankd.ankfam,sprspec.dolg_rec
from main,ankd,sprspec
where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec
и посмотри, есть ли записи с main.out_r='01' ???
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602082
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СА
Во второй запрос втолкни main.out_r :
select main.out_r,main.number_out,ankd.ankfam,sprspec.dolg_rec
from main,ankd,sprspec
where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec
и посмотри, есть ли записи с main.out_r='01' ???

Они там точно есть, да если бы их и не было то курсор все равно бы создался(правда пустой), а так он вообще не создается.
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602147
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведите полный текст команды формирование и исполнения команды SQLEXEC. И еще, что за сервер и какая версия VFP?
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602254
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FoxPro 8.0 MSSQL server 2000


out_r1="01"
STORE SQLSTRINGCONNECT('DRIVER=sql server;SERVER=10.22.0.122;UID=den;PWD=1;APP=Microsoft Visual FoxPro;WSID=MD;DATABASE=uchet');
TO gnConnHandle
= SQLSETPROP(gnConnHandle, 'asynchronous', .F.)
= SQLEXEC(gnConnHandle,"select main.number_out,ankd.ankfam,sprspec.dolg_rec from main,ankd,sprspec where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec and main.out_r='"+out_r1+"'", 'uchet_1')
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602378
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо
= SQLEXEC(...) напишите retflag = SQLEXEC(...)
и гляньте ?retflag
Может ошибка в запросе и курсор sqlresult не создается ?
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602432
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
результат = -1
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602489
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри ошибку:
Код: plaintext
1.
2.
3.
if sqlexec(...) = - 1 
   AERROR(a)
   MessageBox(a[ 2 ])
endif

А лучше сначала отладить запрос в Query analyser а потом в фоксе его пользовать.
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602493
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так что вы хотите!?
Это флаг ошибки!!
Тогда если -1
AERROR(lErr)
? m.lErr[5]
? m.lErr[2]

denrazрезультат = -1
С уважением, Алексей.
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602594
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-KНу так что вы хотите!?
Это флаг ошибки!!
Тогда если -1
AERROR(lErr)
? m.lErr[5]
? m.lErr[2]

denrazрезультат = -1
С уважением, Алексей.

? m.lErr[5] выдает 170
? m.lErr[2]
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602721
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паранормальные явления какие-то. В VFP 6 сталкивался с ограничением длины запроса - около 4000 символов.

А такой запрос выполняется? :

select * from main where main.out_r='01'
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602753
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TПаранормальные явления какие-то. В VFP 6 сталкивался с ограничением длины запроса - около 4000 символов.

А такой запрос выполняется? :

select * from main where main.out_r='01'

выполняется.
Все выполняется пока 2 AND(3 условие) не поставишь.
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602777
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй для проверки
...main.out_r='"+out_r1+"'"
замени на
...main.out_r='01'"
может в out_r1 что-нибудь не то.

Попробуй такой запрос:
Код: plaintext
1.
2.
3.
4.
select main.number_out,ankd.ankfam,sprspec.dolg_rec
   from main
      inner join ankd on main.n_insr=ankd.n_insr
      inner join sprspec on main.spec_out=sprspec.kodspec
   where main.out_r='01'
Это тоже самое что и у тебя
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33602899
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
С "out_r1" все нормально, с самого начала на нее грешил, но проверка показала что все с не хорошо.
Dima TПопробуй для проверки
Попробуй такой запрос:
Код: plaintext
1.
2.
3.
4.
select main.number_out,ankd.ankfam,sprspec.dolg_rec
   from main
      inner join ankd on main.n_insr=ankd.n_insr
      inner join sprspec on main.spec_out=sprspec.kodspec
   where main.out_r='01'
Это тоже самое что и у тебя
а твое решение работает огромное спасибо, как сам не догадался так интерпретировать не знаю.
всем спасибо!!!
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33603366
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С точки зрения MЫ SQL Server оба запроса совершенно идеинтичны и план запроса он строит один и тот же на оба варианта (связывание таблиц через WHERE или через JOIN).
Скорее всего ошибка в этой фразе:
Код: plaintext
1.
2.
...
and main.out_r='"+out_r1+"',...
..
out_r1 - это строковая переменная и, следовательно в тексте запроса она должна присутствовать, как строковая константа, т.е. обрамлена апострфами (').
Код: plaintext
1.
2.
3.
SQLEXEC(gnConnHandle,[select main.number_out,ankd.ankfam,sprspec.dolg_rec from main,ankd,sprspec 
where main.n_insr=ankd.n_insr 
and main.spec_out=sprspec.kodspec 
and main.out_r=']  + ALLTRIM(out_r1) +['], 'uchet_1')
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33604832
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K
даже когда вместо '"+out_r1+"'я ставлю обычную строку, ошибка все равно появляется.
Методом исключений пришел к выводу что это связано со вторым and'ом(3 условием) к примеру:
1 пример запроса (результат правильный)
Код: plaintext
1.
2.
select main.number_out,ankd.ankfam,sprspec.dolg_rec 
from main,ankd,sprspec 
where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec
2 пример запроса (результат правильный даже если заменить '01' на '"+out_r1+"' )
Код: plaintext
1.
2.
select main.number_out,ankd.ankfam,sprspec.dolg_rec 
from main,ankd,sprspec 
where main.n_insr=ankd.n_insr and main.out_r='01'

но стоит добавить к одному из примеров 2 and(3 условие) то запрос не выполняется:
Код: plaintext
1.
2.
3.
select main.number_out,ankd.ankfam,sprspec.dolg_rec 
from main,ankd,sprspec 
where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec 
and main.out_r='01'

, на самом сервере все работает.
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33604871
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит обычную строку?

У вас такая команда выполняется?
Код: plaintext
1.
2.
out_r1="01"
lcCommand =  [select main.number_out,ankd.ankfam,sprspec.dolg_rec from main,ankd,sprspec where main.n_insr=ankd.n_insr and main.spec_out=sprspec.kodspec and main.out_r=']  + ALLTRIM(out_r1) +[']
SQLEXEC(gnConnHandle, lcCommand, 'uchet_1')
С уважением, Алексей
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33605170
denraz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
странно, но выполняется. спасибо.
...
Рейтинг: 0 / 0
SQLEXEC() и WHERE?
    #33605218
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что вы напутали с ограничителями для строковой константы.
У VFP их три равноправных: [], ", '
А у SQL Server только один полноценный - '
[] - это ограничитель для идентификаторов, а символ " имеет двойное значение в зависимости от установки на уровни сессии SET QUOTED_IDENTIFIER.
С уважением, Алексей
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLEXEC() и WHERE?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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