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

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 2 6 1 1 3 8

7 ธันวาคม พ.ศ.2549
1246 Users On-Line.
Visitors - Page views
 8 5 8 7 8 0 0
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

การกำหนด Path และตำแหน่งไฟล์ฐานข้อมูล MS Access - VB.Net (2008)

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 7/9/2552   เวลา: 11:12
(อ่าน : 22016) 
เฮ้ย !!! ทองก้อนมันชิ่งหนีไปซบ VB.Net แล้ว ... อันนี้ไม่มีมูลความจริงแต่อย่างใดครับพี่น้อง ... แม้ว่า VB.Net มันแสนฉลาดหรือเหนือกว่า VB6 เพียงใด แต่ตราบใดที่ผมยังสามารถนำ VB6 มาใช้เพื่อทำมาหากินกับมันได้ ก็ยังไม่มีความจำเป็นจะต้องเปลี่ยน ... พี่น้องครับ ... ไม่เคยสงสัยกันบ้างเลยหรือว่า ทำไมเหล่าบรรดาผู้ผลิต ActiveX (Third Party) ทั้งหลายแหล่ ยังคงผลิตงานออกมาให้กับผู้ใช้ Visual Studio รุ่นเก่าได้ใช้งานกันอยู่ล่ะ ทำไมๆๆๆๆ ... (สามารถดูได้จากมุมดาวน์โหลด เช่น Codejock Xtreme Suite, ComponentOne และ อื่นๆ) ... ในช่วงเวลานี้ สิ่งที่ผมพยายามจะฝึกฝนกับ VB.Net คือ การค้นหาแนวทาง และแบบฉบับในการเขียนโค้ดของตัวเองออกมา ดังที่พี่น้องหลายท่านได้เห็นแล้วว่า โค้ด VB6 กับงานฐานข้อมูล ผมเขียนไม่เหมือนใครในโลกใบนี้ ... บทความนี้ผมจึงนำสิ่งต่างๆของ VB6 ออกมาโชว์เพาเวอร์ เพื่อยืนยันให้เห็นว่า ... เราสามารถเริ่มต้นเรียนรู้การพัฒนางานซอฟท์แวร์จาก VB6 (เพราะมันง่ายกว่าเยอะ) แต่ยังคงนำหลักการ แนวทาง หรือวิธีการคิด เพื่อนำมาใช้งานกับ VB.Net ต่อไปได้อีก (หรือที่เรียกว่า "ต่อ-ยอด" นั่นปะไรล่ะครับ ... พี่น้อง)

การใช้คำสั่ง GetSetting และ SaveSetting จะไปเกี่ยวข้องกับค่าใน Windows Registry ในตำแหน่งดังนี้คือ
My Computer\HKEY_CURRENT_USER\Software\VB and VBA Program Settings

