7.7 Текст запроса к SQL-базе больше 255 символов

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Sol, 4 авг 2010.

  1. TopicStarter Overlay
    Sol
    Offline

    Sol Опытный в 1С

    Регистрация:
    14 ноя 2008
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Добрый день. Помогите решить проблему. В теле процедуры по кускам собираю запрос к внешней SQL-базе. Текст запроса храню в переменной, затем передаю её :

    Соединение=СоздатьОбъект("ADODB.Connection");
    Соединение.Execute(ТекстЗапроса);

    В переменной хранится не более 255 символов, что не подходит. Запрос на много больше с кучей инсертов и селектов и должен выполняться сразу и весь (присутствуют SCOPE_IDENTITY() и т.д.)
    Очень нужна помощь в решении проблемы.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    попробуй так:

    КусокЗапроса+Симв(10)+Симв(13)+ЕщеКусок
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Ээээ....писал запрос для SQL через ADO - даже не заморачивался длиной, запрос достаточно большой, все ОК.
  4. TopicStarter Overlay
    Sol
    Offline

    Sol Опытный в 1С

    Регистрация:
    14 ноя 2008
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Если ты текст запроса пишешь прям в коде весь, то работает нормально, а если собираешь по кускам, то срезает :(

    P.S. Простой пример:
    ТекстЗапроса = "INSERT INTO [SWIND_CONFORMITY_PROFILSYS_TABLE] (ARTICUL) VALUES ('"+ТекущаяПрофильнаяСистема+"')"+Симв(10)+Симв(13);
    ТекстЗапроса = ТекстЗапроса + "INSERT2 INTO [SWIND_CONFORMITY_PROFILSYS_TABLE] (ARTICUL_SUPER_OKNA) VALUES ('"+ТекущаяПрофильнаяСистема+"')"+Симв(10)+Симв(13);
    ТекстЗапроса = ТекстЗапроса + "INSERT3 INTO [SWIND_CONFORMITY_PROFILSYS_TABLE] (ARTICUL) VALUES ('"+ТекущаяПрофильнаяСистема+"')"+Симв(10)+Симв(13);
    ТекстЗапроса = ТекстЗапроса + "INSERT4 INTO [SWIND_CONFORMITY_PROFILSYS_TABLE] (ARTICUL) VALUES ('"+ТекущаяПрофильнаяСистема+"')"+Симв(10)+Симв(13);
    ТекстЗапроса = ТекстЗапроса + "INSERT5 INTO [SWIND_CONFORMITY_PROFILSYS_TABLE] (ARTICUL) VALUES ('"+ТекущаяПрофильнаяСистема+"')"+Симв(10)+Симв(13);
    ТекстЗапроса = ТекстЗапроса + "INSERT6 INTO [SWIND_CONFORMITY_PROFILSYS_TABLE] (ARTICUL) VALUES ('"+ТекущаяПрофильнаяСистема+"')"+Симв(10)+Симв(13);
    ТекстЗапроса = ТекстЗапроса + "INSERT7 INTO [SWIND_CONFORMITY_PROFILSYS_TABLE] (ARTICUL) VALUES ('"+ТекущаяПрофильнаяСистема+"')"+Симв(10)+Симв(13);

    Срезается пол переменной :(
  5. TopicStarter Overlay
    Sol
    Offline

    Sol Опытный в 1С

    Регистрация:
    14 ноя 2008
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Не сработало :(
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    ээээ....кхм.....я мож чего недопонимаю, но "срезается пол переменной" - такого быть в принципе не может. Текст запроса в ADO должен попадать в полном объеме.

    попробуй сделать так:

    Соединение = Новый COMОбъект("ADODB.Connection");
    Команда = Новый COMОбъект("ADODB.Command");
    RS = Новый COMОбъект("ADODB.Recordset");
    Если Соединение.State = 0 Тогда
    Соединение.ConnectionString = "<СтрокаСоединения>";
    Соединение.Open();
    КонецЕсли;

    Команда.ActiveConnection = Соединение;
    Команда.CommandText = "<ТекстЗапроса>";
    RS = Команда.Execute();

    Я таким образом выполнил, например такой запрос:
    |Select
    | A.NAME,
    | A.Action_Type,
    | A.Action_DATETIME,
    | A.summa_dolga,
    | A.number_dogovor,
    | A.name_dogovor,
    | B.Number
    |From
    | A_TASKS_Calls_abons A,
    | A_TASKS_Calls_Abons_numbers B
    |Where
    | B.IDTASKS_CALLS_ABON = A.ID
    | AND A.IDTASK = " + IDTask;
    IDTASK - число.

    Проверь, чтобы строковые значения были ТОЧНО заключены в " ' ", а не в кавычки.
  7. TopicStarter Overlay
    Sol
    Offline

    Sol Опытный в 1С

    Регистрация:
    14 ноя 2008
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    База 1С файловая, после сборки текста запроса смотрю в отладчике в табло значение переменной и там обрезано.
    Пример твой попробую.
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    от типа базы 1С - точно не зависит. Текст запроса просто так обрезаться не может...может он просто отображается в отладчике "сокращенным"?
  9. TopicStarter Overlay
    Sol
    Offline

    Sol Опытный в 1С

    Регистрация:
    14 ноя 2008
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Запрос в 12 МБ (70 тыс строк) собрался, при его Execute через 7-8 секунд 1С-ка вываливается с JIT-ошибкой.
    Кроме как разбивать запрос на части и выполнять отдельно, есть какой-нибудь способ решения?
    Буду очень признателен!
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А оптимизировать текст никак не получается?
    Просто даже не представляю что можно напихать в 12МБ текста запроса.
  11. poiuy
    Offline

    poiuy Опытный в 1С

    Регистрация:
    12 окт 2010
    Сообщения:
    170
    Симпатии:
    0
    Баллы:
    26
    Не лепи все в одну строку и все будет ОБ
    типа надо .....
    |Select
    | A.NAME,
    | A.Action_Type,
    | A.Action_DATETIME,
    | A.summa_dolga,
    | A.number_dogovor,
    .......
    а не
    |Select A.NAME, A.Action_Type, A.Action_DATETIME, A.summa_dolga, A.number_dogovor .....
  12. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    поддержу Бухгалтерского Угодника. Тут дело видимо в том, что пытаются выполнить одни и те же действия одним запросом, например добавление/обновление в БД. Что лучше один большой запрос с 30 тыс инсертов или 30 тыс запросов на добавление по одной? :) В цикле запрос выполняйте по чутку и не парьтесь
  13. TopicStarter Overlay
    Sol
    Offline

    Sol Опытный в 1С

    Регистрация:
    14 ноя 2008
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    У нас производство пластиковых окон. Из одной расчетной программы инфа по договору клиента выгружается в текстовый файл, затем обработкой 1С этот файл лопатится и пишется в производственную базу SQL. В запросе пишется вся спецификация изделия, поэтому ничего лишнего нет.
  14. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А если пойти через рекордсет, а не запросом? Не проще ли будет?
  15. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Какая то у Вас странная производственная база :)
    Делайте хранимую процедуру в SQL, вызывайте ее из 1С.
  16. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    "лопатишь" добро в ТЗ, потом в цикле по ТЗ обновляешь БД.
    Не может быть что на одно изделие 70 тыс строк. Если есть потворы - значит можно загнать в цикл/функцию
  17. TopicStarter Overlay
    Sol
    Offline

    Sol Опытный в 1С

    Регистрация:
    14 ноя 2008
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Это как?

    У меня в основном запись в базу. Запрос с кучей инсертов и селектов, присутствуют SCOPE_IDENTITY()

    Нормальная база. Ты просто мало знаешь о пласт. окнах ;)
    Лично для меня проще перелопатить текстовый файл в 1С, чем передавать его в процедуру SQL и обрабатывать там.
  18. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Никто не говорит о обработке файла, запрос вывести в хранимую процедуру, а в нее передавать все нужные параметры, обработанные 1С.
  19. TopicStarter Overlay
    Sol
    Offline

    Sol Опытный в 1С

    Регистрация:
    14 ноя 2008
    Сообщения:
    106
    Симпатии:
    0
    Баллы:
    26
    Запрос собирается по кускам в течении всей обработки файла и его длина и содержание зависит от содержимого файла.
  20. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Полностью поддерживаю. По такому принципу простроена "Оптима". Все элементарно и прозрачно. А в текстовый файл как раз можно запихнуть сколько угодно данных

Поделиться этой страницей