Difference between revisions of "RU/kb/00000354"

From Wiki
Jump to navigationJump to search
m (поправил подпись)
 
(12 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{DISPLAYTITLE:База Знаний: Base. Проверка на NULL-значения в форме}}
+
<section begin=title /><noinclude>{{DISPLAYTITLE:База Знаний: {{OOoB|1}}. </noinclude>Проверка на NULL-значения в форме<noinclude>}}</noinclude><section end=title />
[[RU/kb/base_forms|Base. Формы]]
+
{{BreadCrumbL10n|RU/kb/module/base/forms}}
 
__NOTOC__
 
__NOTOC__
  
  
<!-- Обязательный элемент -->{{RU/documentation/needsrework}}
+
{{RUfromforum|17451}}
 +
В реляционных базах данных (RDBMS) поддерживается контроль целостности данных на уровне описания структуры таблиц (DML). В том числе, можно указать, какие поля не должны содержать неопределённые (NULL) значения<ref>Не следует путать неопределённое значение (NULL) и такие как пустая строка (""), ЛОЖЬ (FALSE) или ноль (0)</ref>. Проверка этих условий осуществляется средствами самой RDBMS и не зависит от способа добавления/изменения данных (через форму, командную строку или файл сценария).
  
<section begin=question/>
 
В реляционных базах данных (RDBMS) поддерживается контроль целостности данных на уровне описания структуры таблиц (DML). В том числе, можно указать, какие поля не должны содержать неопределённые (NULL) значения<ref>Не следует путать неопределённое значение (NULL) и такие как пустая строка (""), ЛОЖЬ (FALSE) или ноль (0)</ref>. Проверка этих условий осуществляется средствами самой RDBMS и не зависит от способа добавления/изменения данных (через форму, командную строку или файл сценария).
 
  
 
Однако, в ряде случаев, лучше проводить '''дополнительную''' проверку на стороне клиента, до отправки запроса к SQL-серверу.<ref>Хотя по умолчанию, данные и формы для доступа к ним хранятся в одном файле odb, всё равно имеет место клиент-серверная архитектура. Запросы, Формы и Отчёты - это клиентская сторона (интерфейс), которая посредством SQL-запросов общается с HSQLDB-сервером. А он уже осуществляет все низкоуровневые операции чтения/записи в двоичные файлы данных.</ref> <ref>Проверка на стороне клиента добавляет некоторые возможности, '''но не заменяет''' корректное DML-описание таблиц!</ref>
 
Однако, в ряде случаев, лучше проводить '''дополнительную''' проверку на стороне клиента, до отправки запроса к SQL-серверу.<ref>Хотя по умолчанию, данные и формы для доступа к ним хранятся в одном файле odb, всё равно имеет место клиент-серверная архитектура. Запросы, Формы и Отчёты - это клиентская сторона (интерфейс), которая посредством SQL-запросов общается с HSQLDB-сервером. А он уже осуществляет все низкоуровневые операции чтения/записи в двоичные файлы данных.</ref> <ref>Проверка на стороне клиента добавляет некоторые возможности, '''но не заменяет''' корректное DML-описание таблиц!</ref>
<section end=question/>
 
  
<section begin=answer/>
+
 
 
В формах {{OOo}} у многих элементов управления (текстовые поля, поля форматированного ввода и других) в '''Свойствах элемента''' на закладке '''Данные''' есть пара свойств:
 
В формах {{OOo}} у многих элементов управления (текстовые поля, поля форматированного ввода и других) в '''Свойствах элемента''' на закладке '''Данные''' есть пара свойств:
 
* "пустая строка - NULL" да/нет,
 
* "пустая строка - NULL" да/нет,
 
* "требуется ввод данных" да/нет.
 
* "требуется ввод данных" да/нет.
 +
  
 
Если первое свойство выставлено в значение "да", то активируется второе.
 
Если первое свойство выставлено в значение "да", то активируется второе.
 +
  
 
Между DML описанием таблицы и настройками элементов формы {{OOo}} существует следующая связь<ref>Проверено на встроенной HSQLDB</ref>:
 
