Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1154630023
flaxe
2006-08-03 22:33
2006.09.17
Поиск путей (A*, волновой алгоритм)


1-1154425076
DevilDevil
2006-08-01 13:37
2006.09.17
Ширина Excel столбца в пикселях


2-1156926858
Сергей1
2006-08-30 12:34
2006.09.17
delphi


6-1146013749
tigra
2006-04-26 05:09
2006.09.17
TIdAttachment


15-1156633166
demikasy
2006-08-27 02:59
2006.09.17
океан чувств





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский