0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 10
1

Обновление данных в таблице

11.02.2016, 22:54. Показов 1522. Ответов 9
Метки нет (Все метки)

Здравствуйте! Я добавляю новую запись в таблицу, но данные в таблице обновляются только после перезапуска программы. Как это можно исправить? База данных у меня Interbase. Вот код добавления новой записи
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
with DM.IBQuery2 do
  begin
    if FNew then
      SQL.Text :=
        'execute procedure book_add (-1, :id_zhanr,:author,:title_book,:publ_house,:year_of_publ,:num_of_pages,:annotation,:num_of_copies,:in_stock)';
    with DM.IBQuery2.Params do
    begin
      ParamByName('id_zhanr').Value := sEdit2.Text;
      ParamByName('author').Value := sEdit3.Text;
      ParamByName('title_book').Value := sEdit4.Text;
      ParamByName('publ_house').Value := sEdit5.Text;
      ParamByName('year_of_publ').Value := sEdit6.Text;
      ParamByName('num_of_pages').Value := sEdit7.Text;
      ParamByName('annotation').Value := sMemo1.Text;
      ParamByName('num_of_copies').Value := sEdit8.Text;
      ParamByName('in_stock').Value := sEdit9.Text;
      Transaction.StartTransaction;
      ExecSQL;
      Transaction.Commit;
      Transaction.Active := false;
    end;
    DM.IBQuery_Book.Close;
    DM.IBQuery_Book.Open;
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2016, 22:54
Ответы с готовыми решениями:

Access - обновление данных в таблице
Добрый день уважаемые программисты. Среда разработки: Embarcadero Delphi XE3. Технология...

Автоматическое обновление данных в таблице
Привет народ, Хочу спросить совета: Стоит задача организовать автоматическое обновление...

Обновление записи в таблице
Надо сделать:при нажатии на кнопку в приложении в таблице "Покупатели" в столбе "Имя" к каждому...

Обновление данных в таблице с добавлением новых данных
Уважаемые знатоки, есть проблема с которой сам разобраться не могу, помогите пожалуйста. Вопрос...

9
пофигист широкого профиля
4436 / 2926 / 828
Регистрация: 15.07.2013
Сообщений: 16,849
12.02.2016, 00:13 2
Цитата Сообщение от rsrrrsr Посмотреть сообщение
Я добавляю новую запись в таблицу, но данные в таблице обновляются только после перезапуска программы.
Не путай таблицу в БД, в которую ты добавляешь данные, с визуальной "таблицей" на экране монитора. Вторая ничего не знает про первую и про изменения в первой.
0
5057 / 3943 / 1303
Регистрация: 14.04.2014
Сообщений: 18,143
Записей в блоге: 18
12.02.2016, 05:17 3
тут ведь и от режима транзакции все зависит
по идее, если читающая транзакция ReadCommitted,
то DM.IBQuery_Book.Close;
DM.IBQuery_Book.Open;
должно приводить к тому, что новая запись появится в датасете, если нет условий по которым она не выбирается из базы
если не появляется, значит вы не сообщили нам какие-то важные детали...

P.S.1 использование With, да еще вложенных, сокращает код, но затрудняет отладку, если допущена ошибка, так что IMHO лучше ее избегать
P.S.2 Если мы каждый раз заново заполняем SQL.Text, то нет смысла использовать параметры, проще прямо в строку все вписать с помощью ф-ии format
0
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 10
12.02.2016, 08:08  [ТС] 4
режим транзакции read_committed. Условий никаких нет. Выбираются все данные из таблицы. Вот код показа данных:
Delphi
1
2
3
4
5
with DM.IBQuery_Book do
    begin
      SQL.Text :=
        'select * from book';
      Open;
Добавлено через 3 минуты
Цитата Сообщение от krapotkin
P.S.2 Если мы каждый раз заново заполняем SQL.Text, то нет смысла использовать параметры, проще прямо в строку все вписать с помощью ф-ии format
а можно поподробнее?
0
5057 / 3943 / 1303
Регистрация: 14.04.2014
Сообщений: 18,143
Записей в блоге: 18
12.02.2016, 08:39 5
параметры предназначены для того, чтобы сервер разбирал выражение однократно, а потом только подставлял параметры
т.е. один раз устанавливаем SQL.text и не трогаем более. тогда на сервер будут уходить только параметры и все будет чуть быстрее
в данном случае мы каждый раз заставляем сервер разбирать выражение заново, тогда и параметры нафиг не нужны
Delphi
1
2
3
SQL.text:=format('execute procedure book_add (-1, %d,''%s'',''%s'',''%s'',%d,%d,''%s'',%d,%d)',
  [ strToInt(sEdit2.Text), sEdit3.text, ....
  ],fs);
параметр fs:TFormatSettings требуется, чтобы спокойно использовать format в потоках, а также чтобы вывод десятичной точки и других настроек не зависел от настроек системы

если все так, как вы говорите, то данные должны быть видны сразу после DM.IBQuery_Book.Close/Open
значит, что-то не так
0
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 10
12.02.2016, 09:00  [ТС] 6
Сделала так, как Вы сказали. К сожалению, ничего не получилось. Данные в таблице обновляются после перезапуска. Нет ли у Вас еще каких-либо идей как исправить? Буду очень признательна.
0
5057 / 3943 / 1303
Регистрация: 14.04.2014
Сообщений: 18,143
Записей в блоге: 18
12.02.2016, 09:11 7
нельзя исправить то, что тебе неизвестно
выкладывайте проект и базу, тогда будет ясно где ошибка
0
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 10
12.02.2016, 09:22  [ТС] 8
Вот мой проект и база.

Если что база данных у меня Interbase
Вложения
Тип файла: rar Database.rar (1.39 Мб, 4 просмотров)
0
5057 / 3943 / 1303
Регистрация: 14.04.2014
Сообщений: 18,143
Записей в блоге: 18
12.02.2016, 09:36 9
как и предполагалось, проблемы с транзакциями
почему
DM.IBQuery2.transaction = Form_Authorization.IBTransaction_Check_Login
???
т.е. у вас вообще всегда в памяти болтается Form_Authorization ?
Delphi
1
2
3
4
5
6
7
8
9
Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.Title := 'База данных "БИБЛИОТЕКА"';
  Application.CreateForm(TForm_Authorization, Form_Authorization);
  Application.CreateForm(TForm_Registration, Form_Registration);
  Application.CreateForm(TForm_Main, Form_Main);
  Application.CreateForm(TDM, DM);
  Application.CreateForm(TForm_Book, Form_Book);
  Application.Run;
по хорошему, должно быть
Delphi
1
2
3
4
5
Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.Title := 'База данных "БИБЛИОТЕКА"';
  Application.CreateForm(TForm_Main, Form_Main);
  Application.Run;
при создании Form_Main создать руками DM и убить ее при выходе,
потом создать на 5 секунд Auth_form и вызвать ее ShowModal
если не прошли, всех убить и выйти
и остальные формы создавать когда они нужны и разрушать при выходе из них
иначе вы быстро замаетесь отлаживаться, искать какая транзакция еще держит ваши драгоценные данные и не дает им обновиться
1
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 10
12.02.2016, 10:38  [ТС] 10
Спасибо большое!!! не обратила внимания. 3 дня мучилась. Еще раз огромное спасибо, Вы мне очень помогли!

Добавлено через 18 минут
Цитата Сообщение от krapotkin Посмотреть сообщение
Delphi
1
2
3
4
Delphi
SQL.text:=format('execute procedure book_add (-1, %d,''%s'',''%s'',''%s'',%d,%d,''%s'',%d,%d)',
 [ strToInt(sEdit2.Text), sEdit3.text, ....
 ],fs);
здесь %d - для числа, %s - строки, а как для даты писать?

Добавлено через 38 минут
все спасибо! вопрос снимается
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2016, 10:38

Обновление данных в таблице
есть форма. на ней подчиненная. в подчиненную форму вводятся данные x и y, на их основе в этой же...

Обновление данных в таблице
Есть таблица в аксесе по типу: Поле1 Поле2 Поле3 знач1 знач3 знач5 знач2 знач4 знач6 Потом по...

Обновление данных в таблице
Здравствуйте! На Лист "ЕИИС" висит база из номеров ("A") и наименования ("B"). На лист "Сканер"...

Обновление данных в таблице
Добрый день! При работе над проектом возник вопрос... Есть таблица, есть метод загрузки данных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.