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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2009, 10:23   #1
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию Редактирование, сохранение БД Access (Delphi)

Доброе утро! Проблема следующая. Есть БД в Access, данные которой отображаются на форме с помощью DBGrid. Так же на форме есть кнопки "новая запись", "редактировать запись", "удалить". Вопрос в следующем: при нажатии на "новая запись" или "редактировать" появляется форма редактирования записей (писалось с помощью книги Библия Делфи), в которой все это осуществляется. Но проблема в том, что записи начинают изменяться, как только я начну редактировать какое-либо из полей, а должно только по нажати. на кнопку "сохранить" в этом окне. В итоге даже если я закрою форму, при этом не нажму "сохранить" данные все равно сохраняются... Вот код:

Код:
//Кнопка "Новая запись"
procedure TMainForm.NewButtonClick(Sender: TObject);
begin
DataModule1.CatTable.Insert;
EditForm.ShowModal;
end;

//Кнопка "Редактировать запись"
procedure TMainForm.ToolButton2Click(Sender: TObject);
begin
EditForm.ShowModal;
end;

//Кнопка "Сохранить" на форме редактирования
procedure TEditForm.BitBtn1Click(Sender: TObject);
begin
if DataModule1.CatTable.Modified then
DataModule1.CatTable.Prior;
Close;
end;
Как это можно исправить??
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 09.11.2009, 10:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А какими компонентами ты пользуешся для редактирования?
И вообще что это за DataModule1.CatTable.Prior; к чему тут перескакивать на предидущую запись? Может тут метод Post нужен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2009, 10:45   #3
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А какими компонентами ты пользуешся для редактирования?
И вообще что это за DataModule1.CatTable.Prior; к чему тут перескакивать на предидущую запись? Может тут метод Post нужен?
О, Боже! Что это за Prior действительно? Хм... Не, с Post тоже самое. Ввожу, допустим, характеристики товара, закрываю окно, а данные сохраняются.

Для редактирования пользуюсь такими компонентами: DBEdit, DBMemo, DBComboBox.
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 09.11.2009, 13:48   #4
ProScor
 
Регистрация: 06.10.2009
Сообщений: 5
По умолчанию

Цитата:
проблема в том, что записи начинают изменяться, как только я начну редактировать какое-либо из полей, а должно только по нажатии на кнопку "сохранить"
Ну конечно же - ведь компоненты DBEdit,DBMemo, DBComboBox именно для этого и предназначены!
Цитата:
даже если я закрою форму, при этом не нажму "сохранить" данные все равно сохраняются
Чтобы избежать сохранения - можно использовать метод Table.Cancel. К примеру, на закрытие формы поставить DataModule1.CatTable.Cancel, а на нажатие кнопки "Сохранить" - DataModule1.CatTable.Post.
В итогде, при закрытии формы будут отменяться все изменения, если не была нажата кнопка "Сохранить"
ProScor вне форума Ответить с цитированием
Старый 09.11.2009, 14:34   #5
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Цитата:
Сообщение от ProScor Посмотреть сообщение
Чтобы избежать сохранения - можно использовать метод Table.Cancel. К примеру, на закрытие формы поставить DataModule1.CatTable.Cancel, а на нажатие кнопки "Сохранить" - DataModule1.CatTable.Post.
В итогде, при закрытии формы будут отменяться все изменения, если не была нажата кнопка "Сохранить"
Большое спасибо! Работает!
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 10.11.2009, 09:32   #6
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Можно еще один вопросик??

Как можно проверять ячейки таблицы БД на "пустоту"? У меня сейчас проблема еще в следующем. Есть БД, из которой выбирается оборудование (строки) и добавляется в StringGrid. Но при добавлении строки, ячейка которой пустая, вылетает ошибка: "Could not convert variant of type (null) into type (string)".
Почему вылетает ошибка мне понятно, но как проверять на пустоту ячейки строки?
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 10.11.2009, 09:42   #7
ProScor
 
Регистрация: 06.10.2009
Сообщений: 5
По умолчанию

varisnull(Table.FieldByname('поле') .Value)
возвращает true, если ячейка пуста
ProScor вне форума Ответить с цитированием
Старый 10.11.2009, 11:02   #8
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Цитата:
Сообщение от ProScor Посмотреть сообщение
varisnull(Table.FieldByname('поле') .Value)
возвращает true, если ячейка пуста
Пробовала так:

Код:
for j:=1 to 7 do
begin
if VarIsNull(DataModule1.FindQuery.Fields[j].Value then 
DataModule1.FindQuery.Fields[j].Value:=' - ';
end;
но ничего не происходит...
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Старый 10.11.2009, 11:32   #9
monushka
Форумчанин
 
Аватар для monushka
 
Регистрация: 26.10.2007
Сообщений: 112
По умолчанию

Все, нашла у себя ошибку! Обошлось без использования varisnull(Table.FieldByname('поле') .Value).

Вот код:

Код:
for j:=1 to 7 do
   begin
    SG1.Cells[j-1,i]:= DataModule1.FindQuery.Fields[j].AsString;
    if SG1.Cells[7,i]='' then SG1.Cells[7,i]:='1';
   end;
А было:

Код:
SG1.Cells[j-1,i]:= DataModule1.FindQuery.Fields[j].Value;
Всем спасибо большое за помощь!
If you wanna make the world a better place take a look at yourself and then make a change!
monushka вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование б.д. SQL Server, через delphi lenuxoid БД в Delphi 2 17.04.2009 09:12
Редактирование памяти процесса (Delphi) Air Помощь студентам 4 17.10.2008 15:19
Редактирование текста в Delphi Edo Помощь студентам 5 22.04.2008 08:18
Редактирование Excel книг через Delphi? DA-corp. БД в Delphi 3 01.03.2008 09:50
Delphi Редактирование текстового файла Starscream Общие вопросы Delphi 11 18.02.2008 17:15