Re: Зачем были созданы новые типы данных? | |
---|---|
piva Сообщений: 18655 Откуда: Курган Дата регистрации: 24.03.2004 |
Вот ведь а на MapBinary не взглянул даже - приятно обрадован
Еще раз спасибо. ------------------ Часто бывает так, что есть над чем задуматься, а нечем. |
Re: Зачем были созданы новые типы данных? | |
---|---|
Владимир Максимов Автор Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Цитата:Да, с функцией SEEK() пример не очень удачен, более показателен пример с InList() или IN со списком в Select-SQL InList(MyTab.MyField, PADR("1",10), PADR("2",10)) Даже если в таблице есть значения полей "11" и "12", то тем не менее для типов Character будут найдены записи только со значениями "1" и "2", поскольку у них есть концевые пробелы. Причем в таком виде результат работы никак не зависит от настройки SET EXACT. А как решить ту же задачу для VarChar, кроме как установкой нужной настройки SET EXACT? Цитата:Вообще-то, я выразился более осторожно. Ну, ладно, будем считать, что раз есть инструмент, то применение ему всегда найдется. ------------------ |
Re: Зачем были созданы новые типы данных? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, Владимир!
Совершенно не понял твоего примера, если можно - приведи полный вариант - создание курсора (с Char и Varchar соответственно), наполнение тестовыми данными, исполнение запросов с разными SET-ами, ибо я вот например не вижу что тут и чем отличается... при отборе из varchar PADR() точно так-же помогает как и для просто char... Или я чего-то в упор не вижу ------------------ WBR, Igor |
Re: Зачем были созданы новые типы данных? | |
---|---|
Владимир Максимов Автор Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Т.е. для полей типа Character в случае добавления концевых пробелов абсолютно не имеет значения настройка SET EXACT. Результат сравнения от этого не изменится. Но для полей VarChar это имеет принципиальное значение. Хотя в Select-SQL логика совершенно другая. Впрочем, такая же логика при работе с полями VarChar и в MS SQL. Просто об этом надо знать
------------------ |
Re: Зачем были созданы новые типы данных? | |
---|---|
Aleksey Tsingauz [MSFT] |
Цитата: Ну дак если начинать писать "безопасный" код, то надо быть последовательным до коца. Вот этот код и для Char выдает разные результаты:
А вот так, для обоих типов результат не зависит от SET EXACT:
|
Re: Зачем были созданы новые типы данных? | |
---|---|
Владимир Максимов Автор Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Алексей, зачем же передергивать? Я сознательно никак не обрабатываю само поле с целью возможного использования индекса и rushmore-оптимизации:
Кстати, почему Select-SQL не реагирует на настройку SET ANSI, когда речь идет о концевых пробелах, хотя, в принципе, должен
Ну, и заодно ;), почему такие странные результаты SYS(3054,1) в данных запросах? Т.е. Partial при SET ANSI ON и Full при SET ANSI OFF. ------------------ |
Re: Зачем были созданы новые типы данных? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, Владимир!
Что-то ты всё больше смущаешь народ Я совершенно не понимаю твоих проблем с SET EXACT - ведь в хелпе всё сказано предельно ясно. Насчёт того что сравнивается пока не закончилась строка справа.
Переставь местами операнды сравнения в FOR и получишь совершенно другой результат:
Цитата:IMHO реагирует в строгом соответствии с хелпом. При ON более короткая строка дополняется пробелами до длинны более длинной, про OFF - НЕ дополняется. Вот и все отличия - заметь это НЕ прямой аналог SET EXACT. EXACT может даже урезать более длинную строку для сравнения (если она слева), ANSI этого не делает. Псевдокод (ну т.к. реально SET ANSI вне SQL не учитывается):
10) = f1 Цитата:Учитывая что индексы (кроме бинарного) имеют формат с фиксированным размером, и учитывая что ты "добиваешь" выражение справа не до размера поля (это кстати нарочно 100 стоит или опечатка?) результаты вполне предсказуемые IMHO. ------------------ WBR, Igor |
Re: Зачем были созданы новые типы данных? | |
---|---|
Владимир Максимов Автор Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Цитата:Замнем... Я опять не смог ясно выразить свою мысль и ты меня не понял. Поскольку вопрос второстепенный, то прекращаю это обсуждение Цитата:Да, не обратил внимание, что эта настройка добавляет пробелы для более короткой строки не обращая внимания с какой стороны знака сравнения она стоит. В этом случае логика работы вполне понятна. ------------------ |
Re: Зачем были созданы новые типы данных? | |
---|---|
Aleksey Tsingauz [MSFT] |
Здравствуйте, Владимир!
Цитата: Типы полей Varchar и Char отличаются, было бы бессмысленно добавлять новый тип абсолютно эдентичный старому. В поле Char хранятся данные фиксированной длины равной размеру поля. В поле Varchar хранятся данные переменной длины не превышающей размер поля. Длина строк играет существенное значение при сравнении с SET EXACT OFF, отсюда и разница в результатах, все согласно документации. Цитата: А как он должен реагировать? Цитата: Я получаю None при SET ANSI OFF, потому что в данных условиях оптимизация не применяется. Aleksey Tsingauz Visual FoxPro Dev Team |
Re: Зачем были созданы новые типы данных? | |
---|---|
Владимир Максимов Автор Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Алексей, спасибо. Игорь уже объяснил в чем я ошибался Думаю, данную тему можно закрыть.
------------------ |
Re: Зачем были созданы новые типы данных? | |
---|---|
Zobr Сообщений: 73 Дата регистрации: 24.02.2004 |
Aleksey Tsingauz [MSFT] писал(а):
Цитата: Столкнулся со следующей проблемой: создал курсорадаптор связанный с таблицей; таблица содержит varchar поля; привязал textbox к полю курсорадаптора; если в поле курсора содержится null, то данные вводятся нормально, если, например, строка из 5 символов - то только в пределах этих 5-ти символов. К сожалению пример прислать не могу, очень уж непростой. Если можете подсказать направление поисков - буду очень благодарен. |
Re: Зачем были созданы новые типы данных? | |
---|---|
Владимир Максимов Автор Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Попробуй забить в свойство
TextBox.Format='XXXXXXXXXXXX' Столько символов "X", какая размерность поля. Ну, и проверь настройку TextBox.MaxLength Это глюк не столько типа данных, сколько автоопределения длины в объекте TextBox. ------------------ |
© 2000-2024 Fox Club  |