Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Форма редактирования грида, а также вставки.


Автор: malor 31.10.2011, 21:56
Действуем по аналогии с изложенным в книге
"Работа с базами данных в Delphi" Хомоненко А., Гофман В., 2005 г., стр. 227 - 233.
У элемента TDBEdit прописан DataSource и DataField.

user posted image

Сделал окно вставки.
В тело процедуре 
procedure TFormInsert.btOKClick(Sender: TObject);
begin
  // .............
end;

что забить, чтоб новая запись появилась в гриде?

Delphi XE

Автор: Akella 31.10.2011, 23:35
dataset.post?

Добавлено через 2 минуты и 38 секунд
обычно в книгах есть полный код + примеры на диске или дискете
может быть код сохранения на соседней странице?

Автор: Данкинг 31.10.2011, 23:44
Видимо, обновить грид надо, хотя должно сразу появляться, по логике.

Автор: Keeper89 1.11.2011, 02:57
Судя по гриду Insert или Append сделан не был.

Автор: malor 1.11.2011, 09:51
Теперь выглядит так :
user posted image

Есть замечания ? (в плане удаления/редактирования/внесения)
 
P.S. 
Цитата(Akella @  31.10.2011,  23:35 Найти цитируемый пост)
Обычно в книгах есть полный код + примеры на диске или дискете
Может быть код сохранения на соседней странице? 
Та книга шла без диска.
Нашел код в инете по адресу:
http://www.delcb.com/partners/articles/stats/index.php?t=1218194484&p=21
У формы ввода - единственная описанная процедура это FormCreate():

Код
procedure Tfmlnput.FormCreate(Sender: TObject);
begin
  dbeName.DataSource := fmStore.dsStore; 
  dbeName.DataField := \\\'SJStame\\\';
  dbeUnit.DataSource := fmStore.dsStore;
  dbeUnit.DataField := \\\'SJJnit\\\';
  dbePrice.DataSource := fmStore.dsStore;
  dbePrice.DataField := \\\'S_Price\\\';
  dbeNote.DataSource := fmStore.dsStore;
  dbeNote.DataField := \\\'S_Note\\\';
  btnOK.ModalResult := mrOK;
  btnCancel.ModalResult := mrCancel;
end;

Автор: CROTishka 1.11.2011, 10:23
Цитата

Есть замечания ?

Вы конечно ещё в школе/институте, но исключительные случаи тоже надо рассматривать же!
Что например у вас будет при нажатии кнопки удалить, если в датасете пусто? 

Автор: malor 1.11.2011, 16:58
Если пользователь нажал кнопку "Добавить" - у него открылось диалоговое коно, в окне поле типа TDBEdit. Он в него что-то ввел, затем передумал добавлять запись и нажал отмена. Как обнулить поле TDBEdit?

Код
procedure TFormEditBranch.btCancelClick(Sender: TObject);
begin

  edBranch.Text := NULL;
end;


user posted image

Некоторые пишут, что для вставки новой записи следует использовать форму не с элементами TDBEdit, а с обычными TEdit: 
http://programmersforum.ru/showthread.php?t=99619
http://forum.codenet.ru/threads/54431-%D0%92%D0%B2%D0%BE%D0%B4-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-DBEdit

Но если пойти по такому пути:
Код
procedure TFormEditBranch.btCancelClick(Sender: TObject);
begin

  //edBranch.Text := NULL;
  DataModule1.ADOTableBranch.Cancel;
end;

Вроде сделало отмену, как и хотелось. Подводных камней нет..?

Автор: Akella 6.11.2011, 18:06
Цитата(malor @  1.11.2011,  16:58 Найти цитируемый пост)
Некоторые пишут, что для вставки новой записи следует использовать форму не с элементами TDBEdit, а с обычными TEdit: 

да, я так делаю smile

Пишущая транзакция должна быть максимально короткой по времени. Другими словами, время редактирования должно быть максимально коротким. В твоём случае получается так: пользователь открыл запись на редактирование и пошёл кофе пить, а другой пользователь не может отредактировать/удалить эту запись, т.к. она заблокирована первым, а если на сервер проблемы в момент редактирования? Будет #опа.

Добавлено через 45 секунд
Цитата(malor @  1.11.2011,  09:51 Найти цитируемый пост)
Теперь выглядит так :


Ты не внял моим замечаниям :(
Ну и ладно. Удачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)