Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: FireDAC - присвоить Null полю  [new]
vavan
Member

Откуда: Казань
Сообщений: 3511
alekcvp
разве .Bound = False - это не есть Null
если параметр не связан то его например вообще может не юзать генератор конечного запроса. а если его таки обязательно задействовать (пусть и в виде null) то нужно включить привязку
14 май 20, 12:02    [22132743]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 61873
Блог
alekcvp
А какой смысл хранить в базе пустую строку?..

У некоторых людей это религиозное. В духе известного анекдота про обрезание сосисок.
14 май 20, 12:11    [22132757]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 61873
Блог
kdv
Так вот. Null - это не значение. Это отсуствие значения. И хранить его можно только как "индикатор отсутствия значения"

Это довольно странная точка зрения. Во всяком случае, мне было бы интересно, как Вы сумеете сформулировать принципиально различные определения "значения" и "индикатора отсутствия значения", учитывая, что и то, и другое в конечном итоге - набор битов.

kdv
И с Bound + Clear вот как раз эта самая фигня. Clear убивает значение, теперь значения нет. А Bound является индикатором, что значение всё-таки есть. Но оно "пустое".

Это всего лишь означает, что не нужно использовать Clear не по назначению, а нужно кроме Clear иметь метод SetNull (и по правде говоря, при его наличии трудно придумать, зачем нужен Clear).

Ну а после отказа от карго-культа и SetNull становится маловажным, поскольку в 99% случаев более уместен .AsString := ''.
14 май 20, 12:19    [22132767]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
alekcvp
Member

Откуда:
Сообщений: 2035
softwarer
Это довольно странная точка зрения. Во всяком случае, мне было бы интересно, как Вы сумеете сформулировать принципиально различные определения "значения" и "индикатора отсутствия значения", учитывая, что и то, и другое в конечном итоге - набор битов.

Не, ну тут-то понятно, у меня самого есть места где значения поля 0 и Null имеют разное значение. Но вот всегда хранить в базе пустые значения (0 или ''), независимо от контекста - ИМХО это странно.
14 май 20, 14:26    [22132899]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 61873
Блог
alekcvp
Не, ну тут-то понятно, у меня самого есть места где значения поля 0 и Null имеют разное значение.

Конечно. Логика для нуля и для пустой строки существенно различна. Но в том, что Вы цитируете, я не об этом. Я примерно вот о чём: допустим, я написал СУБД, в ней таблица с одной колонкой, в ней две записи. Вот эти записи в битовом представлении:

0000000011111111
0000000100000000

Дополнительная информация: в одной из этих записей лежит значение null, в другой - буква "я". Мне очень интересно, каким образом коллега установит, где "значение", а где - "индикатор отсутствия значения", и, соответственно, ответит, какая из этих двух последовательностей битов какому значению соответствует.

Сообщение было отредактировано: 14 май 20, 14:41
14 май 20, 14:42    [22132914]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61404
В 2020м году не понимать разницу между двузначной и трёхзначной логикой...

Posted via ActualForum NNTP Server 1.5

14 май 20, 15:25    [22132968]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1116
softwarer,

у Null значение же другое "не определено", "не известно". А пустая строка - это вполне определенное значение.
Отсюда правила действий с Null.
"Петя Иванов" + "" = "Петя Иванов"
"Петя Иванов" + Null (неизвестно) = Null (неизвестно).
14 май 20, 15:26    [22132969]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
ъъъъъ
Member

Откуда:
Сообщений: 666
s62
softwarer,

у Null значение же другое "не определено", "не известно". А пустая строка - это вполне определенное значение.
Отсюда правила действий с Null.
"Петя Иванов" + "" = "Петя Иванов"
"Петя Иванов" + Null (неизвестно) = Null (неизвестно).

Ну и нафига это?
14 май 20, 15:27    [22132970]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1116
ъъъъъ

Ну и нафига это?
Ну это я не знаю, просто воспринимаю как данность мира SQL. Столкнулся в свой программе учета когда-то, когда наличие на складе - прибавлялось полученное к имеющемуся.

P.S. Может индицировать то обстоятельство, что величина неизвестна (а не равна, например, нулю).

Сообщение было отредактировано: 14 май 20, 15:30
14 май 20, 15:30    [22132977]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 61873
Блог
s62
у Null значение же другое "не определено", "не известно"

У null значение null. Интерпретация этого значения зависит от бизнес-логики в конкретном случае.

s62
А пустая строка - это вполне определенное значение.

