2012-03-16 43 views
14

Đây không phải là câu hỏi về câu hỏi nào tốt hơn, mà là một câu hỏi liên quan đến lý do tại sao chúng khác nhau về mặt chức năng. Vấn đề tôi đang gặp phải đã được xử lý, nhưng tôi tò mò là tại sao hành vi này lại xảy ra.Sự khác biệt giữa ADO và DAO

Bối cảnh - sử dụng Excel vba để lấy dữ liệu từ cơ sở dữ liệu Access. Khi người dùng nhấp vào một nút, bản ghi sẽ được lấy từ Access và nó sẽ điền dữ liệu khác nhau vào bảng tính. Sau đó, một bản ghi khác được lấy từ một truy vấn khác để điền một phần khác của bảng tính.

ADO làm gì - ADO hoạt động tốt cho bản ghi đầu tiên của tôi. Tuy nhiên, bản ghi thứ hai của tôi đi đến truy vấn trong Access, chạy và không trả về hàng nào. Nếu tôi chạy truy vấn này trong Access, nó sẽ mở ra (sau khoảng 3 đến 4 giây). Truy vấn này có nhiều phép nối, các mục được tính, các giới hạn và các truy vấn có thể của Liên minh (tôi đã thử nhiều cách khác nhau, có/không có công đoàn, v.v.). Tôi đã thử đóng và mở lại kết nối ado. Tôi đã thử thay đổi giá trị thời gian chờ và thậm chí tôi đã thử nghiệm bằng cách sử dụng lệnh ADO để chạy Thực hiện truy vấn bảng cho dữ liệu này và sau đó kéo từ bảng đó (cách này hoạt động bằng cách này, nhưng không phải là trường hợp tốt nhất, vì dữ liệu thay đổi liên tục và tôi không muốn phải chạy truy vấn tạo bảng mỗi khi ai đó sử dụng công cụ này).

Vì vậy, tôi đã thay đổi lần kéo dữ liệu thứ hai thành DAO và lo lắng, nó hoạt động. Việc kéo dữ liệu đầu tiên vẫn là ADO (mà tôi thường thích sử dụng), nhưng bây giờ đang xem xét việc thay đổi nó thành DAO, bởi vì tôi muốn có một phương thức truy cập dữ liệu trong mã.

Vì vậy, ai đó có thể giải thích cho tôi tại sao ADO sẽ không lấy dữ liệu trong một trường hợp, nhưng DAO sẽ? Một lần nữa, điều này là hoàn toàn cho các mục đích thông tin.

+1

Rất khó để nhận xét mà không nhìn thấy mã của bạn, nhưng nó có thể là một vấn đề loại cusrsor/recordset. Bạn có dựa vào các giá trị mặc định trong mã của mình không?Nếu bạn chỉ làm việc với Access, DAO là một lựa chọn tốt hơn vì nó có nguồn gốc từ Access và cung cấp nhiều quyền kiểm soát hơn ADO – SWa

+2

Bạn sử dụng ký tự đại diện ở đâu? Đây là một vấn đề phổ biến, đối với ADO ký tự đại diện là%, trong khi DAO là (thường) *. – Fionnuala

+0

@Remou, tôi quen thuộc với sự khác biệt trong ký tự đại diện giữa hai, nhưng tôi tiếc là không sử dụng chúng trong các truy vấn. – APrough

Trả lời

11

DAO là phương thức truy cập dữ liệu gốc cho bảng dữ liệu Máy bay phản lực (Ms-Access). ADO "Active X Data Objects" là một kết nối thân thiện với ngành đối với hầu hết các loại cơ sở dữ liệu.

Với truy vấn chuẩn không có lý do nào trong trường hợp này ADO không trả về bản ghi mà DAO làm, tôi nghi ngờ rằng truy vấn cũng phải chứa tham số liên quan đến các mục trong cơ sở dữ liệu Access. Nếu trường hợp này xảy ra thì ADO sẽ không hoạt động vì nó sẽ không có tùy chọn sử dụng các tham số đã nói vì nó chỉ là tham chiếu ngoài tới Excel, sử dụng phương thức DAO sẽ kích hoạt Access để chạy truy vấn thay vì Excel và như vậy nó sẽ có thể truy cập thông số/tham chiếu riêng của nó.

+1

+1 DAO là một lựa chọn tốt hơn nhiều so với ADO cho Access – SWa

+0

@Matt Donnan - Các tham số không phải là một vấn đề; cả hai truy vấn đều sử dụng chúng và sau khi tôi thay đổi nó thành một bảng, nó vẫn sử dụng chúng. Phải có một thứ khác mà quá trình truy vấn mất quá nhiều thời gian hoặc một cái gì đó. Tuy nhiên, tôi thích bình luận của bạn "bằng cách sử dụng phương pháp DAO sẽ kích hoạt truy cập để chạy truy vấn chứ không phải là Excel và như vậy nó sẽ có thể truy cập thông số riêng của nó/tham khảo". Có lẽ ADO đang có Excel cố gắng xử lý truy vấn và nó đang bị lạc ở đó? – APrough

+0

@creamyegg và Kyle. Tôi đồng ý rằng DAO có lẽ là sự lựa chọn tốt hơn, nhưng tôi thường sử dụng ADO chống lại SQL Server, cộng với thói quen của tôi chết cứng, và sử dụng ADO hầu hết thời gian là tốt cho đến khi tôi chạy vào một vấn đề như thế này: P Oh tốt, cần phải ingrain bản thân mình để sử dụng DAO từ bây giờ (trong các loại dự án). – APrough

3

Tôi nghĩ câu hỏi này đã được trả lời rất tốt nhưng tôi muốn thêm một tài nguyên tuyệt vời khác (mặc dù hơi khó tìm) để so sánh DAO và ADO. Nó được nhắm mục tiêu chủ yếu tại các ứng dụng Access với các biểu mẫu và báo cáo Access, nhưng phần lớn thông tin ở đây sẽ áp dụng cho một giải pháp được viết bằng Excel.

UtterAccess Wiki Article: Choosing between ADO and ADO

1

Trong Visual Basic, ba giao diện truy cập dữ liệu có sẵn cho bạn: ActiveX Data Objects (ADO), các đối tượng dữ liệu từ xa (RDO), và Data Access Objects (DAO). Giao diện truy cập dữ liệu là một mô hình đối tượng đại diện cho các khía cạnh khác nhau của việc truy cập dữ liệu. Sử dụng Visual Basic, bạn có thể điều khiển lập trình kết nối, trình xây dựng câu lệnh và dữ liệu trả về để sử dụng trong bất kỳ ứng dụng nào.

Tại sao có ba giao diện truy cập dữ liệu trong Visual Basic? Công nghệ truy cập dữ liệu liên tục phát triển, và mỗi một trong ba giao diện đại diện cho một trạng thái khác nhau của nghệ thuật. Mới nhất là ADO, có một mô hình đối tượng đơn giản hơn nhưng linh hoạt hơn RDO hoặc DAO. Đối với các dự án mới, bạn nên sử dụng ADO làm giao diện truy cập dữ liệu của mình.

+0

Đọc rằng ADO không còn hoạt động phát triển Liên kết: http://www.utteraccess.com/ wiki/index.php/Chọn_between_DAO_and_ADO –

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