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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2014, 17:05   #1
Valentina10121991
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 34
По умолчанию Обновление DBGrid

Есть две формы на первой расположен DBGrid, на второй Editы. Как сделать так,что бы при добавлении новых записей из формы2 при нажатии на кнопку, сразу были видны записи в DBGrid на форме1. У меня новые записи появляются только после перезапуска программы
Valentina10121991 вне форума Ответить с цитированием
Старый 15.06.2014, 18:18   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Как DBGrid подключен к БД? Если через ADOQuery, можно попробовать использовать метод Requery.
Streletz вне форума Ответить с цитированием
Старый 15.06.2014, 21:16   #3
Valentina10121991
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Как DBGrid подключен к БД? Если через ADOQuery, можно попробовать использовать метод Requery.
Да, через ADOQuery
Valentina10121991 вне форума Ответить с цитированием
Старый 15.06.2014, 22:27   #4
Valentina10121991
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 34
По умолчанию

Добавляю запись так:
Код:
procedure TForm4_new_book.BitBtn1Click(Sender: TObject);
begin
  if (Edit1.Text<>'') And (Edit2.Text<>'') And (Edit3.Text<>'') And (Edit4.Text<>'') And (Edit5.Text<>'') then
    begin

  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('insert into books values ('+edit1.Text+','''+edit2.Text+''','''+edit3.text+''','+edit4.Text+','+edit5.text+');');
  if ADOQuery1.ExecSQL <>0 then
                          begin
                            ShowMessage ('Данные успешно добавлены');
                              Form4_new_book.Close;
    end;
                          end
                            else ShowMessage ('Не все поля заполнены');

end;
Куда записывать Requery?
Valentina10121991 вне форума Ответить с цитированием
Старый 16.06.2014, 08:48   #5
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
Стрелка

Причём здесь форма добавления новой записи?
Requery необходимо вызывать для того ADOQuery, который выводит данные в DBGrid, после завершения добавления.
Streletz вне форума Ответить с цитированием
Старый 16.06.2014, 19:11   #6
Valentina10121991
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Причём здесь форма добавления новой записи?
Requery необходимо вызывать для того ADOQuery, который выводит данные в DBGrid, после завершения добавления.
Подскажите пожалуйста в какую процедуру это нужно записать, у меня ничего не получается
Valentina10121991 вне форума Ответить с цитированием
Старый 16.06.2014, 19:58   #7
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Подскажите пожалуйста в какую процедуру это нужно записать
Куда это надо вписать я ответил выше.
Что касается конкретной процедуры. Вы не выложили код формы, на которой расположен обновляемый DBGrid и реализован вызов формы добавления. Поэтому, откуда мне знать какая процедура в Вашем коде отвечает за добавление?
Цитата:
у меня ничего не получается
Извините, но это не серьёзный разговор. Что конкретно не получается? Опишите проблему яснее.
Streletz вне форума Ответить с цитированием
Старый 16.06.2014, 20:30   #8
Valentina10121991
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Вы не выложили код формы, на которой расположен обновляемый DBGrid и реализован вызов формы добавления.
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, ADODB, ExtCtrls, DBCtrls;

type
  TForm2_books = class(TForm)
    BitBtn1: TBitBtn;
    DBGrid1: TDBGrid;
    Button1: TButton;
    Button2: TButton;
    ADOConnection1: TADOConnection;
    ADOTable1_books: TADOTable;
    DataSource1: TDataSource;
    ADOTable1_booksInventarnyy_: TIntegerField;
    ADOTable1_booksAvtor: TWideStringField;
    ADOTable1_booksNazvaniye: TWideStringField;
    ADOTable1_booksGod_Izd: TIntegerField;
    ADOTable1_booksTsena: TBCDField;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    ADOQuery1: TADOQuery;
    Label1: TLabel;
    procedure BitBtn1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure Edit1Change(Sender: TObject);

   private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2_books: TForm2_books;

implementation
    uses unit1, unit3, unit4;
{$R *.dfm}

procedure TForm2_books.BitBtn1Click(Sender: TObject);
begin
 Form2_books.Hide;
 Form1_biblioteka.Show;
end;

procedure TForm2_books.Button1Click(Sender: TObject);
begin

Form4_new_book.ShowModal;

end;

procedure TForm2_books.Button2Click(Sender: TObject);
begin
 if DBGrid1.DataSource.DataSet.RecordCount<>0 then
    begin
     if (MessageBox(Handle, 'Удаление записей может привести к нарушению работы всей базы данных. Удалить запись?',
     'Внимание!!!', MB_YESNO)= IDYES) then
                                       ADOTable1_books.Delete;
     end
                                        else ShowMessage('Нет записей для удаления');
end;


procedure TForm2_books.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 //процедуразакрытия формы
 Action:=cafree;
end;


procedure TForm2_books.DBGrid1TitleClick(Column: TColumn);
//var
// ss:string;
begin
ADOTable1_books.IndexFieldNames:=Column.FieldName;
//ADOTable1_books.IndexFieldNames:=Column.FieldName+' DESC';
//  if ADOQuery1.FieldByName(Column.FieldName).Tag=0 then
  //  begin
    //  ss :=' ASC';
      //ADOQuery1.FieldByName(Column.FieldName).Tag := 1;
    //end
      //else
        //begin
          //ss :=' DESC';
          //ADOQuery1.FieldByName(Column.FieldName).Tag:=0;
        //end;
      //ADOQuery1.Sort:=Column.FieldName + ss;
end;

procedure TForm2_books.Edit1Change(Sender: TObject);
begin
  // ADOTable1_books.Filtered:=false;
 //  ADOTable1_books.Filtered:=true;
 if Length(Edit1.Text)>0 then
  begin
    ADOTable1_books.Filtered:=false;
    ADOTable1_books.Filter:=Combobox1.Text+' LIKE '+#39+Edit1.Text+'%'+#39;
    ADOTable1_books.Filtered:=true;
  end
  else ADOTable1_books.Filtered:=false;

end;

end.
Valentina10121991 вне форума Ответить с цитированием
Старый 16.06.2014, 22:26   #9
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Если я правильно понял, то в DBGrid данные поступают из ADOQuery1.
Сразу хочу предупредить о том, что этот код я писал прямо на форуме. Поэтому, требуется проверка. В том числе, для синтаксиса.
В принципе, должно выглядеть как-то так:
Код:
procedure TForm2_books.Button1Click(Sender: TObject);
begin
  Form4_new_book.ShowModal;
  ADOQuery1.Requery();
end;
Streletz вне форума Ответить с цитированием
Старый 16.06.2014, 22:45   #10
Valentina10121991
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Если я правильно понял, то в DBGrid данные поступают из ADOQuery1.
Сразу хочу предупредить о том, что этот код я писал прямо на форуме. Поэтому, требуется проверка. В том числе, для синтаксиса.
В принципе, должно выглядеть как-то так:
Код:
procedure TForm2_books.Button1Click(Sender: TObject);
begin
  Form4_new_book.ShowModal;
  ADOQuery1.Requery();
end;
Я также делала, выходит ошибка ADOQuery1: cannot perform this operation on a closed dataset
Valentina10121991 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление нумерации строк в DBGrid Denis Black БД в Delphi 3 28.05.2012 19:42
Обновление данных DBGrid DS75 БД в Delphi 24 02.11.2011 22:38
DBGrid и обновление данных в БД a_n_n_a БД в Delphi 1 02.08.2011 18:02
DBGrid запись и обновление a_n_n_a БД в Delphi 0 09.04.2011 06:03
Обновление DBGrid + ADOQuery Demonk БД в Delphi 11 04.02.2009 13:42