Поиск:

Ответ в темуСоздание новой темы Создание опроса
> модификации и обновление таблицы 
:(
    Опции темы
Elyad
Дата 24.10.2006, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



После модификации таблицы и сохранения полученных данных, обновляю ее. 
Table1.Append;
Table1.Post;
Table1.Refresh;
таблица отображаемая в компоненте DBGrid - обновляется.
После чего я сново открываю эту таблицу в другом окне для чтения и таблица оказывается прежней, т.е. не обновленной. Почему? smile 
PM MAIL   Вверх
Vas
Дата 24.10.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Вместо Refresh попробуй сделать 
Код

Table1.Close;
Table1.Open;

и посмотри что показывает?


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Elyad
Дата 24.10.2006, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Делал я так и все равно ничего не получается.
Сама база обновляется, но при этом последующее ее открытие в новом окне выдает старую немодифицированную таблицу.

Это сообщение отредактировал(а) Elyad - 24.10.2006, 08:29
PM MAIL   Вверх
Vas
Дата 24.10.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Что-то похоже на битый индекс, или у тебя сама база не переиндексирует таблицу, попробуй индексы пересоздай вручную.



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Elyad
Дата 24.10.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Почему  сама база не переиндексирует таблицу? Из-за чего это? И поясни, please, что я должен сделать, чтобы решить эту проблему(поподробней, please).  smile 

PM MAIL   Вверх
Vas
Дата 24.10.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(Elyad @  24.10.2006,  09:22 Найти цитируемый пост)
Почему  сама база не переиндексирует таблицу?

Что за БД?


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Akella
Дата 24.10.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Elyad, а ты кэширование используешь? Если, то выполняй:
1. Table1.ApplyUpdates; //сохраняй кэш таблицы.
2. Table1.FlushBuffers; //(принудительное физическое сохранение данных, т.к. винда всё ещё держит данные в своём кэше).
PM MAIL   Вверх
Elyad
Дата 24.10.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Спасибо за совет, я вечером попробую. smile 
PM MAIL   Вверх
SergeBS
Дата 24.10.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Elyad
Скорее всего у тебя [email=http://forum.vingrad.ru/index.php?act=Help&CODE=01&HID=17]Ошибка в 17 строке[/email]. Без знания СУБД - ничего не скажешь.
PM MAIL   Вверх
Elyad
Дата 25.10.2006, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Akella
 Вчера попробовал применить ваш совет, но прога выдает ошибку (не помню  точно какую, что-то типа кэширования ни применяется).

Хочу пояснить свою проблему:
Когда я редактирую таблицу  и сохраняю сделанные изменения, то и в таблице и компоненте DBGrid все отображается правильно. Но после я создаю 2 - дочернее окно, которое также содержит Table1, DataSource1, DBGrid1 и хочу,чтобы в этом окне также отображалась  таблица с новыми изменениями, но не получается.
В новом окне пишу следующее:
Table1.Close;
Table1.DataBaseName:="Name"';
Table1.TableName:="Towns";
Table1.Open;
 и получаю старые не измененые данные. smile 

 

PM MAIL   Вверх
Akella
Дата 25.10.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Вопрос такой: в какой момент ты открываешь второе окно?
Хотелось бы немного кода увидеть.
И как мне подсказали штатные телепаты нашего форума smile  у вас Paradox???

Цитата(Elyad @  25.10.2006,  07:37 Найти цитируемый пост)
то и в таблице и компоненте DBGrid

вот этого не пойму, что ты подразумаеваешь под "и в таблице"???
PM MAIL   Вверх
Elyad
Дата 25.10.2006, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Ставлю вашим телепатам оценку - 5(отлично) smile 
На счет  " и в таблице и в компоненте" поясняю:  имею ввиду, что данные действительно сохраняются в самой таблице и отображаются в компоненте.
Теперь тем кто просил "немного кода" smile 


Код

procedure TForm1.Button1Click()
var
      rxadd : TModalResult;
     h : string;
begin
           rzadd=fmadd.ShowModal;
          if    rzadd=mrOk 
              then
                    begin
                                 h:=fmadd.SpinEdit1.Text;  // сохраняем то число которое ввел пользователь
                                hh:=StrToInt(h);
                    end;
           if (h <>0)  then Table1.Append   else Table1.Cancel;
           i:=1;
           if  rzadd=mrCancel   then Table1.Cancel;

end;


procedure TForm1.DBGridKeyPress()
begin
        if Table1.State in [dsInsert]
         then 
                  if key=#13   then   
                     if MessageDlg('Сохранить добавленную запись',mtConfirmation,[mbYes,mbNo],0) <>mrYes   then Abort;
                     else 
                              begin
                                          Table1.Post;
                                           if i << hh    then
                                           begin 
                                                          Table1.Append;
                                                           i:=i+1; 
                                           end; 
                                           else DataSource1.AutoEdit1:=false;
                             end;
end;

procedure Button2click ()
var   rz : TModalResult;
begin
              rz:=fd.Show;
end;


В форме fd содержатся компоненты DBGrid, Table, DataSource
При создании формы
Table1.Close;
Table1.DataBaseName:='' NAME";
Table1.TableName:='Town';
Table1.Open;


Смысл состоит в том, что user вводит необходимое число добавлений в таблицу и добавляет, каждый раз подтверждая или отменяя сделанные изменения. А после нажатия кнопки Button2 появляется окно в котором отображена эта же таблица с сделанными изменениями.



Это сообщение отредактировал(а) Elyad - 25.10.2006, 10:01
PM MAIL   Вверх
Akella
Дата 25.10.2006, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Elyad, отредактируй сообщение и возьми код в теги "КОД".

И вот ещё
http://emanual.ru/get/668/

Добавлено @ 09:53 
Elyad, не вижу FlushBuffers.

Код

procedure TForm1.DBGridKeyPress()
begin
  if Table1.State in [dsInsert] then begin
    if (key=#13) and (MessageDlg('Сохранить добавленную запись',mtConfirmation,[mbYes,mbNo],0) <> mrYes) then Abort;
  end else begin
      Table1.Post;
      Table1.FlushBuffers;//принудительно заставляем винду сохранить данные на диск
       if i < hh    then begin 
         Table1.Append;
         Inc(i);
       end else
         DataSource1.AutoEdit1:=false;
  end;
end;


Это сообщение отредактировал(а) Akella - 25.10.2006, 09:53
PM MAIL   Вверх
Akella
Дата 25.10.2006, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



я бы на твоём месте использовал не DBGridKeyPress, а OnKeyDown

Код

procedure TForm1.DBGridKeyDown
begin
  if (Table1.State in [dsInsert]) or (Table1.State in [dsEdit]) then begin //так надёжней
    if (key=vk_return) and ((MessageBox(Application.ActiveFormHandle, 'Сохранить данные?', 'Внимание!', MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> idYes)) then Abort;
  end else begin
      Table1.Post;
      Table1.FlushBuffers;//принудительно заставляем винду сохранить данные на диск
       if i < hh    then begin 
         Table1.Append;
         Inc(i);
       end else
         DataSource1.AutoEdit1:=false;
  end;
end;


Добавлено @ 09:58 
только я тебе на Delphi код даю

Это сообщение отредактировал(а) Akella - 25.10.2006, 09:59
PM MAIL   Вверх
Elyad
Дата 25.10.2006, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



На счет FlushBuffers я уже отмечал, что он выдает об ошибке.
Прочитав по ссылке я нашел, что для запуска приложения необходимо как min 512 байт оперативки, а у меня только 256. Может в этом проблема?
Я описал еще такую функцию:
Код

procedure  DataSourceUpdateData()
begin
           if (Table1.State in [dsInsert]) or (Table1.State in [dsEdit])   then Table1.Refresh;
 end;              


и получил такую ошибку  stack overflow. т.е. в памяти не хватает места.
Значит в этом, что ли ошибка smile  
PM MAIL   Вверх
Akella
Дата 25.10.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



дамую, что так нельзя

Добавлено @ 10:38 
мне кажеться, что ты реализуешь неверный подход к редактированию/добавлению данных

Добавлено @ 10:38 
Код

procedure  DataSourceUpdateData()
begin
  if (Table1.State in [dsInsert]) or (Table1.State in [dsEdit])   then Table1.Refresh;
end; 


убери

Добавлено @ 10:45 
Цитата(Elyad @  25.10.2006,  10:13 Найти цитируемый пост)
Прочитав по ссылке я нашел, что для запуска приложения необходимо как min 512 байт оперативки,

может мегабайт. и про какой приложение ты имел ввиду?

Это сообщение отредактировал(а) Akella - 25.10.2006, 10:38
PM MAIL   Вверх
Elyad
Дата 25.10.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Цитата

Can't start Paradox: not enough memory
 (Невозможно запустить систему Paradox: не хватает памяти) 
Для запуска системы на автономном компьютере требуется минимум 512 Кбайт оперативной памяти, а при запуске в сети - 640. В зависимости от типа компьютера вы можете увеличить свободную память, уменьшая размер RAM-диска или спулера печати, или завершить некоторые резидентные программы. Если ни одно из этих решений не привело к успеху, необходимо добавить плату расширения памяти в компьютер (Rampage Board, Above Board и т.д.) 


А вы считаете, что недостаток памяти не может влиять на своевременное обновление памяти? smile 
PM MAIL   Вверх
Akella
Дата 25.10.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



а напиши-ка нам параметры компьютера, на котором работает программа.
PM MAIL   Вверх
Elyad
Дата 25.10.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Точно сказать не могу, но знаю что оперативки 256.
PM MAIL   Вверх
Akella
Дата 25.10.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



килобайт или мегабайт?

Добавлено @ 12:23 
Цитата(Elyad @  25.10.2006,  10:13 Найти цитируемый пост)
и получил такую ошибку  stack overflow

мне кажеться, что у тебя первичный индекс улетел в тёплые края  smile 

Это сообщение отредактировал(а) Akella - 25.10.2006, 12:22
PM MAIL   Вверх
Elyad
Дата 25.10.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



Ответ 256 мегабайт. А на счет первичного индекса я сегодня вечером посмотрю. smile 
PM MAIL   Вверх
SergeBS
Дата 25.10.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



Elyad
1.
Код

if TDataset.State in [dsEdit, dsInsert]) then 
begin
  TDataset.Post;
  TDataset.Refresh;
end;

2. При активации 2-й формы делай у ее датасета requery. Криво, но сработает.
А правильно: иметь датамодуль и в нем 1 датасет на 1 таблицу для всех форм, которые эту таблицу используют. Т.е. RTFM.
 
PM MAIL   Вверх
Elyad
Дата 26.10.2006, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



SergeBS
Спасибо за совет, сегодня попробую и этот метод smile 
А так я проблему уже решил: оказывается я открывал таблицу в новом окне при ее создании  А надо таки при каждой ее активизации. smile 
Поэтому тему закрываю!!!
Всем, кто участвовал в обсуждении этой темы ----- большое спасибо !!! smile 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1407 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.