Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.24;
Скачать: CL | DM;

Вниз

Отождествление пустой строки и NULL   Найти похожие ветки 

 
Поросенок Винни-Пух ©   (2008-07-02 00:49) [120]

Очень просто

if Field1.IsNull then ...
if Field2.IsNull then ...


а чо без продолжения то?

if Field1.IsNull then Result := "" else Result := Field1.AsString?

И что там мы, чоткие самураи, а не ламеры получим на выходе при "" и нулл?


 
Anatoly Podgoretsky ©   (2008-07-02 00:50) [121]

> Поросенок Винни-Пух  (02.07.2008 0:44:55)  [115]

В программу попадет NULL и не NULL
А в отчет попадет, то что будет сделано в твоей логике, например для NULL попадет "Не указано", для пустых строк ""
Тебя Борланд купил за колбасные обрезки своим AsString и я не удивлюсь, что ты использует TAdoQuery/TAdoTable


 
Поросенок Винни-Пух ©   (2008-07-02 00:51) [122]

Особое значение для Oracle - да. Является признаком NULL
Для строкового типа - нет. Обычная строка, только короткая :)


Так покажите мне нулл строку, неравную "".
И уверую.


 
McSimm ©   (2008-07-02 00:53) [123]


> Так покажите мне нулл строку, неравную "".
> И уверую.

не в оракле:
select null="";
select count(field) = count(*)
и т.п.


 
Поросенок Винни-Пух ©   (2008-07-02 00:54) [124]

Тебя Борланд купил за колбасные обрезки своим AsString и я не удивлюсь, что ты использует TAdoQuery/TAdoTable

да я вообще в тумбочке сплю, а щи лаптем хлебаю.


 
Поросенок Винни-Пух ©   (2008-07-02 00:56) [125]

McSimm ©   (02.07.08 00:53) [123]

> Так покажите мне нулл строку, неравную "".
> И уверую.

не в оракле:
select null="";
select count(field) = count(*)
и т.п.


Для тех кто на тракторе:

На клиенте покажите мне строку содержащую нулл, и отличную от пустой!!!!!!!!!!!!!!!
Вам позарез нужно отлияие на сервере. Зашибись, вы его получили.
Где это отличие на клиенте в двух строках, считанных с полей содержащих "" и нулл???


 
McSimm ©   (2008-07-02 00:57) [126]

строковый тип в Делфи и в БД разные.
Они и в Делфи разные бывают.

И не только строковые, ко всем относится


 
McSimm ©   (2008-07-02 00:58) [127]


> Где это отличие на клиенте в двух строках, считанных с полей
> содержащих "" и нулл???

ровно там же, где отличие для int


 
McSimm ©   (2008-07-02 01:01) [128]


> Где это отличие на клиенте в двух строках, считанных с полей
> содержащих "" и нулл???

А еще в результатах агрегирующих функций, в параметрах для SQL запросов и еще во многих-многих местах.

--
Я не против идеологии Оракл, ее надо знать, как и прочие, вот и все.
Но сути не меняет.


 
Поросенок Винни-Пух ©   (2008-07-02 01:02) [129]

ровно там же, где отличие для int

а пальцем показать

строковый тип в Делфи и в БД разные.
Они и в Делфи разные бывают.

И не только строковые, ко всем относится


Ну так и сказал бы прямо: "в делфи я не отличаю пустую строку от нулл строки потому что нулл строки там просто нет. но я привык что на серверах, с которыми я работал это разные вещи, и только поэтому я считаю, что так и должно быть"


 
Юрий ©   (2008-07-02 01:02) [130]

Всё болтаете и болтаете... ерундой. :)
Лучше бы dev запустили, с поддержкой старых клиентов, конечно.


 
McSimm ©   (2008-07-02 01:05) [131]

Демагогия какая-то :)

В Делфи я не отличаю ноль от нул, потому что нул-чисел там просто нет и т.п.


 
McSimm ©   (2008-07-02 01:06) [132]


> Юрий ©   (02.07.08 01:02) [130]

Дык, он и запущен и к тому же с поддержкой старых клиентов :)


 
Anatoly Podgoretsky ©   (2008-07-02 01:10) [133]

> McSimm  (02.07.2008 0:48:59)  [119]

Там нет ссылок и там ничего не надо поэтому инициализировать, перераспределять размер, перемещать в памяти, это ничем не отличается от скаляра, по сути обычный статический массив, у которого нулевой элемент содержит длину.
Поэтому там можно писать

S:="5";
S:="A";

как в обычный массив, когда для AnsiString

S1:="5"; создаст новую строку и установит счетчик в единицу
S2:=S1; увеличит счетчик у S1 и S2 на самом деле это одна и таже строк

S2:="A"; создаст другую строку, одновременно уменьшит счетчик на единицу у S1 и если он равен нулю то освободит всю память и присвоит nil S1
или
S1:="B"; создаст новую строку, скопировав туда значение, у S2 и S1 счетчик уменьшит на единицу и далее это уже две разные строки, живущие своей независимой жизнью, при выходе из области видимости счетчики будут уменьшены на единицу, при равенстве счетчика нулю память будет освобждена, переменным будет присвоен nil


 
Поросенок Винни-Пух ©   (2008-07-02 01:13) [134]

