VB.Net và Access Database

Thảo luận trong 'Access' bắt đầu bởi congthangitvn, 5 Tháng mười một 2010.

  1. Offline

    congthangitvn

    • Thành viên sáng lập

    • Liên thông đại học 2012...!
    Số bài viết:
    2.232
    Đã được thích:
    1.550
    Điểm thành tích:
    1.450
    Đang nghiên cứu vấn đề này. tình cờ lên mạng thấy có bài viết hay nên post cho anh em tham khảo (Nguồn: http://www.caulacbovb.com)

    1. Tìm hiểu về khái niệm ADO.Net
    Trong Net (VB.Net và C#) chỉ tồn tại khái niệm ADO.Net chứ ko tồn tại khái niệm cũ ADO (của VB6.)
    Các bạn có thể thấy được ADO.Net Model qua hình dưới đây. Có thể diễn đạt theo thứ tự là
    Database--> Conection--> Command--> DataAdapter--> Datatable hay Dataset và các bạn làm việc theo thứ tự này.
    [IMG]


    2. Namespace cần thiết để thao tác với Access
    Để thao tác với Access ta chỉ cần Imports các namespace sau đây
    PHP:

    Imports  System
    .DataImports  System.Data.OleDb 'sử dụng với access 
    3. Connect với Database
    Muốn thao tác với Database dĩ nhiên bước đầu tiên là phải tạo Connect cho nó.
    Ta tạo như sau:
    - Connect có tầm vực cục bộ trong Form cần khai báo
    Ví dụ file cần kết nối là SolieuTest.mdb được đặt trong thư mục Debug và có Password là 123456.


    PHP:
    Public  Class Form1    Dim  con As OleDbConnection ' Cục bộ trong  Form    Private Sub  Form1_Load(ByVal sender As System.Object, ByVal e  As System.EventArgs) Handles  MyBase.Load         Dim str As String  = "Provider=  Microsoft.Jet.OLEDB.4.0;" _                 & "Data Source = "  & Application.StartupPath  & "\SolieuTest.mdb;"  _                & "Jet OLEDB:Database Password =  123456"        con = New OleDbConnection(str)        con.Open()    End  Sub................................... 
    4. Command ( Lệnh ):
    - Để cho chương trình biết ta cần làm những gì đối với Database như select. Insert.................
    - Ví dụ đây là command dùng để Select hết tất cả dữ liệu trong bảng ra.

    PHP:

    Dim command 
    As New  OleDbCommand()         command.Connection con ' Kết nối        command.CommandType = CommandType.Text  'Loại lệnh sử dụng là Text hay là một  query trong access        command.CommandText "Select  * From DanhsachSV" 'Lệnh cần làm với Database 
    - Để sử dụng commnand được tốt các bạn cần phải nắm vững ngôn ngữ SQL (trong Box ebook có nhiều sách về SQL)
    - Nạp tham số cho command --> Very very Important. Ví dụ
    PHP:
    command.CommandText "Select * From DanhsachSV Where Name = @Name"
    Ở đây ta có @Name là tham số mà ta cần phải điền giá trị cho nó, ta gán giá trị như sau

    PHP:

    commandInsert
    .Parameters.Add("@Name",  OleDbType.VarChar).Value txtName.Text
    Vậy là ta đã gán giá trị từ Textbox txtName vào tham số @Name rồi đó
    killyou117, gnu, Seshoumaru2 người khác thích bài này.
  2. Offline

    congthangitvn

    • Thành viên sáng lập

    • Liên thông đại học 2012...!
    Số bài viết:
    2.232
    Đã được thích:
    1.550
    Điểm thành tích:
    1.450
    5. DataAdapter và Dataset, DataTable
    - Chúng ta đã có Connect và commnand rồi, giờ chúng ta cần có một cái máy sử dụng những cái trên để thực thi lệnh mà ta đưa ra --> Đó chính là DataAdapter.
    - Khai báo một DataAdapter chỉ đơn giản thế này
    PHP:

    Dim  adapter 
    As New OleDbDataAdapter()

    Ngoài ra còn các hình thức khởi tạo khác, nhưng chỉ được xài với các loại command thuộc dạng Select và tùy theo cách mà chúng ta cảm thấy quen thuộc nhất

    PHP:


    OleDbDataAdapter 
    (OleDbCommand)  OleDbDataAdapter  (StringSelect,  OleDbConnection)    OleDbDataAdapter (StringSelect,  StringConnect)   
    - Sau khi thực hiện lệnh, chúng ta sẽ có được kết quả trả về và nó được lưu trong DataTable (đại diện cho một table ) và DataSet ( đại diện cho một Table Collection).
    - Lưu ý: Muốn làm thay đổi dữ liệu nguồn (trên file) thì ta phải tác động vào các DataTable hay Dataset đồng thời cung cấp thêm các câu SQL tương ứng để thực thi sự thay đổi đó. Chúng ta sẽ nói chi tiết về vấn đề này trong phần tới.


    6. Select dữ liệu
    - Để cho đơn giản trong quá trình học các đối tượng sau dt và da bạn cho nó có tầm vực cục bộ trong form (nằm chung với vị trí tạo connect)

    PHP:


            
    'Tạo một đối tượng Datatable nhận dữ liệu trả về        Dim  dt As New DataTable("DanhsachSV")         'Tạo bộ  máy DataAdapter thực hiện command         Dim da As New OleDbDataAdapter()

    - Để trích xuất một dữ liệu ra chúng ta dùng đoạn code sau
    - Ở đây chúng ta xét trường hợp là đã có sẵn đoạn code tạo Connect ở trên rồi

    PHP:


    Private  Sub btnLoad_Click(ByVal sender As  System.ObjectByVal e As System.EventArgsHandles btnLoad.Click        'Tạo command để lấy dữ liệu ra ngoài        Dim  command As New  OleDbCommand()         command.Connection = con ' Kết nối        command.CommandType CommandType.Text  'loại lệnh sử dụng là Text hay là một  query trong access        command.CommandText = "Select  * From DanhsachSV"da.SelectCommand = command ‘ gán command cho da         da.Fill(dt)  'Nạp dữ liệu vào Table         DataGridView1.DataSource =  dt 'Load dữ  liệu lên DataGridview     End  Sub 


    7. Data Binding
    - Đôi khi chúng ta thấy cần kết hợp DataGridview và các Textbox, để khi chúng ta click vào một hàng bất kỳ nào trên DataGridview thì dữ liệu của hàng đó sẽ hiện lên Textbox. Đó là kỹ thuật Data Binding.
    - Thêm đoạn code sau vào sau đoạn code select ở trên các bạn sẽ thấy hiệu quả ngay.
    PHP:

    'Databinding         txtSTT.DataBindings.Add("Text", dt,  "STT") ‘ Ở đây ta cần binding textbox  txtSTT với giá trị Text ở cột STT của Table         txtName.DataBindings.Add("Text", dt,  "Name")         txtAdress.DataBindings.Add("Text", dt,  "Address")         txtPhone.DataBindings.Add("Text", dt,  "Phone")         txtEmail.DataBindings.Add("Text", dt,  "Email") 

    8. Insert một Row mới vào trong Table

    - Để insert một Row mới vào File data trước hết ta cần thêm một dòng mới vào DataTable hay DataSet.

    PHP:

    Private  Sub btnInsert_Click(ByVal sender As  System.ObjectByVal e As System.EventArgsHandles btnInsert.Click        'Tao 1 row moi theo cấu trúc row trong dt        Dim  row As DataRow = dt.NewRow()        row("STT") = txtSTT.Text        row("Name") = txtName.Text        row("Address") = txtAdress.Text        row("Phone") = txtPhone.Text        row("Email") = txtEmail.Text        dt.Rows.Add(row)  ' add row mới này  vào dt        DataGridView1.DataSource dt        'Tao command để update sự thay đổi trên vào file data nguồn        Dim  commandInsert As New OleDbCommand()        commandInsert.Connection = con         commandInsert.CommandType =  CommandType.Text        'SQL for Insert         commandInsert.CommandText  "Insert Into DanhsachSV  Values (@STT,@Name,@Address,@Phone,@Email)"        'Nap tham so cho các command trên        commandInsert.Parameters.Add("@STT",  OleDbType.Numeric, 50, "STT")  ' Nạp giá trị cho  tham số @STT thông qua giá trị của cột nguồn STT        commandInsert.Parameters.Add("@Name",  OleDbType.VarChar50"Name")        commandInsert.Parameters.Add("@Address"OleDbType.VarChar,  50"Address")        commandInsert.Parameters.Add("@Phone"OleDbType.VarChar,  50"Phone")        commandInsert.Parameters.Add("@Email"OleDbType.VarChar,  50"Email")        'Dùng da để áp đặt sự thay đổi trên vào File data  nguồn        da.InsertCommand = commandInsert 'gán command        da.Update(dt)     End Sub
    9. Update (chỉnh sửa một Record)
    Để chính sửa một Record thì trước tiên bạn phải xác định được Record đó ở đâu trong Database cái đã --> Xác định nó thông qua Primary Key.
    Ví dụ bạn có giao diện như sau

    [IMG]


    Bạn thấy rằng ta có Primary key ở đây là STT, và khi bạn click vào DataGridview là ta đã lấy được thông tin của Record hiện thời rồi.
    Vậy đoạn code để Update một record như sau
    PHP:

    Private Sub  btnUpdate_Click(ByVal sender As System.ObjectByVal e  As System.EventArgsHandles  btnUpdate.Click        'Get Record can update trong Table        Dim  row As DataRow = dt.Select("STT = '"  & Convert.ToInt32(txtSTT.Text) & "'")(0)        'Update row        row.BeginEdit()        row("Name") = txtName.Text        row("Address") = txtAddress.Text        row("Phone") =  txtPhone.Text        row("Email") = txtEmail.Text        row.EndEdit()        'Tao command để update sự thay đổi trên vào file  data nguồn        Dim commandUpdate As New OleDbCommand()         commandUpdate.Connection =  con        commandUpdate.CommandType = CommandType.Text         'SQL  for Update        commandUpdate.CommandText "Update DanhsachSV Set Name=@Name,  Address=@Address, Phone=@Phone, Email=@Email  Where STT=@STT"        'Nap tham so cho các command trên        commandUpdate.Parameters.Add("@Name", OleDbType.VarChar,  20, "Name")        commandUpdate.Parameters.Add("@Address", OleDbType.VarChar,  20, "Address")        commandUpdate.Parameters.Add("@Phone", OleDbType.VarChar,  20, "Phone")        commandUpdate.Parameters.Add("@Email", OleDbType.VarChar,  20, "Email")        commandUpdate.Parameters.Add("@STT", OleDbType.Integer,  20, "STT")        'Dùng da để áp đặt sự thay đổi trên vào File data  nguồn        da.UpdateCommand commandUpdate 'gán command        'Dim a As New OleDbCommandBuilder(da)        da.Update(dt)    End Sub

    10. Delete 1 Record
    - Xóa một Record cũng tương tự như Update chỉ khác phần SQL và tham số .
    - Đây là cái dễ nhất

    PHP:


    Private  Sub btnDelete_Click(ByVal sender As  System.ObjectByVal e As System.EventArgsHandles btnDelete.Click        'Get Record can update trong Table        Dim  row As DataRow = dt.Select("STT = '"  & Convert.ToInt32(txtSTT.Text) & "'")(0)        row.BeginEdit()        row.Delete()        row.EndEdit()        'Tao command để update sự thay đổi trên vào file  data nguồn        Dim commandDelete As New OleDbCommand()         commandDelete.Connection =  con        commandDelete.CommandType CommandType.Text         'SQL  for Delete        commandDelete.CommandText = "Delete From DanhsachSV Where STT=@STT"        'Nap tham so cho các command trên        commandDelete.Parameters.Add("@STT"OleDbType.Numeric,  20"STT")        'Dùng da để áp đặt sự thay đổi trên vào File data  nguồn        da.DeleteCommand = commandDelete 'gán command    End  Sub 

    - Chú ý : Để xóa hết tất cả Record trong bản ta chỉ cần dùng SQL sau “Delete From DanhsachSV” . Các bạn thấy ko có còn tham số nào cả --> ko cần truyền thêm giá trị gì cả
    killyou117, gnu, Seshoumaru2 người khác thích bài này.
  3. Offline

    congthangitvn

    • Thành viên sáng lập

    • Liên thông đại học 2012...!
    Số bài viết:
    2.232
    Đã được thích:
    1.550
    Điểm thành tích:
    1.450
    11. Insert, Update, Delete theo kiểu Mì Ăn Liền
    - Chắc các bạn đều thấy rằng, trong các phần Insert, Update, Delete ở trên khá phức tạp đòi hỏi phải luyện tập thường xuyên mới có thể thành thạo cũng như nắm vững SQL.
    - Do đó, Net cung cấp sẵn cho ta một đối tượng cho phép ta ko cần phải mất công sức để viết lại những cái trên - áp dụng tốt cho đa số trường hợp nhưng tốc độ dĩ nhiên là kém hơn cách viết trên một chút.
    Đơn giản các bạn chỉ cần thêm một dòng code này vào và loại bỏ tất cả các command Insert, Update, Delete.
    Ví dụ Update: các bạn sẽ thấy quá trình sẽ đơn giản đi rất nhiều
    PHP:

    Dim  MiAnLien 
    As New OleDbCommandBuilder(da'  Nó ở đây nè sẽ làm giúp ta làm mọi việc'Get  Record can update trong Table         Dim row As DataRow dt.Select("STT = "  Convert.ToInt32(txtSTT.Text))(0)        'Update row        row.BeginEdit()        row("Name") = txtName.Text        row("Address") = txtAddress.Text        row("Phone") =  txtPhone.Text        row("Email") = txtEmail.Text        row.EndEdit()‘Update dữ liệuda.Update(dt) 
    - Insert, Delete thì cũng tương tự thôi, các bạn hãy tự làm.



    12. Gọi thực thi một Query có sẵn trong file Access
    - Ví dụ bạn mở file access của bạn ra click vào Tab Queries và viết một Query tên là QuerySelect (xin nhắc lại query này ở trong file access ko phải ta viết ở trong chương trình)

    PHP:


    SELECT 
    *FROM DanhsachSVWHERE  STT>[@STT]; 
    - Bạn đang thắc mắc là làm sao ta có thể gọi thực thi query này từ chương trình và nhận kết quả trả về từ nó, cũng như làm sao nạp giá trị cho tham số @STT trong query trên
    - Để làm điều này thật đơn giản, ta dùng command mà thôi

    PHP:
    Private  Sub btnQuery_Click(ByVal sender As  System.ObjectByVal e As System.EventArgsHandles btnQuery.Click        Dim  command As New  OleDbCommand()         command.Connection con        command.CommandType CommandType.StoredProcedure ' Xác định ta đang  gọi query trong file access        command.CommandText = "QuerySelect" 'Tên của Query         command.Parameters.Add("@STT"OleDbType.Numeric).Value 'Nạp giá trị cho tham số @STT        'Nạp command trên vào DataAdapter tùy theo dạng của  command là Selectinsertupdate hay delete        da.SelectCommand  command        dt.Clear()  'Xóa dữ liệu  cũ        da.Fill(dt)         DataGridView1.DataSource =  dt    End Sub 

    Nguồn: http://www.caulacbovb.com/
    killyou117, Seshoumaruviethung_9x thích bài này.
  4. Offline

    viethung_9x

    • Windows XP

    Số bài viết:
    613
    Đã được thích:
    735
    Điểm thành tích:
    560
  5. Offline

    withyou

    • Windows 3.0

    Số bài viết:
    99
    Đã được thích:
    30
    Điểm thành tích:
    40
    có lập trình C với sơ sở dữ liệu access được không mấy bạn ?
  6. Offline

    Sory_i've_hurt_u

    • Thành Viên Mới

    Số bài viết:
    49
    Đã được thích:
    29
    Điểm thành tích:
    0
    Mình cũng muốn thử lập trình với cơ sở dữ liệu. Nhưng thấy mysql cài đặt, vận hành còn chưa biết nên cũng tự hỏi ko biết dùng access được không :009:
  7. Offline

    withyou

    • Windows 3.0

    Số bài viết:
    99
    Đã được thích:
    30
    Điểm thành tích:
    40
    trên window có 1 bộ API là ODBC (Open Database Connectivity) dùng kết nối các ngôn ngữ Visual, C++... với cơ sở dữ liệu của SQL server, access.. nhưng C thì không biết thế nào.
    C có cung cấp thư viện để thao tác với access không? Mong bro nào trả lời giúp !
  8. Offline

    lyvinhr00m

    • cụ lý

    Số bài viết:
    1.234
    Đã được thích:
    930
    Điểm thành tích:
    900
    Anh em nào có Ebook nào chi tiết về cái này cho e xin với, kì sau học cái này nên đang muốn tìm hiểu trước.
    Có ví dụ cụ thể luôn càng tốt.^^
  9. Offline

    tplink

    • Thành Viên Mới

    Số bài viết:
    34
    Đã được thích:
    0
    Điểm thành tích:
    0
    C++ có chạy tốt vs cái này ko

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí