intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình ADO tren Visual 6.0

Chia sẻ: Nguyen Hung | Ngày: | Loại File: DOC | Số trang:38

137
lượt xem
36
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Giống như ODBC (Open DataBase Connectivity), kỹ thuật lập trình với OLE DB đòi hỏi phải được thực hiện bằng các lệnh phức tạp cấp thấp API. Chính vì lý do này, Microsoft cũng đã đưa ra một lớp giao tiếp lập trình cấp cao ADO được xây dựng dựa trên kỹ thuật OLE DB cho phép lập trình nhanh các ứng dụng liên kết CSDL (Cơ sở dữ liệu). CÁC ĐỐI TƯỢNG LẬP TRÌNH ADO CƠ SƠ Lớp giao tiếp lập trình dữ liệu cấp cao ADO cung cấp một tập hợp những đối tượng giúp chúng ta dễ dàng làm việc với các nguồn dữ liệu...

Chủ đề:
Lưu

Nội dung Text: Lập trình ADO tren Visual 6.0

  1. ADO căn bản MONDAY, 28. JANUARY 2008, 06:05:26 ADO  Hãy đọc trước khi các bạn bước vào thế giới của ADO ADO là gì? Tôi xin miễn bàn cụ thể, các bạn có thể tham khảo trên trang  www.vovisoft.com hay những trang khác. Tôi xin nói ngắn gọn: ADO  là viết tắt của chữ ActiveX Data Object. Đây là một đối tượng giúp  bạn làm việc với nhiều kiểu dữ liệu khác nhau. Giống như ODBC (Open DataBase Connectivity), kỹ thuật lập trình  với OLE DB đòi hỏi phải được thực hiện bằng các lệnh phức tạp cấp  thấp API. Chính vì lý do này, Microsoft cũng đã đưa ra một lớp giao  tiếp lập trình cấp cao ADO được xây dựng dựa trên kỹ thuật OLE DB  cho phép lập trình nhanh các ứng dụng liên kết CSDL (Cơ sở dữ liệu). CÁC ĐỐI TƯỢNG LẬP TRÌNH ADO CƠ SƠ Lớp giao tiếp lập trình dữ liệu cấp cao ADO cung cấp một tập hợp  những đối tượng giúp chúng ta dễ dàng làm việc với các nguồn dữ  liệu khác nhau. Trong các đối tượng này có những đối tượng chính  cần tìm hiểu, đó là: Connection, Recordset, Command, Field  (ngoài ra còn có: Parameter, Property, Error). Connection Đây là một đối tượng được sử dụng để tạo liên kết giữa chương trình 
  2. với CSDL. Sau khi đã tạo được liên kết xong chúng ta mới có thể thực  hiện các thao tác xử lý dữ liệu trên CSDL này. Để tạo lập một liên kết Connection chúng ta cần xác định rõ các  thông tin cần thiết bao gồm: • Provider: Tên của chương trình giao tiếp dữ liệu (OLE DB Provider). • Data source: Tên đầy đủ của tập tin CSDL hay tên nguồn dữ liệu  ODBC cần liên kết. • Username: Đây là một thông tin tùy chọn quy định tên của người  dùng được tổ chức bên trong CSDL này. Nó phụ thuộc vào các lọai  CSDL, với các CSDL Access chúng ta có thể bỏ qua thông tin này. • Password: Chuỗi mật khẩu tương ứng với User name nhằm thâm  nhập CSDL Command Đối tượng Command sẽ cho phép chương trình có thể gọi thực hiện  một câu lệnh truy vấn SQL trên CSDL hay gọi thực hiện một thủ tục  xử lý đã được cài đặt trong CSDL (Stored procedure). Nếu các thủ tục xử lý trong CSDL này có nhận và trả về giá trị, thì khi  đó chúng ta sẽ dùng đối tượng Parameter Với CSDL Access, các truy vấn đã được xây dựng sẵn trong tập tin  MDB (bao gồm các truy vấn chọn, thêm, xóa, sửa,...) có thể được  xem như là các stored procedure. Recordset
  3. Là đối tượng lưu trữ một tập họp các mẫu tin được chọn từ các bảng  có trong CSDL. Thông qua các đối tượng Recordset, chúng ta có thể  thực hiện các xử lý như hiển thị dữ liệu, cập nhật, tìm kiếm,...với  CSDL đã nối kết. Thông thường các Command có câu lệnh truy vấn  thực hiện dạng SELECT đều trả về một bộ mẫu tin (Recordset). Trong quá trình lập trình CSDL với Visual Basic 6.0 chúng ta có thể  tạo ra Recordset bằng nhiều cách tại những thời điểm khác nhau như:  dùng ADO control, DataEnvirement hay dùng bằng lệnh. Đối tượng Field Là đối tượng con cho phép chúng ta truy xuất và làm việc với một  trường (cột) dữ liệu có trong một bộ mẫu tin Recordset. Với đối tượng  field có hai thuộc tính cần quan tâm, đó là: Name (tên trường dữ liệu)  và Type (kiểu dữ liệu của trường) Bây giờ chúng ta sẽ đi vào từng thuộc tính và phương thức chính của  các đối tượng trên.
  4. CONNECTION Sau khi tạo xong liên kết dữ liệu, chúng ta mới có thể tạo ra các đối  tượng khác dựa trên liên kết này.  1. Thuộc tính liên kết dữ liệu: Trước khi thực hiện tạo một liên kết dữ liệu, chúng ta cần khai báo  các tham số cần thiết cho đối tượng Connection như tên server, tên  cơ sở dữ liệu, tên người dùng và mật khẩu. Sau đây là các thuộc tính  quan trọng cần khai báo khi tạo một liên kết dữ liệu. _Thuộc tính ConnectionString: là chuỗi ký tự chứa các thông tin cần  thiết cho việc nối kết dữ liệu. Chuỗi ký tự này gồm các thành phần  thông tin như: _Provider: tên trình liên kết dữ liệu OLE DB _Server: tên máy chủ chứa CSDL cần kết nối _Use ID: mã số người dùng _Password: mật khẩu người dùng _Data Source: nguồn dữ liệu kết nối Ví dụ khi kết nối với một cơ sở dữ liệu SQL Server có tên QLTV  chúng ta sẽ có chỗi sConnection như sau:  sConnection="Provider=SQLOLEDB;" & "Server=ServerNT; User   ID=MyID; " & "Password=MyPWD; Data Source=QLTV"
  5. Một số connection string tham khảo từ trang web Erlandsen Data  Consulting: Kết nối vào Access database dùng standard security: cn.Open "driver={Microsoft Access Driver (*.mdb)};" &_ "dbq=c:\foldername\databasename.mdb;uid=admin;p wd=" Kết nối vào một Access database dùng một workgroup system  database: cn.Open "driver={Microsoft Access Driver (*.mdb)};" &_ "dbq=c:\foldername\databasename.mdb;" & _ "systemdb=c:\foldername\databasename.mdw;", _ "userid", "userpassword" Kết nối vào một Access database exclusively: cn.Open "driver={Microsoft Access Driver (*.mdb)};" &_ "dbq=c:\foldername\databasename.mdb;" & _ "exclusive=1;uid=admin;pwd="
  6. Kết nối vào một SQL server dùng standard sequrity: cn.Open "driver={SQL Server};" & _ "server=servername;database=databasename;" & _ "uid=userid;pwd=userpassword" Kết nối vào SQL server dùng trusted connection security: cn.Open "driver={SQL Server};" & _ "server=servername;database=databasename;" & _ "uid=;pwd=" Kết nối vào một SQL server từ name và password: cn.Properties("Prompt") = adPromptAlways cn.Open "driver={SQL Server};" & _ "server=servername;database=databasename" Connecting to a Sybase database using the Sybase System 12   driver: cn.Open "driver={SYBASE ASE ODBC Driver};" & _ "srvr=servername;" & _ "uid=userid;pwd=userpassword"
  7. Connecting to a Sybase database using the Sybase System 11   driver: cn.Open "driver={SYBASE SYSTEM 11};" & _ "srvr=servername;" & _ "uid=userid;pwd=userpassword" Connecting to an Oracle database using the current Microsoft ODBC   driver: cn.Open "driver={Microsoft ODBC for Oracle};" & _ "server=servername.world;" & _ "uid=userid;pwd=userpassword" Connecting to an Oracle database using the Oracle ODBC driver: cn.Open "driver={Oracle ODBC Driver};" & _ "dbq=databasename;" & _ "uid=userid;pwd=userpassword" Bạn phải định nghĩa dbq databasename trong file tnsnames.ora.  Kết nối vào một Excel workbook: cn.Open "driver={Microsoft Excel Driver (*.xls)};" &_ "driverid=790;dbq=c:\foldername\workbookname.xl s;" & _ "defaultdir=c:\foldername" Kết nối vào một dBase database:
  8. cn.Open "driver={Microsoft dBase Driver (*.dbf)};" &_ "driverid=277;dbq=c:\foldername" ' specify the filename when you open the recordset rs.Open "select * from tablename.dbf", cn, , , adCmdText Bạn phải cần Borland Database Engine (BDE) để cập nhật file  dBase.  Kết nối vào một Paradox database: cn.Open "driver={Microsoft Paradox Driver (*.db )};" & _ "driverid=538;fil=Paradox 5.X;" & _ "defaultdir=c:\foldername\;" & _ "dbq=c:\foldername\;collatingsequence=ASCII" The extra space character after *.db in the driver name is necessary. Bạn phải cần Borland Database Engine (BDE) để cập nhật file ISAM.  Kết nối vào một file text: cn.Open "driver={Microsoft Text Driver (*.txt; *.csv)};" & _ "dbq=c:\foldername\;" & _
  9. "extensions=asc,csv,tab,txt,log,*." rs.Open "select * from filename.csv", cn, adOpenStatic, adLockReadOnly, adCmdText Định dạng của file text được định nghĩa bởi file schema. File thông tin  schema luôn luôn được đặt tên là Schema.ini và luôn luôn được đặt  trong cùng thư mục với file nguồn. File này cung cấp thông tin về định  dạng tổng quát của file, tên cột và kiểu dữ liệu. File Schema.ini luôn  luôn được yêu cầu để lấy dữ liệu từ fixed­width data. Một số ví dụ về file Schema.ini Ví dụ file Schema.ini cho file filename.txt chứa tên các cột ở dùng đầu  tiên: [filename.txt] Format=TabDelimited ColNameHeader=True MaxScanRows=0 CharacterSet=ANSI Ví dụ file Schema.ini cho filefilename.txt chứa dấu ";" phân cách giữa  các trường dữ liệu, và hàng đầu tiên chứa các tên của các cột dữ liệu: [filename.txt] Format=Delimited(;) ColNameHeader=True
  10. MaxScanRows=0 CharacterSet=ANSI Ví dụ về file Schema.ini cho filefilename.txt chứa fixed width data  không có tên các cột dữ liệu ở dòng đầu: [filename.txt] Format=FixedLength ColNameHeader=False Col1=FieldName1 Char Width 30 Col2=FieldName2 Date Width 15 Col3=FieldName3 Integer Width 15 Col4=FieldName4 Float Width 20 CharacterSet=ANSI _Thuộc tính CursorLocation: đây là thuộc tính quy định con trỏ liên  kết dữ liệu sẽ được tạo tại máy chủ hay máy con. Các hằng số dùng  cho thuộc tính này gồm: • adUseServer: con trỏ liên kết dữ liệu được tạo ra tại máy chủ. Mọi  sửa đổi của các người dùng khác trên mạng được thể hiện tức thời  trên dữ liệu của máy trạm. • adUseClient: con trỏ liên kết dữ liệu được tạo tại máy trạm. Mọi sửa  đổi của người dùng khác trên mạng không được thể hiện trên dữ liệu  của máy trạm cho đến khi được truy xuất lại. Với kiểu con trỏ này, dữ  liệu trên máy trạm có những thuận lợi mà kiểu adUseServer không  có.
  11. Thuộc tính này chung cho Connection lẫn Recordset, nghĩa là tất cả  các Recordset tạo ra từ một Connection sẽ có cùng kiểu con trỏ nếu  không được qui định tường minh. 2.Tạo đối tượng Connection dùng lệnh Tại thời điểm  ứng dụng đang thực thi (runtime), chúng ta có thể tạo Connection với  các bước sau: 2.1 Bước1: Khai báo tham chiếu đến thư viện ADO Để sử dụng kỹ thuật ADO, ta phải khai báo tham chiếu đến thư viện  ADO trong ứng dụng như sau: • Chọn Project | References... • Chọn Microsoft ActiveX Data Objects X.X Library, với X.X là phiên  bản có trên máy trạm tùy theo hệ thống, sau đó chọn OK.
  12. 2.2 Bước 2: Khai báo và khởi tạo một đối tượng Connection Trước tiên, ta khai báo một biến đối tượng kiểu Connection của ADO  như sau: Dim cnn as New ADODB.Connection Trong trường hợp ứng dụng có tham chiếu đến nhiều thư viện lập  trình ADO, RDO (Remote Data Object),...nếu chúng ta khai báo một  biến Connection nhưng không chỉ cụ thể Connection thuộc thư viện  nào thì đối tượng Connection được tạo ra sẽ thuộc thư viện tham  chiếu ưu tiên. Thư viện tham chiếu ưu tiên là thư viện được liên kết  trước các thư viện khác trong danh sách của bảng References. 2.3 Bước 3: Khai báo thuộc tính liên kết dữ liệu  Gán thuộc tính ConnectionString cho đối tượng Connection cnn theo  cú pháp sau: cnn.ConnectionString ="Provider=..." cnn.CursorLocation = adUseClient hay adUseServer Các chuổi ConnectionString xin tham khảo phần trên đã giới thiệu. 2.4 Bước 4: Kết nối Dùng phương thức Open của Connection để thực hiện kết nối. Cú  pháp sử dụng có dạng:
  13. cnn.Open Ví dụ: để thực hiện kết nối với cơ sở dữ liệu Biblio.mdb, ta viết đọan  mã như sau: DBName= ActiveWorkbook.Path & "\Biblio.mdb" cnn.ConnectionString="Provider=" & "Microsoft.Jet.OLEDB.4.0; Data Source=" & DBname cnn.CursorLocation=adUseClient cnn.Open 3. Thuộc tính State Trong môi trường nhiều người dùng, để tránh có quá nhiều  Connection kết nối vào cơ sở dữ liệu, đôi lúc sau khi tạo liên kết và  lấy dữ liệu về máy đơn xong chương trình sẽ đóng kết nối đi. Khi cần  thiết sẽ liên kết lại. Trong trường hợp này, chúng ta sẽ dựa vào thuộc  tính State của Connection để kiểm tra trạng thái liên kết của  Connection đang đóng hay đang mở. Sau khi kết nối, chúng ta dùng thuộc tính State để kiểm tra kết nối có  thành công hay không. Hằng |Trị |Ý ngh ĩ a adStateClosed |0 |Không kết nối adStateOpen |1 |Đang kết nối Ví dụ như đọan mã sau: If cnn.State=1 Then Msgbox "Kết nối thành công." Else Msgbox "Kết nối không thành công."
  14. End If 4. Phương thức Excecute Sau khi kết nối thành công, ta có thể dùng phương thức Execute của  connection để thực hiện truy vấn hay cập nhật dữ liệu. Cú pháp như  sau: Set = .Execute ([][,]) cho truy xuất Hoặc .Execute ([,][,]) cho cập nhật Nếu  kiểu chuỗi là: Thì  kiểu số Có trị là Tên bảng adCmdTable 2 Câu truy vấn Select adCmdText 1 Tên Query trên Access hoặc Stored Procedure trong SQL Server adCmdStoreProc 4 Chú ý: • Trong trường hợp rút trích đối số  không cần  chỉ ra. • Đối số  có thể không chỉ ra, nhưng  nếu chỉ ra thì phải phù hợp với , nếu không sẽ  gây lỗi.
  15. • Recordset được tạo ra theo cách này có thuộc tính chỉ đọc  (ReadOnly) Ví dụ: Dim rstdmnv as New ADOB.Recordset Set rstdmnv=cnn.Execute ("dmnv", , adCmdTable) 5. Đóng liên kết dữ liệu Một liên kết dữ liệu (Connection) sẽ tự động được đóng khi đóng ứng  dụng. Tuy nhiên trong chương trình khi cần đóng liên kết dữ liệu lại,  chúng ta có thể dùng phương thức Close theo cú pháp sau: cnn.Close COMMAND Sau khi thực hiện kết nối với nguồn dữ liệu qua Connection, chúng ta  có thể dùng Command để thực hiện một lệnh truy vấn SQL trên  nguồn dữ liệu đó hay gọi thực hiện một thủ tục nội trong cơ sở dữ liệu  này. Command đặc biệt hữu dụng khi phải thực hiện nhiều lần cùng  một lệnh hay các truy vấn có tham số. Khởi tạo và làm việc với  Command Các thuộc tính chính • CommandText: đây là thuộc tính quan trọng nhất của Command. 
  16. Nội dung của thuộc tính này là chuỗi lệnh SQL, tên truy vấn, tên bảng  hoặc tên thủ tục nội muốn thực hiện trên nguồn dữ liệu.  • CommandType: là thuộc tính giúp ADO nhanh chóng xác định kiểu  lệnh có trong CommandText. Nếu trị của CommandType dùng không  đúng kiểu của CommandText thì chương trình sẽ báo lỗi. Chính vì  vậy, chúng ta cần phải biết và sử dụng các hằng thường dùng cho  CommandType sau:  ­ adCmdText: nếu CommandText là câu truy vấn SQL.  ­ adCmdTable: nếu CommandText là tên bảng của cơ sở dữ liệu.  ­ adCmdStoreProc: nếu CommandText là tên thủ tục nội.  ­ adCmdUnknown: khi không biết kiểu của CommandText. Đây là trị  mặc định, trong trường hợp này, trình cung cấp OLEDB sẽ xác định  kiểu. Tuy nhiên đây là điều không nên và làm tốn thời gian.  ­ adCmdExecutteNoRecords: nếu CommandText là lệnh hay thủ  tục nội không trả về các mẫu tin (như khi cập nhật, xóa,...) và được  dùng chung với adCmdStoreProc.  ­ adCmdTabldirect: nếu mở trực tiếp bảng của cơ sở dữ liệu.  • ActiveConnection: thuộc tính này xác định liên kết dữ liệu  (Connection) mà Command sẽ thực hiện trên đó. Vì thế, nếu bỏ trống  thuộc tính này sẽ gây ra lỗi khi thực hiện lệnh.  Chúng ta có thể dùng chuỗi ConnectionString của Connection hoặc  bản thân Connection đang kết nối để gán trị cho thuộc tính này.  Thông thường, khi cần làm việc với nhiều Command, chúng ta nên 
  17. gán chính đối tượng Connection cho thuộc tính ActiveConnection của  các Command vì nếu dùng ConnectionString để gán sẽ tạo ra nhiều  liên kết riêng biệt. Làm việc với Command Để làm việc với đối tượng Command, chúng ta sẽ thực hiện các bước  sau: Bước 1: Khai báo và cấp phát vùng nhớ biến Command Có hai cách khai báo Command: ­ Khai báo và cấp phát vùng nhớ cùng lúc  Dim cmd As New ADODB.Command ­ Khai báo trước, khi dùng sẽ cấp phát vùng nhớ sau.  Dim cmd As ADODB.Command Set cmd=New ADODB.Command Bước 2: Đặt các thuộc tính cần thiết Các thuộc tính cần thiết cho đối tượng Command gồm: • Thuộc tính CommandText  • Thuộc tính CommandType 
  18. • Thuộc tính ActiveConnection  Bước 3: Gọi thực hiện Command Để gọi thực hiện một Command, chúng ta dùng phương thức Execute  theo cú pháp đơn giản như sau: • Đối với Command dạng rút trích  (Tức là Select...):  Set =.Execute() • Đối với Command cập nhật (Insert, Delete, Update,...)  .Execute () Với  là biến kiểu Recordset của ADO,  là  biến đối tượng command muốn thực hiện.  Ví dụ: Đọan chương trình sau sẽ minh họa việc khởi tạo và gọi thực  hiện Command trong Visual Basic (cũng như trong VBA) Giả sử tập tin quản lý nhân sự nhansu.mdb được lưu trữ dưới đây: Const DBPATH="C:\QLNS\Nhansu.mdb" 'Tạo đối tượng command thứ nhất Dim cmd1 As New ADODB.Command Dim rst1 As New ADODB.Recordset cmd1.ActiveConnection="Provider=Microsoft.Jet.OLEDB .4.0;" & "Data Source=" & DBPATH
  19. cmd.CommandText="SELECT mato, tento" & "FROM dmto" Set rst1=cmd.Execute() 'Tức là chọn mã tổ, tên tổ từ bảng dmto (danh mục tổ) 'Tạo đối tượng command thứ hai Dim cmd2 As New ADODB.Command Dim rst2 As New ADODB.Recordset Set cmd2.ActiveConnection=cmd.ActiveConnection cmd2.CommandText="SELECT * FROM dmnv" Set rst2=cmd2.Execute() Command có tham số Muốn thực hiện nhiều lần một Command với các điều kiện khác nhau,  ta có thể sử dụng Command có tham số. Phần nội dung tiếp theo đây  sẽ giới thiệu với các bạn cách tạo và gọi thực hiện Command có tham  số tùy theo lọai của đối tượng Command. 1. Với CommandText là chuỗi lệnh SQL Trong trường hợp nội dung của CommandText là chuỗi lệnh SQL,  chúng ta có thể dùng dấu ? thay cho các giá trị cụ thể trong phần  điều kiện của câu lệnh SQL. Ví dụ để lấy danh sách nhân viên thuộc các tổ khác nhau, chúng ta  có thể dùng: cmd.CommandText="Select tento From " & "dmto Where mato=?"
  20. Trong ví dụ trên chúng ta thấy ký tự ? đã được thay thế một giá trị cụ  thể trong biểu thức điều kiện. Để gọi thực hiện Command có tham số  này, chúng ta sẽ sử dụng cú pháp đầy đủ của phương thức Excecute  như sau: . Excute(Affected, Parameters, Options)  Cả ba tham số trong phương thức Execute đều là tham số tùy chọn. Ý  nghĩa của ba tham số này như sau: • Affected: là một biến kiểu Long để nhận về số mẫu tin bị ảnh  hưởng của Command. Với các Command rút trích, biến này không  nói lên điều gì nhưng với những Command cập nhật...chúng ta có thể  biết được số mẫu tin được thay đổi hay xóa bởi Command. • Parameters: các giá trị sẽ truyền cho tham số của Command nếu  có. Trường hợp Command có nhiều hơn một tham số thì các giá trị  được truyền cho tham số của Command sẽ được lưu trong một biến  mảng kiểu Variant. Như vậy để gọi thực hiện command trên với Mato cần lọc là chuỗi  strMato chúng ta sẽ dùng cú pháp như sau: Set rst=cmd.Execute(, strmato) 2. Với CommandText là tên thủ tục nội Trong trường hợp cần gọi thực hiện một thủ tục nội trong cơ sở dữ 
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
4=>1