Форум: "Базы";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизПеренос данных из запроса в таблицу!! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.051 c