
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
10.11.2003, 14:45
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
Вывожу отчет из Access в Excell по стандартным алгоритмам, взятым с литературы и с форума. Первый раз все отрабатывает нормально, затем при формировании отчета Excell выдает сообщение "Мало памяти", или "Недостаточно системных ресурсов для полного вывода на экран". Отчеты не большие, строчек под 300, причем формирует довольно медленно. Затем машину приходится перезагружать, и снова можно сформировать один отчет в excell. Система: access 97, excell 97, Windows 98 SE с 32 ОЗУ. А так такая хорошая идея была, формировать отчеты по базе в excell, потому что в них много столбцов, постоянно требуют то добавить, то удалить столбцы. Даже не представляю как такой отчет можно нарисовать в access-овском генераторе отчетов. Получается что Excell не освобождает после себя память. Объекты чистить не забываю, Nothing в нужных местах для объектов ставлю, recordset-ы тоже закрываю и чищу. Сталкивался ли кто с подобной проблемой и есть ли из нее выход? Перерыл кучу информации и так и не понял, что я упустил из внимания. За основу взял заготовку автора с форума: (конечно еще используются и другие объекты) Dim xlApp As New Excel.Application ??? может нужно сделать без NEW 'откроем шаблон xlApp.Workbooks.Open "D:\Сводка\SVODKA.XLS" xlApp.Visible = True 'вывод листа на экран 'сводка по производству за сутки xlApp.Worksheets(1).Select СводкаАнгл xlApp.Worksheets(1) ' в этой функции я заполняю листик данными из рекордов 'сохранение копии книги в папке C:\Сводка\Дискета xlApp.Workbooks("SVODKA").SaveCopyAs "D:\Сводка\Дискета\SVODKA-" & Day(КакаяДата()) & "-" & Month(КакаяДата())& ".xls" xlApp.Workbooks("SVODKA").Saved = True ' это чтоб не переспрашивала при закрытии xlApp.Quit Set xlApp = Nothing 'просто подстраховался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 14:56
|
|||
|---|---|---|---|
Мало памяти при выводе в Excell |
|||
|
#18+
После того как Set xlApp = Nothing В Task Manager Excel висит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 14:58
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
>Получается что Excell не освобождает после себя память. Попробуй явно определять книгу и листы книги Dim wb as Excell.WorkBook set wb=xlApp.Workbooks.Open "D:\Сводка\SVODKA.XLS" ... wb.close: set wb=nothing По такому же алгоритму Worksheet == Сам екцель выгружается? Что с ресурсами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:01
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
Ответа пока у меня нет, но: 1. Без New нельзя, т.к. объект нужно инциализировать. 2. Если сделать Ctrl+Alt+Del и увидеть список аппликаций, то не появляется ли там Excel несколько раз? У меня когда-то было именно так, но я не помню, поборол ли я это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:09
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
As New уж точно надо убить Простейший тест: Код: plaintext 1. 2. дает False :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:10
|
|||
|---|---|---|---|
Мало памяти при выводе в Excell |
|||
|
#18+
А в функции СводкаАнгл как сделано обращение к Excel? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:14
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
Лох, откуда ты все знаешь??? Код: plaintext 1. 2. 3. дает True. :^))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:21
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
Привожу листинг (конечно не для того чтобы кто то разбирался в такой большой простыне, но может есть грубые ошибки, которые сразу бросаются в глаза). --------------------------------------------------------------- Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:24
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
Я, конечно, молчу... Но почему такое количество одинаковых кусков кода сделано не циклом и не подпрограммой, а такое количество переменных не массивом?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:38
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
Да уж. В.В. ты в следующий раз прогу офрмляй тегами [ src] [ /src ] (без пробелов) - гораздо наглядней. (Пока писал, Саныч уже все исправил :) ошибок нне нашел, зато есть некоторые рекомендации - Не правильный порядок деинициализации объектов. Ты сперва убиваешь Екцель, а потом книгу, и лист. Надо наоборот - нет деинициализации рекодсета (set rs=Nothing) - xl.Visible = True делай после окончания расчета. Еще можно ScreenUpdating=False поставить. Должно работать несколько быстрей == Если екцель закрывать не надо - то надо сохранить книгу. Очистить все ссылки (лист-книга-екцел). Показать (xl.Visible = True) === И лучше не обращаться к ws.Cells напрямую, а через ws.range(Cells,Cells) - я одно время накушался глюков - мне хватило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:40
|
|||
|---|---|---|---|
Мало памяти при выводе в Excell |
|||
|
#18+
Сколько ж оно выполняется? Вообще-то программировать через Cells (имхо) нужно стараться как можно реже. Это заведомый тормоз. Очень большой тормоз. Обычно такой код удается оптимизировать на порядки. Нужно стараться использовать более крупные объекты (Range, Columns и пр.). По ячейкам выводить, в принципе, заманчиво, но это заведомо ложный путь. Range рулит! И Ёксель не будет так напрягаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:47
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
А самое лучшее (если далее говорить про оптимальность) подготовить рекодсет - и бабахнуть его на лист через CopyFromRecodset (ws.Range("A1").CopyFromRecordset rs). Спсобов выброса инфы в екцел много - этот самый быстрый ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:51
|
|||
|---|---|---|---|
Мало памяти при выводе в Excell |
|||
|
#18+
Можно еще вначале поставить ws.Cells.NumberFormat = "0.00" ws.Cells.Font.Size = 13 Т.е. задать сразу формат для всего листа.И убрать отовсюду эти строки, как минимум в 2 раза быстрее будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:53
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
2 Сенин Виктор Не самый. Быстрее всего (вроде бы) - линк к эксельному листу и перелить данные одним SQL-запросом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:56
|
|||
|---|---|---|---|
Мало памяти при выводе в Excell |
|||
|
#18+
И еще wb ИМХО здесь лишняя. Код: plaintext 1. а дальше она и не используется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:57
|
|||
|---|---|---|---|
Мало памяти при выводе в Excell |
|||
|
#18+
Прошу пардону, в таком виде скобки не нужны... Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 15:59
|
|||
|---|---|---|---|
Мало памяти при выводе в Excell |
|||
|
#18+
На счет самый быстрый. Тут один чел делал исследование, насчет скорости работы выброски в Ёксель от количества записей. Штук 12 способов. Так вот конечные графики были нелинейны т.е. скорость того или иного метода зависит от данных (их количества). Поэтому этот вопрос не имеет однозначного ответа. Блин, жалко эта диаграмма куда-то подевалась... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 16:01
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 16:06
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
2ЛП >Не самый. Быстрее всего (вроде бы) - линк к эксельному листу и перелить данные одним SQL-запросом Думаешь? Или знаешь? //просто в падлу тесты городить да проверять. Самый тормоз у меня это выброс да еще и последующее форматирование время сжирает - но там вроде оптимизировать далее некуда (хотя если подумать... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 16:10
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
На старой работе проверяли. Давно это было, так что зуб давать не буду. А тесты городить тоже лениво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 16:14
|
|||
|---|---|---|---|
Мало памяти при выводе в Excell |
|||
|
#18+
Senin Viktor Способы передачи данных из MS ACCESS в Excel А это он и есть! То-то я смотрю код знакомый! Мы на работе до сих пор его юзаем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 16:14
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
Кстати, в течение выгрузки таким способом (через Jet'овский линк) даже эксель не запускается. Его, собственно, может на компутере и не быть. Так что это само по себе на время выгрузки должно хорошо влиять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.11.2003, 16:32
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
2ЛП Заинтриговал :) Надоть по пробовать через линк. Правда ёкцель все-равно запускать прийдется (ну это уже мой частный случай) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.11.2003, 08:45
|
|||
|---|---|---|---|
|
|||
Мало памяти при выводе в Excell |
|||
|
#18+
Стал использовать объект Range в Excel. Завел массив типа Variant, в котором формирую одну выводимую запись (элементы массива либо строки, либо Currency). Затем присваиваю объекту Range Excel'a. Скорость вывода многократно возросла. Но возникла проблема тип Currency из массива типа вариант выводится в Excell как строка вида $1,234.00 (сохраняется не число, а строковое значение). Преобразовать в нормальное числовое значение невозможно, например NumberFormat="0.00" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=45&mobile=1&tid=1678299]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 445ms |

| 0 / 0 |
