Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2011, 07:04   #1
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию Занесение данных в БД

Здравствуйте, у меня есть DBGrid, подключенный к таблице Материалы.
В таблице поля: номер заказа, название, цена.
В программе в DBGrid отображаются только поля: название и цена. Когда пользователь вносит изменения в таблицу через DBGrid запись вносится в БД, но заполняются только 2 поля. Мне надо чтобы автоматом заполнялось поле Номер заказа.
Я сделала на выход из DBGrid:
Код:
if DBGrid4.EditorMode or DBGrid4.DataSource.DataSet.Modified then
     begin
        Form1.ADOTable18.Edit;
        Form1.ADOTable18.FieldByName('Nomer_zakaza').AsString:=Edit1.Text;
        Form1.ADOTable18.Post;
        Form1.ADOTable18.Close;
        Form1.ADOTable18.Open;
     end;
Код работает. Только пользователь может тут же, не выходя из DBGrid занести еще одну запись, а здесь мой код уже не катит. Вот не могу сообразить на какое событие поставить занесение номера заказа, ну или как это по другому организовать))
a_n_n_a вне форума Ответить с цитированием
Старый 07.07.2011, 08:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ставь на событие OnAfterInsert (точно не помню как оно называется посмотри в списке событий ADOTable.)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.07.2011, 08:16   #3
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

Я пробовала и на AfterEdit, AfterPost, AfterInsert и т.д....
Работает нормально только на выходе из Грида...
Может, что-то не то в коде?
a_n_n_a вне форума Ответить с цитированием
Старый 07.07.2011, 08:53   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Работает нормально только на выходе из Грида...
В таких случаях создают форму-карточку. Если пользователь хочет добавить новую запись, он открывает эту форму, вносит в Эдиты данные, и по кнопке "Жмакни меня" срабатывает код, вносящий новую запись.
DBGrid (имхо) коряв и не доделан для таких целей.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.07.2011, 09:06   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно попробовать BeforePost
Код:
procedure TForm1.ADOTable18BeforePost(DataSet: TDataSet);
begin
  if Form1.ADOTable18.State=dsInsert then Form1.ADOTable18.FieldByName('Nomer_zakaza').AsString:=Edit1.Text;
end;
или запросить в этом событии номер заказа, а лучше всего колонку с номером заказа в грид засунуть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 07.07.2011 в 09:15.
Аватар вне форума Ответить с цитированием
Старый 07.07.2011, 09:42   #6
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

Stilet, Это хорошая идея!!)
Аватар, и так не работает, данные вносит, а номер заказа нет...
Ладно, спасибо большое, попробую вариант с дополнительной формой)
a_n_n_a вне форума Ответить с цитированием
Старый 07.07.2011, 09:59   #7
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

А может проще сделать ещё одну форму для добавления и редактирования записи, а то как то не очень красиво получается

Последний раз редактировалось SERG1980; 07.07.2011 в 10:05.
SERG1980 вне форума Ответить с цитированием
Старый 07.07.2011, 12:26   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

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


Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if DBGrid4.EditorMode or DBGrid4.DataSource.DataSet.Modified then
     begin
        Form1.ADOTable18.Edit;
        Form1.ADOTable18.FieldByName('Nomer_zakaza').AsString:=Edit1.Text;
        Form1.ADOTable18.Post;
        Form1.ADOTable18.Close;
        Form1.ADOTable18.Open;
     end;
end;
Эти все советы уже на ваш вкус, а дальше уже думайте что для вас удобнее.

Последний раз редактировалось Aliens_wolfs; 07.07.2011 в 12:35.
Aliens_wolfs вне форума Ответить с цитированием
Старый 07.07.2011, 12:36   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Таймер - это высший пилотаж Столько возможностей позволяющих это осуществить - и таймер за уши притягивать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.07.2011, 12:38   #10
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Согласен. Что таймер крайняя мера. Она многое пробовала не помогло, а может ей таймер поможет.
Если ей предыдущие советы не помогут, это последнее что можно сделать.

Последний раз редактировалось Aliens_wolfs; 07.07.2011 в 12:50.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
занесение и хранение данных не по строкам, а по столбцам prosto_i Microsoft Office Access 7 29.03.2010 13:18
Удалённое занесение данных analyst Microsoft Office Access 3 15.09.2009 19:19
Занесение данных в зависимости от даты gavrylyuk Microsoft Office Excel 2 31.07.2008 12:19
занесение данных в таблицу ASAN Microsoft Office Excel 7 02.06.2008 23:50
Занесение данных в переменную jora-objora Помощь студентам 2 05.01.2008 20:12