Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.ru

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

recordset в базу [D6, D7, MSSQL]


ВладОшин ©   (16.03.17 16:50

aqXXX: TAdoQuery

коллеги из разных мест (удаленных) делают

 aqQR.Open;
 aqQR.SaveToFile('QueryResult.XML',pfXML);

и отсылают почтой, через сервисы всякие, яндекс-диск и т.п.
я делаю

 aqRQR.LoadFromFile('QueryResult.XML');

и теперь надо загнать в таблицу, гоняю цикл

   aqRQR.First;
   while not aqRQR.Eof do
   begin
      for i := 0 to aqIns.Parameters.Count - 1 do
        aqIns.Parameters[i].Value := aqRQR.Fields[i].Value;
      aqIns.ExecSQL;
      aqRQR.Next;
   end;


aqRQR - не связан ни с каким Connections. Да и с каким его связывать?..

вопрос.
Можно же как-то сказать ADO, вроде, "свали все записи в некую таблицу" ?
Что бы быстрее, чем циклы крутить

MSSQL, D6|D7


sniknik ©   (16.03.17 17:27[1]

> Что бы быстрее, чем циклы крутить
нужно нормальный xml, а не pfXML чтобы его прям MSSQL-ем парсить/вставлять.
а циклы быстрее крутить можно отключив контролы DisableControls у рекордсетов. + не каждый раз запрос на вставку делать, а заполнять рекордсет в batch update mode (ltBatchOptimistic) и после применять скопом. хотя можно и запросы на вставку ускорить если не ждать бессмысленного ответа от сервера (подобрать ExecuteOptions), ну и использовать ADOCommand вместо Query.


rrrrr ©   (16.03.17 17:56[2]

insert into .....
select *
from openxml()
with...


rrrrr ©   (16.03.17 18:28[3]

declare @idoc int, @xmlblob varchar(max);

set @xmlblob = '<?xml version="1.0" encoding="windows-1251"?><ненормальный_xml><row f1="мама" f2="3.62"/><row f1="мыла" f2="4.12"/><row f1="папу" f2="0.03"/></ненормальный_xml>';
exec sp_xml_preparedocument @idoc OUTPUT, @xmlblob;

select *
from OPENXML (@idoc, '//row', 1)
with(fieldOne varchar(255) './@f1',
    fieldTwo numeric(19,2)'./@f2'
     );
exec sp_xml_removedocument @idoc;

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

т.е грузим файл в DOM,
узел := селектСинглНод(<xpath к паренту строк>)

ADOCommand.Params['blablabla'] := узел.xml;


ухты ©   (16.03.17 19:05[4]


> ненормальный_xml
это нормальный )


ВладОшин ©   (16.03.17 23:34[5]

Спасибо


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо