Поиск:

Ответ в темуСоздание новой темы Создание опроса
> возможность вставить запись с пустыи полями, как? 
V
    Опции темы
nadge
Дата 9.12.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 12.11.2004

Репутация: 1
Всего: 1



Здравствуйте!

Есть форма, на ней TDataSource, TDBNavigator и TDBGrid. (Непосредственно с базой работа идет через компонент AnyDAC TADTable, но, как я понял, для моего вопроса это не важно.)

Пользователь нажимает кнопку Insert и заполняет в гриде не все поля. Так вот, программа (как я понял, компонент DataSource) при сохранении такой записи на это ругается, требует заполнить пустое поле. Как этого избежать? Т.е. как сделать так, чтобы некоторые поля записи могли оставаться пустыми?


З.Ы. Я чайник smile


PM MAIL   Вверх
TaNK
Дата 9.12.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(nadge @ 9.12.2006,  21:51)
Здравствуйте!

Есть форма, на ней TDataSource, TDBNavigator и TDBGrid. (Непосредственно с базой работа идет через компонент AnyDAC TADTable, но, как я понял, для моего вопроса это не важно.)

Пользователь нажимает кнопку Insert и заполняет в гриде не все поля. Так вот, программа (как я понял, компонент DataSource) при сохранении такой записи на это ругается, требует заполнить пустое поле. Как этого избежать? Т.е. как сделать так, чтобы некоторые поля записи могли оставаться пустыми?


З.Ы. Я чайник smile

есть предложение - при создании твой бд, поля которое не обязательно для заполнения 
1 вариант - сделать поле default, и оно будет заполняться само
2 выриант - программно заполнять скрытно от пользователя, например NULL заносить, только чтобы поле не имело ограничение - NOT NULL.


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
nadge
Дата 10.12.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 12.11.2004

Репутация: 1
Всего: 1



1. всмысле на сервере это указать? можно подробнее?
2. нежелательно - т.к. у меня данные вводятся/выводятся через связку Table-DataSource-DBGrid, и хотелось бы чтобы именно так и было. Оставлю на крайний случай.


Мне кажется (обычно есть нечто подобное), что в используемых классах БД должна быть какая-то переменная, в которой указывается, какие поля можно оставить пустыми. Сам сервер такую возможность предоставляет. Table - тоже (при вставке с помощью InsertRecord).Значит дело либо в DBGrid, либо, скорее всего, в DataSource. 

Вот только найти, как там это исправить, я не могу. Ну не взламывать же компонент smile Хотя начинаю склоняться именно к этому - явно быстрее, чем я уже потратил на поиски.


З.Ы. Сервер - mysql, если что.

Это сообщение отредактировал(а) nadge - 10.12.2006, 00:26
PM MAIL   Вверх
TaNK
Дата 10.12.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(nadge @ 10.12.2006,  00:24)
1. всмысле на сервере это указать? можно подробнее?
2. нежелательно - т.к. у меня данные вводятся/выводятся через связку Table-DataSource-DBGrid, и хотелось бы чтобы именно так и было. Оставлю на крайний случай.


Мне кажется (обычно есть нечто подобное), что в используемых классах БД должна быть какая-то переменная, в которой указывается, какие поля можно оставить пустыми. Сам сервер такую возможность предоставляет. Table - тоже (при вставке с помощью InsertRecord).Значит дело либо в DBGrid, либо, скорее всего, в DataSource. 

Вот только найти, как там это исправить, я не могу. Ну не взламывать же компонент smile Хотя начинаю склоняться именно к этому - явно быстрее, чем я уже потратил на поиски.


З.Ы. Сервер - mysql, если что.

например в FireBird создается следующим образом:
Код

// цитата по FireBird
Create Table Stock_Item (
  ...
  Color Character(20) Default 'Neutral',
....,
 Constrain FK_COLOR FOREIGN KEY (COLOOR)
References Colors(COLOR)
on Update Cascade on Delete Set Default;

 а как в mySQL я точно не знаю, но думаю ты разберешься!


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
nadge
Дата 10.12.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 12.11.2004

Репутация: 1
Всего: 1



TaNK, спасибо за отзыв, но проблема не в сервере.


Я тут вот что попробовал: вместо таблицы стал использовать ClientDataSet и сохранение/загрузку в/из XML.
Написал:
Код

  ClientDataSet1.LoadFromFile('aaa.xml');
  for i:=0 to ClientDataSet1.Fields.Count - 1 do
    ClientDataSet1.Fields[i].Required:=false;

Теперь в той же ситуации (добавление запси) выдается "Field value required", а было "Field '<имя столбца>' must have a value". Т.е. как я понял:
1. Проверок несколько (ну блин, поймаю разработчика дельфи, дам в чан).
2. Сама БД тут вообще не при чем. При чем класс TDataSet или какой-то производный от него (или, наоборот, родительский).


З.Ы. Ну неужели никому не приходилось оперировать с записями, имеющими пустые поля? Поверить в это не могу.

З.З.Ы. Придется брать в руки дизассемблер. Этот путь быстрее - я убедился.
PM MAIL   Вверх
nadge
Дата 10.12.2006, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 12.11.2004

Репутация: 1
Всего: 1



Разобрался. Проблема таки в сервере. В настройках полей там было указано NOT NULL, надо было эту опцию снять.


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

Это сообщение отредактировал(а) nadge - 10.12.2006, 20:24
PM MAIL   Вверх
TaNK
Дата 10.12.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(nadge @ 10.12.2006,  20:23)
Разобрался. Проблема таки в сервере. В настройках полей там было указано NOT NULL, надо было эту опцию снять.


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

ну вот и замечательно, что хоть как то смог помочь! smile 


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.