|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
Обычная обработка сброса содержимого 1с (7.7 dbf) в базу данных создаю объект ADO и выполняю всякие там SQL в цикле много раз после 50-60 тыс. SQL 1с вываливается выдает сообщение, что не хватает памяти. использую ODBC - драйвера Microsoft, Win98 и ORACLE 8.1.5 Подскажите , в чем может быть причина? Место на диске есть. 512М RAM присутствует Драйвера ODBC ставил разных версий - не помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2006, 21:08 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
выполнять sql запрос 50 тыс раз в цикле - изврашение... пересмотрите логику работы... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2006, 21:26 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
Сергей84выполнять sql запрос 50 тыс раз в цикле - изврашение... пересмотрите логику работы... чуйство юмора оценил конечно все можно вывалить в текстовый файл, на пару-тройку гигабайт с готовыми SQL, и выполнить его плюсом на сервере. P/S А интересно, какие еще бывают извращения? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2006, 23:11 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
А интересно, какие еще бывают извращения? Наверное еще такое :)_ select * from shdoc where (( shdoc.rec == shdoc.rec)) and shdoc.rec <> shdoc.rec ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 01:16 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
panchчуйство юмора оценил конечно все можно вывалить в текстовый файл, на пару-тройку гигабайт с готовыми SQL, и выполнить его плюсом на сервере. P/S А интересно, какие еще бывают извращения? какие извращения бывают не знаю но что мешает вместо 50 тыс. циклов и вываливания в текстовый файл сделать что-то вроде create table #t (какие-то поля) insert table #t select * from а потом уже работать работать с массивом данных как это нужно? конечно трудно судить о решении не зная его специфику, но то что можно обойтись куда более правильными решениями чем гнать циклы до посинения - точно можно... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 11:02 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
panch wrote: > Обычная обработка сброса содержимого 1с (7.7 dbf) в базу данных > создаю объект ADO и выполняю всякие там SQL в цикле много раз > после 50-60 тыс. SQL 1с вываливается выдает сообщение, что не хватает > памяти. мож эта... при каждой итерации создаем объект, но не убиваем? -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 16:35 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
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, но пока ничего не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 18:44 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
Сергей84 panchчуйство юмора оценил конечно все можно вывалить в текстовый файл, на пару-тройку гигабайт с готовыми SQL, и выполнить его плюсом на сервере. P/S А интересно, какие еще бывают извращения? какие извращения бывают не знаю но что мешает вместо 50 тыс. циклов и вываливания в текстовый файл сделать что-то вроде create table #t (какие-то поля) insert table #t select * from а потом уже работать работать с массивом данных как это нужно? конечно трудно судить о решении не зная его специфику, но то что можно обойтись куда более правильными решениями чем гнать циклы до посинения - точно можно... Хм.. Собственно... Из 1с средствами 1с необходимо выгрузить данные в Oracle. Я пишу обработку, полностью доверяя ADO. И натыкаюсь на грабли.... Вот сущности в чем вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 18:51 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
можно взглянуть на код? с ado можно обращаться очень по-разному... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 18:56 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
подготовь предварительно текст скрипта, потом скажи ADO соединению Execute на этот текст. Т.е. не вызывай в цикле Execute(есть подозрение, что именно так ты и поступаешь), только один раз в транзакции на готовый скрипт. Примерно как ниже (для Delphi) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 19:45 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
iscrafmподготовь предварительно текст скрипта, потом скажи ADO соединению Execute на этот текст. Т.е. не вызывай в цикле Execute(есть подозрение, что именно так ты и поступаешь), только один раз в транзакции на готовый скрипт. Примерно как ниже (для Delphi) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Конечно ваш алгоритм сработает. И не один раз. (не 1000) А почему не работает вызов Execute в цикле? Нельзя ли добиться корректности работы ADO с памятью? Я уже понял что это проблема не 1с... 1с тута не виновата. На VB должен наблюдатся тотже эффект. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 20:20 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
нужен кусок кода со структурой этого цикла. Может там в цикле затесалось создание соединения без освобождения (проверь на всяк случай). Нужно на структуру кода посмотреть. Так могу только гадать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2006, 20:31 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
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" ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2006, 14:45 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
panch wrote: > Спасибо за мысль. > Объект ADO и все такое создается один раз до цикла. > В цикле вызывается его метод , который выполняет SQL стандартного содержания > Insert into и т.д. > И вот таким способом память куда-то девается. > Сейчас вот сижу в MSDN читаю про ADO, но пока ничего не нашел. а можно код в студию? Не то чтобы тут всё были спецами по 1с, но вдруг - чего найдём? -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2006, 17:36 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
там, видно, какой-то совсем секретный метод работы с ado - товарищ совсем не торопится его раскрывать ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2006, 21:08 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
@ wrote: > там, видно, какой-то совсем секретный метод работы с ado - товарищ > совсем не торопится его раскрывать ;) просто суббота и воскресенье... Выходные, то исть. -- ------------------------- There's no silver bullet! Posted via ActualForum NNTP Server 1.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2006, 11:27 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
Желательно каждый объект создать руками и руками же уничтожить. В частности, Params. У меня есть подозрение, что память жрут они. Желательно подготовить ConnectionString, отдельно Command. Запускать скрипт желательно методом Execute объекта Command (а не Connection) - вызов метода без параметров, подготовив предварительно значения всех параметров отдельно. Не забудьте создать также руками объект Connection. Тот вызов, который используете вы, автомтатически создает объекты (в частности, объект Command). Сколько раз вы вызовите метод Execute с параметрами, столько раз создастся объект Command. В какой момент происходит очищение памяти, которую используют все созданные объекты, у меня четкого представления нет. Я предпочитаю сам принудительно создавать все объекты и принудительно их уничтожать. Это надежнее. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2006, 13:41 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
GaryaЖелательно каждый объект создать руками и руками же уничтожить. В частности, Params. У меня есть подозрение, что память жрут они. Желательно подготовить ConnectionString, отдельно Command. Запускать скрипт желательно методом Execute объекта Command (а не Connection) - вызов метода без параметров, подготовив предварительно значения всех параметров отдельно. Не забудьте создать также руками объект Connection. Тот вызов, который используете вы, автомтатически создает объекты (в частности, объект Command). Сколько раз вы вызовите метод Execute с параметрами, столько раз создастся объект Command. В какой момент происходит очищение памяти, которую используют все созданные объекты, у меня четкого представления нет. Я предпочитаю сам принудительно создавать все объекты и принудительно их уничтожать. Это надежнее. :) Очень хорошая мысль. большое спааасибо за совет. Настал понедельник и все заработало. А вообще конечно скрипт надо было готовить сразу на весь цикл. И проблем бы не было. Извращения - не путь в программировании. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2006, 23:51 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
Сергей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" ??? Тоже мысль. Интересно, а можно ли выгрузить таким образом реализацию товара за период? Или проводки по какому-то счету. А готовой разработки по этому поводу нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2006, 23:56 |
|
опять обращение к базе данных через ADO из 1с
|
|||
---|---|---|---|
#18+
panchТоже мысль. Интересно, а можно ли выгрузить таким образом реализацию товара за период? Или проводки по какому-то счету. А готовой разработки по этому поводу нет? так можно сделать что угодно, прочто надо знать какие таблицы и что хранят проблема в том, что уникальных тут методик нет, т.к. нумерация метаданных идет сквозная и если у вас SC112 - скажем это номенклатура, то у человека у которого может быть тот же самый релиз и все тоже самое, но SC112 - уже будет контрагенты, так же через пол года у вас SC112 так же может стать скажем справочником ГТД или любым другим дело в том, что метаданные нумеруются во время развертки БД, т.е. когда вы создаете новую БД 1С, но со временем уже не меняется (список что к чему можно найти в 1CV7.DD(S - если MSSQL)), исключением может быть выгрузка\загрузка но в принципе можно написать динамично реагирующий запрос на все это дело в этом может помоч rainbow.dll или toy_sql.dll (но она платная - зато позволяет не парясь писать запросы понятные вам, аля "выбрать ссылка из справочник.номенклатура где Ссылка в ВрСписок", ну и т.п и взаимодействовать с MSSQL и не придется париться с выяснением номеров таблиц и реквизитов) так что выбирайте сами ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2006, 10:40 |
|
|
start [/forum/topic.php?fid=28&msg=33625388&tid=1525622]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 145ms |
0 / 0 |