การใช้ Visual Basic 6.0 ติดต่อกับ MySQL (VB 6 & MySQL)


Payment Software VS Opensource Software

วันนี้ ขึ้นไปตรวจสอบ งานเล็กน้อย (เขียนด้วย VB6 เขียนเองกับมือ) แล้วดันลืม Password สำหรับ Admin (ตั้งเองกับมือ) เลยต้องไปถาม คนที่มีหน้าที่ตรงนี้เลยตรง ก็ได้คำตอบ

แล้วไอ โปรแกรมที่ว่า เขียนด้วย VB 6 และใช้ Database เป็น MySQL ซึ่งรันอยู่บน Linux Server ซึ่งตอนนี้อยากจะแก้ไขให้สามารถเพิ่ม ลบ แก้ไข Admin ได้ เลยมาทำ

ซึ่งทำให้นึกถึง GOTOKNOW ซึ่ง ผมมีโปรแกรมที่จะเขียนเรื่องนี้อยู่ แต่ กะว่าจะเขียน PHP VS PostgreSQL ก่อน เลย เปลี่ยนใจ ลัดคิว มาเขียน VB 6.0 VS MySQL ก่อน

ก่อนอื่น ต้องเตียมความพร้อมก่อน โดยการลง MySQL OBDC ซึ่งสามารถ Download ได้ Free จาก http://www.mysql.com เจ้าเก่า

ต่อมาก็ วิ่งหนีสิ เรื่องอะไรจะอยู่ให้มันต่อย ล้อเล่น
คราวนี้จริงๆแล้ว ไม่มีมุขแล้ว

ต่อมาก็ต้องลง Visual Basic 6.0 ตามระเบียบ ซึ่งวิธีที่ผมจะเขียนต่อไปนี้ สามารถใช้ได้กับ Database ทุกชนิดเลยครับ

ผมได้โปรแกรม UL ตัวอย่างขึ้นไปด้วยครับ สามารถ DL ได้ที่
http://gotoknow.org/file/sailomsaengdaed/db.zip
หลังจากที่ DL ไปแล้ว เอาไปขยายแล้วเก็บไว้ที่ d:vbdb นะครับ เพราะ ผมได้เขียนพาธเอาไว้ที่นั้น ท่านสามารถแก้ไข พาธได้ตามชอบเลยครับ และอย่าลืม Reference ซึ่งจะกล่าวไว้ที่ด้านล่างแล้วครับ

อันดับแรก เปิด โปรแกรม อาจจะเปิดจากโปรแกรมเก่า หรือ เริ่มโปรแกรมใหม่ก็ได้

ในที่นี้เราจะไม่ใช้ Object แต่จะใช้ Reference แทน เพราะว่า สามารถเปลี่ยน ไปใช้ ฐานข้อมูลอื่นได้ทันที เลยไม่ต้อง คอมไพล์โปรแกรมใหม่ อันนี้น่าสนนะครับ

หลังจากเปิด โปรแกรมแล้ว เลือก เมนู Project > References…
จะมี Reference ให้เลือก มากมาย แต่เราจะใช้ ADO Library
คลิก Check Box หน้า Microsoft ActiveX Data Object 2.5 Library

ตอนแรกสร้างแฟ้มสำหรับเก็บค่า DSN ก่อน
db.ini
[DB]
COUNT=3
DB1=MySQL
DB2=ORACLE
DB3=MSSQL

[MySQL]
strConnect = "
DRIVER=MySQL ODBC 3.51 Driver;
UID=admin;
STMT=;
OPTION=;
PORT=;
PASSWORD=pwdadmin;
SERVER=192.168.100.253;
DATABASE=kai;;"

ที่จริง strConnect เขียนบรรทัดเดียวนะครับ แต่พอเขียนบรรทัดเดียวแล้ว แสดงผลไม่ถูกต้องใน gotoknow เลยต้องเขียนแบบนี้ ดูได้จากแฟ้มตัวอย่างครับ

[ORACLE]
strConnect = "DRIVER=ORACLE"
[MSSQL]
strConnect = "DRIVER=MSSQL"


