powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос со сравнением строк неверно работает
4 сообщений из 4, страница 1 из 1
Запрос со сравнением строк неверно работает
    #32880102
Yuliya_g
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем!
Подскажите плиз.
Есть такой запрос:
Select v_crinvoice.id_n, v_crinvoice.numb_in, v_crinvoice.date_in, v_crinvoice.lname, v_crinvoice.custname, v_crinvoice.address,; v_crinvoice.cashdate,; v_crcash.amount_cash as amount, v_crinvoice.d_amount;
From v_crinvoice, v_crcash;
Where (v_crcash.numb_in = v_crinvoice.numb_in) and;
(substr(v_crcash.id_n,1,2)=substr(v_crinvoice.id_n,1,2));
order by v_crinvoice.id_n;
Into cursor temp
выводится пустой, хотя я точно знаю, что по этим условиям записи должны отбираться. Поскольку я пробовала в цикле по этим таблицам использовать такие же условия, и они выполняются.
Есть такая установка SET ANSI ON/OFF, вот если я выставляю ON, то вышеприведённый запрос отбирает записи. Не пойму почему эта установка в данном случае имеет значение, ведь я сравниваю всего два первых символа полей v_crcash.id_n и v_crinvoice.id_n.

Мне необходимо, чтобы запрос работал и при установке SET ANSI OFF, как это сделать.
Спасибо!

С уважением, Юля.
...
Рейтинг: 0 / 0
Запрос со сравнением строк неверно работает
    #32880162
Фотография Диченка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы попробуйте перед выполнением запроса сохранять текущую установку set, а после восстанавливать

Код: plaintext
1.
2.
3.
4.
5.
6.
lcSet = SET("ANSI")
SET ANSI ON

... Запрос

SET ANSI &lcSet
...
Рейтинг: 0 / 0
Запрос со сравнением строк неверно работает
    #32880193
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для справки:

Сравнение символьных строк внутри команды Select-SQL зависит от настройки SET ANSI и несколько отличается от логики сравнения в "обычных" командах.

-) В отличии от "обычных" команд положение сравниваемых выражений (слева или справа от символа сравнения) роли не играет
-) При настройке SET ANSI OFF сравнение идет до истечения символов в самом коротком выражении (при этом не важно слева оно или справа). Поэтому наличие концевых пробелов особой роли не играет. Более принципиально наличие ведущих пробелов.

При настройке SET ANSI OFF внутри Select-SQL

"АВАНГАРДНАЯ" = "АВАНГАРДНАЯ"+Space(10)
"АВАНГАРДНАЯ" = "АВАНГАРД"
"АВАНГАРДНАЯ" = "АВАНГАРДНАЯ УЛИЦА"

вернет .T. во всех 3 случаях. Т.е. такие записи попадут в выборку.

-) При настройке SET ANSI ON (значение по умолчанию) более короткое выражение автоматически дополняется пробелами для того, чтобы уровняться по длине с более длинным. После чего вычисляется результат сравнения

При настройке SET ANSI ON внутри Select-SQL

"АВАНГАРДНАЯ" = "АВАНГАРДНАЯ"+Space(10)
"АВАНГАРДНАЯ" = "АВАНГАРД"
"АВАНГАРДНАЯ" = "АВАНГАРДНАЯ УЛИЦА"

вернет .T. только в первом случае. Все остальные сравнения вернут .F. и не попадут в итоговую выборку.

Кроме того, использование оператора тождественного равенства (два символа равно подряд) равнозначно применению к текущему сравнению правил сравнения используемых при настройке SET ANSI ON вне зависимости от текущей настройки.
...
Рейтинг: 0 / 0
Запрос со сравнением строк неверно работает
    #32881315
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Yuliya_g!

Вместо SUBSTR используй PADR(поле, 2) - он не только "дополняет", но и
"усекает" поле. А в остальном - подумай внимательно над тем что написал
Владимир и сравни со своей ситуацией.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос со сравнением строк неверно работает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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