Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при использовании TRxMemoryData [WinXP]


mefodiy ©   (2011-01-09 22:54:00) 

При использовании кода, приведенного далее, получаю ошибку
"Access violation..." после добавления 3-й строки

TempTable: TRxMemoryData;
ADQuery1: TADQuery;

procedure TForm1.Button1Click(Sender: TObject);
begin
 with TempTable do
 begin
   with FieldDefs do
   begin
     Clear;
     Add('F1',   ftString,   8,False);
     Add('F2',   ftString,  50,False);
     ...
   end;
   Open;
 end;
 with ADQuery1 do
 begin
   Close;
   SQL.Clear;
   SQL.Add('SELECT F1,F2,... FROM MyTable ORDER BY F1');
   Open;
   First;
   while not Eof do
   begin
     TempTable.Append;
     TempTable.FieldByName('F1').AsString    := FieldByName('F1').AsString;
     TempTable.FieldByName('F2').AsString    := FieldByName('F2').AsString;
     ...
     TempTable.Post;
     Next;
   end;
   Close;
 end;
end;

Что делаю не так?
Спасибо.


Anatoly Podgoretsky   (2011-01-11 11:26:00) [1]

> sniknik  (11.01.2011 02:00:10)  [10]

Кремлевскую таблетку нужно, съел и все здорово.


sniknik   (2011-01-11 02:00:00) [2]

блин, вечные "велосипеды", вечные поиски "чудодейственных" компонент...
разберитесь уже с тем, что используете, без метаний. изучайте ADO раз начали использовать... это все что тут нужно. и позволяет обойтись без бессмысленных "перекладываний" из одного в другое.

> Возникла необходимость
честное слово, как только в вопросах возникает эта фраза, так сразу мысль - единственная необходимость тут в программисте, а не дворнике за клавиатурой.
и вовсе тут не недостаток знаний причина (чем "оправдываются" новички), а нежелание их получать... хотят не учится, а получить готовый рецепт, по мышлению дворника "дайте инструмент, буду работать", а если инструмент сложноват то "дайте другой, тогда буду работать"... а научится, разобраться? мануалы почитать, возможности по изучать?

> если сильно нужно.
в любом случае. и не в гриде, а "вообще".
"заваривая" кашу из десятка технологий, ни в одной нормально не разберешься, да и ошибок/кривизны, в которой после черт ногу сломит, наделаешь с гарантией.


Дмитрий Белькевич   (2011-01-11 00:00:00) [3]

На все вопросы, думаю, ответит гугл. Только, думается, нет особенного смысла тянуть в проект мемдатасет - а разбираться с редактированием мускла непосредственно в гриде, если сильно нужно.


mefodiy   (2011-01-10 11:29:00) [4]


> kbmMemTable, как вариант.

1. Поддерживает ли он юникод?
2. Есть ли вариант для D2010?
3. Где взять?


RWolf   (2011-01-10 11:23:00) [5]

kbmMemTable, как вариант.


mefodiy   (2011-01-10 11:10:00) [6]

Делал по такой схеме:
С помощью Query считывал данные из MySQL, на компьютере пользователя создавал временный dbf-файл, закачивал туда append-ом все строки. Пользователь вводил или корректировал данные в DBGrid-е, а затем я также построчно считывал информацию из dbf-файла и корректировал данные в таблицах MySQL.
Из-за перехода на D2010 возникла проблема с юникодом. Но, кажется,  RxMemoryData тоже не поддерживает юникод (это я выяснил только-что).
Что посоветуете ипользовать? Может есть компоненты dbf с юникодом?
Или использовать что-то дркгое вместо dbf?


Плохиш   (2011-01-10 10:14:00) [7]


> Возникла необходимость перехода на юникод. dbf-файлы юникод
> не поддерживают, поэтому решил использовать RxMemoryData.

Кто на ком лежал?

> Ошибка выдается в D2010. Из-за чего это может быть?

Неужели из d2010 убрали отладчик?


mefodiy   (2011-01-10 08:22:00) [8]

1. После проверки оказалось, что код в D7 нормально работает. Ошибка выдается в D2010. Из-за чего это может быть?
2. Откуда возникла необходимость? В D7 я использовал как временную таблицу для редактирования данных в DBGrid dbf-файл. Возникла необходимость перехода на юникод. dbf-файлы юникод не поддерживают, поэтому решил использовать RxMemoryData.


Германн   (2011-01-10 02:44:00) [9]


>  Amoeba_   (10.01.11 01:53) [2]


> раз запрос в одну строку, то сразу используем это св-во

???
Запрос "не в одну строку" - это только вариант написания кода.
Свойство SQL.Text следует использовать по возможности всегда.
Хотя я в этом не уверен.


Amoeba_   (2011-01-10 01:53:00) [10]

Чисто техническое замечание по коду.
Вместо такого

  SQL.Clear;
  SQL.Add('SELECT F1,F2,... FROM MyTable ORDER BY F1');
  Open;
  First;

необходимо и достаточно

  //SQL.Clear;
  //SQL.Add('SELECT F1,F2,... FROM MyTable ORDER BY F1');
  SQL.Text := 'SELECT F1,F2,... FROM MyTable ORDER BY F1';
 //раз запрос в одну строку, то сразу используем это св-во  
  Open;
  //First; Это лишнее, т.к. и так окажемся на 1-й записи


sniknik   (2011-01-09 23:47:00) [11]

> Что делаю не так?
вообще все... т.е. сама по себе передача данных из одного датасета в памяти, в другой датасет памяти никакого смысла не имеет.

остальное видимо карма... в чем именно неважно, может данные не поддерживаемые типа нил встретились или еще чего.
вот закоментарь передачу всех полей кроме первого, поменялось что то?


Наверх

Титульная страница Поиск, карта сайта Написать письмо