ต่อไป สร้าง form ขึ้นมา 1 form มีรายละเอียดดังนี้
frmStartProgram.frm
ComboBox cbbDBSelect
CommandButton cmdRun
CommandButton cmdLoadDSN
Texe txtDSN
Texe txtFiled1
Texe txtFiled2

Option Explicit
Const Num_Buff_Size = 4096
Dim strConnect As String
Private Declare Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String _
) As Long

Function GetMyProFile(strPart As String, strSub As String) As String
Dim chkLen As Integer
Dim valBuff As String * Num_Buff_Size
chkLen = GetPrivateProfileString( _
strPart, _
strSub, _
"", _
valBuff, _
Num_Buff_Size, _
"D:vbget_inidb.ini")
If chkLen = 0 Then
GetMyProFile = ""
Else
GetMyProFile = Left$(valBuff, chkLen)
End If
End Function

Private Sub Form_Load()
Dim intNumDB As Integer
Dim intLoop As Integer
Dim strDBName As String
‘ทำการดึงข้อมูลมาจาก แฟ้ม db.ini เพื่อดูว่าเรามี ฐานข้อมูลอะไรบ้าง
intNumDB = Val(GetMyProFile("DB", "COUNT"))
For intLoop = 1 To intNumDB
strDBName = GetMyProFile("DB", "DB" & intLoop)
'ดึงรายชื่อฐานข้อมูลเข้าสู่ ComboBox
cbbDBSelect.AddItem (GetMyProFile("DB", "DB" & intLoop))
Next intLoop
End Sub

Private Sub cmdLoadDSN_Click()
'โหลดข้อมูล DSN จาก แฟ้ม db.ini ตามที่ได้เลือกไว้
strConnect = GetMyProFile(cbbDBSelect.Text, "strConnect ")
txtDSN = strConnect
End Sub

'ต่อไปจะเป็นการเชื่อต่อฐานข้อมูลกันจริงๆ สักทีนะครับ
'สมมติ มี Database ชื่อ kai และมี table ชื่อ admin มี 2 filed คือ user และ 'password
'ต่อไปจะเป็นการ ดึงข้อมูลออกมานะครับ


Private Sub cmdRun_Click()
Dim DataBaseControl As New ADODB.Command
Dim RecordSetAccess As New ADODB.Recordset
Dim Query As String
Query = "SELECT user,password from admin"
With DataBaseControl
'ส่งค่า DSN เข้าไป เหมือนกับการ Login เข้าสู่ Database
'และ เลือกฐานข้อมูล ตาม DSN ที่ตั้งเอาไว้

.ActiveConnection = strConnect
'ส่งคำสั่ง SQL เข้าสู่ Database
.CommandText = Query
'ส่งแล้วก็สั่งให้มันทำงาน และให้คืนค่ากลับตัวแปร RecordSetAccess
.Execute (RecordSetAccess)
End With
'แน่นอน เราใช้ Select ดังนั้น มังจึงส่งค่ากลับมา
RecordSetAccess.Open DataBaseControl
'ถ้ามาถึงเป็น EOF เลย แปรว่าหาข้อมูลไม่พบ
'เนื่องจากไม่ได้ไม่ได้ใช้ where ดังนั้นจึงแปรว่า ไม่มีข้อมูล
'ถ้ามีข้อมูล ก็จะทำงานต่อจนกระทั้งดึงข้อมูลออกมาหมด

If RecordSetAccess.EOF Then
MsgBox "ไม่พบข้อมูล"
Else
While (Not RecordSetAccess.EOF)
'ดึงข้อมูล Filed ที่ชื่อ user
txtFiled1 = RecordSetAccess!user.Value
'ดึงข้อมูล Filed ที่ชื่อ password
txtFiled2 = RecordSetAccess!password.Value
'ย้ายไปยัง record ต่อไป
RecordSetAccess.MoveNext
Wend
End If
End Sub
สำหรับการ Insert Update Delete ทำเหมือนกันเลยครับเพียงแก้เล็กน้อย เพราะว่า ไม่มีการส่งค่ากลับมา ดังนี้ครับ
With DataBaseControl
.ActiveConnection = strConnect
.CommandText = Query
.Execute
End With