โดยที่
  • GetSetting เป็นการอ่านค่าที่อยู่ใน Registry ตามค่า Key ที่เรากำหนด มีการส่งค่ากลับแบบ String
  • SaveSetting เป็นการบันทึกค่าลงใน Registry ตามค่า Key ที่เรากำหนด (ไม่มีการส่งค่ากลับ)

    Start --> Run --> พิมพ์ regedit แล้วกด Enter เบาๆก็พอ ... 55555+

  • ออกแบบโปรแกรม (Design - Time)
  • RUN TIME
  • Browse
    เริ่มต้นกระบวนการทำงาน
    
    Option Explicit On
    
    Public Class frmSelectMDB
    
    Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles btnBrowse.Click
    
        ' ส่งค่า Path ที่ .NET อ่านค่าได้ไป
        Dim strPath As String = AppPath(Environment.CurrentDirectory)
    
        Dim OpenFile As New OpenFileDialog()
        ' ระบุ Path เริ่มต้น (Initial) โดยผมเลือกตำแหน่งของโปรเจคปัจจุบัน
        OpenFile.InitialDirectory = strPath
        OpenFile.FileName = ""
        ' กำหนดให้เลือกกรอง (Filter) เฉพาะไฟล์ MS Access (*.mdb)
        OpenFile.Filter = "Microsoft Access Application (*.mdb)|*.mdb"
    
        ' http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx
        ' http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult.aspx
        ' .NET มีดีอย่างตรงที่ไม่ต้องเรียก Component มาใช้งาน
        Dim Res As System.Windows.Forms.DialogResult = OpenFile.ShowDialog()
        ' มีการกด Cancel ให้ออกไปเลย ... ดีกว่า VB6 เยอะเลยแบบนี้ ... ยอมรับ - Accept
        If Res = System.Windows.Forms.DialogResult.Cancel Then Return
    
        ' นำ Path และชื่อไฟล์ไปแสดงผลใน TextBox
        txtMDBLocation.Text = OpenFile.FileName
    
    End Sub
    
    ' =================================================
    ' ว่ากันง่ายๆ ... ผมเขียนขึ้นมาทดแทน App.Path ใน VB6 ครับพี่น้อง
    ' =================================================
    Public Function AppPath(ByVal strPath As String) As String
        Dim CountBackSlash As Integer
        Dim i As Integer
    
        ' สมมุติอ่านค่า Environment.CurrentDirectory หรือค่าใน strPath ได้เป็น
        ' G:\Project VB.Net\ConnectAccessNET\ConnectAccessNET\bin\debug
        ' ให้นับเครื่องหมาย BackSlash ( \ ) มาจากด้านขวามือสุด ให้ได้ 3 ตัว 
        ' พอได้ครบ 3 ตัว ให้อ่านจากทางซ้ายไปขวา จนถึงจำนวนของ i ที่นับถอยหลังลงมา (จะรวมทั้ง \ ด้วย)
        For i = Len(strPath) To 1 Step -1
            If Mid(strPath, i, 1) = "\" Then CountBackSlash = CountBackSlash + 1
            If CountBackSlash = 3 Then
                strPath = Mid(strPath, 1, i)
                Exit For
            End If
        Next
        ' strPath ก็จะได้ค่า G:\Project VB.Net\ConnectAccessNET\ ... ประมาณนี้
        ' และต้องส่งค่าตัวมันเองคืนกลับ (Return) ไปด้วย
        AppPath = strPath
    End Function
    
    
    Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles btnSave.Click
    
        ' Trim คือ การตัดช่องว่าง (Space) ทั้งหน้า และ หลังของชุดตัวอักษรออกไป
        ' เช่น A = " AB123   " ... ดังนั้นเมื่อสั่ง Trim(A) จะทำให้ได้ A = "AB123"
        If Trim(txtMDBLocation.Text) <> "" Or Len(Trim(txtMDBLocation.Text)) > 0 Then
            Call SaveSetting("MyAppName", "MySection", "MyKey", txtMDBLocation.Text)
            MsgBox("บันทึกตำแหน่งไฟล์ข้อมูลเรียบร้อย." & vbCrLf & _
                        txtMDBLocation.Text, MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "รายงานสถานะ")
            Application.Exit()
        End If
    
    End Sub
    
    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles btnExit.Click
        Application.Exit()
    End Sub
    
    Private Sub frmSelectMDB_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles MyBase.Load
    
        ' ปรับระยะของฟอร์มให้อยู่ตรงกลางหน้าจอ
        Me.Left = (Screen.PrimaryScreen.WorkingArea.Width - Me.Width) \ 2
        Me.Top = (Screen.PrimaryScreen.WorkingArea.Height - Me.Height) \ 2
    
        ' อ่านค่าไฟล์ปัจจุบันมาใช้งาน
        ' MyAppName, MySection และ MyKey ... ต้องแก้ไขให้ตรงกับชื่อโปรเจคงานของพี่น้องเองน่ะครับ
        txtMDBLocation.Text = GetSetting("MyAppName", "MySection", "MyKey")
    
        ' เมื่อใช้งานจริงในทางปฏิบัติ ... เราควรตรวจสอบ ...
        ' 1. หากค่าที่ได้เป็นค่าว่าง คือ ไม่พบฐานข้อมูล ให้ไปเลือกไฟล์ฐานข้อมูลใหม่เสียก่อน
        ' 2. ควรตรวจสอบชนิด หรือ นามสกุลไฟล์ (MDB) ที่อยู่ขวามือสุดด้วย
        If txtMDBLocation.Text = "" Then Call btnBrowse.PerformClick()
        ' หมายความว่าหากมีค่าว่าง ให้ไปเหตุการณ์ของการกดปุ่มเพื่อ Browse หรือเลือกไฟล์นั่นเอง
        ' หรือจะใช้
        'If txtMDBLocation.Text = "" Then Call btnBrowse_Click(sender, New System.EventArgs)
    
    End Sub
    End Class
    
    
    Conclusion:
    สำหรับผู้ที่เริ่มต้นเตาะแตะ หรือ มือใหม่หัดขับ ผมขอกราบเรียนให้ท่านทราบว่า เป้าหมายแรกของการเขียนโปรแกรม คือ การได้ฝึกคิด ฝึกแก้ปัญหา ฝึกเรื่องของ Algorithm หรือ ตรรกะเป็นหลัก ไม่ควรจะต้องไปพะวงในการใช้งานเครื่องมือต่างๆ ผมจึงขอสนับสนุน VB6 ให้อยู่ในอ้อมกอด อ้อมอก อ้อมใจ ของพี่น้องทุกๆท่าน ด้วยประการฉะนี้ครับผม ... (มันบ้าหรือเปล่าเนี่ย เขียนบทความ VB.Net ดันเชียร์ให้คนอ่านไปใช้ VB6 ... 55555+)
  • ดาวน์โหลด
    ดาวน์โหลด Source Code สำหรับ MS Visual Basic .NET 2008
    ข้อมูลเพิ่มเติม
    VB.Net กับการเชื่อมต่อฐานข้อมูล MS Access แบบกำหนด Path ปัจจุบัน (VB 2008)
    การกำหนด Path ของไฟล์ฐานข้อมูลด้วยคำสั่ง GetSetting/SaveSetting (VB6)
    เรื่องของโปรแกรมย่อย (อีกที) ... Sub Program, Routine, Procedure หรือ Function (VB6)

    จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
    เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
    CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
    Email: [email protected] หรือ โทร. 08-6862-6560