Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Без Requery не видит новой записи... MS Access/ADO/Ole Jet 4.0 
:(
    Опции темы
MakedoneZ
Дата 3.1.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 22.12.2006
Где: Азербайджан,солне чный Баку

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



Код

//Creating new question
procedure TfrmMain.NewQuestion;
begin
  with dmData.atbQuestions do
    begin
      twDisplay.Selected := twDisplay.Items.Add(TTreeNode.Create(twDisplay.Items),'Вопрос №' + IntToStr(RecordCount+1));

      Append;
      Fields.FieldByName('SubcathegoryID').AsInteger := dblcbxSubcathegory.KeyValue;
      Post;
      Requery;
      Last;

      ViewQuestData;
    end;
end;


Если я уберу Requery,то при последующей попытке изменить данные в только что созданной записи,он мне выдает ошибку: 'Row cannot be located for updating. Some values may have been changed since it was last read'.
Добавил запись в конец,изменил значения полей добавленной записи,подтвердил создание записи.
В чем проблема? Почему надо перезапрашивать данные из таблицы,чтоб иметь доступ к ныне созданной записи? 

Вот как изменяю данные:
Код

//Appling changes to a question data
procedure TfrmMain.bbnQuestApplyClick(Sender: TObject);
begin
  try
    with dmData.atbQuestions do
      begin
        Edit;
        if imgPath <> '' then
          begin
            if imgPath = '_del_' then
              begin
                (dmData.atbQuestions.Fields.FieldByName('Image') as TBlobField).Clear;
                DisplayOLEs(spQuestImg,btnQuestImgAdd,btnQuestImgRem,bbnQuestImgOpen,mdEmpty);
              end
            else
              begin
                (dmData.atbQuestions.Fields.FieldByName('Image') as TBlobField).LoadFromFile(imgPath);
                DisplayOLEs(spQuestImg,btnQuestImgAdd,btnQuestImgRem,bbnQuestImgOpen,mdFull);
              end;
          end;

        if sndPath <> '' then
          begin
            if sndPath = '_del_' then
              begin
                (dmData.atbQuestions.Fields.FieldByName('Sound') as TBlobField).Clear;
                DisplayOLEs(spQuestSnd,btnQuestSndAdd,btnQuestSndRem,bbnQuestSndOpen,mdEmpty);
              end
            else
              begin
                (dmData.atbQuestions.Fields.FieldByName('Sound') as TBlobField).LoadFromFile(sndPath);
                DisplayOLEs(spQuestSnd,btnQuestSndAdd,btnQuestSndRem,bbnQuestSndOpen,mdFull);
              end;
          end;

        if vidPath <> '' then
          begin
            if vidPath = '_del_' then
              begin
                (dmData.atbQuestions.Fields.FieldByName('Video') as TBlobField).Clear;
                DisplayOLEs(spQuestVid,btnQuestVidAdd,btnQuestVidRem,bbnQuestVidOpen,mdEmpty);
              end
            else
              begin
                (dmData.atbQuestions.Fields.FieldByName('Video') as TBlobField).LoadFromFile(vidPath);
                 DisplayOLEs(spQuestVid,btnQuestVidAdd,btnQuestVidRem,bbnQuestVidOpen,mdFull);
              end;
          end;

        Fields.FieldByName('Content').AsString := memQuestText.Text;
        Fields.FieldByName('Type').AsInteger   := cbxQuestType.ItemIndex;
        Fields.FieldByName('Level').AsString   := cbxQuestLevel.Text;
        Post;
      end;

    ShowMessage('Данные модифицированы');
  except
    ShowMessage('При попытке внести изменения,произошла ошибка.Повторите попытку.В случае повтора ошибки,обратитесь к поставщику ПО'); //Т.е. ко мне... Гы :-)
  end;
end;


PS.Рекверить все данные просто не могу,когда записей 1000 еще ОК.
Но проверил на 10 000,юзер будет ждать примерно секунду.А если их будет 100 000? Не дело...

PM ICQ   Вверх
Rodman
Дата 4.1.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Цитата(MakedoneZ @  3.1.2007,  21:15 Найти цитируемый пост)
В чем проблема? Почему надо перезапрашивать данные из таблицы,чтоб иметь доступ к ныне созданной записи? 

данные самостоятельно не обновятся... это делается вручную...



Цитата(MakedoneZ @  3.1.2007,  21:15 Найти цитируемый пост)
Но проверил на 10 000,юзер будет ждать примерно секунду.А если их будет 100 000? Не дело...

о да... это же Access... он расчитан на на маленькие базы с кол-вом записей около 100000... 
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Savek
Дата 4.1.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

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



Цитата(Rodman @  4.1.2007,  09:35 Найти цитируемый пост)
о да... это же Access... он расчитан на на маленькие базы с кол-вом записей около 100000... 

При правильной заточке структуры/индексов/логике работы это далеко не предел. 

А 100 000 записей тащить с любой другой БД будет накладно по времени (ИМХО).  
PM MAIL   Вверх
Mephisto
Дата 4.1.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Цитата(Savek @  4.1.2007,  11:15 Найти цитируемый пост)
А 100 000 записей тащить с любой другой БД будет накладно по времени (ИМХО).   

Именно ИМХО. Потому как Oracle, MS SQL, PostgreSQL и.т.д. расчитаны на десятки миллионов!

А обновление лучше делать при помощи Close и Open.
PM   Вверх
MakedoneZ
Дата 5.1.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 22.12.2006
Где: Азербайджан,солне чный Баку

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



Цитата(Rodman @  4.1.2007,  09:35 Найти цитируемый пост)
о да... это же Access... он расчитан на на маленькие базы с кол-вом записей около 100000...  

((Ms Access  сакс)AND(Ms Access мастдай)),expression always evaluates to true.  smile
Цитата(Mephisto @  4.1.2007,  12:30 Найти цитируемый пост)
А обновление лучше делать при помощи Close и Open.

atbQuestions это ADOTable.

Добавлено @ 17:27 
Цитата(Rodman @  4.1.2007,  09:35 Найти цитируемый пост)
о да... это же Access

В будущем имеющуюся прогу должен буду перевести на сетевой случай.
А с Interbase'ом будут те же проблемы? В плане скорости.Если да,то что посоветуете.
Таблицы уж незнаю как дальше оптимизировать.Индексы проставил везде где надо.
В коде вроде оптимально,незнаю вместо Locate'а использую RecNo,потому что данные из таблицы последовательно идут в TTreeView.
Нахожу данные так: 
Код

atbQuestions.RecNo := twDisplay.Selected.Index + 1;


Это сообщение отредактировал(а) MakedoneZ - 5.1.2007, 17:39
PM ICQ   Вверх
Sansa
Дата 5.1.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

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



По моему, это реализация ADO силами Borland, так как сам сталкивался с такой же траблой. Со всеми остальными движками, которые я пробовал (sqlite, mysql, paradox, oracle) такого не наблюдается.
В данном случае вышел из положения с помощью SQL, т.е. вместо
Код

Fields.FieldByName('Content').AsString := memQuestText.Text;
...
...

использую (перед началом редактирования сохраняю значение первичного ключа в переменную, например RecordID)
Код

SQL.Add(format('UPDATE t1 SET t1.f1=%s .... WHERE t1.id = %s',[memQuestText.Text, ... , RecordID]));

Картинки можно вставлять с помощью параметров.
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
Vas
Дата 5.1.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MakedoneZ @  3.1.2007,  22:15 Найти цитируемый пост)
А если их будет 100 000?

