2010-07-16 25 views
30

Tôi có một ứng dụng cơ sở dữ liệu Access và tôi muốn biết cách thích hợp để dịch ngược và biên dịch lại nó.Làm thế nào để dịch ngược và biên dịch lại một ứng dụng cơ sở dữ liệu?

+2

Trong câu hỏi trước http://stackoverflow.com/questions/3258488/ms-access-2003-form-does-not-open-help/3260422#3260422 bạn chấp nhận câu trả lời bao gồm thông tin về dịch ngược và biên dịch lại. – Fionnuala

Trả lời

6

accepted answer thật tuyệt vời, nhưng không thực tế khi tạo lối tắt cho mọi cơ sở dữ liệu.

Bạn có thể lưu điều này làm mô-đun quyền hạn.

#for use with MSAccess 2010 

Function Decompile-AccessDB{ 
    param ([string]$dbFileName) 

    [string]$argument = '"' + $dbFileName + '"' + "/Decompile" 
    Start-Process -FilePath 'C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE' -ArgumentList $argument 
} 

Sau đó gọi nó là như thế này:

Decompile-AccessDB -Path "C:\Path\to\some.accdb" 

Điều này cho phép bạn nhanh chóng và dễ dàng dịch ngược bất kỳ db từ dòng lệnh shell điện.

Lưu ý rằng bạn vẫn cần phải giữ phím Shift khi bạn chạy điều này để bỏ qua khởi động ứng dụng.

+0

AFAIK, không cần phải tạo một lối tắt cho mỗi DB hoặc sử dụng Powershell để dịch ngược * bất kỳ cơ sở dữ liệu nào *. Chỉ cần tạo lối tắt cho Access, thêm '/ decompile' vào cuối. Sử dụng nó để bắt đầu truy cập. DB đầu tiên bạn mở sẽ bị giải mã. –

42

để dịch ngược một cơ sở dữ liệu truy cập bạn sẽ cần phải tạo ra một shortcut với các yếu tố sau:

  1. Đường dẫn đến MS Access Executable (MSACESS.exe)
  2. Đường dẫn đến cơ sở dữ liệu mà bạn muốn dịch ngược
  3. các/dịch ngược cờ

Tất cả lại với nhau, sau đó, các phím tắt sẽ trông giống như sau:

0.123.
"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "C:\users\tim\documents\Mydatabase.mdb" /decompile 

Rõ ràng, các đường dẫn sẽ khác trên hệ thống của bạn.

Tôi khuyên bạn nên tạo bản sao lưu cơ sở dữ liệu của mình trước khi chạy lệnh này.

Nếu bạn có bất kỳ mã khởi động nào trong cơ sở dữ liệu, bạn nên giữ phím shift để bỏ qua việc thực thi mã khởi động.

Khi cơ sở dữ liệu mở ra, bạn có thể nhỏ gọn và sửa chữa cơ sở dữ liệu để đảm bảo hiệu suất tối ưu.

Sau khi nhỏ gọn và sửa chữa, bạn có thể biên dịch lại mã VBA bằng cách mở bất kỳ mô-đun nào và sử dụng lệnh Debug Compile [DatabaseName].

Nếu đây là điều bạn muốn làm thường xuyên, bạn có thể tạo lối tắt "Truy cập dịch ngược" trong menu Gửi Tới. Khi bạn có shortcut này trong SendTo Menu, bạn có thể kích chuột phải vào bất kỳ cơ sở dữ liệu Access nào và chọn "Send To -> Access Decompile", dễ dàng hơn nhiều so với việc tạo shortcut cho cơ sở dữ liệu cụ thể.

Thực hiện theo các bước sau để tùy chỉnh trình đơn Send To với một truy cập Decompile Shortcut

  1. Tạo shortcut cho các truy cập thực thi.
  2. Gắn cờ/dịch ngược lại trong Mục tiêu cho lối tắt. Các phím tắt sẽ trông như thế này:

    "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" /decompile

  3. Mở Windows Explorer và dán đoạn mã sau vào thanh địa chỉ:

    %APPDATA%\Microsoft\Windows\SendTo

  4. Sao chép các phím tắt bạn đã tạo vào SendTo Folder.

  5. Phím tắt dịch ngược truy cập giờ đây sẽ khả dụng để sử dụng.

Để gọi phím tắt Decompile Access, nhấp chuột phải vào cơ sở dữ liệu Access trong Windows Explorer và chọn "Gửi đến -> Truy cập dịch ngược". Đảm bảo giữ phím shift để bỏ qua bất kỳ mã khởi động nào trong cơ sở dữ liệu.

+0

Để tìm đường dẫn đến MSACCESS.EXE, hãy chạy đường dẫn này trong bảng điều khiển: 'reg truy vấn 'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Đường dẫn \ MSACCESS.EXE"/ve' –

33

hướng dẫn thực hành @ Tim Lentine của là tốt, nhưng ông lá ra các bước thực tế cần thiết cho một dịch ngược để có giá trị thực hiện:

  1. sao lưu cơ sở dữ liệu của bạn.

  2. nén cơ sở dữ liệu của bạn.

  3. sử dụng phím tắt được tạo bằng hướng dẫn của Tim, mở cơ sở dữ liệu của bạn.

  4. đóng phiên bản Access đó.

  5. mở phiên bản Access mới và mở cơ sở dữ liệu bạn vừa mới biên dịch, nhưng BE SURE YOU BYPASS ALL STARTUP CODE (nghĩa là, giữ phím shift). Nếu bạn không làm điều đó, thì bạn cũng có thể quay trở lại bước 3 và thử lại, vì nếu mã khởi động chạy, mã của bạn sẽ biên dịch lại trước khi bạn sẵn sàng làm như vậy.

  6. nén cơ sở dữ liệu bị biên dịch lại (và chắc chắn rằng bạn giữ phím shift để nó bỏ qua mã khởi động, xem # 5).

  7. mở VBE và trên menu Gỡ lỗi, chọn COMPILE [tên dự án].

  8. trên menu tệp, lưu dự án.

  9. nhỏ gọn lại.

Tại sao tất cả các bước này cần thiết?

Vì bạn không muốn dịch ngược VBA, bạn muốn đảm bảo rằng tất cả các trang dữ liệu nơi mã p được biên dịch được lưu trữ hoàn toàn bị loại bỏ trước khi bạn biên dịch lại.

tôi cũng khuyên bạn nên:

  1. trong các tùy chọn VBE, tắt biên dịch trên CẦU

  2. trong VBE, thêm nút Compile vào thanh công cụ của bạn.

  3. biên dịch thường xuyên bằng nút đó trên thanh công cụ, sau mỗi hai hoặc ba dòng mã.

Biên dịch không phải là thứ bạn nên sử dụng mọi lúc, nhưng trong quá trình mã hóa nặng, tôi có thể dịch ngược vài lần trong ngày. Và tôi thường dịch ngược/biên dịch lại như là bước cuối cùng trước khi phát hành một ứng dụng vào sử dụng sản xuất.

Cuối cùng, hãy đọc Michael Kaplan's article on the subject để hiểu rõ hơn.

+0

Điều này có thể * âm thanh * như một câu hỏi , nhưng tôi nên sử dụng decompilation ngay cả khi cơ sở dữ liệu là một cơ sở dữ liệu chỉ có dữ liệu? – Paul

+1

@Paul - Không cần thiết vì cơ sở dữ liệu chỉ có dữ liệu có lẽ sẽ không chứa bất kỳ mã VBA nào. (BTW, bạn sẽ phải tha thứ cho David vì không trả lời, anh ấy đã qua đời vài năm trước.) –

+0

@GordThompdon: Oh! Không! Đó chắc chắn là một ngoại lệ chết người. Cảm ơn bạn đã trả lời thay cho anh ấy. – Paul

4

Tôi đã viết một tập lệnh VBS để tự động hóa quá trình dịch ngược. Thật ngớ ngẩn khi Microsoft không tích hợp điều này vào Access, xem xét nó là một điều cần thiết khi phát triển các ứng dụng nặng nề VBA.

Tập lệnh đặt MSACCESS.exe và chạy Truy cập với cờ dịch ngược trên cơ sở dữ liệu nằm trong thư mục mẹ của tập lệnh, có tên được đưa ra trong mã.

Option Explicit 
Dim MSAccPath 
Dim RegKey 
Dim WSHShell 
Dim currentDirectory 

' Get MSACCESS.exe directory 
RegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\" _ 
    & "CurrentVersion\App Paths\MSACCESS.EXE\Path" 
Set WSHShell = WScript.CreateObject("WScript.Shell") 

' Get parent directory 
MSAccPath = WSHShell.RegRead(RegKey) 
currentDirectory = WSHShell.CurrentDirectory 

' Decompile 
WSHShell.Run Chr(34) & MSAccPath & "MSACCESS.EXE" & Chr(34) & " " & Chr(34) & currentDirectory & "\..\testdb.accdb" & Chr(34) & " /decompile" 

' Clear shell var 
Set WSHShell = Nothing 

Chỉ cần dán văn bản này vào tài liệu có phần mở rộng .vbs và nhấp đúp vào văn bản đó để chạy. Access sẽ khởi động, dịch ngược mã P được biên dịch (mã "đóng gói") và tự động biên dịch lại nguồn VBA trở lại thành mã P.

2

Chỉ muốn thêm hai xu của tôi. Tôi làm việc với cơ sở dữ liệu SQL Server, SSIS và MS Access hàng ngày, và mạng của chúng tôi cho phép chúng tôi sử dụng các máy tính để bàn Citrix khác nhau; một số là Win Serv 2003 SP2 và một số là Win Serv 2008 R2. Khi bạn nhỏ gọn và sửa chữa MS Access dbs trong một máy tính để bàn các cơ sở dữ liệu là tốt. Nhưng, khi bạn dịch ngược, bạn phải chắc chắn rằng bất cứ ai khác sử dụng dbs sẽ có thể mở chúng. Kiểm tra tất cả các điều khiển để xem chúng có hoạt động giống nhau từ trạm làm việc đến máy trạm hay không. Bạn sẽ gặp sự cố khi cài đặt MS Access của người khác không chứa cùng thư viện. Điều đó khiến chúng tôi không cho phép tất cả sự phát triển của front-end với các điều khiển độc đáo, đặc biệt là những điều mà bạn sẽ phải thêm một tham chiếu đến db để sử dụng. Mặc dù, đó là một tài nguyên tuyệt vời để giảm kích thước và tăng tốc mã của bạn, việc giải mã có thể gây ra nhiều rắc rối trong môi trường đa người dùng

+0

Tôi không chắc chắn rằng những gì bạn đang đề cập đến là do giải mã mã VBA truy cập. Những gì bạn đang đề cập đến có vẻ là việc sử dụng các điều khiển ActiveX (đó là tài liệu tham khảo). – DHW

1

Các câu trả lời khác ở đây dường như hơi phức tạp đối với khẩu vị của tôi.

Để biên soạn lại một cơ sở dữ liệu Access:

Mở Run thoại từ menu Start hoặc nhấn Win + R

Gõ vào: MSACCESS.EXE /decompile (một cài đặt đúng nên mở ra Truy cập ứng dụng, bạn cũng có thể cung cấp đường dẫn đầy đủ tới MSACCESS.EXE) và nhấn OK.

Truy cập ngay bây giờ sẽ mở ra. Mở DB của bạn trong cửa sổ Access vừa mở. Điều đó sẽ dịch ngược nó.