Как правильно заполнить TMemDataSet?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как правильно заполнить TMemDataSet?

Сообщение nanosecond » 15.06.2010 22:36:01

Доброго времени суток, уважаемые.
В Lazarus новичок, делаю первые попытки воткнуться по аналогии с Delphi. Не получается. Подтолкните пожалуйста в нужном направлении. Тему уже и гуглил, и на форуме искал, и в доках ничего не нашёл. Кажется упускаю что-то очень простое.

Положил на форму TDBGrid, TDataSource, TMemDataSet. Связал их. Заполнил TMemDataSet.FieldDefs - добавил 4 поля с именами, типами и размером у string.
В FormCreate пытаюсь создать и заполнить TMemDataSet. Все компилируется и прогоняется нормалёк. Проблема в том, что грид показывает строки пустыми. Т.е. записи добавлены, имена полей в колонках отображаются, но значений в ячейках нет.
После присвоения значения полю ID тут же пытаюсь проверить его в переменной Test - оно всегда равно 0, как будто там ничего нет. Null при наведении мышки показывает три вопросительных знака ???, а в Evaluate/Modify вообще ничего не показывает.

Код: Выделить всё
var
  I: Integer;
  Test: Integer;
  Null: Boolean;
begin
  Randomize;
  mdsItems.CreateTable;
  mdsItems.Open;
  for I:=1 to 50 do
  begin
    mdsItems.Append;
    mdsItems.FieldByName('ID').AsInteger:=I; 
Test:=mdsItems.FieldByName('ID').AsInteger; // Всегда возвращает 0 почему-то
Null:=mdsItems.FieldByName('ID').IsNull;
    mdsItems.FieldByName('Title').AsString:='Строка '+IntToStr(I);
    mdsItems.FieldByName('Date').AsDateTime:=Now-I;
    mdsItems.FieldByName('Number').AsFloat:=Random;
    mdsItems.Post;
  end;
end;


Вместо AsInteger и аналогичных AsXXX пробовал Value, также пробовал следующими двумя способами
Код: Выделить всё
   mdsItems.SetFields([I, 'Строка '+IntToStr(I), Now-I, Random]); и так пробовал
   mdsItems.AppendRecord([I, 'Строка '+IntToStr(I), Now-I, Random]); // последний вариант


Lazarus 0.9.26, FPC 2.2.2
nanosecond
незнакомец
 
Сообщения: 5
Зарегистрирован: 15.06.2010 20:49:25

Re: Как правильно заполнить TMemDataSet?

Сообщение Mr.Smart » 15.06.2010 22:51:37

Попробуйте за место Append Insert
Я тоже долго ломал голову, почему так не работает :oops: Хотя всё логично...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Как правильно заполнить TMemDataSet?

Сообщение nanosecond » 15.06.2010 23:21:52

Обновил Lazarus до 0.9.28.2 FPC 2.2.4.
Заменил Append на Insert. Результат тот же.

Добавлено спустя 12 часов 15 минут 14 секунд:
И кстати, после установки Lazarus до 0.9.28.2 при старте IDE появились вот такие идущие друг за другом сообщения:

1. Пакет "jcfidelazarus" установлен, но не найдено корректного файла пакета (.lpk).
Был создан неработающий пакет-пустышка.

2. Ошибка регистрации
Package: "jcfidelazarus 0.0"
Имя модуля "JcfIdeRegester"
Модуль не найден "JcfIdeRegester"

3. Ошибка регистрации
Package: "TACharLazarusPkg 0.0"
Имя модуля "TASeriesEditor"
Модуль не найден "TASeriesEditor"

4. Ошибка регистрации
Package: "TACharLazarusPkg 0.0"
Имя модуля "TASources"
Модуль не найден "TASources"

5. Ошибка регистрации
Package: "TACharLazarusPkg 0.0"
Имя модуля "TADbSource"
Модуль не найден "TADbSource"

(везде жал "пропуск")
Может быть это как-то связано с темой? Хотя версия 0.9.28.2 запускалась гладко, и всё-же... И как побороть эти сообщения? Как всё наладить?
nanosecond
незнакомец
 
