2008-08-08 44 views
12

Hai người dùng muốn chia sẻ cùng một cơ sở dữ liệu, ban đầu được viết bằng MS Access, mà không xung đột với nhau qua một tệp MDB duy nhất.Sự cố khi sử dụng MS Access làm giao diện người dùng cho cơ sở dữ liệu MySQL back-end?

Tôi đã chuyển các bảng từ cơ sở dữ liệu MS Access đơn giản sang MySQL bằng cách sử dụng Migration Toolkit (hoạt động tốt) và thiết lập Truy cập để liên kết tới các bảng đó thông qua ODBC.

Cho đến nay, tôi đã chạy vào như sau:

  • Bạn không thể chèn/cập nhật/xoá các hàng trong một bảng mà không có một khóa chính (không ngạc nhiên ở đó).
  • Trường Tự động đánh số trong MS Access phải là khóa chính hoặc chúng sẽ chỉ kết thúc dưới dạng cột nguyên trong MySQL (natch, tại sao nó không phải là PK?)
  • Các bảng đã được di chuyển sang loại bảng InnoDB của MySQL , nhưng các mối quan hệ Access không trở thành các ràng buộc khóa ngoài của MySQL.

Khi cơ sở dữ liệu đang được sử dụng, tôi có thể mong đợi bất kỳ sự cố nào khác không? Đặc biệt khi cả hai người dùng đang làm việc trong cùng một bảng?

Trả lời

15

Tôi đã có một ứng dụng hoạt động tương tự như vậy: một lối vào MS Access tới một chương trình phụ trợ của MySQL. Đó là một nỗi đau lớn đến nỗi cuối cùng tôi đã viết một lối vào Win32 thay vào đó.Từ đầu của tôi, tôi gặp phải các vấn đề sau:

  • Phát triển liên kết ODBC dường như đã ngừng hoạt động từ lâu. Có nhiều phiên bản khác nhau nổi xung quanh --- rất khó hiểu. Liên kết ODBC không hỗ trợ Unicode/UTF8 và tôi cũng nhớ có các vấn đề khác với nó (mặc dù một số có thể được khắc phục bằng cấu hình cẩn thận).
  • Bạn có thể muốn tinh chỉnh lược đồ db của mình theo cách thủ công để làm cho nó tương thích với MS Access. Tôi thấy bạn đã tìm hiểu về các khóa thay thế cần thiết (ví dụ: int khóa chính) :-)
  • Bạn nên nhớ rằng bạn có thể cần sử dụng truy vấn chuyển tiếp để thực hiện các thao tác SQL phức tạp hơn của cơ sở dữ liệu MySQL.
  • Hãy cẩn thận với việc sử dụng nhiều VBA, vì điều đó có xu hướng làm hỏng tệp lối vào của bạn. Thường xuyên nén cơ sở dữ liệu (sử dụng menu chính, Công cụ | Tiện ích cơ sở dữ liệu | Nén và khôi phục, hoặc một cái gì đó tương tự --- Tôi đang sử dụng phiên bản tiếng Hà Lan) và thực hiện sao lưu là cần thiết.
  • Truy cập có xu hướng gây ra nhiều lưu lượng truy cập mạng. Giống như, rất nhiều rất lớn. Tôi đã không thể tìm ra giải pháp cho điều đó. Sử dụng màn hình mạng được khuyến nghị nếu bạn muốn theo dõi điều đó!
  • Truy cập khẳng định lưu trữ các boolean là 0/-1. IMHO, 0/+ 1 có ý nghĩa hơn, và tôi tin rằng đó là cách mặc định để làm những việc trong MySQL. Không phải là một vấn đề lớn, nhưng nếu hộp kiểm của bạn không hoạt động, bạn chắc chắn nên kiểm tra điều này.

Một giải pháp thay thế có thể là đặt phụ trợ (có dữ liệu) trên ổ đĩa được chia sẻ. Tôi nhớ điều này là tài liệu, cũng trong sự giúp đỡ. Bạn có thể muốn xem some general advice on splitting into a frontend and a backendcode that automatically reconnects to the backend on startup; Tôi cũng có thể gửi cho bạn một số mã mẫu khác hoặc đăng nó ở đây.

Nếu không, bạn cũng có thể muốn xem xét MS SQL. Tôi không có kinh nghiệm với điều đó, nhưng tôi đoán nó hoạt động cùng với MS Access nhiều hơn nữa độc đáo!

2

Tôi biết điều này không trực tiếp trả lời câu hỏi của bạn, nhưng có thể đáng để kiểm tra số SQL Server 2005 migration tool for Access. Tôi chưa bao giờ sử dụng công cụ này, nhưng nó có thể đáng được sử dụng với SQL Server 2005 Express Edition để xem liệu có vấn đề tương tự như bạn đã có với MySQL

0

Nếu nó chỉ có hai người dùng thì Access sẽ làm tốt nếu bạn đặt .mdb trên một ổ đĩa được chia sẻ.

