2009-10-15 53 views
8

Tôi đang sử dụng Access 2003 trên máy bộ đôi lõi với 4GB RAM, chạy Windows XP (Gói Dịch vụ 3) [5.1.2600]MS Access: Không đủ bộ nhớ để thực hiện thao tác này

Định kỳ, tôi nhận được thông báo lỗi "Không đủ bộ nhớ để thực hiện thao tác này. Đóng các chương trình không cần thiết và thử lại thao tác."

Kiểm tra Trình quản lý tác vụ cho biết có nhiều bộ nhớ trống. Việc đóng các chương trình mở khác không tạo ra sự khác biệt nào.

Điều này xảy ra không thường xuyên và trong các trường hợp khác nhau: đôi khi trong khi lưu thiết kế Biểu mẫu hoặc thay đổi mã VBA, đôi khi khi một số Biểu mẫu được mở và đang sử dụng.

Nếu cố gắng lưu thay đổi thiết kế và lỗi này xảy ra, các đối tượng Access bị hỏng và không thể phục hồi được.

Bất kỳ đề xuất nào về những gì có thể gây ra điều này sẽ rất được hoan nghênh.

MTIA

+0

Bạn có thể có nghĩa là 4GB RAM, không phải 4MB. –

+0

James - Chi tiết, chi tiết.

+0

Nếu nó là 4MB, đây sẽ là một câu hỏi không có trí tuệ. – JohnFx

Trả lời

1

Vì tôi biết rằng đó là biểu mẫu hoặc báo cáo có nhiều khả năng bị hỏng, tôi đã tạo một mdb mới và chỉ nhập các bảng (được đính kèm), truy vấn, tập lệnh (chỉ một), mô-đun và menu. Sau đó, tôi đã sử dụng LoadFromText để nhập Biểu mẫu và Báo cáo qua một hàm, và sau đó thực hiện biên dịch/biên dịch thông thường và nhỏ gọn/sửa chữa, v.v.

Cho đến nay, chạm vào gỗ, tôi đã không gặp sự cố khác trong một số ngày, vì vậy tôi có thể sẽ gắn bó với phương pháp khôi phục này.

Rất cám ơn tất cả các đề xuất của bạn.

+0

FWIW, tôi chưa gặp sự cố nghiêm trọng cho ~ 4wks kể từ khi sử dụng LoadFromText, vì vậy các phương pháp sao lưu và khôi phục được mô tả ở trên bằng cách sử dụng SaveAsText và LoadFromText xuất hiện đáng giá nhất. – maxhugen

3

Oh my.

Tôi đã làm việc trong một cửa hàng trong nhiều năm sử dụng Access làm nền tảng lựa chọn của họ. Các ứng dụng cuối cùng đã quá lớn mà nó bắt đầu nhấn một giới hạn bộ nhớ nội bộ của Access 2003. Họ bắt đầu trải nghiệm cùng một vấn đề chính xác mà bạn đang gặp phải. Như bạn đã nhận thấy, không có dấu hiệu bên ngoài của các vấn đề bộ nhớ khi điều này xảy ra.

Công ty đã nói chuyện với Microsoft về vấn đề này và tôi tin rằng Microsoft cuối cùng đã cung cấp cho họ một bản vá. Vì vậy, bạn có thể muốn nói chuyện với Microsoft về điều này, nếu nó giống như một tình huống tương tự với những gì bạn đang gặp phải, vì họ có thể cung cấp cho bạn cùng một bản vá.

Cuối cùng, giải pháp dài hạn là chia ứng dụng thành các phần nhỏ hơn. Chuyển sang Access 2007 không giúp được gì; trên thực tế, nó làm mọi thứ tồi tệ hơn vì Access 2007 có nhiều phần chuyển động hơn.

+0

Cảm ơn Robert. Ứng dụng này là khá nhỏ thực sự, ~ 40 hình thức & subforms, tương tự cho các báo cáo, ~ 11.000 dòng mã VBA. Đối với hỗ trợ MS, tôi đã từ bỏ vào những năm trước đây: trả tiền cho họ khi tôi tìm thấy lỗi trong ứng dụng của họ không phải là tách trà của tôi :) – maxhugen

+0

Nếu bạn có đăng ký MSDN, bạn có sự cố miễn phí. Trong trường hợp cụ thể này, Microsoft sẽ cung cấp bản vá miễn phí. –

1

Đây cũng là thông báo lỗi mặc định khi Access không biết vấn đề thực sự là gì. Bây giờ nếu MDB của bạn đặc biệt lớn, hãy nói hơn 800 biểu mẫu và báo cáo với các mô-đun, thì MDB có thể quá lớn mặc dù đã cung cấp cho bạn một thông báo khi bạn tạo MDE. ACC2000: "Microsoft Access Was Unable to Create an MDE Database" Error Message

Tôi thỉnh thoảng mới có điều này xảy ra. Và MDB hiện tại của tôi không quá lớn. Lưu ý rằng nhỏ gọn và sửa chữa không phát hiện lỗi trong các đối tượng khác ngoài bảng, chỉ mục hoặc mối quan hệ. Vì vậy, nhập vào MDB khác là cách duy nhất để sửa các lỗi này.

Bạn đang làm việc trên MDB này qua mạng? Đó là điều duy nhất tôi có thể nghĩ đến có thể gây ra vấn đề này.

+0

Xin chào Tony: ứng dụng nhỏ. Đúng, nhỏ gọn/sửa chữa là không sử dụng, vì vậy tôi nhập tất cả các đối tượng vào một mdb mới. Ứng dụng này là một FE/BE ngồi trên ổ đĩa địa phương của tôi trong khi phát triển. Tôi đã thực hiện sao lưu các đối tượng thông qua chức năng Application.SaveAsText không có giấy tờ và sau đó là Application.LoadFromText để khôi phục các đối tượng bị hỏng mà không thể nhập được. Mặc dù rất mất thời gian và sự bất ổn của Access khiến tôi lo lắng, vì điều đó cũng xảy ra với người dùng. – maxhugen

+0

Max, có một công cụ tại một trong các liên kết tại các đối tượng bị hỏng trong một truy cập Microsoft bị hỏng MDB http://www.granite.ab.ca/access/corruption/corruptobjects.htm sẽ thực hiện tất cả các đối tượng. Tôi chắc chắn sẽ xem xét các đề xuất của David cũng mặc dù tôi không chắc chắn nếu đó là VBA bị hỏng. –

+0

Cảm ơn Tony. Tôi có một chức năng giống với Arvin Meyer. Nó đổ tất cả các đối tượng vào một thư mục có dấu thời gian, như là một phần của chiến lược dự phòng của tôi và tôi sử dụng nhiều lần mỗi ngày. Tôi đã xuất khẩu một vài hình thức tham nhũng, và lưu ý rằng các hình thức decription được thay thế bởi ????????vv, nhưng VBA dường như là OK. – maxhugen

7

Dự án VBA trong giao diện người dùng của bạn có thể bị hỏng. Bạn cần phải xây dựng lại nó từ đầu và sau đó sử dụng thông lệ mã hóa truy cập thích hợp:

  1. trong các tùy chọn VBE, tắt biên dịch trên CẦU (xem Michael Kaplan's article on DECOMPILE để biết chi tiết về việc tại sao).

  2. trong tùy chọn VBE, hãy bật TẮT KHAI TRƯƠNG.

  3. trong VBE, tùy chỉnh thanh công cụ của bạn để nút COMPILE có thể truy cập dễ dàng (trên menu Gỡ lỗi). Tôi cũng khuyên bạn nên thêm nút CALL STACK (từ menu VIEW), vì nó tiện dụng để gỡ lỗi trong chế độ ngắt. Vấn đề ở đây là làm cho việc gỡ lỗi và biên dịch dễ dàng nhất có thể.

  4. thiết lập môi trường của bạn, xem qua tất cả các mô-đun trong dự án vừa được khôi phục của bạn và thêm OPTION EXPLICIT vào đầu mỗi mô-đun thiếu nó. Sau đó biên dịch. Bạn sẽ nhanh chóng tìm ra nơi bạn có mã không hợp lệ và bạn sẽ cần sửa nó.

  5. từ giờ trở đi, khi lập trình, biên dịch thường xuyên, sau mỗi hai hoặc ba dòng mã. Tôi có thể biên dịch dự án của tôi 100 lần hoặc nhiều hơn một ngày khi viết mã.

  6. dịch ngược dự án của bạn và thu gọn và biên dịch lại dự án. Điều này sẽ làm sạch bất kỳ crud tích lũy trong quá trình phát triển thường xuyên.

Những thực tiễn này đảm bảo rằng mã trong một dự án không tham nhũng vẫn ở trạng thái sạch càng tốt. Nó sẽ không làm gì để phục hồi một dự án đã bị hỏng.

Liên quan đến cách xây dựng lại dự án, tôi nghĩ tôi sẽ đi theo con đường quyết liệt để xuất tất cả các đối tượng bằng Application.SaveAsText và nhập chúng vào cơ sở dữ liệu trống mới với Application.LoadFromText. Điều này vượt trội hơn khi chỉ cần nhập từ giao diện người dùng bị hỏng hiện tại của bạn vì việc nhập có thể nhập cấu trúc bị hỏng sẽ không tồn tại trong chu kỳ SaveAsText/LoadFromText.

Tôi lập trình hàng ngày trong Access, làm việc với các ứng dụng không tầm thường sử dụng nhiều mã, bao gồm nhiều mô-đun lớp độc lập. Tôi đã không mất một đối tượng để mã tham nhũng trong hơn 5 năm, và đó là trở lại trong ngày khi tôi vẫn còn sử dụng A97.

+0

Cảm ơn David. 1, cái đó làm gì? (không được đề cập trong bài viết của Michael Kaplan) 2: luôn bật. 3: Tôi luôn biên dịch sau mỗi lần thay đổi mã. 4: luôn luôn sử dụng điều này. 5: Tôi cũng biên dịch rất nhiều. 6: Tôi cũng thường xuyên dịch ngược/biên dịch lại. Tôi cũng làm việc hàng ngày với Access, trong ~ 10 năm. Đã không bị mất bất kỳ mã nào - tôi cũng có rất nhiều mô-đun/lớp VBA - nhưng đôi khi có biểu mẫu hoặc báo cáo bị hỏng. Nhưng gần đây tôi đã nhận được lỗi 'bộ nhớ' này. Hôm nay tôi đã mất hầu hết các biểu mẫu và tất cả các báo cáo! May mắn thay, tôi đã có bản sao lưu văn bản của tất cả các đối tượng từ ngày hôm qua và sử dụng LoadFromText để khôi phục biểu mẫu và báo cáo. – maxhugen

+0

Bài viết giải thích tại sao bạn không muốn biên dịch gia tăng, bởi vì chúng tăng số lượng các cấp biên dịch mà VBA phải theo dõi. Biên dịch rõ ràng là một biên dịch hoàn chỉnh. Bạn có thể muốn kiểm tra bài viết tập tin trợ giúp trên COMPILE ON DEMAND (nhấn F1 khi đang xem tab OPTION | GENERAL). –

0

Tôi đã gặp sự cố này nhiều lần và cuối cùng đã tìm thấy giải pháp hoạt động. Tôi không biết nguyên nhân gây ra vấn đề, nhưng tôi biết cách giải quyết nó.

Thông thường, lỗi xảy ra khi bạn mở biểu mẫu. Những gì bạn cần làm là hoàn toàn tạo lại biểu mẫu đó. Cách dễ nhất để làm như vậy là trước tiên xuất biểu mẫu sang tệp văn bản với hàm Application.SaveAsText không có giấy tờ. Sau đó, bạn xóa biểu mẫu khỏi cơ sở dữ liệu của bạn và tải lại nó bằng Application.LoadFromText.

4

Vượt qua bài đăng cũ của tôi và thấy nó có một chút quan tâm, tôi nghĩ có lẽ bản cập nhật sẽ theo thứ tự? Vì vậy, 2 năm xuống theo dõi, làm rất nhiều công việc ứng dụng năm 2007 cũng như các ứng dụng 2003 (và thậm chí cả năm 97) cũ hơn, tôi thấy rằng năm 2007 ít bị tai nạn thực sự khó chịu hơn năm 2003 - nơi đối tượng Access định nghĩa (biểu mẫu và báo cáo đặc biệt) sẽ dễ bị hỏng.

Tôi vẫn làm theo các đề xuất 1-6 (ở trên) bởi David-W-Fenton về mặt tôn giáo, cộng với việc sử dụng Application.SaveAsText (xem đề xuất và liên kết của Tony Toews ở trên).

Những ngày này, cho dù đó là 97, 2003 hoặc 2007 Tôi đang làm việc trên, nếu truy cập cho bất kỳ chút "là lạ | đâm | ném lỗi không thể giải thích" vv, tôi thực hiện như sau :

  1. Ngay lập tức đóng ứng dụng truy cập
  2. Sao lưu các tập tin mdb/accdb
  3. mở lại ứng dụng trong khi giữ phím [Shift] nên không có gì chạy
  4. xuất khẩu tất cả các đối tượng dưới dạng văn bản sử dụng Application.SaveAsText (như sao lưu khác)
  5. Đóng và mở lại ứng dụng bằng cách sử dụng/dịch ngược chuyển
  6. biên dịch lại mã VBA
  7. Làm một nhỏ gọn/Repair.

Điều này không giải quyết được mọi thứ, nhưng nó làm giảm đáng kể số lượng tham nhũng của các đối tượng Access khỏi những gì tôi có thể quan sát.

3

Giải pháp nhanh; đảm bảo công việc:

mở VBA (Alt-F11) Trong cửa sổ ngay lập tức nhập như sau:

Application.SaveAsText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive" 

sau đó

Application.LoadFromText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive" 

Đó là nó :) Hy vọng điều này sẽ giúp những người khác!

+0

Sau khi thực hiện 'Application.LoadFromText acForm," tên biểu mẫu bị hỏng ở đây ", CurrentProject.Path &" \ zzTempRevive "' một số lỗi có thể được tìm thấy trong _errors.txt_. Sửa lỗi rồi chạy lại câu lệnh. – yW0K5o

Các vấn đề liên quan