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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2012, 18:44   #1
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
Вопрос Проверка бд на изменение

Доброго времени суток! Есть БД Access Stomat в ней таблица AdoTable1 с полями id_priem,id1_priem,data_priem,image _priem, на Form1 лежат DBGrid1 и Image1 как сделать чтобы при закрытии формы происходила проверка :
если была изменён Image1 и пользователь не нажимал кнопки сохранить Button1 , тогда вывести окно с предупреждением.
Alexsandr вне форума Ответить с цитированием
Старый 12.07.2012, 08:30   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Вводите в форму свойство-признак (в принципе можно свойство Tag использовать), которое допустим, инициализируете 0, меняете на 1 при изменении Image1 и на 0 при нажатии Button1. При закрытии если в этом свойстве 1 выводите предупреждение.
astecenko вне форума Ответить с цитированием
Старый 12.07.2012, 10:21   #3
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
По умолчанию

Спасибо за помощь! Только чего то у меня не получается делаю так:
Код:
procedure TForm4.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Form4.Image1.Canvas.Pixels[X, Y] ) = clWhite



  then  //если указатель мыши кликнул по белому цвету канвы на картинке тогда
    begin

    Form4.Image1.Canvas.Brush.Color:=clGreen;   //назначаем кисти цвет зелёный
    Form4.Image1.Canvas.FloodFill(X, Y, clWhite, fsSurface);   //закрашиваем  белую замкнутую область
     image1.Tag := 1;
     end

    else if (Image1.Canvas.Pixels[X, Y] ) = clGreen  then   //иначе если казатель мыши кликнул по зелёному цвету канвы на картинке тогда
    begin
    Form4.Image1.Canvas.Brush.Color:=clWhite;  //назначаем кисти цвет белый
    Form4.Image1.Canvas.FloodFill(X, Y, clGreen, fsSurface);  //закрашиваем  зелёную замкнутую область
      image1.Tag := 1;
    end;
при нажатии на кнопку пишу
Код:
procedure TForm4.Button2Click(Sender: TObject);
begin

  if Form4.DBGrid1.Visible = true

   then
    Form4.DBGrid1.Visible := false

       else
      Form4.DBGrid1.Visible := true ;

     begin
        if Form4.DBGrid1.Visible = true

   then  Form4.Button2.Caption := 'Закрыть'
   else
        Form4.Button2.Caption := 'Редактировать';

      begin
        if Form4.DBGrid1.Visible = true
        then
          Form4.Image1.Enabled := true
          else
           Form4.Image1.Enabled := false ;
            begin
  if Image1.Tag = 1
  then
  Form2.Show;
  
            end;
             end;

      ShowScrollBar(DBGrid1.Handle, SB_HORZ, False)

    end;

end;
И происходит ошибка ADOTable2: DataSet not in edit or insert mod

Последний раз редактировалось Stilet; 14.07.2012 в 19:43.
Alexsandr вне форума Ответить с цитированием
Старый 13.07.2012, 17:31   #4
Лесной
 
Регистрация: 13.07.2012
Сообщений: 7
По умолчанию

Это означает, что при вставке или редактировании записей DataSet должен быть в режиме вставка (DataSet.Insert) или правка (DataSet.Edit)
Лесной вне форума Ответить с цитированием
Старый 14.07.2012, 19:01   #5
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
По умолчанию

Всем спасибо! Получилось с помощью Tag.

Код:
Код:
procedure TForm4.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Form4.Image1.Canvas.Pixels[X, Y] ) = clWhite then  //если указатель мыши кликнул по белому цвету канвы на картинке тогда
    begin

    Form4.Image1.Canvas.Brush.Color:=clGreen;   //назначаем кисти цвет зелёный
    Form4.Image1.Canvas.FloodFill(X, Y, clWhite, fsSurface);   //закрашиваем  белую замкнутую область
    form4.Image1.Tag := 1;
     end

    else if (Image1.Canvas.Pixels[X, Y] ) = clGreen  then   //иначе если казатель мыши кликнул по зелёному цвету канвы на картинке тогда

    begin
    Form4.Image1.Canvas.Brush.Color:=clWhite;  //назначаем кисти цвет белый
    Form4.Image1.Canvas.FloodFill(X, Y, clGreen, fsSurface);  //закрашиваем  зелёную замкнутую область
      form4.Image1.Tag := 1;
    end;   //т.е. происходит событие закрасил - стёр


  begin
     Form4.Caption := 'X=' + IntToStr  (X) +  'Y=' + IntToStr  (Y)
  end;
end;
при нажатии на кнопку пишу:
Код:

procedure TForm4.Button2Click(Sender: TObject);
begin

  if Form4.DBGrid1.Visible = true

   then
    Form4.DBGrid1.Visible := false

       else
      Form4.DBGrid1.Visible := true ;

     begin
        if Form4.DBGrid1.Visible = true

   then  Form4.Button2.Caption := 'Закрыть'
   else
        Form4.Button2.Caption := 'Редактировать' ;
         ShowScrollBar(DBGrid1.Handle, SB_HORZ, False);
         end;
   begin
     if (Form4.Image1.Tag = 1)
     then
         Form5.Show;
   end;

      begin
        if Form4.DBGrid1.Visible = true
        then
          Form4.Image1.Enabled := true
          else
           Form4.Image1.Enabled := false ;
            end;
     

    end;

Последний раз редактировалось Stilet; 14.07.2012 в 19:40.
Alexsandr вне форума Ответить с цитированием
Старый 16.07.2012, 08:24   #6
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Рад за Вас, маленькая ремарка: в условиях не обязательно писать:
Код:
Form4.DBGrid1.Visible = true
т.к. ( ИСТИНА = ИСТИНА) = ИСТИНА
достаточно
Код:
Form4.DBGrid1.Visible
,
Кроме того не понятно зачем везде писать операторные скобки (begin end) даже там где не надо, в итоге получая лишний код, который потом оптимизируется компилятором, лучьше уменшать кол-во мусора в коде, и записать как-нибудь:
Код:
procedure TForm4.Button2Click(Sender: TObject);
begin
   Form4.DBGrid1.Visible:=not(Form4.DBGrid1.Visible);
   if Form4.DBGrid1.Visible
     then
      Form4.Button2.Caption := 'Закрыть'
     else
      Form4.Button2.Caption := 'Редактировать' ;
   ShowScrollBar(DBGrid1.Handle, SB_HORZ, False);
   if Form4.Image1.Tag = 1
     then
         Form5.Show;
   Form4.Image1.Enabled:=Form4.DBGrid1.Visible;   
end;
В TForm4.Image1MouseDown тоже есть лишние операторные скобки в конце вместо
Код:
begin
     Form4.Caption := 'X=' + IntToStr  (X) +  'Y=' + IntToStr  (Y)
end;
достаточно
Код:
     Form4.Caption := 'X=' + IntToStr  (X) +  'Y=' + IntToStr  (Y)
astecenko вне форума Ответить с цитированием
Старый 16.07.2012, 09:34   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

astecenko, операторные скобки не мусор.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.07.2012, 10:02   #8
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Пепел Феникса, вообще - конечно нет.
Но в данном конкретном случае - зачем они? Как средство структурирования кода?
astecenko вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка ZHDN Microsoft Office Excel 9 11.11.2011 10:49
excel.Проверка VBA и проверка функции Будда Помощь студентам 0 14.04.2011 21:10
изменение Даниил_глазко JavaScript, Ajax 0 25.11.2010 17:53
проверка на IE TDrive JavaScript, Ajax 2 05.03.2010 13:41