просто рогами уперлись с самого начала. а суть на поверхности лежит и лежала.
стандарт требует наличия для всех типов специальных значений (нулл), отличных от всех допустимых для типа.
в числовом диапазоне все числа это числа. каждое может представлять значение. правильно. делаем для поля флаг для индикации нула.

для строк пустая строка в силу своих свойств может служить таким спец значением. и служит. а некоторые и для нее сделали флаг.

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


 
Юрий ©   (2008-07-02 01:15) [135]

> [132] McSimm ©   (02.07.08 01:06)

Зашёл в настройки клиента, поставил http://dev2.delphimaster.ru/
Перезагрузил клиента.
При загрузке "Прочего" получил: 500 Internal Server Error (ностальгия, не иначе) :)

PS. DMClient.


 
Anatoly Podgoretsky ©   (2008-07-02 01:17) [136]

> Поросенок Винни-Пух  (02.07.2008 0:49:00)  [120]

Не уходи от темы и не пытайся выкрутить, мы же не в песочнице, нам не требуется обязательно оказаться правым.
Я тебе привел пример/доказательствл, что я всегда для поля буду знать NULL или нет и выполнять логику программы в зависимости от этого - нет никакой разницы, твой код надо преобразовать в

if Field1.IsNull then Result := "Значение NULL"
else if Length(Field1.AsString) = 0 then Result := "пустая строка" else Result := "Строка имеет не пустое значение";

Как видишь все три состояния определены без особых усилий сугубо штатным средстами, по сути не отличающимися от запроса.
И если не использовать костыль Field1.AsString то можно использовать и методы работы с вариант, а не полем.

Ты учись пока я жив и есть желание делиться знаниями.


 
Anatoly Podgoretsky ©   (2008-07-02 01:19) [137]

> Поросенок Винни-Пух  (02.07.2008 0:54:04)  [124]

Хочешь отшутиться? Так я не шучу, но отвечать не обязан - это по вкусу, я просто пытаюсь понять чем и где, а может и кто, тебе испортили мозги и по возможности их поправить.


 
Anatoly Podgoretsky ©   (2008-07-02 01:20) [138]

> McSimm  (02.07.2008 0:57:06)  [126]

Минимум три, а с учетом некоторой допустимости и все пять.


 
Поросенок Винни-Пух ©   (2008-07-02 01:23) [139]

Я тебе привел пример/доказательствл, что я всегда для поля буду знать NULL или нет и выполнять логику программы в зависимости от этого - нет никакой разницы, твой код надо преобразовать в

речь про строковый тип и его особое значение "пустая строка".
меня не интересуют подпорки в виде методов IsNull и функций для работы с типом "вариант".
меня интересует тип "строка" и особое его значение ""

если это не ясно, то дискуссия закончена.


 
McSimm ©   (2008-07-02 01:24) [140]


> когда же просишь сказать сколько пустых строк я записал
> в стрим - сногозначительно молчат, начинают вилять и по
> англицки говорить.
> типа мы умные.
> умные, ага. тока не говорят сколько там в стриме пустых
> строк оказалось.

А не пустых ?

К тому же если бы в стрим строки писал я, то я бы посчитал их без проблем независимо от значения.


> Юрий ©   (02.07.08 01:15) [135]

http://dev2.delphimaster.ru/forum/other/1178872139


 
Поросенок Винни-Пух ©   (2008-07-02 01:26) [141]

А не пустых ?

В ответ на неотвеченные простые вопросы не надо задавать свои.
Если хочешь честной дискуссии.


 
Anatoly Podgoretsky ©   (2008-07-02 01:26) [142]

> Поросенок Винни-Пух  (02.07.2008 1:02:09)  [129]

А чего показывать

I: Integer

ну и определи, где тут нуль. а вот Field.IsNull однозначно даст ответ, я же говорю, Борланд и его последователи мозги замусорили, я бы сказал грубее, но нельзя. А для теории БД нужны особые мозги и забыть все что ты знал в Дельфи ли другом языке, SQL это не функциональный язык и логика данных и их взаимоотношений совсем другие, мерки их других языков тут не применимы.


 
Юрий ©   (2008-07-02 01:27) [143]

> [140] McSimm ©   (02.07.08 01:24)

Спасибо! Поставлю две копии DMClient и зафлужу dev2. :о)


 
Anatoly Podgoretsky ©   (2008-07-02 01:27) [144]

> Поросенок Винни-Пух  (02.07.2008 1:13:14)  [134]

Это не стандарт требует а теория реляционных баз данных, не уверен для других баз, наверно тоже + их особенности.


 
Поросенок Винни-Пух ©   (2008-07-02 01:30) [145]

"бла бла бла, я очень умный и старый, а ты ничего не знаешь"

Борланд и его последователи мозги замусорили

берем с++ не от борланда.
нарисуйте мне строку, содержащую нулл. так что бы это была не пустая строка.


 
Поросенок Винни-Пух ©   (2008-07-02 01:34) [146]

