Конференция "Прочее" » ADO + большая транзакция
 
  • Es (20.08.12 13:12) [0]
    Сейчас вставлял через ADO большую порцию данных. Порядка 100к записей.

    1) процесс начинает много жрать памяти, на мой взгляд это не я отжираю. Дошло до потребления 250 MB.

    2) на этом этапе (см. пункт 1) отвалилось, EOleException с ошибкой "Неопознанная ошибка":
    http://www.onlinedisk.ru/get_image.php?id=930182

    Боюсь, наш любимый ADO не выдержал. Транзакция проводилась без промежуточных коммитов, собственно так и планируется.

    Кто-нибудь с таким сталкивался, чего делать?
    Или я как-то не так что делаю?
  • sniknik © (20.08.12 14:57) [1]
    > Или я как-то не так что делаю?
    ставлю на это.
  • Savek (20.08.12 15:16) [2]
    Я как-то тоже доигрался с ADO до того, что получил ошибку:
    "Слишком сложный запрос!"
  • sniknik © (20.08.12 15:27) [3]
    при том, что запрос выполняется сервером, а не ADO, очень "в тему".

    вот длинна, там да, ограничена. но там вроде другое сообщение.
  • картман © (20.08.12 16:04) [4]

    > вот длинна, там да, ограничена. но там вроде другое сообщение.

    out of memory выелзало на файле ~200 МБ
  • QAZ (20.08.12 16:34) [5]

    > чего делать?

    ну логично предположить, что делать надо несколько раз малыми порциями
  • Anatoly Podgoretsky © (20.08.12 16:41) [6]
    Вставляет неизвестно куда, видимо в dbf
  • Es (20.08.12 17:04) [7]
    sniknik, ты прав.

    Делалось в рабочем проекте, нашелся наш глюк.
    Всё ок, на самом деле память ADO по мере транзакции не отжирает, 100к влилось успешно. Ошибка возникала, судя по всему, из-за того, что ADO не выдержал сотню тысяч TAdoStoredProc
  • картман © (20.08.12 17:13) [8]
    почитаешь - жалко ADO становится, столько всего
  • sniknik © (20.08.12 17:23) [9]
    > сотню тысяч TAdoStoredProc
    при том, что и это не ADO, а заглушка "от борланда" в мозг привыкшим к BDE...
  • sniknik © (20.08.12 17:26) [10]
    > память ADO по мере транзакции не отжирает, 100к влилось успешно.
    при серверной транзакции зависит только от серверного же ограничения на "транзакшин лог" (если для mssql).
  • Es (20.08.12 17:44) [11]

    > при том, что и это не ADO, а заглушка "от борланда" в мозг
    > привыкшим к BDE.

    а что лучше использовать для вызова хранимки в оракле?

    Я честно говоря даже не знаю другого способа вызвать хранимку через ADO, кроме использования TADOStoredProc
  • DVM © (20.08.12 17:53) [12]

    > Es   (20.08.12 17:44) [11]


    > Я честно говоря даже не знаю другого способа вызвать хранимку
    > через ADO, кроме использования TADOStoredProc

    А TAdoCommand не подойдет?

    EXECUTE PROCEDURE MY_PROC(:PARAM1, PARAM2, ... PARAMN)
  • tesseract © (20.08.12 17:58) [13]

    > а что лучше использовать для вызова хранимки в оракле?


    ODAC? Вообще хранимка вызывает через ODBC CALL.
  • sniknik © (20.08.12 18:03) [14]
    > А TAdoCommand не подойдет?

    > EXECUTE PROCEDURE MY_PROC(:PARAM1, PARAM2, ... PARAMN)

    или можно тип запроса на "процедуру" в компоненте (TAdoCommand/TAdoDataSet) поменять и будет 1 в 1 "аля TADOStoredProc", но без "навесок".
  • sniknik © (20.08.12 18:06) [15]
    +
    но вообще, вот так явным EXECUTE PROCEDURE мне больше нравится, мне все явное больше нравиться, пусть иногда изза этого и больше писать приходится.
  • Es (20.08.12 18:24) [16]

    > А TAdoCommand не подойдет?

    ну что значит не подойдет...

    sniknik объявил, что TAdoStoredProc это мол костыли и грабли для любителей BDE. Может быть...

    Собственно, если грамотно задать вопрос... В чем, собственно, костыли и грабли TAdoStoredProc? Чем его использование неэффективно, неграмотно или нечто в таком духе?
  • Es (20.08.12 18:25) [17]

    > ODAC?

    имеется в виду в рамках ADO
  • sniknik © (20.08.12 20:18) [18]
    > sniknik объявил, что TAdoStoredProc это мол костыли и грабли для любителей BDE.
    не ври, я такого не объявлял. а то, что борланд "под BDE/для BDE-истов" сделал парочку компонент, чтобы им бедняжкам не переучиваться, это факт (в справке 5й дельфи это английским по белому прописано, потом изъяли, видимо чтоб не смущать).
  • Sergey Masloff (20.08.12 21:58) [19]
    Es   (20.08.12 18:24) [16]

    >Собственно, если грамотно задать вопрос... В чем, собственно, костыли и >грабли TAdoStoredProc? Чем его использование неэффективно
    В том что это обертка над TADOCommand ЕДИНСТВЕННОЕ назначение которой - сохранение совместимости классов с BDE. И вобщем-то дело нужное (было) для миграции старых проектов. Но как всякая заплатка сделана видимо на скорую руку. Как уже говорил не работал с ADO вообще но например аналогичная нашлепка TIBStoredProc точно также дико глючила при нормальной работе остальных компонент.
     А зачем использовать TxxxStoredProc в новых проектах (не в миграции со старых) я не понимаю
  • Dennis I. Komarov © (20.08.12 22:17) [20]

    >  А зачем использовать TxxxStoredProc в новых проектах (не
    > в миграции со старых) я не понимаю

    Очень просто: дословный перевод, говорит о работе с хранимками (таблицами, запросами)...
  • Sergey Masloff (20.08.12 22:24) [21]
    Dennis I. Komarov ©   (20.08.12 22:17) [20]
    И? продолжи мысль, так непонятно...
  • Dennis I. Komarov © (20.08.12 22:43) [22]
    человек, видит "заточенный" компонент... и на кой ему что-то другое?
  • sniknik © (20.08.12 22:56) [23]
    > и на кой ему что-то другое?
    правильно, нафига? несмотря на то, что 10лет прошло как технология "загнулась", логика нового основана на других принципах, и т.д., но "знает" компонент, и нового учить не желает...

    в общем то, это и есть самый главный глюк "эмуляшек BDE", все остальное (а были и реальные, в смысле ексепты на последовательность действий ними/вразрез логике), лишь следствия.
  • sniknik © (20.08.12 22:58) [24]
    > и нового учить не желает...
    хотя... блин, какое новое? ADO в свою очередь уже устарел, стараниями мелкософта, но ведь его так и учат на основе совсем уж окаменевшего гуано.
  • картман © (21.08.12 02:04) [25]

    > ADO в свою очередь уже устарел

    от-ж, блин! А что вместо?
  • Студент (21.08.12 05:32) [26]
    А если что нибудь такое отправлять?
    insert into tabl1(f1,f2,f3) values (1,2,3)(1,2,3)(1,2,3)(1,2,3)(1,2,3)(1,2,3)(1,2,3)(1,2,3)(1,2,3)(1,2,3)
  • Студент (21.08.12 05:36) [27]
    Студент   (21.08.12 05:32) [26]
    В свое время такой вариант сильно помог, когда надо было быстро вставить 1 млн записей. База Firebird D7, думаю в Оракле тоже такое должно быть. Экспериментально выяснил что почему то 100 записей лучше всего влетает.
  • Студент (21.08.12 06:06) [28]
    картман ©   (21.08.12 02:04) [25]
    QtSQL! :-)
  • sniknik © (21.08.12 08:02) [29]
    > от-ж, блин! А что вместо?
    NET, естественно... (естественно с точки зрения мелкософта). + была еще инфа, что он "возродит" (еще и не умер) ODBC.
 
Конференция "Прочее" » ADO + большая транзакция
Есть новые Нет новых   [134430   +4][b:0][p:0.001]