Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.17;
Скачать: CL | DM;

Вниз

Перенос данных из запроса в таблицу!!   Найти похожие ветки 

 
PhillipJFry   (2006-07-09 11:23) [0]

Подскажите, как сделать групповой перенос. Я работаю через ADO с базой данных  Access.  Компонент ADOQuery1 подключен к базе и выполняет запрос типа

SELECT FROM
WHERE
UNION
SELECT FROM
WHERE

В результате чего, ADOQuery1 выбирает из двух таблиц нужные данные.
Также у меня есть компонент TMemTableEh из пакета EHLib. Этот компонент держит все данные в памяти и работает как ни с чем несвязанный массив данных.

Вот такой вопрос, как добавить результат запроса ADOQuery1 в таблицу TMemTableEh не используя цикл??


 
sniknik ©   (2006-07-09 11:36) [1]

не получится... если конечно в твоем TMemTableEh уже не встроена эта реализация, как например в стандартном ClientDataSet (подключить через провайдер данных и просто Open).

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


 
PhillipJFry   (2006-07-09 11:56) [2]

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


 
sniknik ©   (2006-07-09 12:06) [3]

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


 
PhillipJFry   (2006-07-09 12:14) [4]

мне нужно следующее:

1. выполнить запрос
SELECT FROM
WHERE
UNION
SELECT FROM
WHERE

и скинуть его результат в некую таблицу memTable

2.опять выполнить запрос
SELECT FROM
WHERE
UNION
SELECT FROM
WHERE

и добавить данные в ту же таблицу memTable

...

таблица memTable это таблица в памяти , которая не связана не с одной таблицей на жёстком диске.

Подскажите, как реализовать такой механизм? и какой компонент использовать для формирования memTable (таблицы в памяти)?


 
PhillipJFry   (2006-07-09 12:21) [5]

запрос

SELECT FROM
WHERE
UNION
SELECT FROM
WHERE

содержит параметры. Значения которых заранее не известны.Они зависят от самого результата запроса. Вот я и хочу, выполнить запрос, затем перекинуть его в некую таблищц memTable, затем в ней проанализировать данные и на основе их опять  выполнить запрос и т.д. А затем эту совокупность данных что получатся в результате запросов в таблице memTable , уже использовать в другох целях.


 
sniknik ©   (2006-07-09 12:52) [6]

компонент однозначно ADODataSet, не в принципе можно и другой (тот же клиентский) но зачем? раз уже используем ADO и но позволяет...

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

вот копия не совсем элементарно... поэтому пример

uses ADOInt, ComObj;

function CopyRecordSet(RecordSet: _RecordSet): _RecordSet;
var adoStream: OleVariant;
begin
 adoStream:= CreateOleObject("ADODB.Stream");
 Variant(RecordSet).Save(adoStream, adPersistADTG);
 Result:= CreateOleObject("ADODB.RecordSet") as _RecordSet;
 Result.CursorLocation:= adUseClient;
 Result.Open(adoStream, EmptyParam, adOpenStatic, adLockBatchOptimistic, Integer(adOptionUnspecified));
 adoStream:= UnAssigned;
end;

использовать
ADODataSet2.Recordset:= CopyRecordSet(ADODataSet1.Recordset);

PhillipJFry   (09.07.06 12:21) [5]
это у тебя уже ошибка в логике, которую ты даже не пытаешся исправить а закрываеш програмированием. но не боись оно еще вылезет, не здесь так в другом месте.
подзапросом не пробовал к примеру делать? так чтобы "анализ" был непосредственно в нем, а запрос выдавал все. (хотя подозреваю счас выяснится что и структура базы несколько "нестандарная"... ;)


 
PhillipJFry   (2006-07-09 15:28) [7]

а как использовать ADODataSet1?
ругается на Коннект или строку конекта, а к чему его подключать?


 
sniknik ©   (2006-07-09 17:47) [8]

> а как использовать ADODataSet1?
а как ты используеш ADOQuery1? это тоже самое (говорил же, ADOQuery, это слегка изуродованный ADODataSet), в нем должны быть данные для копирования. т.е. подключаеш (аналогично ADOQuery) к конекту, вставляеш запрос, выполняеш. и вот когда тум уже есть данные  копируеш в другой "в памяти".


 
PhillipJFry   (2006-07-09 17:52) [9]

Спасибо, теперь буду мучить :)



Страницы: 1 вся ветка

Текущий архив: 2006.09.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
6-1146328113
VictorN
2006-04-29 20:28
2006.09.17
cgi + рисунок


15-1156771068
worldmen
2006-08-28 17:17
2006.09.17
Установка SUSE 9.


2-1156856626
redlord
2006-08-29 17:03
2006.09.17
видимость переменных


15-1156523658
Vidog
2006-08-25 20:34
2006.09.17
Функции Explode и StrLowwer(StrUpper)


2-1157019200
yel
2006-08-31 14:13
2006.09.17
Как послать сообщение?