การหาค่า DSN สามารถสร้างได้จาก OBDC Data Source Administrator
แล้ว เปิดดูรายละเอียดได้ใน C:Program FilesCommon FilesODBCData Sources คุณสามารถ copy รายระเอียดในแฟ้ม นามสกุล dsn มาใส่ในแฟ้ม db.ini ได้เลยครับ

เพียงเท่านี้ เมื่อคุณต้องการเปลี่ยนไปใช้ Database ของค่ายอื่น เช่น MySQL > ORACLE ถ้าทำได้ หรือ เปลี่ยน User กะ Password หรือเปลี่ยน Database Server คุณก็เพียงแก้ไขแฟ้ม db.ini ก็พอแล้วครับ

คำสำคัญ (Tags): #visual#basic#database#mysql
หมายเลขบันทึก: 7449เขียนเมื่อ 17 พฤศจิกายน 2005 21:07 น. ()แก้ไขเมื่อ 24 มิถุนายน 2012 02:07 น. ()สัญญาอนุญาต: จำนวนที่อ่าน


ความเห็น
อยากได้การเขียนติดต่อกับ Oracle ค่ะ

แล้ว MS Assess หละครับ ทำไง

แล้ว ถ้าเราจะเอาโปรแกรม ไว้ที่ C:Program FilesMyProgram เราจะแก้

chkLen = GetPrivateProfileString( _
    strPart, _
    strSub, _
    "", _
    valBuff, _
    Num_Buff_Size, _
    "D:vbget_inidb.ini")

ยังไงครับ เพราะว่าทำแล้วมันจะมองเป็น C:Program

มาแล้วครับ

ถ้าเป็น Access ใส่ดังนี้ครับ

DSN=
MS Access 97 Database;
DBQ=db2.mdb;
DefaultDir=;
DriverId=281;
FIL=MS Access;
MaxBufferSize=2048;
PageTimeout=5;
UID=admin;

ถ้ามี Password ก็ใส่ Password ให้มันนะครับ

ส่วน oracle นั้น คอยสักครู่ครับ เนื่องจากไม่มีเวลาว่างทดสอบครับ

ส่วน MSSQL นั้น ผมไม่มีงบในการจัดหาครับ เลยแสดงตัวอย่างให้ดูไม่ได้

ขณะนี้ ใครก็ตามที่ใช้ MySQL OBDC ตัวเก่าอยู่ให้ UPDATE เป็น Version ด้วยครับ

ไม่ทราบว่าทำไมมันไม่ยอมทำงานเอาดื้อๆ ขนาด ไป DL มาใหม่ยังไม่ยอมทำงาน พอไป DL VERSION ใหม่มาจึงยอมทำงาน   

แล้วที่ว่าไม่ทำงานนั้นเพราะอะไรครับ

dll คืนค่า error อะไรมาให้หรือเปล่าครับ?

http://patrickz.gotoknow.org

คล้ายกับว่าหมดอายุอะไรประมาณนี้

แต่ error ที่แจ้งมากลับบอกว่า ไม่สามารถเชื่อมต่อกับ  MySQL Server ได้ ผมก็ test หมดทุกอย่างแล้วผ่านหมด

แต่พอ DL Ver ใหม่มาก็ใช้ได้ครับ

 

แต่อีก 2 เครื่องที่ลงก็ยังสามารถใช้งานได้ตามปกตินะครับ

แอ๊ะ หรือว่า เป็นเพราะวันก่อนผมลง AppServer เลยทำให้ OBDC เพี้ยน เพราะอีก 2 เครื่องนั้น ผมลงแค่ MySQl OBDC อย่างเดียวเท่านั้น    

ไม่แน่ใจว่า เป็นเพราะ version ที่ต่างกันหรือไม่ ลองอ่าน
http://www.narisa.com/forums/index.php?showtopic=7303
เผื่อเป็นแนวทางได้ครับ

http://patrickz.gotoknow.org

ไม่ใช้เพราะ version ที่ต่างกันหรอกครับ

เป็นเพราะตัว Appserver ที่ลงวันก่อนต่างหากครับ

มันบังอาจทำให้ MySQL OBDC ของผมแฮงค์ ทั้งๆที่ ตัว MySQL Server ก็ตัวเดิม Version เดิม

