9Mcode comment |
 |
 |
|
|
|
 |
- - - - - - - - - - - - - - ผู้ให้การสนับสนุน- - - - - - - - - - - - - -
|
|
 |
กระทู้ #2870 [Vb] (จาก IP: 113.53.81.4)
โค้ดเชื่อมต่อฐานข้อมูล
รบกวนขอโค้ดเชื่อมต่อฐานข้อมูล Accass ด้วยคะ เพราะจะทำงานส่งอ. คะ และก็ตัวอย่างปุ่มค้นหาด้วยนะคะ
ขอบคุณคะ
|
จากคุณ
:
อรสา / orasa_982@hotmail.com [2010-04-30 16:26:32]
|
|
ความคิดเห็น #27872 (จาก IP: 112.142.186.62)
1. ติดต่อฐานข้อมูล เอาเป็น ADO ก็แล้วกัน 2. ทำการ Execute คำสั่ง SQL Syntax หรือก็คือจัดการฐานข้อมูล Select , Update , Insert , Delete หรือจะมีมากกว่านี้ก็ได้ เช่นคำสั่งหมวด DDL จำพวก CREATE , ALTER ก็ได้ครับ แต่ตัวอย่างนี้เอาแค่ Select , Update , Insert , Delete ก็พอ 3 . ยกเลิกการติดต่อฐานข้อมูล
มี Member (ตัวแปร) ดังนี้ 1. ตัวแปรของ object ADODB 3 ตัวคือ Connection , Command , Recordset 2. ตัวแปรเก็บคำสั่ง Syntax SQL 3. ตัวแปรเก็บ ConnectionString 4. ตัวแปรเก็บที่อยู่ของไฟล์ฐานข้อมูล
มี Constructor , Deconstructor (มีหรือไม่มีก็ได้ครับ) ดังนี้ 1. Constructor กำหนดค่าเริ่มต้นให้ตัวแปรที่จำเป็น 2. Deconstructor รีเซ็ทค่าตัวแปร และคืนหน่วยความจำให้ระบบ
วิธีการคือเข้าไป Add ClassModule แล้วตั้งชื่อเป็น ControlDB.cls (อย่าลืมทำการ add library ของ ADO ด้วยครับ) โค้ดตัวอย่างนี้ผมใช้ฐานข้อมูล NWIND.mdb ที่แถมมากับ MSAccess ครับ
จากคุณสมบัติที่เราคิดไว้แล้ว นำมาเขียนเป็นโค้ดได้ดังนี้ครับ
Code
' ########### ส่วนที่เก็บไว้ที่ Form
Option Explicit
Private ControlDB As New ControlDB ' เรียกใช้งาน Class
Private Sub cmdDelete_Click() Dim Sql As String, Str As String Str = InputBox("ลบ EmployeeID ที่ ?") Sql = "DELETE FROM Employees WHERE EmployeeID = " & CInt(Str) ControlDB.ExecuteDB (Sql) Call RefreshDataGrid ' โชว์ค่าที่โดน Delete แล้ว End Sub
Private Sub cmdDisconnectDB_Click() ControlDB.DisconnectDB End Sub
Private Sub cmdInsert_Click()
Dim Sql As String, Str1 As String, Str2 As String Str1 = InputBox("เพิ่ม FirstName = ?") Str2 = InputBox("เพิ่ม LastName = ?") Sql = "INSERT INTO Employees(FirstName,LastName) VALUES('" & Str1 & "','" & Str2 & "')" ControlDB.ExecuteDB (Sql) Call RefreshDataGrid ' โชว์ค่า Insert แล้ว End Sub
Private Sub cmdSelectDB_Click()
Dim Constr As String, Sql As String
With Me.CommonDialog1 .ShowOpen If .FileName <> "" Then Constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & .FileName & ";Persist Security Info=False" With ControlDB .ConnectDB (Constr) ' ติดต่อฐานข้อมูลจาก DataBase MSAccess ที่เลือก ' แสดงข้อมูลลง Datagrid เลยโดยเอาผล Rs ที่ return กลับมาใส่ให้กับ DataSource ของ datagrid Sql = "SELECT * FROM Employees ORDER BY EmployeeID" Set Me.DataGrid1.DataSource = .SelectDB(Sql) ' เปิดปุ่มการทำงานกับฐานข้อมูล cmdUpdate.Enabled = True cmdInsert.Enabled = True cmdDelete.Enabled = True cmdDisconnectDB.Enabled = True End With End If End With End Sub
' Update ข้อมูล Private Sub cmdUpdate_Click()
Dim Str1 As String, Str2 As String, Sql As String Str1 = InputBox("Update ที่ EmployeeID ที่ ?") Str2 = InputBox("Update FirstName เป็น ?") Sql = "UPDATE Employees SET FirstName = '" & Str2 & "'" Sql = Sql & " WHERE EmployeeID = " & CInt(Str1) ControlDB.ExecuteDB (Sql) ' ส่งไปคำสั่งไปรันใน object Command Call RefreshDataGrid ' โชว์ค่า Update แล้ว End Sub
Public Sub RefreshDataGrid()
' แสดงข้อมูลที่ Update แล้วให้ดู Me.DataGrid1.Refresh Set Me.DataGrid1.DataSource = ControlDB.SelectDB("SELECT * FROM Employees ORDER BY EmployeeID")
End Sub
' ############ ส่วนที่เก็บไว้ใน Class
' -- Member หรือก็คือตัวแปรนั่นเอง Private ConString As String Private URLDataBase As String Private Conn As New ADODB.Connection Private Cmd As New ADODB.Command Private Rs As New ADODB.Recordset '-------- METHOD ทั้งหมดที่มีตามที่เราออกแบบไว้ ---------
' ติดต่อฐานข้อมูล ' ตั้งเป็นโปรแกรมย่อยไม่ใช้ฟังก์ชั่นเพราะไม่ต้องการค่าคืนกลับใดๆ Public Sub ConnectDB(ConString As String) With Conn If .State = adStateOpen Then .Close .ConnectionString = ConString .ConnectionTimeout = 90 .Open End With End Sub
' กระบวนการที่ไม่ทำให้ฐานข้อมูลเปลี่ยนไปนั่นคือ Select ฐานข้อมูล ' ใช้เป็นฟังก์ชั่นเพราะต้องการค่าคืนกลับคือ Recordset ที่เก็บข้อมูลทั้งหมดที่ Select ได้ Public Function SelectDB(Sql As String) As Object With Rs If .State = adStateOpen Then .Close .ActiveConnection = Conn .CursorLocation = adUseClient .CursorType = adOpenForwardOnly .Open Sql Set SelectDB = Rs ' return Recordset ที่ได้กลับไปให้ End With End Function
' กระบวนการที่ทำให้ฐานข้อมูลเปลี่ยนไป นั่นคือ Update , Insert , Delete ' ตั้งเป็นโปรแกรมย่อยไม่ใช้ฟังก์ชั่นเพราะไม่ต้องการค่าคืนกลับใดๆ Public Sub ExecuteDB(Sql As String) With Cmd .ActiveConnection = Conn .CommandType = adCmdText .CommandText = Sql .Execute End With End Sub
' ยกเลิกการติดต่อฐานข้อมูล Public Sub DisconnectDB() Conn.Close ' ปิด object Connection Set Conn = Nothing ' คืนหน่วยความจำให้ระบบ End Sub
' ยกเลิก object Recordset Public Sub ClearRecordSet() Rs.Close ' ปิด object Recordset Set Rs = Nothing ' คืนหน่วยความจำให้ระบบ End Sub |
จากคุณ
:
pt / xxx@xxx.com [2010-05-05 01:50:27]
|
 |
|
- - - - - - - - - - - - - - ผู้ให้การสนับสนุน- - - - - - - - - - - - - -
|
|
|
|
|
|
|