Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > модификации и обновление таблицы |
Автор: Elyad 24.10.2006, 07:24 |
После модификации таблицы и сохранения полученных данных, обновляю ее. Table1.Append; Table1.Post; Table1.Refresh; таблица отображаемая в компоненте DBGrid - обновляется. После чего я сново открываю эту таблицу в другом окне для чтения и таблица оказывается прежней, т.е. не обновленной. Почему? ![]() |
Автор: Vas 24.10.2006, 08:15 | ||
Вместо Refresh попробуй сделать
и посмотри что показывает? |
Автор: Elyad 24.10.2006, 08:27 |
Делал я так и все равно ничего не получается. Сама база обновляется, но при этом последующее ее открытие в новом окне выдает старую немодифицированную таблицу. |
Автор: Vas 24.10.2006, 08:38 |
Что-то похоже на битый индекс, или у тебя сама база не переиндексирует таблицу, попробуй индексы пересоздай вручную. |
Автор: Elyad 24.10.2006, 09:22 |
Почему сама база не переиндексирует таблицу? Из-за чего это? И поясни, please, что я должен сделать, чтобы решить эту проблему(поподробней, please). ![]() |
Автор: Vas 24.10.2006, 09:37 |
Что за БД? |
Автор: Akella 24.10.2006, 09:45 |
Elyad, а ты кэширование используешь? Если, то выполняй: 1. Table1.ApplyUpdates; //сохраняй кэш таблицы. 2. Table1.FlushBuffers; //(принудительное физическое сохранение данных, т.к. винда всё ещё держит данные в своём кэше). |
Автор: Elyad 24.10.2006, 10:35 |
Спасибо за совет, я вечером попробую. ![]() |
Автор: SergeBS 24.10.2006, 11:20 |
Elyad, Скорее всего у тебя [email=http://forum.vingrad.ru/index.php?act=Help&CODE=01&HID=17]Ошибка в 17 строке[/email]. Без знания СУБД - ничего не скажешь. |
Автор: Elyad 25.10.2006, 07:37 |
Akella Вчера попробовал применить ваш совет, но прога выдает ошибку (не помню точно какую, что-то типа кэширования ни применяется). Хочу пояснить свою проблему: Когда я редактирую таблицу и сохраняю сделанные изменения, то и в таблице и компоненте DBGrid все отображается правильно. Но после я создаю 2 - дочернее окно, которое также содержит Table1, DataSource1, DBGrid1 и хочу,чтобы в этом окне также отображалась таблица с новыми изменениями, но не получается. В новом окне пишу следующее: Table1.Close; Table1.DataBaseName:="Name"'; Table1.TableName:="Towns"; Table1.Open; и получаю старые не измененые данные. ![]() |
Автор: Akella 25.10.2006, 08:38 |
Вопрос такой: в какой момент ты открываешь второе окно? Хотелось бы немного кода увидеть. И как мне подсказали штатные телепаты нашего форума ![]() вот этого не пойму, что ты подразумаеваешь под "и в таблице"??? |
Автор: Elyad 25.10.2006, 09:23 | ||
Ставлю вашим телепатам оценку - 5(отлично) ![]() На счет " и в таблице и в компоненте" поясняю: имею ввиду, что данные действительно сохраняются в самой таблице и отображаются в компоненте. Теперь тем кто просил "немного кода" ![]()
В форме fd содержатся компоненты DBGrid, Table, DataSource При создании формы Table1.Close; Table1.DataBaseName:='' NAME"; Table1.TableName:='Town'; Table1.Open; Смысл состоит в том, что user вводит необходимое число добавлений в таблицу и добавляет, каждый раз подтверждая или отменяя сделанные изменения. А после нажатия кнопки Button2 появляется окно в котором отображена эта же таблица с сделанными изменениями. |
Автор: Akella 25.10.2006, 09:42 | ||
Elyad, отредактируй сообщение и возьми код в теги "КОД". И вот ещё http://emanual.ru/get/668/ Добавлено @ 09:53 Elyad, не вижу FlushBuffers.
|
Автор: Akella 25.10.2006, 09:57 | ||
я бы на твоём месте использовал не DBGridKeyPress, а OnKeyDown
Добавлено @ 09:58 только я тебе на Delphi код даю |
Автор: Elyad 25.10.2006, 10:13 | ||
На счет FlushBuffers я уже отмечал, что он выдает об ошибке. Прочитав по ссылке я нашел, что для запуска приложения необходимо как min 512 байт оперативки, а у меня только 256. Может в этом проблема? Я описал еще такую функцию:
и получил такую ошибку stack overflow. т.е. в памяти не хватает места. Значит в этом, что ли ошибка ![]() |
Автор: Elyad 25.10.2006, 11:05 | ||
А вы считаете, что недостаток памяти не может влиять на своевременное обновление памяти? ![]() |
Автор: Akella 25.10.2006, 11:27 |
а напиши-ка нам параметры компьютера, на котором работает программа. |
Автор: Elyad 25.10.2006, 11:55 |
Точно сказать не могу, но знаю что оперативки 256. |
Автор: Akella 25.10.2006, 12:22 |
килобайт или мегабайт? Добавлено @ 12:23 мне кажеться, что у тебя первичный индекс улетел в тёплые края ![]() |
Автор: Elyad 25.10.2006, 14:43 |
Ответ 256 мегабайт. А на счет первичного индекса я сегодня вечером посмотрю. ![]() |
Автор: SergeBS 25.10.2006, 16:00 | ||
Elyad, 1.
2. При активации 2-й формы делай у ее датасета requery. Криво, но сработает. А правильно: иметь датамодуль и в нем 1 датасет на 1 таблицу для всех форм, которые эту таблицу используют. Т.е. RTFM. |
Автор: Elyad 26.10.2006, 07:46 |
SergeBS Спасибо за совет, сегодня попробую и этот метод ![]() А так я проблему уже решил: оказывается я открывал таблицу в новом окне при ее создании А надо таки при каждой ее активизации. ![]() Поэтому тему закрываю!!! Всем, кто участвовал в обсуждении этой темы ----- большое спасибо !!! ![]() |