Докажите.
14 май 20, 15:31    [22132979]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
alekcvp
Member

Откуда:
Сообщений: 2035
s62
А пустая строка - это вполне определенное значение.

Если у вас вместо количества позиций на складе пустая строка - это что? Товар отсутствует? Не знают сколько имеется? Знают, но не заполнили, потому что пофиг?
14 май 20, 15:49    [22133006]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
ъъъъъ
Member

Откуда:
Сообщений: 666
alekcvp
s62
А пустая строка - это вполне определенное значение.

Если у вас вместо количества позиций на складе пустая строка - это что? Товар отсутствует? Не знают сколько имеется? Знают, но не заполнили, потому что пофиг?

Не, ну за уши что угодно притянуть можно.
Например: пустая строка - "проверили - товара нет", Null - "пока не проверили".
14 май 20, 15:52    [22133009]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1116
alekcvp
s62
А пустая строка - это вполне определенное значение.

Если у вас вместо количества позиций на складе пустая строка - это что? Товар отсутствует? Не знают сколько имеется? Знают, но не заполнили, потому что пофиг?
По идее количество позиций должно быть не строкой, а целым (или, если не штучный товар, то может быть с фиксированной/плавающей запятой). Соответственно ноль значит ничего нет.

Сообщение было отредактировано: 14 май 20, 15:55
14 май 20, 15:56    [22133014]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
ъъъъъ
Member

Откуда:
Сообщений: 666
s62
alekcvp
пропущено...

Если у вас вместо количества позиций на складе пустая строка - это что? Товар отсутствует? Не знают сколько имеется? Знают, но не заполнили, потому что пофиг?
По идее количество позиций должно быть не строкой, а целым (или, если не штучный товар, то может быть с фиксированной/плавающей запятой).

Да щас.
Заливали "исходные данные" - что там только не было: 1 шт, 2 литра, 1/2 тонны, 0.5 т, 11 уп, 12 ящ, 1/2 маленьк.ящ...
14 май 20, 15:59    [22133018]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1116
alekcvp
s62
А пустая строка - это вполне определенное значение.

Если у вас вместо количества позиций на складе пустая строка - это что? Товар отсутствует? Не знают сколько имеется? Знают, но не заполнили, потому что пофиг?
Я имел в виду, определенное значение с точки зрения программирования. Если есть строковая переменная, то она может принимать какие-то значения, пустая строка - одно из допустимых значений, операция конкатенации например выполняется, как и с другими значениями.
14 май 20, 16:00    [22133019]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 61873
Блог
s62
Ну это я не знаю, просто воспринимаю как данность мира SQL.

Насколько я видел данности мира SQL, в нём есть следующие варианты:

1. Пустая строка и null неразличимы. Это удобно, соответствует логике реального мира и заметно облегчает жизнь.
2. Пустая строка и null различимы. Это неудобно, не соответствует логике реального мира и создаёт дополнительные проблемы.
2.1 Разработчик выносит на уровень внутреннего стандарта использование везде одного из этих двух значений. Например, вешает на все строковые поля constraint check (value <> ''). В результате приемлемым количеством геморроя он приводит ситуацию к первому пункту, исправляя кривизну БД.
2.2 Разработчик этого не делает, и через несколько лет все окружающие имеют большое сексуальное удовольствие сопровождать систему, в которой в половине мест "отсутствие значения" индицируется null-ом, в другой половине мест "отсутствие значения" индицируется пустой строкой и при написании кода каждые пять минут следует лазить в структуру таблиц смотреть как оно в конкретном поле, выбирать соответствущие операции и обвешивать всё многочисленными страховками.
14 май 20, 16:07    [22133026]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 61873
Блог
s62
Я имел в виду, определенное значение с точки зрения программирования

Null - это ровно такое же "определённое значение с точки зрения программирования".

s62
Если есть строковая переменная, то она может принимать какие-то значения, пустая строка - одно из допустимых значений,

И null для неё тоже - одно из допустимых значений.

s62
операция конкатенации например выполняется, как и с другими значениями.

Конечно.

SQL> select 'Вася ' || null || 'Пупкин' test from dual;

TEST
---------------------
Вася Пупкин
14 май 20, 16:10    [22133028]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11759
softwarer
исправляя кривизну БД.
А если мы храним не строки, а числа? Должны ли мы различать NULL и 0? Тот же вопрос для BOOLEAN (NULL/FALSE) и GUID ({000000-.....000})?

