Конференция "Базы" » recordset в базу [D6, D7, MSSQL]
 
  • ВладОшин © (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
  • 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]
    Спасибо
 
Конференция "Базы" » recordset в базу [D6, D7, MSSQL]
Есть новые Нет новых   [134427   +34][b:0][p:0.001]