Danh mục

Recordset trong Access Data Project

Số trang: 14      Loại file: pdf      Dung lượng: 132.72 KB      Lượt xem: 14      Lượt tải: 0    
tailieu_vip

Phí tải xuống: miễn phí Tải xuống file đầy đủ (14 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Chương trình phải là một ADP (Access Data Project), không phải là MDB. 2. Dự án có thể tiếp tục kết nối sang cơ sở dữ liệu ‘config’ của SQL Server. 3. Tất cả dữ liệu phải được lưu trữ trong các cơ sở dữ liệu ‘client’ SQL Server.
Nội dung trích xuất từ tài liệu:
Recordset trong Access Data ProjectRecordset trong Access Data Project1. Chương trình phải là một ADP (Access DataProject), không phải là MDB.2. Dự án có thể tiếp tục kết nối sang cơ sở dữ liệu‘config’ của SQL Server.3. Tất cả dữ liệu phải được lưu trữ trong các cơ sở dữliệu ‘client’ SQL Server.4. Các form phải kết nối tới cơ sở dữ liệu client chínhxác trong thời gian chạy.Bạn có thực hiện điều này? Tất cả cơ sở dữ liệu(CSDL) được đặt trên một SQL Server đơn, nhưngứng dụng có thể cần lấy dữ liệu từ bất kỳ một nguồntrong số đó. Ở một số trường hợp, người dùng yêucầu trích lấy dữ liệu từ một CSDL cụ thể. Họ có thểkhởi phát hoạt động sử dụng CSDL riêng và ứngdụng phải được trỏ động tới nơi lưu trữ dữ liệu chínhxác.Ý nghĩ đầu tiên của tôi là phải thay đổi thuộc tính kếtnối của ứng dụng ADP mỗi khi người dùng chọn mộtCSDL khác nhau. Nhưng điều này không đơn giảnmà cũng chẳng dễ dàng gì. Thay đổi kết nối trongthời gian chạy cũng giống như bắt con ngựa đua phảiquay ngược lại giữa đường đua. Khi một thuộc tínhkết nối của ADP bị đóng, tất cả form đều bị huỷ.Giải pháp cuối cùng rất dễ chịu và có thể dùng lạiđược. Trong một nutsell, nó gồm những phần sau:• Kết nối ADP được gắn với CSDL config.• CSDL config quản lý đăng nhập người dùng.• Config bao gồm một danh sách CSDL client.• Nhiệm vụ cho tất cả client nằm trong CSDL Config.• ADP có hai thủ tục đơn giản hoá chuyển đổi.• Thủ tục con: LoadDbsConnectString(ClientID).• Hàm: GetRecordset(SQL) As Recordset.• Dữ liệu Form và Control được load qua thuộc tínhRecordset.• Thuộc tính Form.RecordSource phải để trống.• Thuộc tính Form.RecordSet phải được thiết lập ởmã VBA.• Phải dùng toán tử Set.• Bảng, bảng ảo (view) hoặc thủ tục lưu trữ có thểđược sử dụng.Ví dụ bên dưới (hình minh hoạ) là frmAddress ở môhình thiết kế. Form này sẽ đòi hỏi thiết lập bốnrecordset: một cho dữ liệu của form và ba cho cáchộp combo box. Chú ý là recordset cho một trong bahộp đó, cboStateCode sẽ phụ thuộc vào giá trị đượcchọn trong tuỳ chọn country (đất nước),cboCountryID. Chúng ta sẽ xem có thể load form nàyvới dữ liệu như thế nào.Chú ý: Hiện nay không có mã nguồn để download.Bởi để làm việc với các kết nối đòi hỏi phải có lượngrất lớn mã nguồn. Do người đọc thường có máy chủvà CSDL riêng nên điều này trở thành một vấn đềkhông đơn giản để triển khai.Thiết lập kết nối ADPNhư đã đề cập tới ở trên, bước đầu tiên là thiết lậptoàn diện kết nối cho ADP. Trong trường hợp củachúng ta, đây là thiết lập cho CSDL Config chứathông tin về các database client khác nhau mà ứngdụng có thể trỏ tới.Thuộc tính Connection của ADP có thể được thiết lậpdễ dàng trong thời gian thiết kế mà không cần phảichỉnh sửa bởi người dùng. Đơn giản chỉ cần chọnConnection từ menu File và điền đầy đủ giá trị yêucầu trong hộp thoại.Hộp thoại này có một nút Test Connection (kiểmtra kết nối), nhưng nó là một placebo (hộp để giữchỗ). Bạn chỉ có thể chọn một CSDL nếu nhập mộtserver hợp lệ. Nếu bạn có cả tên server và databasehợp lệ, sẽ chẳng có cái gì để phải kiểm tra cả. Nếumuốn yên tâm hơn, kích vào nút Test Connection đểkiểm tra lại trước khi đóng hộp thoại.Tạo các thủ tụcTheo các yêu cầu ở trên, nguồn cho client data (dữliệu cho máy khách) phải nằm ở dạng JIT (just intime, tức tạm thời). Những nguồn này có thể là khingười dùng lựa chọn tìm kiếm một CSDL cụ thể hoặclà kết quả sau khi thực hiện một nhiệm vụ gắn vớimột cơ sở dữ liệu client cụ thể. Nhưng kết luận cuốicùng thì, bạn sẽ không biết CSDL nào được trỏ tớitrước khi form được mở.Để đáp ứng yêu cầu này, chúng tôi tạo một giá trị xâutổng thể (g_ClientCnn), chia nhỏ xâu kết nối đầy đủvào CSDL client được yêu cầu. Do đó, khi một yêucầu dữ liệu được thực hiện, chúng tôi sẽ xác địnhClientID phù hợp và đưa nó vào thủ tục con thiết lậpxâu kết nối. (Xem đoạn mã bên dưới để hiểu chi tiết). Client connect string is saved in this public variable.Public g_ClientCnn As StringPublic Sub LoadDbsConnectString(ByVal lClientIDAs Long)On Error GoTo Err_HandlerDim rstTemp As New ADODB.RecordsetDim strSQL As StringDim strDatabase As StringDim strProjCnn As String You must hard-code the name of the configdatabase. It will be used below to simplify the creation of the newconnect string.Const strProjDBS As String =RecreationConfigDB The config database must include a table to manageclient database names based on an identifier, such asClientID.strSQL = SELECT [DatabaseName] FROMtblClient & _WHERE [ClientID]= & lClientIDrstTemp.Open strSQL, CurrentProject.Connection If the client record isnt found, throw an error.Otherwise, use the database name to update the connectionstring variable.If rstTemp.BOF And rstTemp.EOF ThenMsgBox Couldnt locate the database., vbCritical,ERRORElse The Replace function simplifies the connectionstring edit. We know that the format ofCurrentProject.Connection is correct. Simply replace the database name(assuming the users login has permission to both databases.)strDatabase = rstTemp!DatabaseNamestrProjCnn = CurrentProject.Connectiong_ClientCnn = Replace(strProjCnn, strProjDBS,strDatabase)End IfExit_Here:Set rstTemp = NothingExit FunctionErr_Handler:Resume NextEnd SubNgoài ra còn cần một thủ tục con để thiết lập xâu kếtnối, với một hoặc nhiều hàm tải dữ liệu vàorecordset. Bên dưới là một trong các hàm trả rarecordset ADO. Tôi sử dụng một số thực thi khác chothủ tục lưu trữ và chạy các lệnh INSERT, UPDATEDELETE. Tuy nhiên, để thực hiện nhiệm vụ tiếptheo, chúng ta cần trả lại một recordset ADO, thựchiện như sau:Public Function GetRecordset(ByVal sSQL AsString) As ADODB.Recordset On Error GoTo Err_Handler Dim rstTemp As New ADODB.Recordset Dim cnnTemp As New ADODB.Connection First open a temporary connection, and then loadthe recordset. cnnTemp.Open g_ClientCnn rstTemp.Open sSQL, cnnTemp, adOpenDynamic,adLockOptimistic This does ...

Tài liệu được xem nhiều: