![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при использовании 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]> Что делаю не так?
вообще все... т.е. сама по себе передача данных из одного датасета в памяти, в другой датасет памяти никакого смысла не имеет.
остальное видимо карма... в чем именно неважно, может данные не поддерживаемые типа нил встретились или еще чего.
вот закоментарь передачу всех полей кроме первого, поменялось что то?