Setnull()
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Setnull()
Всем привет!
Народ, кто как решает вопрос с полями в SQL, которые Null?
В любой, более менее реляционной базе, они есть
Я обрабытываю ручками, сделал вставку в PrimeRecord для каждого файла:
If MyField =0 then setnull(MyField).
Может есть более свежие идеи на эту тему?
Народ, кто как решает вопрос с полями в SQL, которые Null?
В любой, более менее реляционной базе, они есть
Я обрабытываю ручками, сделал вставку в PrimeRecord для каждого файла:
If MyField =0 then setnull(MyField).
Может есть более свежие идеи на эту тему?
Re: Setnull()
а какие свежие идеи, такие правила с FILE,DRIVERru_alex писал(а):Всем привет!
Народ, кто как решает вопрос с полями в SQL, которые Null?
В любой, более менее реляционной базе, они есть
Я обрабытываю ручками, сделал вставку в PrimeRecord для каждого файла:
If MyField =0 then setnull(MyField).
Может есть более свежие идеи на эту тему?
ежели проектирование БД в твоих руках советую очень осторожно
разрешать NULL, для числовых полей я вообще бы отказался от NULL
даже если ты и сможешь работать c NULL полями, могут возникнуть проблемы другого характера, а именно, при поисках по таким полям где есть NULL индексы будут игнорироваться и будет происходить сканирование всей таблицы.
Это правило хорошо видно когда сам FILE,DRIVER создаёт таблицу через CREATE(FILE), на все поля, которые включены в индексы NULL запрещается
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Да и так, где только можно запретил...
Остались только поля для связей между таблицами, вроде без этого-то никак. Но нормального инструментария для работы с null полями у Clarion, согласитесь нет. Намного меньше гемороя было бы, если например была возможность "заменять" 0 на null автоматически (в драйвере что-ли ). Конечно это далеко не решает всех проблем, но все-же классический случай, когда связи по Table Identity Column, описывает.
Остались только поля для связей между таблицами, вроде без этого-то никак. Но нормального инструментария для работы с null полями у Clarion, согласитесь нет. Намного меньше гемороя было бы, если например была возможность "заменять" 0 на null автоматически (в драйвере что-ли ). Конечно это далеко не решает всех проблем, но все-же классический случай, когда связи по Table Identity Column, описывает.
маленькая поправочка, это не у Clarion'а нормального инструментария для работы с NULL полями нет, это у FILE,DRIVER.ru_alex писал(а):Да и так, где только можно запретил...
Остались только поля для связей между таблицами, вроде без этого-то никак. Но нормального инструментария для работы с null полями у Clarion, согласитесь нет. Намного меньше гемороя было бы, если например была возможность "заменять" 0 на null автоматически (в драйвере что-ли ). Конечно это далеко не решает всех проблем, но все-же классический случай, когда связи по Table Identity Column, описывает.
Как мне, так я этой проблемы и не вижу в своих разработках, хотя так же разрабытываю клиетт-серверные приложения в Clarion, правда без FILE,DRIVER
ЦИТАТА:
Намного меньше гемороя было бы, если например была возможность "заменять" 0 на null автоматически
это именно то, что у меня и реализовано!
библиотека самам рюхает для каких полей разрешён NULL, а для каких нет, и для пустых строковых бросает NULL, и для числовых если 0 то NULL, хотя принудительно можно и 0 засунуть.
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
У меня есть одна проблема по возможности использования MAV.
Основное разрабатываемое приложение поддерживает базу в формате TPS и MSSQL. DCT файлы разные, APP одинаковые, с использованием флажка, по которому и обрабатываются различия между TPS и SQL версией.
Возможно я ошибаюсь, но использовать MAV (полностью перевести SQL версию с File,Driver на Direct ODBC) и совмещать в одних APP две версии не получится.
Есть предложения?
Основное разрабатываемое приложение поддерживает базу в формате TPS и MSSQL. DCT файлы разные, APP одинаковые, с использованием флажка, по которому и обрабатываются различия между TPS и SQL версией.
Возможно я ошибаюсь, но использовать MAV (полностью перевести SQL версию с File,Driver на Direct ODBC) и совмещать в одних APP две версии не получится.
Есть предложения?
через COMPILE и OMIT секции элементарноru_alex писал(а):У меня есть одна проблема по возможности использования MAV.
Основное разрабатываемое приложение поддерживает базу в формате TPS и MSSQL. DCT файлы разные, APP одинаковые, с использованием флажка, по которому и обрабатываются различия между TPS и SQL версией.
Возможно я ошибаюсь, но использовать MAV (полностью перевести SQL версию с File,Driver на Direct ODBC) и совмещать в одних APP две версии не получится.
Есть предложения?
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Всем привет!
Может кому-то немного поможет следующее при использовании ABC и FILE,DRIVER:
В APP, где объявляются файлы, объявляешь процедуру с именем, например, SetNullFileField(STRING FileLabel)
В файле ABFILE.TPW каталога TEMPLATE, ищешь #GROUP(%FileManagerVirtuals, %TreeText, %DataText, %CodeText), и в нее пишешь следующий код:
В процедуре SetNullFileField(STRING FileLabel) примерно следующий
код:
Получается удобно:
1) все редактируется в одном месте
2) при добавлении, удалении файлов опять же не надо лазить по глобальным embed
3) эту процедуру можно использовать во всей программе, где есть ручная обработка файлов, главное в нее передавать метку файла как строку
4) Если в APP нет процедуры с именем SetNullFileField, то и генериться код не будет, и другие проекты не пострадают
Может кому-то немного поможет следующее при использовании ABC и FILE,DRIVER:
В APP, где объявляются файлы, объявляешь процедуру с именем, например, SetNullFileField(STRING FileLabel)
В файле ABFILE.TPW каталога TEMPLATE, ищешь #GROUP(%FileManagerVirtuals, %TreeText, %DataText, %CodeText), и в нее пишешь следующий код:
Код: Выделить всё
#GROUP(%FileManagerVirtuals, %TreeText, %DataText, %CodeText)
#EMBED(%FileManagerDataSection,'File Manager Data Section'),%File,%pClassMethod,%pClassMethodPrototype,PREPARE(,%FixClassName(%FixBaseClassToUse('FileManager:' & %File))),TREE(%TreeText & %DataText)
#?CODE
#!
#! вставка для обработки MSSQL null полей
#!
#! begin
#IF(%pClassMethod='PrimeAutoInc' OR %pClassMethod='TryPrimeAutoInc' OR %pClassMethod='Update' OR %pClassMethod='TryUpdate' OR %pClassMethod='Insert' OR %pClassMethod='TryInsert')
#FOR(%Procedure)
#IF(%Procedure='SetNullFileField')
SetNullFileField('%File')
#BREAK
#ENDIF
#ENDFOR
#ENDIF
#! end
#!
#EMBED(%FileManagerCodeSection,'File Manager Executable Code Section'),%File,%pClassMethod,%pClassMethodPrototype,PREPARE(,%FixClassName(%FixBaseClassToUse('FileManager:' & %File))),TREE(%TreeText & %CodeText)
#!
#!
код:
Код: Выделить всё
case clip(FileLabel)
of 'MyFile'
if MyFiled=0 then setnull(MyFiled).
end
1) все редактируется в одном месте
2) при добавлении, удалении файлов опять же не надо лазить по глобальным embed
3) эту процедуру можно использовать во всей программе, где есть ручная обработка файлов, главное в нее передавать метку файла как строку
4) Если в APP нет процедуры с именем SetNullFileField, то и генериться код не будет, и другие проекты не пострадают
не очень хорошее решение, т к надо всегда помнить при обновлении Clarion, что и шаблон(ы) нужно базовые корректировать.ru_alex писал(а):Всем привет!
Может кому-то немного поможет следующее при использовании ABC и FILE,DRIVER:
В APP, где объявляются файлы, объявляешь процедуру с именем, например, SetNullFileField(STRING FileLabel)
В файле ABFILE.TPW каталога TEMPLATE, ищешь #GROUP(%FileManagerVirtuals, %TreeText, %DataText, %CodeText), и в нее пишешь следующий код:
ЗЫ
правило номер раз - базовые шаблоны не изменять!!!
лучше напиши свой класс шаблонов который тоже самое делает
сколько пишу шаблоны пока что не было такого случая чтобы я из своего класса шаблонов не смог влезть в базовый.
Последний раз редактировалось Andrew™ 18 Январь 2006, 16:17, всего редактировалось 1 раз.