Сообщения: 5
Зарегистрирован: 15.06.2010 20:49:25

Re: Как правильно заполнить TMemDataSet?

Сообщение Brainenjii » 16.06.2010 11:41:22

Закрыть лазарус, удалить старые файлы с конфигурацией, запустить лазарус, перекомпилировать с нужными компонентами
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Как правильно заполнить TMemDataSet?

Сообщение nanosecond » 16.06.2010 12:34:49

Спасибо всем ответившим. Особая благодарность вам, Brainenjii. После вашего сообщения пытался найти файлы конфигурациии, о которых вы говорите. Не нашёл. Снёс вообще всё, что было в папке lazarus и установил версию 0.9.28.2 заново. И, о чудо, пример заработал!

Подскажите, о каких файлах конфигурации шла речь? Кажется, мне это ещё понадобится. Даже не смотря на то, что я деинсталировал Lazarus и потом удалил вообще всё, что осталось в его папке после деинсталяции, при старте лазаруса после установки он открыл тот же проект, с которым я возился до деинсталяции. И язык в нём русский, хотя я при установке выбрал английский... Странно как-то всё это. Что-то хранится в реестре? В папке \Windows?
nanosecond
незнакомец
 
Сообщения: 5
Зарегистрирован: 15.06.2010 20:49:25

Re: Как правильно заполнить TMemDataSet?

Сообщение dunin » 16.06.2010 13:36:43

nanosecond писал(а):Подскажите, о каких файлах конфигурации шла речь? Кажется, мне это ещё понадобится. Даже не смотря на то, что я деинсталировал Lazarus и потом удалил вообще всё, что осталось в его папке после деинсталяции, при старте лазаруса после установки он открыл тот же проект, с которым я возился до деинсталяции. И язык в нём русский, хотя я при установке выбрал английский... Странно как-то всё это. Что-то хранится в реестре? В папке \Windows?

Что странного? Так и должно быть. Программа отдельно - настройки отдельно.

Здесь настройки:
%UserProfile%\Local Setting\Application Data\Lazarus
можно смело убивать - новые создадутся.

ps/ А ведь поиском прошарить по дискам по маске *lazarus* думаю какбэ не сложно...
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Как правильно заполнить TMemDataSet?

Сообщение nanosecond » 16.06.2010 19:02:54

dunin, спасибо. Слишком много неизвестных, мозги не справляются. :) Ещё вчера удивлялся, что народ умудряется как-то в этой среде программировать, и даже нахваливают. Сегодня уже чуть-чуть легче. Надеюсь, что втянусь помалу.
nanosecond
незнакомец
 
Сообщения: 5
Зарегистрирован: 15.06.2010 20:49:25

Re: Как правильно заполнить TMemDataSet?

Сообщение Brainenjii » 17.06.2010 08:10:30

...пытался найти файлы конфигурациии, о которых вы говорите. Не нашёл. Снёс вообще всё...

Нельзя не вспомнить :-D
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Как правильно заполнить TMemDataSet?

Сообщение nanosecond » 17.06.2010 20:24:11

Нельзя не вспомнить

Ну так помогло ведь! И TMemDataSet, кстати, теперь заполняется правильно.
nanosecond
незнакомец
 
Сообщения: 5
Зарегистрирован: 15.06.2010 20:49:25

Re: Как правильно заполнить TMemDataSet?

Сообщение ArtHome » 12.11.2011 16:42:17

А как очистить содержимое TMemDataSet? В делфи закрыл и заново открыл и он пустой. А тут у меня все старые данные на месте...
ArtHome
незнакомец
 
Сообщения: 3
Зарегистрирован: 04.09.2011 23:32:01

Re: Как правильно заполнить TMemDataSet?

Сообщение Vadim » 13.11.2011 08:59:42

ArtHome
Можно использовать метод Clear(False), если не нужно уничтожать структуру таблицы или Clear(True), если одновременно нужно очистить и структуру.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как правильно заполнить TMemDataSet?

Сообщение Sharfik » 27.08.2016 00:17:30

....
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 238

Рейтинг@Mail.ru