-
ВладОшин © (16.03.17 16:50) [0]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 -
> Что бы быстрее, чем циклы крутить
нужно нормальный 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]Спасибо