แต่เครื่องอื่นอีก 2 เครื่องที่ไม่ได้ลง  AppServer ไม่เห็นเป็นอะไรเลยครับ

สรุป เป็นเพราะ AppServer ที่ลง มันลงตัว MySQL Version อะไรให้ไม่ทราบ เพราะผมไม่ได้ใช้ แต่มีคนมาลงให้เพราะจะทดสอบโปรแกรมที่เขียน เลยทำให้โปรแกรมผมเองพังไปเลย

แต่ก็แก้ไขโดยการลง MySQL OBDC Version ใหม่ ตัวเก่าใช้ไม่ได้แล้ว เพราะตัว DLL ถูก AppServer แก้ไขไปแล้ว     

อยากทราบว่า VB6 จะใช้งานร่วมกับ MS-Access จะต้อวทำยังไงคะ..พอดีต้องทำ Project แล้วต้องใช้โปรแกรมทั้ง 2 ตัวนี้อ่ะค่ะ...สำหรับ Project ที่จะทำ เป็นเรื่องของระบบฝาก-ถอนเงินน่ะค่ะ ใครทราบช่วยอธิบายให้หน่อยนะคะ ส่งไปในเมล์ก็ได้..ขอบคุณมากๆ ค่ะ...
อยากทราบว่า VB6 จะใช้งานร่วมกับ MS-Access จะต้องทำยังไงคะ..พอดีต้องทำ Project แล้วต้องใช้โปรแกรมทั้ง 2 ตัวนี้อ่ะค่ะ...สำหรับ Project ที่จะทำ เป็นเรื่องของระบบฝาก-ถอนเงินน่ะค่ะ ใครทราบช่วยอธิบายให้หน่อยนะคะ ส่งไปในเมล์ก็ได้..ขอบคุณมากๆ ค่ะ... เมล์ [email protected]...
ลองอ่านใหม่ดูนะค่ะจะบอกวิธีดการติดต่อกับ DB ตัวอื่นด้วย
หรือ อ่าน คห3. เป็นแนวทางก่อนก็ได้ค่ะ
Mysql ODBC นี่คือตัว Mysqlหรือเปล่าครับ หรือคนละตัว

Mysql ODBC คือ ตัวกลางที่ติดต่อกับ MySQL ครับ

เหมือนกับพ่อค้าคนกลาง เราจะชื้อของ เราก็ชื้อของเราก็ชื้อกับพ่อค้าคนกลาง เราต้องการอะไรก็บอกพ่อค้าคนกลางมา แล้วพ่อค้าคนกลางจะไปหามาให้

แต่ถ้าเราลง MySQL Server แล้ว โดยปกติมันจะลงตัว MySQL ODBC มาให้พร้อมกัน

ชึ้งการใช้ ODBC ก็มีข้อดีคือ เราไม่ต้องกังวลว่าเราจะใช้ตัว SQL SERVER ของ อะไร เช่น เราใช้ MySQL ใช้สักพัก เราก็เปลี่ยนไปใช้ตัว ORACLE ได้ทันท โดยที่ไม่ต้องแก้ไข CODE ถ้าตัว SQl COMMAND เราใช้แบบมาตรฐาน

ตอนนี้กำลังทำโปรเจ็คจบระดับ ป.ตรี ใช้ VB+MySQL

หาข้อมูลอ้างอิงยากมาก ดีใจมากๆ เลยค่ะที่มาเจอบทความนี้

ทำให้มีกำลังใจขึ้นมาหน่อย เกือบจะต้องเปลี่ยนไปใช้ SQL Server แล้ว

เรียนสาขาระบบสารสนเทศทางคอมพิวเตอร์ ม.ราชมงคลล้านนาเชียงรายค่ะ

vbmysqldirect  ก็ใช้ติดต่อ mysql ได้ดีเหมือนกัน

เร็วเพราะใช้ กลุ่มคลาส ติดต่อ mysql ผ่าน  libmySQL.dll  ซึ่งเร็วขึ้นมาอีกนิดหน่อย

 

ถ้าสมมุติว่าไม่มี Access,my SQLอยากรู้ว่าvbทำงานแทนAccess,my SQL ได้ไหม  เพราะมันต้องเสียเวลาในกาสร้างdbมากเลย

 

ไม่มีรูป
ปีเตอร์ เมื่อ อ. 18 มี.ค. 2550 @ 22:51 จาก 125.26.111.121 ลบ (197142)

vbmysqldirect  ก็ใช้ติดต่อ mysql ได้ดีเหมือนกัน

เร็วเพราะใช้ กลุ่มคลาส ติดต่อ mysql ผ่าน  libmySQL.dll  ซึ่งเร็วขึ้นมาอีกนิดหน่อย

 

ตัวนี้ผมไม่เคยใช้ครับ

ขอบคุณครับกับคำแนำครับ 

ไม่มีรูป
1234 เมื่อ ศ. 30 มี.ค. 2550 @ 12:24 จาก 203.113.17.156 ลบ (208381)

ถ้าสมมุติว่าไม่มี Access,my SQLอยากรู้ว่าvbทำงานแทนAccess,my SQL ได้ไหม  เพราะมันต้องเสียเวลาในกาสร้างdbมากเลย

ตัว Accessม,MySQL เป็นตัว DBMS ครับ
ส่วน VB เป็น Programming จึงเอามาแทนกันไม่ได้ครับ

 นองเสียจากว่าคุณจะใช้ VB เขียน DBMS ขึ้นมาเอง

อยากทราบเกี่ยวกับการนำ control array มาใช้ในการเพิ่มข้อมูลเข้าในฐานข้อมูลด้วยคำสั่ง insert into ค่ะ

ดิฉันทำโปรเจ็คเกี่ยวกับระบบจองห้องพักของรีสอร์ท ใช้ VB กับฐานข้อมูล MySQL โดยใช้วิธีการเชื่อมต่อฐานข้อมูลตามตัวอย่างในเว็บนี้ ในส่วนของฟอร์มเลือกห้องพักซึ่งจะมีหลายแบบ เช่น บ้านเดี่ยว บ้านแฝด ดิฉันใช้ Check Box เป็นตัวเลือกซึ่งสามารถเลือกได้มากกว่า 1 จึงตั้งชื่อวัตถุแบบ Control Array ไม่ทราบว่าเหมาะสมกับงานนี้หรือไม่คะ

ตัวอย่างโค๊ด

Private Sub cmdConfirm_Click()
    strConnect = "DRIVER=MySQL ODBC 3.51 Driver;UID=root;STMT=;OPTION=;PORT=;PASSWORD=;SERVER=localhost;DATABASE=dbresort;;"
    Query = "insert into booking (Booking_No,OrderName,Room_Type,amount) values ('" & txtBookingNo.Text & "','" & txtOrderNa.Text & "','" & chkRoom.Item(i).Caption & "'," & txtAmount(i).Text & ")"
    With DataBaseControl
        .ActiveConnection = strConnect
        .CommandText = Query
        .Execute
    End With

จากโค๊ดนี้ดิฉันสามารถเพิ่มข้อมูลลงในฐานข้อมูลได้เฉพาะข้อมูลที่อยู่ในอาเรย์ที่ 0 เท่านั้น อยากทราบวิธีเขียนโค๊ดให้มีการเพิ่มข้อมูลของอาเรย์อื่นๆ ที่ถูก check ด้วยค่ะ

รบกวนอีกคำถามนะคะ ดิฉันอยากทราบวิธีเขียนโค๊ดให้เลขที่ใบจองเพิ่มค่าขึ้นเองโดยไม่ต้องกรอกตัวเลขลงไป จาก 01 เป็น 02, 03

ที่ลองเขียนดู สามารถเพิ่มขึ้นได้ในขณะยังใช้งานโปรแกรมอยู่ค่ะ แต่เมื่อปิดโปรแกรมแล้วเข้าใหม่ พบว่า ตัวนับกลับมาเริ่มต้นที่ 01 ใหม่ค่ะ

หลังจากที่ศึกษาเพิ่มเติมในเน็ตไปเรื่อยๆ ตอนนี้ดิฉันทราบแล้วค่ะ ว่าทำยังไงให้เลขที่ใบจองเพิ่มขึ้นเอง ดิฉันใช้หลักการคล้ายๆ กับตัวนับจำนวนผู้เข้าชมในเว็บคือเก็บสถิติไว้ในฐานข้อมูลค่ะ ตอนนี้ก็เหลือแต่วิธีการเก็บข้อมูลจาก Check Box เข้าฐานข้อมูลแล้วนะคะ ระหว่างรอคำตอบดิฉันจะศึกษาในอินเตอร์เน็ตไปด้วยเช่นกันค่ะ

http://learners.in.th/blog/wavezaa/72898

ที่นี่เขียนละเอียดกว่า ลองเข้าไปดู

แก้ไขให้บุคคลทั่วไปแสดงความคิดเห็นได้ครับ เนื่องจากมีคน mail มาถาม บอกว่าไม่สามารถ post ถามในนี้ได้

คำถามคือ vb สามารถ ติดต่อฐานข้อมูลอะไรได้บ้างครับ

คำตอบคือ (ผมคิดเอาเองนะครับ) สามารถติดต่อได้ทุกฐานข้อมูลที่มี OBDC

มาเล่าให้ฟังครับ ทีมงานพัฒนาระบบโรงพยาบาล พัฒนาบน Visual Basic และ DB เป็น MySQL รองรับงานขนาดใหญ่ และ Critical มากว่า 7 ปี แล้ว ขอบอกว่าเลือก VB กับ MySQL นั้นไม่ผิดหวังครับ

แต่ ที่ รพ. ไม่ได้ใช้ ODBC นะครับ เราใช้ Concept ของ LAMP ครับ

ช่วยดูให้หน่อยครับทำไมมันติดต่อไม่ได้อะครับ

HostIP = "sql204.thport.com"

User = "thpor_2064878"

Pass = "oydgiupo"

DBSource = "thpor_2064878_lpsc"

strCnn = "DRIVER={MySQL ODBC 3.51 Driver}" & _

";SEVER= " & HostIP & _

";DATABASE=" & DBSource & _

";DSQ= myDSN" & _

";UID = " & User & _

";PWD = " & Pass & _

";OPTON = 3"

งงมากก หลายวันละคระบ

ถ้าเป็น DB เป็น MySQL

ตัว MySQL Server เองต้องทำการอนุญาติให้เครื่องที่คุณใช้ทำการติดต่อด้วยครับ

วิธีทดสอบง่ายๆ เข้า DOS ครับ

พิมพ์

mysql -h sql204.thport.com -uthpor_2064878 -poydgiupo

เครื่องคุณ 192.168.0.3

ที่ MySQL Server ต้องพิมพ์ว่า

grant all privileges on thpor_2064878_lpsc.* to [email protected] identified by 'oydgiupo'

ขอบคุณครับ

แต่ว่ามีวิธีเช็คที่ง่ายกว่านี้รึป่าวครับ เพราะมันเป็น Server ฟรี อะครับ ปกติใช้เขียนเว็บแต่ตอนนี้จะเอามาทำโปรเจ็คส่งอาจาร์ยอะครับ อ้อเพิ่มเติมนิดนึงนะครับ คือตอนที่ทำกับ appserv ในเครื่องผม อะทำได้ครับ แต่เปลี่ยนไปติดต่อฐานข้อมูลข้างนอกติดต่อไม่ได้อะครับ

ถ้าใช้ AppServ แล้วใช้ได้

พอเปลี่ยน ไปใช้ MySQL ฟรีแล้วใช้ไม่ได้

ก็แปลว่าทาง Host นั้น ไม่อนุญาติให้ทำการติดต่อครับ

ทางแก้ ก็คงต้องใช้ AppServ ส่งแล้วครับ

หรือไม่ก็ถาม อาจารย์ว่าขอใช้ MySQL Server ภายในได้หรือไม่

ขอบคุณมากๆเลยครับ พี่ๆผู้เชี่ยวชาญ แสดงว่าที่ผมทำนั้นถูกต้องแล้ว เพียวแต่ SERVER เค้าไม่อนุญาติให้ใช้งานได้ถูกต้องรึป่าวครับ ยังไงก็ขอบคุณมากครับ

อ้อ พี่ๆ พอจะมี SERVER ฟรี ที่อนุญาติให้ บ้างรึป่าครับ

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท