powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / опять обращение к базе данных через ADO из 1с
20 сообщений из 20, страница 1 из 1
опять обращение к базе данных через ADO из 1с
    #33624690
Фотография panch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычная обработка сброса содержимого 1с (7.7 dbf) в базу данных
создаю объект ADO и выполняю всякие там SQL в цикле много раз
после 50-60 тыс. SQL 1с вываливается выдает сообщение, что не хватает памяти.
использую ODBC - драйвера Microsoft, Win98 и ORACLE 8.1.5
Подскажите , в чем может быть причина?
Место на диске есть. 512М RAM присутствует
Драйвера ODBC ставил разных версий - не помогает.
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33624704
Сергей84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выполнять sql запрос 50 тыс раз в цикле - изврашение...
пересмотрите логику работы...
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33624809
Фотография panch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей84выполнять sql запрос 50 тыс раз в цикле - изврашение...
пересмотрите логику работы...
чуйство юмора оценил
конечно все можно вывалить в текстовый файл,
на пару-тройку гигабайт
с готовыми SQL,
и выполнить его плюсом на сервере.
P/S
А интересно, какие еще бывают извращения?
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33624862
sqlrue
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А интересно, какие еще бывают извращения?

Наверное еще такое :)_

select * from shdoc where (( shdoc.rec == shdoc.rec)) and shdoc.rec <> shdoc.rec
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33624980
Сергей84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
panchчуйство юмора оценил
конечно все можно вывалить в текстовый файл,
на пару-тройку гигабайт
с готовыми SQL,
и выполнить его плюсом на сервере.
P/S
А интересно, какие еще бывают извращения?
какие извращения бывают не знаю
но что мешает вместо 50 тыс. циклов и вываливания в текстовый файл сделать что-то вроде
create table #t (какие-то поля)
insert table #t select * from

а потом уже работать работать с массивом данных как это нужно?

конечно трудно судить о решении не зная его специфику, но то что можно обойтись куда более правильными решениями чем гнать циклы до посинения - точно можно...
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625235
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
panch wrote:
> Обычная обработка сброса содержимого 1с (7.7 dbf) в базу данных
> создаю объект ADO и выполняю всякие там SQL в цикле много раз
> после 50-60 тыс. SQL 1с вываливается выдает сообщение, что не хватает
> памяти.
мож эта... при каждой итерации создаем объект, но не убиваем?

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625336
Фотография panch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
locky
panch wrote:
> Обычная обработка сброса содержимого 1с (7.7 dbf) в базу данных
> создаю объект ADO и выполняю всякие там SQL в цикле много раз
> после 50-60 тыс. SQL 1с вываливается выдает сообщение, что не хватает
> памяти.
мож эта... при каждой итерации создаем объект, но не убиваем?

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3

Спасибо за мысль.
Объект ADO и все такое создается один раз до цикла.
В цикле вызывается его метод , который выполняет SQL стандартного содержания
Insert into и т.д.
И вот таким способом память куда-то девается.
Сейчас вот сижу в MSDN читаю про ADO, но пока ничего не нашел.
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625344
Фотография panch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей84 panchчуйство юмора оценил
конечно все можно вывалить в текстовый файл,
на пару-тройку гигабайт
с готовыми SQL,
и выполнить его плюсом на сервере.
P/S
А интересно, какие еще бывают извращения?
какие извращения бывают не знаю
но что мешает вместо 50 тыс. циклов и вываливания в текстовый файл сделать что-то вроде
create table #t (какие-то поля)
insert table #t select * from

а потом уже работать работать с массивом данных как это нужно?

конечно трудно судить о решении не зная его специфику, но то что можно обойтись куда более правильными решениями чем гнать циклы до посинения - точно можно...
Хм.. Собственно...
Из 1с средствами 1с необходимо выгрузить данные в Oracle.
Я пишу обработку, полностью доверяя ADO.
И натыкаюсь на грабли....
Вот сущности в чем вопрос.
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625349
@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@
Гость
можно взглянуть на код?

с ado можно обращаться очень по-разному...
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625388
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подготовь предварительно текст скрипта, потом скажи ADO соединению Execute на этот текст. Т.е. не вызывай в цикле Execute(есть подозрение, что именно так ты и поступаешь), только один раз в транзакции на готовый скрипт.
Примерно как ниже (для Delphi)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  
.........  
sExecSQL := ParseSQLText(sExecSQL, Params);
.........
Connection.Open;
    try
      Connection.Execute(sExecSQL, cmdText, [eoExecuteNoRecords]);
......
    finally
      Connection.Close;
    end;
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625412
Фотография panch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmподготовь предварительно текст скрипта, потом скажи ADO соединению Execute на этот текст. Т.е. не вызывай в цикле Execute(есть подозрение, что именно так ты и поступаешь), только один раз в транзакции на готовый скрипт.
Примерно как ниже (для Delphi)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  
.........  
sExecSQL := ParseSQLText(sExecSQL, Params);
.........
Connection.Open;
    try
      Connection.Execute(sExecSQL, cmdText, [eoExecuteNoRecords]);
......
    finally
      Connection.Close;
    end;


Конечно ваш алгоритм сработает.
И не один раз. (не 1000)
А почему не работает вызов Execute в цикле?
Нельзя ли добиться корректности работы ADO с памятью?
Я уже понял что это проблема не 1с...
1с тута не виновата.
На VB должен наблюдатся тотже эффект.
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625416
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужен кусок кода со структурой этого цикла. Может там в цикле затесалось создание соединения без освобождения (проверь на всяк случай). Нужно на структуру кода посмотреть. Так могу только гадать.
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625725
Сергей84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
panchХм.. Собственно...
Из 1с средствами 1с необходимо выгрузить данные в Oracle.
Я пишу обработку, полностью доверяя ADO.
И натыкаюсь на грабли....
Вот сущности в чем вопрос.
а разве 1С не хранит свои данные в DBF или MSSQL???
не прощели вместо