Если ответ да, то почему тогда к строкам особое отношение?
14 май 20, 16:15    [22133035]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
alekcvp
Member

Откуда:
Сообщений: 2035
_Vasilisk_,

Вообще странный вопрос, как уже выше писали всё зависит от логики приложения.
У меня есть места, где null и '' разницы не имеют, и там я храню null'ы. А есть места где '' - это "отсутствует", а null - это "не используется", и там да, хранятся и пустые строки.
14 май 20, 16:23    [22133042]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1116
softwarer,

да, NULL тоже допустимое значение, согласен, но со специфическими правилами оперирования с этим значением, которые как бы понятны из соображений здравого смысла, если учитывать, что NULL это "значение не задано" или "значение неизвестно".
Операция конкатенации, которую вы привели, в Firebird будет давать другой результат, NULL
https://firebirdsql.org/file/documentation/reference_manuals/user_manuals/Firebird-Null-Guide-Russian.pdf
В MS SQL, как пишут, по-умолчанию тоже (не работаю с ней, так что просто погуглил, как у них и это то, что было среди результатов) https://docs.microsoft.com/ru-ru/sql/t-sql/statements/set-concat-null-yields-null-transact-sql?view=sql-server-ver15
P.S. Нет, неправильно прочитал про MS SQL, задается параметром, не сказано, что это - значение параметра по-умолчанию.

Сообщение было отредактировано: 14 май 20, 16:24
14 май 20, 16:24    [22133043]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9843
Гемороя от Null много ... :)

Сообщение было отредактировано: 14 май 20, 16:28
14 май 20, 16:28    [22133047]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
alekcvp
Member

Откуда:
Сообщений: 2035
Dmitry Arefiev
Гемороя от Null много ... :)

А представьте компьютер на fuzzy logic, где каждый бит может принимать значения 0, 1 и null 😁
14 май 20, 16:34    [22133053]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 61873
Блог
_Vasilisk_
А если мы храним не строки, а числа? Должны ли мы различать NULL и 0?

Мы ничего не должны, но чем больше реализация будет соответствовать потребностям реального мира, тем лучший результат будут выдавать те же программисты.

В случае чисел, по моему опыту, оптимальный подход - различать null и 0, но при этом доопределить арифметические операции следующим образом:

- деление любого числа на 0 даёт null
- сложение и вычитание числа с null-ом даёт результатом это число.

И да, этот подход проверен на практике, и результаты очень хороши.

_Vasilisk_
Тот же вопрос для BOOLEAN (NULL/FALSE)

Хороший вопрос. У меня нет на него однозначного ответа. У их различия есть свои плюсы, у их неразличимости - свои, и я не возьмусь уверенно сказать, какие весомее. Пожалуй, я бы сказал так: если ориентироваться на квалифицированных разработчиков, их лучше различать, если на неквалифицированных - лучше было бы не различать.

_Vasilisk_
и GUID ({000000-.....000})?

Я практически не работал с guid и могу чего-то не знать, но не вижу причин выносить его в особый тип. Думаю, будет правильно, если в отношении него будут действовать ровно те же правила, что и для соответствующего ему строкового значения.

_Vasilisk_
Если ответ да, то почему тогда к строкам особое отношение?

К строкам нет никакого особого отношения. Отношение везде одно - соответствие логике реального мира.

Если Вы хотите спросить, почему для нуля и пустой строки разные оптимумы, то возьмите два листа чистой бумаги формата А4. Напишите на первом из них цифру 0 и скажите, можете ли Вы отличить этот лист от второго. Теперь возьмите ещё два листа чистой бумаги формата А4, напишите на третьем пустую строку и скажите, можете ли Вы отличить его от четвёртого.

Сообщение было отредактировано: 14 май 20, 16:39
14 май 20, 16:40    [22133058]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 61873
Блог
s62
но со специфическими правилами оперирования с этим значением, которые как бы понятны из соображений здравого смысла

Они понятны не из соображений "здравого смысла", а из соображений "стройности математической теории".

s62
Операция конкатенации, которую вы привели, в Firebird будет давать другой результат

И это одна из многих причин, по которым я не вижу смысла использовать Firebird.
14 май 20, 16:49    [22133065]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC - присвоить Null полю  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61404
softwarer> 1. Пустая строка и null неразличимы. ...
softwarer> соответствует логике реального мира

Для приличия в таких случаях надо говорить "по моему скромному мнению".

Posted via ActualForum NNTP Server 1.5

14 май 20, 16:49    [22133066]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Delphi Ответить