Между DML описанием таблицы и настройками элементов формы {{OOo}} существует следующая связь<ref>Проверено на встроенной HSQLDB</ref>:
  
* Если в таблице не указано NOT NULL, то в форме настройки игнорируются. Сохранять NULL-значения можно свободно.
 
  
* Если NOT NULL указан, то при "требуется ввод данных - '''да'''" и попытках записать пустое значение выводится локализованное предупреждение ООо. Т.е. проверка идет на стороне клиента.
+
{| class="prettytable"
 +
! DML,
 +
NOT NULL
 +
! Форма,  
 +
"требуется ввод данных"
 +
! Результат попытки сохранить NULL значение в БД
 +
 
 +
|-
 +
| align="center"| не указано
 +
| align="center"| любое значение
 +
| Значение сохраняется.
 +
Настройки формы игнорируются.
  
* Если NOT NULL указан, то при "требуется ввод данных - '''нет'''" и попытках записать пустое значение выводится ошибка SQL-движка. Т.е. проверка идет на стороне сервера.
+
|-
<section end=answer/>
+
| align="center"| указано
 +
| align="center"| да
 +
| Значение не сохраняется. Выводится локализованное предупреждение {{OOo}}.  
 +
Т.е. срабатывает ограничение на стороне клиента.
  
 +
|-
 +
| align="center"| указано
 +
| align="center"| нет
 +
| Значение не сохраняется. Выводится предупреждение SQL-движка.
 +
Т.е. срабатывает ограничение на стороне сервера.
  
[[RU/kb/index/50|Индекс: Base]]
+
|}
  
<section begin=signature/>
 
  
{{RU/documentation/signyear|Denis0.ru|Д. В. Черносов|2010 }}
 
  
<section end=signature/>
 
  
{{KbBaseBottom}}
+
{{SignYear|Denis0.ru|Д. В. Черносов|2010 }}
 +
{{RUkbBaseBottom}}

Latest revision as of 18:24, 24 March 2012



Материал для этой статьи сформулирован на основе обсуждения
в community.i-rs.ru.

В реляционных базах данных (RDBMS) поддерживается контроль целостности данных на уровне описания структуры таблиц (DML). В том числе, можно указать, какие поля не должны содержать неопределённые (NULL) значения[1]. Проверка этих условий осуществляется средствами самой RDBMS и не зависит от способа добавления/изменения данных (через форму, командную строку или файл сценария).


Однако, в ряде случаев, лучше проводить дополнительную проверку на стороне клиента, до отправки запроса к SQL-серверу.[2] [3]


В формах OpenOffice.org у многих элементов управления (текстовые поля, поля форматированного ввода и других) в Свойствах элемента на закладке Данные есть пара свойств:

  • "пустая строка - NULL" да/нет,
  • "требуется ввод данных" да/нет.


Если первое свойство выставлено в значение "да", то активируется второе.


Между DML описанием таблицы и настройками элементов формы OpenOffice.org существует следующая связь[4]:


DML,

NOT NULL

Форма,

"требуется ввод данных"

Результат попытки сохранить NULL значение в БД
не указано любое значение Значение сохраняется.

Настройки формы игнорируются.

указано да Значение не сохраняется. Выводится локализованное предупреждение OpenOffice.org.

Т.е. срабатывает ограничение на стороне клиента.

указано нет Значение не сохраняется. Выводится предупреждение SQL-движка.

Т.е. срабатывает ограничение на стороне сервера.









  1. Не следует путать неопределённое значение (NULL) и такие как пустая строка (""), ЛОЖЬ (FALSE) или ноль (0)
  2. Хотя по умолчанию, данные и формы для доступа к ним хранятся в одном файле odb, всё равно имеет место клиент-серверная архитектура. Запросы, Формы и Отчёты - это клиентская сторона (интерфейс), которая посредством SQL-запросов общается с HSQLDB-сервером. А он уже осуществляет все низкоуровневые операции чтения/записи в двоичные файлы данных.
  3. Проверка на стороне клиента добавляет некоторые возможности, но не заменяет корректное DML-описание таблиц!
  4. Проверено на встроенной HSQLDB


К началу страницы