СпрН = СоздатьОбъект("Справочник.Номенклатура");
СпрН.ВыбратьЭлементы();
Пока СпрН.ПолучитьЭлемент() = 1 Цикл
TextQuery = "insert into #t "+СпрН.Код;
QueryADO.Open(TextQuery);
КонецЦикла;

выяснить, что Справочник.Номенклатура - это SC112
и написать вот так:

TextQuery = "insert into #t select CODE from SC112"

???
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625857
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
panch wrote:
> Спасибо за мысль.
> Объект ADO и все такое создается один раз до цикла.
> В цикле вызывается его метод , который выполняет SQL стандартного содержания
> Insert into и т.д.
> И вот таким способом память куда-то девается.
> Сейчас вот сижу в MSDN читаю про ADO, но пока ничего не нашел.
а можно код в студию? Не то чтобы тут всё были спецами по 1с, но вдруг -
чего найдём?

--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33625984
@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@
Гость
там, видно, какой-то совсем секретный метод работы с ado - товарищ совсем не торопится его раскрывать ;)
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33626643
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@ wrote:
> там, видно, какой-то совсем секретный метод работы с ado - товарищ
> совсем не торопится его раскрывать ;)
просто суббота и воскресенье... Выходные, то исть.


--
-------------------------
There's no silver bullet!
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33627031
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
Желательно каждый объект создать руками и руками же уничтожить. В частности, Params. У меня есть подозрение, что память жрут они. Желательно подготовить ConnectionString, отдельно Command. Запускать скрипт желательно методом Execute объекта Command (а не Connection) - вызов метода без параметров, подготовив предварительно значения всех параметров отдельно. Не забудьте создать также руками объект Connection. Тот вызов, который используете вы, автомтатически создает объекты (в частности, объект Command). Сколько раз вы вызовите метод Execute с параметрами, столько раз создастся объект Command. В какой момент происходит очищение памяти, которую используют все созданные объекты, у меня четкого представления нет. Я предпочитаю сам принудительно создавать все объекты и принудительно их уничтожать. Это надежнее. :)
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33628434
Фотография panch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GaryaЖелательно каждый объект создать руками и руками же уничтожить. В частности, Params. У меня есть подозрение, что память жрут они. Желательно подготовить ConnectionString, отдельно Command. Запускать скрипт желательно методом Execute объекта Command (а не Connection) - вызов метода без параметров, подготовив предварительно значения всех параметров отдельно. Не забудьте создать также руками объект Connection. Тот вызов, который используете вы, автомтатически создает объекты (в частности, объект Command). Сколько раз вы вызовите метод Execute с параметрами, столько раз создастся объект Command. В какой момент происходит очищение памяти, которую используют все созданные объекты, у меня четкого представления нет. Я предпочитаю сам принудительно создавать все объекты и принудительно их уничтожать. Это надежнее. :)

Очень хорошая мысль.
большое спааасибо за совет.
Настал понедельник и все заработало.
А вообще конечно скрипт надо было готовить сразу на
весь цикл. И проблем бы не было.
Извращения - не путь в программировании.
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33628443
Фотография panch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей84 panchХм.. Собственно...
Из 1с средствами 1с необходимо выгрузить данные в Oracle.
Я пишу обработку, полностью доверяя ADO.
И натыкаюсь на грабли....
Вот сущности в чем вопрос.
а разве 1С не хранит свои данные в DBF или MSSQL???
не прощели вместо

СпрН = СоздатьОбъект("Справочник.Номенклатура");
СпрН.ВыбратьЭлементы();
Пока СпрН.ПолучитьЭлемент() = 1 Цикл
TextQuery = "insert into #t "+СпрН.Код;
QueryADO.Open(TextQuery);
КонецЦикла;

выяснить, что Справочник.Номенклатура - это SC112
и написать вот так:

TextQuery = "insert into #t select CODE from SC112"

???

Тоже мысль.
Интересно, а можно ли выгрузить таким образом реализацию товара за период?
Или проводки по какому-то счету.
А готовой разработки по этому поводу нет?
...
Рейтинг: 0 / 0
опять обращение к базе данных через ADO из 1с
    #33628856
Сергей84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
panchТоже мысль.
Интересно, а можно ли выгрузить таким образом реализацию товара за период?
Или проводки по какому-то счету.
А готовой разработки по этому поводу нет?
так можно сделать что угодно, прочто надо знать какие таблицы и что хранят
проблема в том, что уникальных тут методик нет, т.к. нумерация метаданных идет сквозная и если у вас SC112 - скажем это номенклатура, то у человека у которого может быть тот же самый релиз и все тоже самое, но SC112 - уже будет контрагенты, так же через пол года у вас SC112 так же может стать скажем справочником ГТД или любым другим
дело в том, что метаданные нумеруются во время развертки БД, т.е. когда вы создаете новую БД 1С, но со временем уже не меняется (список что к чему можно найти в 1CV7.DD(S - если MSSQL)), исключением может быть выгрузка\загрузка
но в принципе можно написать динамично реагирующий запрос на все это дело
в этом может помоч rainbow.dll или toy_sql.dll (но она платная - зато позволяет не парясь писать запросы понятные вам, аля "выбрать ссылка из справочник.номенклатура где Ссылка в ВрСписок", ну и т.п и взаимодействовать с MSSQL и не придется париться с выяснением номеров таблиц и реквизитов)
так что выбирайте сами
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / опять обращение к базе данных через ADO из 1с
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]