Bạn đã thử nó trước thay vì chỉ giả định nó sẽ là một vấn đề.

Tôi tin rằng số người dùng đồng thời tối đa được đề xuất cho Truy cập là 5 nhưng đôi khi tôi đã đẩy nó qua quá trình này và không bao giờ bị bỏ lỡ.

Mặt khác, tôi đã từng sử dụng Access làm giao diện người dùng cho MySQL trong một môi trường người dùng duy nhất (tôi). Đó là một trải nghiệm khó chịu độc đáo, tôi không thể tưởng tượng nó sẽ trở nên đẹp hơn với hai người dùng.

1

Nói chung, nó phụ thuộc :)

Tôi chưa gặp nhiều vấn đề khi phía ứng dụng vừa cập nhật dữ liệu thông qua biểu mẫu. Bạn có thể nhận được cảnh báo/lỗi khi cùng một hàng đã được cập nhật bởi nhiều người dùng; nhưng Access dường như liên tục cập nhật các bản ghi trực tiếp của nó mọi lúc.

Sự cố có thể xảy ra nếu Alice đã làm việc với bản ghi 365 và Bob cập nhật nó, sau đó Alice cố gắng cập nhật nó với những thay đổi của cô ấy. Khi tôi nhớ lại, Alice sẽ nhận được một thông báo lỗi khó hiểu. Nó sẽ dễ dàng hơn cho người sử dụng nếu bạn bẫy những lỗi này và ít nhất là cung cấp cho họ một thông báo lỗi thân thiện hơn.

Tôi đã gặp nhiều sự cố hơn khi chỉnh sửa bản ghi trong mã VB thông qua RecordSets, đặc biệt khi được kết hợp với chỉnh sửa cùng một dữ liệu trên biểu mẫu. Đó không nhất thiết là một vấn đề đa người dùng; tuy nhiên, bạn có tình huống gần như giống nhau bởi vì bạn có một người dùng có nhiều kết nối với cùng một dữ liệu.

3

Gareth Simpson phát biểu:

Nếu đó là chỉ có hai người dùng, sau đó Truy cập nên làm tốt nếu bạn đặt .mdb trên một ổ đĩa chia sẻ.

Er, no. Không có ứng dụng Access đa người dùng mà mỗi người dùng không nên có một bản sao chuyên dụng của giao diện người dùng. Điều đó có nghĩa là mỗi người dùng phải có một MDB trên máy trạm của họ. Tại sao? Bởi vì các đối tượng trong giao diện người dùng không chia sẻ tốt (không gần như cũng như bảng dữ liệu máy bay phản lực, mặc dù không có bất kỳ của những người trong kịch bản này bằng cách sử dụng MySQL như là kết thúc trở lại).

Gareth Simpson tiếp tục:

tôi tin rằng các đề nghị tối đa người dùng đồng thời cho Access là 5 nhưng nhân dịp tôi đã đẩy nó qua này và không bao giờ quay lột.

Không, điều này hoàn toàn không chính xác. Giới hạn lý thuyết cho người dùng MDB là 255. Điều đó không thực tế, tất nhiên, khi bạn đạt khoảng 20 người dùng, bạn phải lập trình ứng dụng Access của mình một cách cẩn thận để hoạt động tốt (mặc dù những thứ bạn cần làm trong Access-to- Ứng dụng máy bay phản lực là những thứ tương tự như những gì bạn muốn làm để làm cho bất kỳ ứng dụng cơ sở dữ liệu máy chủ nào hiệu quả, ví dụ, truy xuất các tập dữ liệu có thể sử dụng nhỏ nhất).

Trong trường hợp này, vì mỗi người dùng phải có một bản sao riêng của MDB front-end, giới hạn đa người dùng của Access/Jet đơn giản là không liên quan chút nào.

2

Đừng quên đặt một số loại tem thời gian/ngày trên mỗi bản ghi. đôi khi truy cập ms sẽ nghĩ rằng "một người dùng khác đã thay đổi hoặc xóa bản ghi" và sẽ không cho phép bạn thực hiện thay đổi! Tôi thấy điều này một cách khó khăn.

17

Tôi biết chủ đề này không phải là quá mới mẻ, nhưng chỉ cần một số giải thích thêm:

Nếu bạn muốn sử dụng MS Access một cách hiệu quả, đặc biệt là với lớn hơn, cơ sở dữ liệu đa người dùng, hãy làm như sau:

  • chia MDB của bạn thành ứng dụng giao diện người dùng và tệp phụ trợ (chỉ dữ liệu) - bạn sẽ có hai tệp MDB riêng biệt sau đó.

  • di chuyển tất cả các bảng có dữ liệu và cấu trúc vào cơ sở dữ liệu bên ngoài. Nó có thể là: MySQL (hoạt động rất tốt, không có giới hạn kích thước cơ sở dữ liệu, đòi hỏi một số kỹ năng hơn vì nó không phải là công nghệ MS, nhưng nó là một lựa chọn tốt trong nhiều trường hợp - hơn nữa bạn có thể mở rộng phần phụ trợ của bạn với nhiều RAM hơn và CPU bổ sung. phụ thuộc vào nhu cầu và khả năng phần cứng của bạn); Oracle (nếu bạn có đủ tiền hoặc một số loại giấy phép công ty) hoặc Oracle 10g XE (nếu đây không phải là vấn đề, kích thước cơ sở dữ liệu bị giới hạn tối đa 4 GB và nó sẽ luôn sử dụng 1 GB RAM và 1 CPU), MS SQL Server 2008 (nó là một cặp tuyệt vời để có MS Access frontend và MS SQL Server phụ trợ trong tất cả các trường hợp, nhưng bạn phải trả tiền cho giấy phép - lợi thế là: tích hợp chặt chẽ, cả hai công nghệ được hình thành cùng một nhà cung cấp; là rất dễ dàng để duy trì một hiệu quả cùng một lúc) hoặc Express phiên bản (cùng một câu chuyện như với Oracle XE - gần như cùng một giới hạn).

  • liên kết lại giao diện MS Access của bạn với cơ sở dữ liệu phụ trợ. Nếu bạn chọn MS SQL Server cho backend thì nó sẽ dễ dàng như sử dụng thuật sĩ từ MS Access. Đối với MySQL - bạn phải sử dụng trình điều khiển ODBC (nó đơn giản và hoạt động rất tốt). Đối với Oracle - vui lòng không sử dụng trình điều khiển ODBC của Microsoft. Những từ Oracle sẽ làm công việc của họ tốt hơn nhiều (bạn có thể so sánh thời gian cần thiết để thực hiện truy vấn SQL từ MS Access đến Oracle thông qua Oracle ODBC và trình điều khiển ODBC MS Oracle). Tại thời điểm này, bạn sẽ có backend cơ sở dữ liệu vững chắc và đầy đủ chức năng MS Access frontend - MDB file.

  • biên dịch giao diện người dùng MDB của bạn thành MDE - nó sẽ cung cấp cho bạn rất nhiều tốc độ. Hơn nữa, đó là hình thức hợp lý duy nhất để phân phối ứng dụng MS Access cho người dùng cuối của bạn.

  • cho công việc hàng ngày - sử dụng tệp MDE có lối vào MS Access. Để phát triển giao diện người dùng MS Access hơn nữa, hãy sử dụng tệp MDB.

  • không sử dụng các thành phần ActiveX được viết kém để tăng cường khả năng truy cập MS Access. Tốt hơn hãy tự viết chúng hoặc mua những thứ thích hợp.

  • đừng tin vào những huyền thoại rằng có rất nhiều vấn đề với MS Access - đây là một sản phẩm tuyệt vời có thể giúp đỡ trong những dịp có thể xảy ra. Vấn đề là rất nhiều người cho rằng đó là một món đồ chơi hoặc MS Access là generaly đơn giản. Thông thường chúng tạo ra rất nhiều lỗi và vấn đề của bản thân và sự thiếu kiến ​​thức và kinh nghiệm của họ. Để thành công với MS Access, điều quan trọng là phải hiểu công cụ này - đây là quy tắc giống như bất kỳ công nghệ nào khác.

Tôi có thể nói với bạn rằng tôi đang sử dụng MS Access nâng cao trước MySQL backend và tôi rất hài lòng (là nhà phát triển duy trì ứng dụng này).Bạn bè của tôi, người dùng cũng hài lòng vì họ cảm thấy rất thoải mái với GUI (giao diện người dùng), tốc độ (MySQL), họ không có bất kỳ vấn đề nào với việc khóa hồ sơ hoặc hiệu năng cơ sở dữ liệu.

Hơn nữa, điều quan trọng là phải đọc rất nhiều về thực tiễn tốt và trải nghiệm của người khác. Tôi sẽ nói rằng trong nhiều trường hợp MS Access là một giải pháp tốt. Tôi biết rất nhiều hệ thống chuyên dụng, tùy chỉnh được bắt đầu như một thử nghiệm dưới dạng cơ sở dữ liệu MS Access riêng (tệp MDB) và sau đó phát triển thành: Access MS chia nhỏ (MDE - frontend, MDB - backend) và cuối cùng là: MS Access frontend (MDE) và "nghiêm trọng" cơ sở dữ liệu phụ trợ (chủ yếu là MS SQL Server và MySQL). Điều quan trọng là bạn luôn có thể sử dụng giải pháp MS Access như một nguyên mẫu làm việc - bạn đã sẵn sàng sử dụng backend trong cơ sở dữ liệu của mình (MySQL - giả sử) và bạn có thể viết lại lối vào công nghệ bạn chọn (giải pháp web? ứng dụng - những gì bạn yêu cầu!).

Tôi hy vọng tôi đã giúp một số bạn xem xét công việc với MS Access.

Kính trọng, Wawrzyn http://dcserwis.pl