Это не стандарт требует а теория реляционных баз данных

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


 
Поросенок Винни-Пух ©   (2008-07-02 01:40) [147]

I: Integer

ну и определи, где тут нуль


Читать у меня выше про то, что весь диапазон целочисленного типа это равноправные значения. ни одно не может служить нулом.
поэтому нужен нул-флаг для поля в бд и нужна проверка поля на клиенте.


 
McSimm ©   (2008-07-02 01:42) [148]


> В ответ на неотвеченные простые вопросы

отвечал неоднократно :)
ладно, еще разок - в буфере (стриме) находится ровно одна строка (пустая или нет). Сколько раз туда производилась запись - узнать нельзя и не имеет смысла.

Теперь можно?
в буфере N байт кашеобразной информации, сколько непустых строк туда было добавлено? :)


 
Поросенок Винни-Пух ©   (2008-07-02 01:46) [149]

узнать нельзя и не имеет смысла.

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


 
Поросенок Винни-Пух ©   (2008-07-02 01:48) [150]

в буфере N байт кашеобразной информации, сколько непустых строк туда было добавлено? :)

Не знаю.
И вопрос к теме не относится.
Я говорил, что все строки в опыте строго определены.
И что они записываются в буфер и что надо определить сколько туда их было записано.


 
McSimm ©   (2008-07-02 01:48) [151]


> где бы что-то говорилось про то, что пустая строка не может
> служить нуллом.

примерами могу помочь. Уже приводил, вот еще

"" = "";
null != null;

Зачем доказывать то, чего нет?
В общем случае это разные вещи. Знать полезно и особенности Оракл и прочих.
Отрицать из принципа или по религиозным соображеним разницу между пустой строкой и пустым полем - опасно, т.к. работать правильно не будет.


 
Поросенок Винни-Пух ©   (2008-07-02 01:51) [152]

> где бы что-то говорилось про то, что пустая строка не может
> служить нуллом.

примерами могу помочь. Уже приводил, вот еще

"" = "";
null != null;


Зашибись пример.
пусто равно пусто как раз в силу того, что где-то пусто не используется как нулл.


 
McSimm ©   (2008-07-02 01:51) [153]


> Я говорил, что все строки в опыте строго определены.
> И что они записываются в буфер и что надо определить сколько
> туда их было записано.

Можно и так. Хоть и никакой это не опыт, а словоблудие по пятому кругу.

Пишутся только строки "ААА", "АА" и "А". Позарез надо узнать сколько раз к результирующей строке в буфере их добавляли.


 
McSimm ©   (2008-07-02 01:53) [154]


> пусто равно пусто как раз в силу того, что где-то пусто
> не используется как нулл.

Да где-то не используется. Это где-то - везде кроме Оракл.

Закрываем глаза на этот факт и твердим свое лимпопо. Только программы не работают почему-то.


 
Поросенок Винни-Пух ©   (2008-07-02 01:57) [155]

Можно и так. Хоть и никакой это не опыт, а словоблудие по пятому кругу.

словоблудие а не опыт?
у тебя словоблудие, а у меня опыт.
хочешь пришлю два файла?

for i := 1 to X do writebuff("привет_словоблуду")
for i := 1 to Y do writebuff("")

определи X и Y

Если ты не словоблуд, то сразу бы признал, что x определить можно, а Y нельзя.
И все.
И трепа бы не было.

Но нет же.
Мы мля щас всей компанией покажем новому нику, кто здесь гуру на самом деле.
И понеслась.....


 
Поросенок Винни-Пух ©   (2008-07-02 01:58) [156]

Закрываем глаза на этот факт и твердим свое лимпопо. Только программы не работают почему-то.

мои как раз работают


 
McSimm ©   (2008-07-02 01:58) [157]


> x определить можно, а Y нельзя.

определить можно, выводов делать из этого нельзя.


 
McSimm ©   (2008-07-02 01:59) [158]


> мои как раз работают

и в них во всех "" <> "" :)


 
Поросенок Винни-Пух ©   (2008-07-02 01:59) [159]

ну так определи, щас пришлю.


 
McSimm ©   (2008-07-02 02:09) [160]

да, отвык я от форумов за год...

X определить можно, Y определить нельзя. И означает это чуть меньше чем ничего (с)



Страницы: 1 2 3 4 5 6 вся ветка

Текущий архив: 2008.08.24;
Скачать: CL | DM;

Наверх




Память: 0.84 MB
Время: 0.031 c
2-1216627313
TUserClass
2008-07-21 12:01
2008.08.24
Английская XP и моя программа...


15-1215033148
Германн
2008-07-03 01:12
2008.08.24
Стоит ли серьёзно относится к исходникам, где встречается


6-1192529716
Fixi4eeG
2007-10-16 14:15
2008.08.24
Прокси сервер socks5


15-1215091161
VingtQuatrieme
2008-07-03 17:19
2008.08.24
Начальник Чукотки ушёл.


3-1204204239
harisma
2008-02-28 16:10
2008.08.24
Динамическое формирование списка значений для выборки