А вы не пробовали поработать с таким кол-вом записей например в таблице Excel? Нафига пользователю столько записей на экране,  используйте TADOQuery, а не TADOTable и открывайте запрос по условию.

Это сообщение отредактировал(а) Vas - 5.1.2007, 18:35


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


Эксперт
***


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

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



Mephisto, 
Цитата
 Именно ИМХО. Потому как Oracle, MS SQL, PostgreSQL и.т.д. расчитаны на десятки миллионов!

Не путай ОБЩЕЕ количество записей с количеством переданных. Поэтому у тебя ИМХО - неубедительное.
Цитата
А обновление лучше делать при помощи Close и Open. 

Угу. И лучшее средство от насморка - гильотина.
Кончай в заблуждение людей вводить.

PM MAIL   Вверх
Sansa
Дата 9.1.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

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



Цитата

Не путай ОБЩЕЕ количество записей с количеством переданных. Поэтому у тебя ИМХО - неубедительное.

Для того, чтобы их передать, сначала их нуна выбрать. Мне кажется, достаточно убедительное (исходя из однофайловой [да еще и внутренне сложной] структуры BD Access). 
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
Mephisto
Дата 10.1.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Цитата(SergeBS @  9.1.2007,  09:36 Найти цитируемый пост)
Не путай ОБЩЕЕ количество записей с количеством переданных.

Насколько я понял используется Table, да еще и с двусторонним курсором!!!!!!
PM   Вверх
Mephisto
Дата 10.1.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


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

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



Цитата(SergeBS @  9.1.2007,  09:36 Найти цитируемый пост)
Угу. И лучшее средство от насморка - гильотина.
Кончай в заблуждение людей вводить.

Исправляюсь. Посмотрел что делает. Действительно в некоторых местах его корректней использовать...
PM   Вверх
SergeBS
Дата 10.1.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Sansa, 
Весь тред:
Цитата

Savek 
>>А 100 000 записей тащить с любой другой БД будет накладно по времени (ИМХО).   
Mephisto
>>Именно ИМХО. Потому как Oracle, MS SQL, PostgreSQL и.т.д. расчитаны на десятки миллионов!
SergeBS 
>>Не путай ОБЩЕЕ количество записей с количеством переданных. Поэтому у тебя ИМХО - неубедительное.

Имелось в виду ИМХО Mephisto.
Комментарий: только скорбные на голову тащат на клиента ВСЕ записи.
Так понятно?

Mephisto, 
Цитата
Насколько я понял используется Table, да еще и с двусторонним курсором!!!!!! 

Table - понятно, а вот что такое двусторонний курсор?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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