บทความนี้ทำเป็นวีดีโอ นำเสนอวิธีการสร้างรายงาน โดยใช้ Visual Studio 2010 ไม่เจาะจงภาษาใดๆ เลย เพราะตัวรายงานที่สร้างยังไม่มีการเขียนโค้ดคำสั่ง ดังนั้นทุกท่านสามารถทำตามได้ทันที
สำหรับตอนต่อไป จะเรียนรู้วิธีการส่งค่าพารามิเตอร์ เพื่อกรองข้อมูลที่ต้องการ
สวัสดีประเทศไทย ช่วงนี้ร้อนจริงๆ
22 มีนาคม 2555
16 มีนาคม 2555
VB.Net Pass Value Between From ส่งค่าผ่านระหว่างฟอร์ม
เมื่อเราเขียนโปรแกรม แล้วมีฟอร์มหลายๆ ฟอร์ม หากต้องการส่งผ่านค่า จากฟอร์มหนึ่งไปยังอีกฟอร์มหนึ่ง สามารถทำได้ดังนี้
1. ให้สร้างฟอร์มขึ้นมาเป็นฟอร์มหลัก เช่น ต้องการส่งค่า TextBox จากฟอร์มที่สร้างขึ้นนี้ไปให้อีกฟอร์มหนึ่ง ให้กำหนดคอนโทรลดังภาพ

2. ดับเบิ้ลคลิกที่ ปุ่ม Button1 (Send) เพื่อเข้าไปป้อนคำสั่ง ให้ป้อนดังนี้

4. ดับเบิ้ลคลิกที่ฟอร์มเพื่อเข้าไปป้อนคำสั่ง ให้ป้อนดังนี้
จากนั้นทำการ กดปุ่ม F5 เพื่อสั่งรันฟอร์ม ทดสอบสิ่งที่ทำไว้
ผลัดกันส่งไปส่งมา พาชาติเจริญ
1. ให้สร้างฟอร์มขึ้นมาเป็นฟอร์มหลัก เช่น ต้องการส่งค่า TextBox จากฟอร์มที่สร้างขึ้นนี้ไปให้อีกฟอร์มหนึ่ง ให้กำหนดคอนโทรลดังภาพ

2. ดับเบิ้ลคลิกที่ ปุ่ม Button1 (Send) เพื่อเข้าไปป้อนคำสั่ง ให้ป้อนดังนี้
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim fm2 As Form2 = New Form2
fm2.ValueToPassBetweenForms1 = Me.TextBox1.Text
fm2.ShowDialog()
End Sub
End Class
3. ให้สร้างฟอร์มขึ้นมาอีกหนึ่งฟอร์มเป็นฟอร์มสำหรับรับค่า แล้วกำหนด คอนโทรลดังภาพ
4. ดับเบิ้ลคลิกที่ฟอร์มเพื่อเข้าไปป้อนคำสั่ง ให้ป้อนดังนี้
Public Class Form2
Inherits Form
Public Sub New()
MyBase.New()
InitializeComponent()
AddHandler Load, AddressOf Me.Form2PassValue_Load
End Sub
Private Sub Form2PassValue_Load(ByVal sender As Object, _
ByVal e As EventArgs)
Me.Label1.Text = Me._valueToPassBetweenForms1
End Sub
Private _valueToPassBetweenForms1 As String
Public Property ValueToPassBetweenForms1() As String
Get
Return Me._valueToPassBetweenForms1
End Get
Set(ByVal value As String)
Me._valueToPassBetweenForms1 = value
End Set
End Property
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Me.Dispose()
End Sub
End Class
จากนั้นทำการ กดปุ่ม F5 เพื่อสั่งรันฟอร์ม ทดสอบสิ่งที่ทำไว้
ผลัดกันส่งไปส่งมา พาชาติเจริญ
03 กุมภาพันธ์ 2555
VB.Net Google Maps
การทำแผนที่หาตำแหน่งตามต้องการด้วย VB.Net ก่อนอื่นเราต้องหาตำแหน่งให้ได้ก่อน
วิธีหนึ่งที่เราจะหาพิกัดในแผนที่ สามารถทำได้โดยเปิด Browser แล้วเข้าไปที่เว็บไซต์
http://maps.google.co.th/
จากนั้นทำการซูมแผนที่จนได้ตำแหน่งที่ต้องการ แล้วทำดังนี้
1. คลิกเมาส์ปุ่มขวา ณ. ตำแหน่งที่ต้องการทราบพิกัด แล้ว เลือกรายการนี่คืออะไร
2. จะปรากฏเลขพิกัด ลองติจูด, ละติจูด ปรากฏขึ้นตามภาพด้านล่าง
สร้างฟอร์มแสดงแผนที่ ด้วย VB.Net
1. เปิดโปรแกรม Visual Studio 2010 แล้วสร้างโปรเจกต์ใหม่ โดย
- คลิกเลือกเมนู File เลือกรายการ New Project...
- ที่หน้าต่าง New Project เลือก Windows Form Application จาก Visual Basic -> Windows
- ที่ช่อง New ในหน้าต่าง New Project ให้ตั้งชื่อตามต้องการ
2. ให้สร้างฟอร์มดังภาพ
กำหนด Property ของคอนโทรลต่างๆ ดังนี้
Label1 : Text = Latitude
Label2 : Text = Longitude
Textbox1 : (Name) = txtLatidude
Textbox2 : (Name) = txtLongitude
Button1(Name) = btnSearch
Text = Search
WebBrowser1 : (Name) = WebBrowser1
ดับเบิ้ลคลิกที่ปุ่ม btnSearch แล้วเข้าไปเขียนโค้ดคำสั่ง ดังนี้
ทำการเรียกฟอร์มที่เขียนไว้ให้ทำงาน โดยกดปุ่ม F5 จะปรากฎหน้าต่างของโปรแกรมให้ทำการป้อนค่าของพิกัด โดยใส่ ลองติจูดและ ละติจูด ที่ได้จากการหาตำแหน่งในตอนแรก แล้วคลิกปุ่ม Search จะปรากฏแผนที่แสดงตำแหน่งดังภาพ
เราสามารถนำไปประยุกต์ใช้งานได้หลากหลาย สามารถนำไปใช้กับเว็บ นำไปใช้กับอุปกรณ์ GPS และอื่นๆ อีกมากมาย
หากต้องการ หาตำแหน่ง พิกัด ลองติจูด, ละติจูด จาก ที่อยู่ สามารถดูได้จาก บทความตามลิงค์ด้านล่างนี้
http://kasem-mesak.blogspot.com/2012/04/vbnet-google-maps-latitude-longitude.html 3 กุมภาพันธ์ วันทหารผ่านศึก
วิธีหนึ่งที่เราจะหาพิกัดในแผนที่ สามารถทำได้โดยเปิด Browser แล้วเข้าไปที่เว็บไซต์
http://maps.google.co.th/
จากนั้นทำการซูมแผนที่จนได้ตำแหน่งที่ต้องการ แล้วทำดังนี้
1. คลิกเมาส์ปุ่มขวา ณ. ตำแหน่งที่ต้องการทราบพิกัด แล้ว เลือกรายการนี่คืออะไร
2. จะปรากฏเลขพิกัด ลองติจูด, ละติจูด ปรากฏขึ้นตามภาพด้านล่าง
สร้างฟอร์มแสดงแผนที่ ด้วย VB.Net
1. เปิดโปรแกรม Visual Studio 2010 แล้วสร้างโปรเจกต์ใหม่ โดย
- คลิกเลือกเมนู File เลือกรายการ New Project...
- ที่หน้าต่าง New Project เลือก Windows Form Application จาก Visual Basic -> Windows
- ที่ช่อง New ในหน้าต่าง New Project ให้ตั้งชื่อตามต้องการ
2. ให้สร้างฟอร์มดังภาพ
กำหนด Property ของคอนโทรลต่างๆ ดังนี้
Label1 : Text = Latitude
Label2 : Text = Longitude
Textbox1 : (Name) = txtLatidude
Textbox2 : (Name) = txtLongitude
Button1(Name) = btnSearch
Text = Search
WebBrowser1 : (Name) = WebBrowser1
ดับเบิ้ลคลิกที่ปุ่ม btnSearch แล้วเข้าไปเขียนโค้ดคำสั่ง ดังนี้
Imports System.Text
Public Class Form1
Private Sub btnSearch_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnSearch.Click
Try
Dim latitude As String = ""
Dim longitude As String = ""
Dim AddrToSearch As New StringBuilder()
AddrToSearch.Append("http://maps.google.com/maps?output=embed&hl=th&q=")
' if there is latitude
If txtLatitude.Text <> "" Then
latitude = txtLatitude.Text
AddrToSearch.Append(latitude & "%2C")
End If
' if there is longitude
If txtLongitude.Text <> "" Then
longitude = txtLongitude.Text
AddrToSearch.Append(longitude)
End If
' pass the AddrToSearch value to web browser control
WebBrowser1.Navigate(AddrToSearch.ToString())
Catch ex As Exception
MessageBox.Show(ex.Message.ToString(), _
"Problem encountered while retrieving google map")
End Try
End Sub
End Class
ทำการเรียกฟอร์มที่เขียนไว้ให้ทำงาน โดยกดปุ่ม F5 จะปรากฎหน้าต่างของโปรแกรมให้ทำการป้อนค่าของพิกัด โดยใส่ ลองติจูดและ ละติจูด ที่ได้จากการหาตำแหน่งในตอนแรก แล้วคลิกปุ่ม Search จะปรากฏแผนที่แสดงตำแหน่งดังภาพ
เราสามารถนำไปประยุกต์ใช้งานได้หลากหลาย สามารถนำไปใช้กับเว็บ นำไปใช้กับอุปกรณ์ GPS และอื่นๆ อีกมากมาย
หากต้องการ หาตำแหน่ง พิกัด ลองติจูด, ละติจูด จาก ที่อยู่ สามารถดูได้จาก บทความตามลิงค์ด้านล่างนี้
http://kasem-mesak.blogspot.com/2012/04/vbnet-google-maps-latitude-longitude.html 3 กุมภาพันธ์ วันทหารผ่านศึก
27 มกราคม 2555
FLASH GAME การสร้างเกมภาพระบายสี Color Book
เนื้อหาในส่วนนี้จะเป็นวีดีโอสอนการเขียนเกมภาพระบายสีโดยใช้โปรแกรม Adobe Flash และ Action Script 3 จัดทำในลักษณะของวีดีโอ จะได้เรียนรู้วีธีการสร้างและวิธีการเขียน ไม่เก่งการเขียนโปรแกรมก็เรียนรู้ได้ ไม่เคยเขียน Action Script ก็ทำตามได้ สรุป ใครๆ ก็สามารถทำได้ถ้าได้ดูและทำตาม
วีดีโอสอนการเขียนเกมภาพวาดระบายสี
** ในวีดีโอ มีส่วนที่ต้องเพิ่มเติมแก้ไข เนื่องจากไม่ได้บอกไว้ ตรงเส้นกรอบ-การตั้งชื่อ ให้กำหนดตามภาพ
ด้านล่างนี้คือโค้ดคำสั่ง Action Script 3.0 ที่ใช้ในโปรแกรมที่นำเสนอข้างต้น
โดยการเขียนไว้ภายใต้เลเยอร์ action
var np:Number = 17;
var nc:Number = 10;
var color:Number = 0xffffff;
var cArray:Array = new Array(0xff0000,0x00ff00,0x0000ff,0xffff00,0x00ffff,
0xff00ff,0x66ff66,0x666666,0x000000,0xffffff);
var colorchange:ColorTransform = new ColorTransform();
GameStart();
function GameStart() {
btnNew.addEventListener(MouseEvent.CLICK, mcNew);
for (var ip:uint = 1; ip <= np; ip++) {
colorchange.color = 0xffffff;
//trace(this["p"+ip].name);
this["p"+ip].transform.colorTransform = colorchange;
this["p"+ip].addEventListener(MouseEvent.CLICK, mcPaint);
}
for (var ic:uint = 1; ic <= nc; ic++) {
this["c"+ic].addEventListener(MouseEvent.CLICK,mcColor);
colorchange.color = cArray[ic - 1];
this["c"+ic].transform.colorTransform = colorchange;
}
colorchange.color = color;
sc.transform.colorTransform = colorchange;
}
function mcNew(e:MouseEvent): void {
for (var ip:uint = 1; ip <= np; ip++) {
colorchange.color = 0xffffff;
this["p"+ip].transform.colorTransform = colorchange;
}
}
function mcColor(e:MouseEvent): void {
var objName:String = e.target.name;
color = cArray[uint(objName.substr(1,(objName.length)-1))-1];
colorchange.color = color;
sc.transform.colorTransform = colorchange;
}
function mcPaint(e:MouseEvent):void {
colorchange.color = color;
this[e.target.name].transform.colorTransform = colorchange;
}
เขียนเกมไม่ยากใช่ไหม
วีดีโอสอนการเขียนเกมภาพวาดระบายสี
** ในวีดีโอ มีส่วนที่ต้องเพิ่มเติมแก้ไข เนื่องจากไม่ได้บอกไว้ ตรงเส้นกรอบ-การตั้งชื่อ ให้กำหนดตามภาพ
ด้านล่างนี้คือโค้ดคำสั่ง Action Script 3.0 ที่ใช้ในโปรแกรมที่นำเสนอข้างต้น
โดยการเขียนไว้ภายใต้เลเยอร์ action
var np:Number = 17;
var nc:Number = 10;
var color:Number = 0xffffff;
var cArray:Array = new Array(0xff0000,0x00ff00,0x0000ff,0xffff00,0x00ffff,
0xff00ff,0x66ff66,0x666666,0x000000,0xffffff);
var colorchange:ColorTransform = new ColorTransform();
GameStart();
function GameStart() {
btnNew.addEventListener(MouseEvent.CLICK, mcNew);
for (var ip:uint = 1; ip <= np; ip++) {
colorchange.color = 0xffffff;
//trace(this["p"+ip].name);
this["p"+ip].transform.colorTransform = colorchange;
this["p"+ip].addEventListener(MouseEvent.CLICK, mcPaint);
}
for (var ic:uint = 1; ic <= nc; ic++) {
this["c"+ic].addEventListener(MouseEvent.CLICK,mcColor);
colorchange.color = cArray[ic - 1];
this["c"+ic].transform.colorTransform = colorchange;
}
colorchange.color = color;
sc.transform.colorTransform = colorchange;
}
function mcNew(e:MouseEvent): void {
for (var ip:uint = 1; ip <= np; ip++) {
colorchange.color = 0xffffff;
this["p"+ip].transform.colorTransform = colorchange;
}
}
function mcColor(e:MouseEvent): void {
var objName:String = e.target.name;
color = cArray[uint(objName.substr(1,(objName.length)-1))-1];
colorchange.color = color;
sc.transform.colorTransform = colorchange;
}
function mcPaint(e:MouseEvent):void {
colorchange.color = color;
this[e.target.name].transform.colorTransform = colorchange;
}
เขียนเกมไม่ยากใช่ไหม
20 มกราคม 2555
VPN - การใช้งาน HAMACHI ติดตั้ง VPN
VPN (Virtual Private Network) คือเทคโนโลยีการเชื่อมต่อเครือข่ายในลักษณะเป็นระบบเครือข่ายภายในองค์กร โดยเชื่อมเครือข่ายในแต่ละสาขาเข้าด้วยกัน โดยอาศัย Internet เป็นตัวกลาง ทำให้เราสามารถใช้แฟ้มข้อมูล ฐานข้อมูลร่วมกันได้ เป็นต้น
(Last Modify 5 Nov 2019)
การสร้างเครือข่าย VPN ก็ทำได้ไม่ยากสำหรับองค์กรที่มีเบี้ยน้อยหอยน้อย สามารถทำได้ง่ายๆ โดยใช้ซอฟต์แวร์ ชื่อ Hamachi ซึ่งเป็นผู้ผลิตเดียวกับตัว Logmein ที่เป็นซอฟต์แวร์รีโมท
สำหรับตัว Hamachi หากการเชื่อมต่อไม่เกิน 5 เครื่อง (4 Client + 1 Server) เราก็สามารถใช้งานได้ฟรี
เรามาเริ่มกันเลยดีกว่า
ก่อนอื่นต้องดาวน์โหลซอฟต์แวร์ ให้เปิดเว็บไซต์ https://www.vpn.net/
แล้วทำการดาวน์โหลดมาเก็บไว้ที่เครื่องเรา จะได้ไฟล์ชื่อ hamachi.msi
จากนั้นทำการติดตั้ง
การติดตั้ง Hamachi
การติดตั้ง Hamachi เราจะต้องทำการติดตั้งไว้ที่ฝั่งที่เป็น Server ก่อน และฝั่ง Client โดยใช้ไฟล์ติดตั้งตัวเดียวกัน
การติดตั้งของ Hamachi จะปรากฎหน้าจอดังภาพด้านล่าง
ให้คลิกเครื่องหมายถูกหน้าข้อความ I have read and agree to the terms of the License Agreement
คลิกปุ่ม Next ไปเรื่อย ๆ จนกระทั่งติดตั้งเสร็จ
การกำหนดเครื่องคอมพิวเตอร์หลัก (ฝั่ง Server)
หลังจากที่ได้ทำการติดตั้งโปรแกรม Hamachi แล้ว เครื่องที่เราต้องการให้เป็นเครื่องคอมพิวเตอร์หลัก (ที่เราจะทำให้เป็นเซิร์ฟเวอร์) ให้ทำการกำหนดค่าต่างๆ ดังนี้ (ทำแค่ครั้งแรกครั้งเดียว)
1. เปิดโปรแกรม Hamachi จะปรากฎหน้าต่างดังภาพ
รอสักครู่จะปรากฏหน้าต่างแสดงหมายเลขไอพี และชื่อเครื่องที่เรากำหนดไว้ ดังภาพ
(หากไม่ขึ้นให้ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต)
การกำหนดให้เครื่องเราทำตัวเป็นเครื่องคอมพิวเตอร์หลัก (Server) เป็นอันเสร็จสิ้น
การกำหนดคอมพิวเตอร์ลูกข่าย (ฝั่ง Client)
ให้ทำการติดตั้งโปรแกรม Hamachi ที่ฝั่งของคอมพิวเตอร์ลูกข่ายโดยใช้ไฟล์ติดตั้งเดียวกันกับฝั่ง Server
เมื่อเราติดตั้งเครื่องคอมพิวเตอร์หลักเรียบร้อย ที่เครื่องลูกข่ายทำการกำหนดค่าเหมือนกับการติดตั้งคอมพิวเตอร์หลัก แต่ทำเฉพาะ ข้อ 1 และ ข้อ 2
เมื่อทำเสร็จ จะปรากฏหน้าจอดังภาพ
ให้คลิกที่ปุ่ม Join an existing network จะปรากฏหน้าจอดังภาพ
ที่หน้าต่าง Join Network ให้กำหนดชื่อ Network ID (ชื่อนี้กำหนดไว้ตอนที่เราทำคอมพิวเตอร์หลัก)
และที่ช่อง Password ให้ใส่รหัสผ่านที่กำหนดไว้ตอนที่เราทำคอมพิวเตอร์หลักอีกเช่นกัน
เมื่อกำหนดเสร็จคลิกที่ปุ่ม Join จะปรากฏหน้าต่างดังภาพ (หากไม่ขึ้น ตรวจสอบ การเชื่อมต่อ internet หรือชื่อ Network ID หรือรหัสผ่านว่าถูกต้องหรือไม่)
หากปรากฏชื่อของเครื่องคอมพิวเตอร์หลัก แสดงว่าติดต่อสำเร็จ
เราสามารถใช้งาน VPN ได้แล้ว
การใช้งาน แชท ระหว่างเครื่อง เมื่อเราได้ทำการติดตั้งและติดต่อระหว่างเครื่องคอมพิวเตอร์หลัก กับเครื่องคอมพิวเตอร์ลูกข่ายเรียบร้อยแล้ว สิ่งที่เราสามารถทำได้อย่างหนึ่งคือการ แชท (chat) หรือการพูดคุยกันระหว่างเครื่อง ซึ่งสามารถทำได้ไม่ยาก โดยการคลิกเมาส์ปุ่มขวาที่เครื่องที่เราต้องการติดต่อ แล้วเลือกรายการ Chat ดังภาพ
การใช้งานฐานข้อมูลจากเครื่องคอมพิวเตอร์หลัก
สำหรับผู้เขียนได้ติดตั้งระบบฐานข้อมูล SQL Server ไว้ที่คอมพิเตอร์หลัก และได้ทำการเข้าถึงจากเครื่องคอมพิวเตอร์ลูกข่าย
การทำงานนั้นเราต้องทราบหมายเลข ไอพี (ที่ได้จาก hamachi) ของเครื่องคอมพิวเตอร์หลักที่ติดตั้ง SQL Server
จากภาพเป็นหมายเลขไอพีของเครื่องคอมพิวเตอร์หลัก ที่ได้ติดตั้ง SQL Server ไว้
ซึ่งเราจะนำหมายเลขนี้มาใช้ในการติดต่อกับฐานข้อมูลผ่านทางโปรแกรม
Microsoft SQL Server Management Studio ดังภาพ
หลังจากเราติดต่อเข้าใช้งาน SQL Server ได้แล้วก็ทำงานได้ทุกอย่าง เหมือนเราใช้งานภายใต้เน็ตเวิร์คเดียวกัน ดังภาพ
การใช้งานโปรแกรมที่ใช้ฐานข้อมูลในลักษณะ Client Server
ในกรณีที่เรามีสำนักงานสาขาอยู่ต่างที่กัน เราสามารถทำการเชื่อมต่อด้วย Hamachi แล้วทำงานเสมือนหนึ่งเราอยู่ ณ. เครือข่ายเดียวกัน
สำหรับตัวอย่างที่นำเสนอเป็นการเรียกโปรแกรมจากเครื่องลูกข่าย เพื่อติดต่อไปยังฐานข้อมูลของสำนักงานใหญ่ ผ่านทาง Hamachi
- เครื่องลูกข่ายได้ติดตั้งโปรแกรม hamachi, ติดตั้งซอฟต์แวร์ปฏิบัติงาน , ติดตั้งไดร์เวอร์สำหรับติดต่อ กับ SQL Server
เมื่อทำการเรียกโปรแกรม ก็จะเข้าไปดึงข้อมูลจากสำนักงานใหญ่ผ่านทาง Hamachi มาแสดง
จากภาพด้านบนเป็นการกำหนด Data Source ให้ไปเรียกข้อมูลที่เครื่องคอมพิวเตอร์หลัก
จากภาพด้านบน เป็นตัวอย่างการค้นหาเอกสารจากฐานข้อมูลได้ผลลัพธ์ออกมาจำนวน 5070 รายการ แล้วนำมาแสดงในโปรแกรม ใช้เวลาไม่ถึง 1 วินาทีในการเรียกข้อมูล (ความเร็วขึ้นอยู่กับความเร็วของ internet ที่ใช้งาน)
หวังว่า Hamachi คงช่วยตอบโจทย์ให้กับเหล่านักพัฒนาระบบทั้งหลายได้เป็นอย่างดี
(Last Modify 5 Nov 2019)
การสร้างเครือข่าย VPN ก็ทำได้ไม่ยากสำหรับองค์กรที่มีเบี้ยน้อยหอยน้อย สามารถทำได้ง่ายๆ โดยใช้ซอฟต์แวร์ ชื่อ Hamachi ซึ่งเป็นผู้ผลิตเดียวกับตัว Logmein ที่เป็นซอฟต์แวร์รีโมท
สำหรับตัว Hamachi หากการเชื่อมต่อไม่เกิน 5 เครื่อง (4 Client + 1 Server) เราก็สามารถใช้งานได้ฟรี
เรามาเริ่มกันเลยดีกว่า
ก่อนอื่นต้องดาวน์โหลซอฟต์แวร์ ให้เปิดเว็บไซต์ https://www.vpn.net/
แล้วทำการดาวน์โหลดมาเก็บไว้ที่เครื่องเรา จะได้ไฟล์ชื่อ hamachi.msi
จากนั้นทำการติดตั้ง
การติดตั้ง Hamachi
การติดตั้ง Hamachi เราจะต้องทำการติดตั้งไว้ที่ฝั่งที่เป็น Server ก่อน และฝั่ง Client โดยใช้ไฟล์ติดตั้งตัวเดียวกัน
การติดตั้งของ Hamachi จะปรากฎหน้าจอดังภาพด้านล่าง
ทำการเลือกภาษาที่ต้องการ จากนั้นคลิกปุ่ม Next
ให้คลิกเครื่องหมายถูกหน้าข้อความ I have read and agree to the terms of the License Agreement
คลิกปุ่ม Next
แล้วคลิกปุ่ม Finish
การกำหนดเครื่องคอมพิวเตอร์หลัก (ฝั่ง Server)
หลังจากที่ได้ทำการติดตั้งโปรแกรม Hamachi แล้ว เครื่องที่เราต้องการให้เป็นเครื่องคอมพิวเตอร์หลัก (ที่เราจะทำให้เป็นเซิร์ฟเวอร์) ให้ทำการกำหนดค่าต่างๆ ดังนี้ (ทำแค่ครั้งแรกครั้งเดียว)
1. เปิดโปรแกรม Hamachi จะปรากฎหน้าต่างดังภาพ
2. ให้คลิกปุ่ม เปิด ตามลูกศรชี้ (ปุ่มที่อยู่ติดกับตัวเลข 0.0.0.0)
รอสักครู่จะปรากฎหน้าต่าง Register this client ดังภาพ
ที่ช่อง Client name ให้กำหนดชื่อ ตามที่ต้องการ ลงไป จากตัวอย่าง กำหนดเป็น SUPERMAN-PC
จากนั้นคลิกปุ่ม Create รอสักครู่จะปรากฏหน้าต่างแสดงหมายเลขไอพี และชื่อเครื่องที่เรากำหนดไว้ ดังภาพ
(หากไม่ขึ้นให้ตรวจสอบการเชื่อมต่ออินเทอร์เน็ต)
3. ทำการสร้างกลุ่มของ Network โดยคลิกที่ปุ่ม Create a new network ตามลูกศรในภาพ
จะปรากฏหน้าต่างให้กำหนด Network ID และ Password ดังนี้
4. ให้กำหนดชื่อ Network ID และกำหนดรหัสผ่าน สำหรับให้เครื่องลูกข่ายเข้ามาติดต่อ
จากนั้นคลิกปุ่ม Create เราก็จะได้ กลุ่ม Network แสดงดังภาพการกำหนดคอมพิวเตอร์ลูกข่าย (ฝั่ง Client)
ให้ทำการติดตั้งโปรแกรม Hamachi ที่ฝั่งของคอมพิวเตอร์ลูกข่ายโดยใช้ไฟล์ติดตั้งเดียวกันกับฝั่ง Server
เมื่อเราติดตั้งเครื่องคอมพิวเตอร์หลักเรียบร้อย ที่เครื่องลูกข่ายทำการกำหนดค่าเหมือนกับการติดตั้งคอมพิวเตอร์หลัก แต่ทำเฉพาะ ข้อ 1 และ ข้อ 2
เมื่อทำเสร็จ จะปรากฏหน้าจอดังภาพ
และที่ช่อง Password ให้ใส่รหัสผ่านที่กำหนดไว้ตอนที่เราทำคอมพิวเตอร์หลักอีกเช่นกัน
เมื่อกำหนดเสร็จคลิกที่ปุ่ม Join จะปรากฏหน้าต่างดังภาพ (หากไม่ขึ้น ตรวจสอบ การเชื่อมต่อ internet หรือชื่อ Network ID หรือรหัสผ่านว่าถูกต้องหรือไม่)
เราสามารถใช้งาน VPN ได้แล้ว
การใช้งาน แชท ระหว่างเครื่อง เมื่อเราได้ทำการติดตั้งและติดต่อระหว่างเครื่องคอมพิวเตอร์หลัก กับเครื่องคอมพิวเตอร์ลูกข่ายเรียบร้อยแล้ว สิ่งที่เราสามารถทำได้อย่างหนึ่งคือการ แชท (chat) หรือการพูดคุยกันระหว่างเครื่อง ซึ่งสามารถทำได้ไม่ยาก โดยการคลิกเมาส์ปุ่มขวาที่เครื่องที่เราต้องการติดต่อ แล้วเลือกรายการ Chat ดังภาพ
สำหรับผู้เขียนได้ติดตั้งระบบฐานข้อมูล SQL Server ไว้ที่คอมพิเตอร์หลัก และได้ทำการเข้าถึงจากเครื่องคอมพิวเตอร์ลูกข่าย
การทำงานนั้นเราต้องทราบหมายเลข ไอพี (ที่ได้จาก hamachi) ของเครื่องคอมพิวเตอร์หลักที่ติดตั้ง SQL Server
ซึ่งเราจะนำหมายเลขนี้มาใช้ในการติดต่อกับฐานข้อมูลผ่านทางโปรแกรม
Microsoft SQL Server Management Studio ดังภาพ
ในกรณีที่เรามีสำนักงานสาขาอยู่ต่างที่กัน เราสามารถทำการเชื่อมต่อด้วย Hamachi แล้วทำงานเสมือนหนึ่งเราอยู่ ณ. เครือข่ายเดียวกัน
สำหรับตัวอย่างที่นำเสนอเป็นการเรียกโปรแกรมจากเครื่องลูกข่าย เพื่อติดต่อไปยังฐานข้อมูลของสำนักงานใหญ่ ผ่านทาง Hamachi
- เครื่องลูกข่ายได้ติดตั้งโปรแกรม hamachi, ติดตั้งซอฟต์แวร์ปฏิบัติงาน , ติดตั้งไดร์เวอร์สำหรับติดต่อ กับ SQL Server
เมื่อทำการเรียกโปรแกรม ก็จะเข้าไปดึงข้อมูลจากสำนักงานใหญ่ผ่านทาง Hamachi มาแสดง
หวังว่า Hamachi คงช่วยตอบโจทย์ให้กับเหล่านักพัฒนาระบบทั้งหลายได้เป็นอย่างดี
17 มกราคม 2555
VB.Net Printing
การพิมพ์รายงานต่างๆ ผ่านทาง VB.Net สามารถทำได้หลายวิธี เช่น ผ่านทาง Crystal Report หรือ เขียนโปรแกรมสั่งพิมพ์โดยใช้ VB.Net สำหรับบทความนี้จะแนะนำวิธีการเขียนคำสั่ง ซึ่งจะเป็นพื้นฐานในการควบคมการทำงานทางด้านการพิมพ์ในรูปแบบต่างๆ ตามใจปรารถนา ถึงแม้จะเข้าใจยากแต่เมื่อเรียนรู้จนเข้าใจก็จะคุ้มค่าแก่การศึกษา
สำหรับ .Net ได้จัดเตรียม ออปเจกต์จัดการเกี่ยวกับการพิมพ์ไว้พร้อมแล้ว คือ PrintDocument ซึ่งเก็บไว้ภายใต้ คลาส System.Drawing.Printing
เพื่อไม่ให้เป็นการเสียเวลา จะขอยกตัวอย่างการพิมพ์รายงาน โดยทำการคิวรีข้อมูลจากตารางภายใต้ฐานข้อมูล SQL Server แล้วพิมพ์ออกมาในรายงานตามต้องการ
ตัวอย่างการเขียนคำสั่งพิมพ์เอกสารด้วย VB.Net
1. เปิด โปรแกรม Visual Studio .Net
สำหรับ .Net ได้จัดเตรียม ออปเจกต์จัดการเกี่ยวกับการพิมพ์ไว้พร้อมแล้ว คือ PrintDocument ซึ่งเก็บไว้ภายใต้ คลาส System.Drawing.Printing
เพื่อไม่ให้เป็นการเสียเวลา จะขอยกตัวอย่างการพิมพ์รายงาน โดยทำการคิวรีข้อมูลจากตารางภายใต้ฐานข้อมูล SQL Server แล้วพิมพ์ออกมาในรายงานตามต้องการ
ตัวอย่างการเขียนคำสั่งพิมพ์เอกสารด้วย VB.Net
1. เปิด โปรแกรม Visual Studio .Net
07 มกราคม 2555
SQL Server - Import Text File into SQL Server
นำเข้าข้อมูลเท็กซ์ไฟล์จากภายนอก ใส่ไว้ในตาราง SQL Server
หลายครั้งเรามีความจำเป็นที่จะต้องนำข้อมูลจากภายนอกมาเพิ่มใส่ในตารางบนฐานข้อมูลของ SQL Server สามารถทำได้ไม่ยาก ด้วยคำสั่ง BULK INSERT
เช่น เรามีข้อมูลเท็กซ์ไฟล์ชื่อ CUSTOMER.TXT ที่มีข้อมูลบรรจุอยู่ภายในดังนี้
10001,บริษัท นายก,254/1 ถนนใหญ่ ซอยเล็ก เขตประเทศไทย จังหวัดกรุงเทพฯ
10002,บริษัท ABC,55 ถนนเล็ก ซอยใหญ่ เขตบางคอแหลม จังหวัดกรุงเทพฯ
10003,บริษัท Zaดี,2555 ถนนปูน ซอยเล็ก เขตบางโคล่ จังหวัดกรุงเทพฯ
1.ให้สร้างตารางใน SQL Server ตามรูปแบบของข้อมูลข้างต้น ซึ่งประกอบด้วย รหัส,ชื่อบริษัท,ที่อยู่ ดังนี้
CREATE TABLE [dbo].[CUSTOMER](
[CUSTOMER_NO] [char] (5) NOT NULL ,
[COMPANY_NAME] [varchar](100) NOT NULL,
[ADDRESS] [varchar](100) NOT NULL )
2.ทำการเพิ่มข้อมูลเท็กซ์ไฟล์เข้าสู่ตาราง โดยทำผ่านทาง Microsoft Management Studio ผ่านทางหน้าต่าง New Query ดังนี้
BULK
INSERT [dbo].[CUSTOMER]
FROM 'C:\CUSTOMER.TXT'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
สำหรับคำสั่งทั้งหมด ดูตามตัวอย่างดังภาพ
เทศกาลตรุษจีน ขอให้เฮงๆ รวยๆ
หลายครั้งเรามีความจำเป็นที่จะต้องนำข้อมูลจากภายนอกมาเพิ่มใส่ในตารางบนฐานข้อมูลของ SQL Server สามารถทำได้ไม่ยาก ด้วยคำสั่ง BULK INSERT
เช่น เรามีข้อมูลเท็กซ์ไฟล์ชื่อ CUSTOMER.TXT ที่มีข้อมูลบรรจุอยู่ภายในดังนี้
10001,บริษัท นายก,254/1 ถนนใหญ่ ซอยเล็ก เขตประเทศไทย จังหวัดกรุงเทพฯ
10002,บริษัท ABC,55 ถนนเล็ก ซอยใหญ่ เขตบางคอแหลม จังหวัดกรุงเทพฯ
10003,บริษัท Zaดี,2555 ถนนปูน ซอยเล็ก เขตบางโคล่ จังหวัดกรุงเทพฯ
1.ให้สร้างตารางใน SQL Server ตามรูปแบบของข้อมูลข้างต้น ซึ่งประกอบด้วย รหัส,ชื่อบริษัท,ที่อยู่ ดังนี้
CREATE TABLE [dbo].[CUSTOMER](
[CUSTOMER_NO] [char] (5) NOT NULL ,
[COMPANY_NAME] [varchar](100) NOT NULL,
[ADDRESS] [varchar](100) NOT NULL )
2.ทำการเพิ่มข้อมูลเท็กซ์ไฟล์เข้าสู่ตาราง โดยทำผ่านทาง Microsoft Management Studio ผ่านทางหน้าต่าง New Query ดังนี้
BULK
INSERT [dbo].[CUSTOMER]
FROM 'C:\CUSTOMER.TXT'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
สำหรับคำสั่งทั้งหมด ดูตามตัวอย่างดังภาพ
เทศกาลตรุษจีน ขอให้เฮงๆ รวยๆ
06 มกราคม 2555
การสร้างภาพพาโนรามา
สอนเขียนโปรแกรมมาหลายตอน ช่วงนี้เลยย้อนมาสอนวิธีการทำภาพพาโนรามาจากภาพถ่ายธรรมดา พร้อมทั้งการทำแอนิเมต ด้วย Adobe Flash คลิกเข้าไปดูแล้วทำตามได้เลย แต่ต้องมี Adobe Photoshop กับ Adobe Flash ด้วยล่ะ
25 ธันวาคม 2554
VB.NET Save Image into SQL Server
บทความนี้ เป็นการนำเสนอวิธีการ การเก็บบันทึกรูปภาพเก็บไว้ในฐานข้อมูล SQL Server ด้วยภาษา Visual Basic.NET
สร้างฐานข้อมูลและตารางสำหรับเก็บข้อมูลรูปภาพ ดังนี้
(Create Database and Table)
- ให้ทำการสร้างฐานข้อมูล และตารางใน SQL Server ดังนี้
CREATE DATABASE myData
GO
CREATE TABLE [dbo].[tblImage](
[RowOrder] [int] IDENTITY(1,1) NOT NULL,
[ImageName] [varchar](100) NULL,
[Image] [image] NULL,
CONSTRAINT [PK_tblImage] PRIMARY KEY CLUSTERED
(
[RowOrder] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
สร้างฟอร์มบันทึกรูปภาพ
(Create WindowsForm)
1. เปิดโปรแกรม Visual Studio 2010 แล้วทำการสร้าง Project ขึ้นมา จากนั้นทำการสร้างฟอร์ม โดยมี Control ต่าง ๆ ดังภาพ
1.Label
(name) = Label1
Text =
2.PictureBox
(name) = PictureBox1
SizeMode = PictureBoxSizeMode.StretchImage
3.Load Picture
(name) = btnLoad
Text = Load Picture
4.Save
(name) = btnSave
Text = Save
5.OpenFileDialog
(name) = OpenFileDialog1
FileName =
2. ให้ทำการ Imports Class เข้ามาใช้งานดังนี้
3. ประกาศตัวแปรเพื่อใช้ในฟอร์มดังนี้ โดยประกาศไว้ต่อจากบรรทัด Public Class ชื่อฟอร์ม
4. ให้ทำการเข้าไปเขียนคำสั่งภายใน subroutine ขื่อ btnLoad_Click ของปุ่ม btnLoad ดังนี้
(คำสั่งในปุ่มนี้ จะเป็นการเปิดไฟล์รูปภาพจากในฮาร์ดดิสก์โดยใช้ OpenFileDialog
แล้วนำมาแสดงในคอนโทรล PictureBox1 รวมถึงอ่านไฟล์รูปภาพมาเก็บไว้ใน fsImage เพื่อนำไปใช้ในตอนบันทึกที่ปุ่ม Save)
5. ที่ปุ่ม Save ให้ทำการเข้าไปเขียนคำสั่งภายใต้ Subroutine ชื่อ btnSave_Click ดังนี้
จากนั้นทำการรันฟอร์มที่เราสร้างแล้วทดสอบเปิดไฟล์รูปภาพแล้วทำการบันทึก
สร้างฟอร์มแสดงรูปภาพ
1. ให้ทำการสร้างฟอร์มเพิ่มขึ้นอีกหนึ่งฟอร์ม โดยคลิกที่เมนู Project เลือก Add Windows Form...
จะขึ้นหน้าต่าง Add New Item.. ให้เลือก Windows Form แล้วกำหนดชื่อฟอร์มตามต้องการ (Form2.vb)
2. ที่ฟอร์มให้ทำการลากคอนโทรล DataGridView และ คอนโทรล PictureBox มาวางไว้ดังภาพ
PictureBox
(name) = PictureBox1
SizeMode = PictureBoxSizeMode.StretchImage
จากนั้นเข้าไปเขียนคำสั่ง ดังนี้ (copy เอาไปแทนได้เลย)
เมื่อเราเรียกฟอร์มขึ้นมาทดสอบ จะปรากฎหน้าจอ คล้ายๆ ภาพตัวอย่างด้านล่าง
จากนี้ไปก็เป็นหน้าที่ของท่านผู้อ่านจะต้องนำไปไปประยุกต์ใช้งาน คงไม่ยากเกินความสามารถ
สร้างฐานข้อมูลและตารางสำหรับเก็บข้อมูลรูปภาพ ดังนี้
(Create Database and Table)
- ให้ทำการสร้างฐานข้อมูล และตารางใน SQL Server ดังนี้
CREATE DATABASE myData
GO
CREATE TABLE [dbo].[tblImage](
[RowOrder] [int] IDENTITY(1,1) NOT NULL,
[ImageName] [varchar](100) NULL,
[Image] [image] NULL,
CONSTRAINT [PK_tblImage] PRIMARY KEY CLUSTERED
(
[RowOrder] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
สร้างฟอร์มบันทึกรูปภาพ
(Create WindowsForm)
1. เปิดโปรแกรม Visual Studio 2010 แล้วทำการสร้าง Project ขึ้นมา จากนั้นทำการสร้างฟอร์ม โดยมี Control ต่าง ๆ ดังภาพ
1.Label
(name) = Label1
Text =
2.PictureBox
(name) = PictureBox1
SizeMode = PictureBoxSizeMode.StretchImage
3.Load Picture
(name) = btnLoad
Text = Load Picture
4.Save
(name) = btnSave
Text = Save
5.OpenFileDialog
(name) = OpenFileDialog1
FileName =
2. ให้ทำการ Imports Class เข้ามาใช้งานดังนี้
Imports System.Data Imports System.Data.SqlClient Imports System.IO
3. ประกาศตัวแปรเพื่อใช้ในฟอร์มดังนี้ โดยประกาศไว้ต่อจากบรรทัด Public Class ชื่อฟอร์ม
Public Class Form1
Dim bm As Bitmap
Dim fs As FileStream
Dim fsImage As Byte()
...
4. ให้ทำการเข้าไปเขียนคำสั่งภายใน subroutine ขื่อ btnLoad_Click ของปุ่ม btnLoad ดังนี้
(คำสั่งในปุ่มนี้ จะเป็นการเปิดไฟล์รูปภาพจากในฮาร์ดดิสก์โดยใช้ OpenFileDialog
แล้วนำมาแสดงในคอนโทรล PictureBox1 รวมถึงอ่านไฟล์รูปภาพมาเก็บไว้ใน fsImage เพื่อนำไปใช้ในตอนบันทึกที่ปุ่ม Save)
With OpenFileDialog1
.CheckFileExists = True
.ShowReadOnly = False
.Filter = "All Files|*.*|Picture Files|*.bmp;*.gif;*.jpg;*.png"
.FilterIndex = 2
If .ShowDialog = DialogResult.OK Then
fs = New FileStream(.FileName.ToString(), FileMode.Open)
fsImage = New Byte(fs.Length) {}
fs.Read(fsImage, 0, fs.Length)
fs.Close()
bm = Image.FromFile(.FileName.ToString())
PictureBox1.Image = bm
Label1.Text = System.IO.Path.GetFileName(.FileName)
End If
End With
5. ที่ปุ่ม Save ให้ทำการเข้าไปเขียนคำสั่งภายใต้ Subroutine ชื่อ btnSave_Click ดังนี้
If System.IO.File.Exists(Me.OpenFileDialog1.FileName) = False Then
MessageBox.Show("File Not Found", "Error")
Exit Sub
Else
Dim strConn As String = "Data Source=.;Initial Catalog=myData;" & _
"Integrated Security=SSPI;"
'strConn ให้เปลี่ยนค่าตามเครื่อง Server ของ SQL Server ที่ติดต่อ
Dim Conn As New SqlConnection(strConn)
Dim SqlString As String
SqlString = "INSERT INTO tblImage(ImageName,Image) " & _
" VALUES(@ImgName, @Img)"
Dim cmd As SqlCommand = New SqlCommand(SqlString, Conn)
Dim ImgName As SqlParameter = New SqlParameter("@ImgName", _
System.Data.SqlDbType.VarChar, 100)
ImgName.Value = Label1.Text.ToString()
cmd.Parameters.Add(ImgName)
Dim Img As SqlParameter = New SqlParameter("@Img", _
System.Data.SqlDbType.Image)
Img.Value = fsImage
cmd.Parameters.Add(Img)
Try
Conn.Open()
cmd.ExecuteNonQuery()
Conn.Close()
MessageBox.Show("Save Image Complete", "Success")
Catch ex As Exception
MessageBox.Show(ex.Message.ToString(), "Error")
Exit Sub
End Try
End If
จากนั้นทำการรันฟอร์มที่เราสร้างแล้วทดสอบเปิดไฟล์รูปภาพแล้วทำการบันทึก
สร้างฟอร์มแสดงรูปภาพ
1. ให้ทำการสร้างฟอร์มเพิ่มขึ้นอีกหนึ่งฟอร์ม โดยคลิกที่เมนู Project เลือก Add Windows Form...
จะขึ้นหน้าต่าง Add New Item.. ให้เลือก Windows Form แล้วกำหนดชื่อฟอร์มตามต้องการ (Form2.vb)
2. ที่ฟอร์มให้ทำการลากคอนโทรล DataGridView และ คอนโทรล PictureBox มาวางไว้ดังภาพ
PictureBox
(name) = PictureBox1
SizeMode = PictureBoxSizeMode.StretchImage
จากนั้นเข้าไปเขียนคำสั่ง ดังนี้ (copy เอาไปแทนได้เลย)
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Public Class Form2
'strConn ให้เปลี่ยนค่าตามเครื่อง Server ของ SQL Server ที่ติดต่อ
Private strConn As String = "Data Source=.;Initial Catalog=myData;" & _
"Integrated Security=SSPI;"
Private SqlString As String
Private Conn As SqlConnection
Private cmd As SqlCommand
Private da As SqlDataAdapter
Private ds As DataSet
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
SqlString = "SELECT roworder,imagename FROM tblImage"
Conn = New SqlConnection(strConn)
Conn.Open()
cmd = New SqlCommand(SqlString, Conn)
da = New SqlDataAdapter(cmd)
ds = New DataSet()
da.Fill(ds, "tblImage")
DataGridView1.DataSource = ds
DataGridView1.DataMember = "tblImage"
DataGridView1.ReadOnly = True
DataGridView1.Columns(0).HeaderText = "Run No."
DataGridView1.Columns(1).HeaderText = "Picture Name"
'format GridView
DataGridView1.GridColor = Color.Red
DataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None
DataGridView1.BackgroundColor = Color.LightGray
DataGridView1.DefaultCellStyle.SelectionBackColor = Color.Red
DataGridView1.DefaultCellStyle.SelectionForeColor = Color.Yellow
DataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.[True]
DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
DataGridView1.AllowUserToResizeColumns = False
DataGridView1.RowsDefaultCellStyle.BackColor = Color.Bisque
DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Beige
'
Catch ex As Exception
MessageBox.Show(ex.Message.ToString(), "Error")
Finally
If Conn.State = ConnectionState.Open Then
Conn.Close()
End If
End Try
End Sub
Private Sub DataGridView1_SelectionChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles DataGridView1.SelectionChanged
Try
SqlString = "select image from tblImage where roworder = @roworder"
Conn = New SqlConnection(strConn)
cmd = New SqlCommand(SqlString, Conn)
Dim rdr As SqlDataReader = Nothing
Dim imgData As Byte() = Nothing
Dim row As Integer = DataGridView1.CurrentCellAddress.Y
Dim roworder As String = DataGridView1.Rows(row).Cells(0).Value
cmd.Parameters.AddWithValue("@roworder", roworder)
Conn.Open()
rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
If rdr.Read() Then
imgData = New Byte(rdr.GetBytes(0, 0, Nothing, 0, Integer.MaxValue) - 1) {}
rdr.GetBytes(0, 0, imgData, 0, imgData.Length)
Dim ms As New MemoryStream(imgData)
PictureBox1.Image = Image.FromStream(ms)
Else
MessageBox.Show("No records found in the database.", "Warning")
End If
Catch ex As Exception
PictureBox1.Image = Nothing
Finally
If Conn.State = ConnectionState.Open Then
Conn.Close()
End If
End Try
End Sub
End Class
เมื่อเราเรียกฟอร์มขึ้นมาทดสอบ จะปรากฎหน้าจอ คล้ายๆ ภาพตัวอย่างด้านล่าง
จากนี้ไปก็เป็นหน้าที่ของท่านผู้อ่านจะต้องนำไปไปประยุกต์ใช้งาน คงไม่ยากเกินความสามารถ
10 พฤศจิกายน 2554
เมื่อ Adobe ยุติการพัฒนา Flash บนอุปกรณ์ Mobile
วันที่ 9 พ.ย. 54 เป็นวันหนึ่งที่ Adobe Flash ได้ประกาศหยุดการพัฒนา Flash ที่ใช้กับ Mobile Web Browser ซึ่งอนาคตก็แน่นอนแล้วว่า มือถือทั้งหลาย หรือ อุปกรณ์ที่ใช้ OS Android (iPad, iPhone เปิดไม่ได้ตั้งแต่แรก) เมื่อเปิด Web Browser ก็คงไม่มี Flash สวย ๆ มาให้เราเห็นอีกต่อไป ซึ่งก็คงต้องปล่อยให้เป็นหน้าที่ของ HTML5 เป็นตัวชูโรงสำหรับอนาคตข้างหน้า
เหตุที่เป็นเช่นนี้ ก็เนื่องมาจากเอกสาร Flash กินทรัพยากรของเครื่องมากไป แล้ว Flash จะทำอย่างไรดี การพัฒนาที่ทาง Adobe บอกไว้ว่า Flash จะพัฒนาให้ใช้ได้บน Mobile ที่เป็น Mobile Application เท่านั้น เพราะถ้าทำ ให้ใช้ได้กับ Web ด้วยก็คงต้องทุ่มสรรพกำลังจนเกินเหตุ ได้ไม่คุ้มเสีย เลิกดีกว่า
สาวก Flash ที่พัฒนาบน Web ต่อไปก็คงต้องปรับตัว ในอนาคตเมื่อ Mobile Web Browser ไม่ support แล้วคนที่จ้างทำ Flash ลงหน้าเว็บ ฤาจะให้ใช้ Flash ทำเฉพาะ Web browser บน Desktop ก็กระไรอยู่ คงไม่มีใครมาจาก 2 ต่อ ทั้งบน web browser บน Windows และ Mobile ซึ่งใช้เครื่องมือคนละตัว ใครที่เขียน Web ด้วย Flash ก็คงต้องปรับไปใช้ HTML5 ในไม่ช้า แต่ทาง Adobe ก็ไม่ได้ทิ้ง Flash หันไปทางด้าน Mobile Application แทน โดยผ่านทาง Adobe Air ดังนั้น ใครใช้ Flash ใช้ Action Script ก็คงยังไม่หมดหนทางเสียทีเดียว ก็พัฒนาเป็น Mobile Application ถ้าท่านใดมี Adobe Flash 5 หรือ 5.5 ขึ้นไปก็สามารถเขียน Mobile Application ได้เลยไว้ว่าง ๆ เรามาเขียนกัน
โลกยังดำเนินต่อไป มีเกิดมีดับ มีรุ่งมีร่วง ช่วงนี้น้ำท่วม มีท่วมก็มีลด
ถึงแม้ว่า Flash จะไม่สามารถใช้กับ Mobile Web Browser แต่เราใช้กับงานอื่นได้อีกเยอะ
ช่วงหลัง ผู้เขียนมุ่งไปทาง ตาดูหูฟัง นั่งทำตาม เลยจัดทำเป็นวีดีโอช่วยเรียนรู้ ว่าง ๆ ก็เปิดดูได้ มี 2 เรื่อง
(จริง ๆ มีทำไว้มากกว่านี้ลองหาดู)
วีดีโอ แรก มาเขียนเกมเล่น ด้วย Flash กันดีกว่า
วีดีโอ ที่สอง มาทำโปรแกรมเปิดไฟล์วีดีโอ ไว้เผื่อทำวีดีโอช่วยสอนใส่แผ่นซีดี แจกจ่ายได้
บ้านใครน้ำท่วมก็ขอให้น้ำลดไว ๆ
เหตุที่เป็นเช่นนี้ ก็เนื่องมาจากเอกสาร Flash กินทรัพยากรของเครื่องมากไป แล้ว Flash จะทำอย่างไรดี การพัฒนาที่ทาง Adobe บอกไว้ว่า Flash จะพัฒนาให้ใช้ได้บน Mobile ที่เป็น Mobile Application เท่านั้น เพราะถ้าทำ ให้ใช้ได้กับ Web ด้วยก็คงต้องทุ่มสรรพกำลังจนเกินเหตุ ได้ไม่คุ้มเสีย เลิกดีกว่า
สาวก Flash ที่พัฒนาบน Web ต่อไปก็คงต้องปรับตัว ในอนาคตเมื่อ Mobile Web Browser ไม่ support แล้วคนที่จ้างทำ Flash ลงหน้าเว็บ ฤาจะให้ใช้ Flash ทำเฉพาะ Web browser บน Desktop ก็กระไรอยู่ คงไม่มีใครมาจาก 2 ต่อ ทั้งบน web browser บน Windows และ Mobile ซึ่งใช้เครื่องมือคนละตัว ใครที่เขียน Web ด้วย Flash ก็คงต้องปรับไปใช้ HTML5 ในไม่ช้า แต่ทาง Adobe ก็ไม่ได้ทิ้ง Flash หันไปทางด้าน Mobile Application แทน โดยผ่านทาง Adobe Air ดังนั้น ใครใช้ Flash ใช้ Action Script ก็คงยังไม่หมดหนทางเสียทีเดียว ก็พัฒนาเป็น Mobile Application ถ้าท่านใดมี Adobe Flash 5 หรือ 5.5 ขึ้นไปก็สามารถเขียน Mobile Application ได้เลยไว้ว่าง ๆ เรามาเขียนกัน
โลกยังดำเนินต่อไป มีเกิดมีดับ มีรุ่งมีร่วง ช่วงนี้น้ำท่วม มีท่วมก็มีลด
ถึงแม้ว่า Flash จะไม่สามารถใช้กับ Mobile Web Browser แต่เราใช้กับงานอื่นได้อีกเยอะ
ช่วงหลัง ผู้เขียนมุ่งไปทาง ตาดูหูฟัง นั่งทำตาม เลยจัดทำเป็นวีดีโอช่วยเรียนรู้ ว่าง ๆ ก็เปิดดูได้ มี 2 เรื่อง
(จริง ๆ มีทำไว้มากกว่านี้ลองหาดู)
วีดีโอ แรก มาเขียนเกมเล่น ด้วย Flash กันดีกว่า
วีดีโอ ที่สอง มาทำโปรแกรมเปิดไฟล์วีดีโอ ไว้เผื่อทำวีดีโอช่วยสอนใส่แผ่นซีดี แจกจ่ายได้
บ้านใครน้ำท่วมก็ขอให้น้ำลดไว ๆ
24 สิงหาคม 2554
เรียนภาษาอังกฤษ
เว็บไซต์เรียนภาษาอังกฤษ
มีให้เราเรียนเยอะแยะมากมาย เรียนวันละนิด รับรองเก่งแน่ ๆ
http://www.lextutor.ca/
ด้านล้างก็เป็นแบบทดสอบ ดูซิว่าเราเก่งขนาดไหนแล้ว
http://www.er.uqam.ca/nobel/r21270/levels/
มีให้เราเรียนเยอะแยะมากมาย เรียนวันละนิด รับรองเก่งแน่ ๆ
http://www.lextutor.ca/
ด้านล้างก็เป็นแบบทดสอบ ดูซิว่าเราเก่งขนาดไหนแล้ว
http://www.er.uqam.ca/nobel/r21270/levels/
15 มิถุนายน 2554
ของดี มีอยู่ใน Visual Studio Gallery
สามารถเข้าไป ดาวน์โหลดได้ที่ http://visualstudiogallery.msdn.microsoft.com/
ที่ codeplex รวมไว้หลากหลาย เข้าได้ที่ http://1code.codeplex.com/wikipage?title=All-In-One%20Code%20Framework%20Sample%20Catalog
ที่ codeplex รวมไว้หลากหลาย เข้าได้ที่ http://1code.codeplex.com/wikipage?title=All-In-One%20Code%20Framework%20Sample%20Catalog
upgrade Visual Studio 2010
เมื่อเราไป ดาวน์โหล Visual Studio 2010 รุ่นทดลอง มาใช้ได้สักพัก แล้วเกิดติดใจ ดังนั้นต้องไปซื้อ License มา เมื่อได้ product key มาแล้ว ต้องการจะ upgrade จากรุ่นทดลองเป็นรุ่นจริง สามารถทำได้ดังนี้
1. ทำการเปิดแฟ้ม setup.sdb ที่เก็บไว้ในโฟล์ดเดอร์ของโปรแกรม (C:\Program Files\Microsoft Visual Studio 10.0\setup.sdb) ด้วยโปรแกรม notepad
2. หาบรรทัด [Product Key] แล้วแก้ product key ที่อยู่ใต้ section นี้ เป็นตัวที่ได้ซื้อมา
3. ทำการบันทึกไฟล์ แต่ถ้าหากบันทึกไม่ได้ ก็บันทึกไว้ที่อื่น แล้วค่อยใช้ windows expoler ลากไปวางแทนไฟล์เดิมที่ในโฟล์ดเดอร์ของโปรแกรม
4. ที่โฟล์ดเดอร์ของโปรแกรม หาไฟล์ setup.exe เรียกไฟล์นี้ขึ้นมา ในนี้จะมีให้ใส่ product key ก็เอาตัวที่ได้ซื้อมาใส่ไปอีกครั้ง เป็นอันเสร็จ
1. ทำการเปิดแฟ้ม setup.sdb ที่เก็บไว้ในโฟล์ดเดอร์ของโปรแกรม (C:\Program Files\Microsoft Visual Studio 10.0\setup.sdb) ด้วยโปรแกรม notepad
2. หาบรรทัด [Product Key] แล้วแก้ product key ที่อยู่ใต้ section นี้ เป็นตัวที่ได้ซื้อมา
3. ทำการบันทึกไฟล์ แต่ถ้าหากบันทึกไม่ได้ ก็บันทึกไว้ที่อื่น แล้วค่อยใช้ windows expoler ลากไปวางแทนไฟล์เดิมที่ในโฟล์ดเดอร์ของโปรแกรม
4. ที่โฟล์ดเดอร์ของโปรแกรม หาไฟล์ setup.exe เรียกไฟล์นี้ขึ้นมา ในนี้จะมีให้ใส่ product key ก็เอาตัวที่ได้ซื้อมาใส่ไปอีกครั้ง เป็นอันเสร็จ
06 พฤษภาคม 2554
app.config เก็บอะไรได้หลายอย่าง
ใน VB.NET App.Config เอาไว้ทำอะไร คงมีคำถามมากมาย ???
เอากันตรงตัวเลย App = Application + Config = Configuration
เว้ากันซื่อ ๆ ก็ เอาไว้กำหนดค่าต่างๆของแอพพลิเคชัน เพื่อเอาไว้ใช้งานในระบบงาน
เช่น การกำหนดค่าต่าง ๆ เช่น กำหนดค่าคงที่, กำหนด Connectionstring เป็นต้น
เราสามารถสร้างไฟล์ app.config ในโปรเจกต์ ได้โดย
1. เลือกเมนู Project
2. เลือก Add New Item...
3. ที่รายการ Common Items เลือก General แล้วเลือกรายการ Application Configuration File
ที่ช่อง Name จะมีชื่อ app.config ให้คลิก OK
เราจะได้ไฟล์ ชื่อ app.config ปรากฎอยู่ในหน้าต่าง Solution Explorer
ให้ทำการเปิดขึ้นมาดู แล้วเพิ่มโค้ด ภายใต้บล๊อกคำสั่ง <appSettings> ... </appSettings> ดังนี้
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="name" value="Kasem"/>
<add key="surname" value="Kamolchaipisit"/>
</appSettings>
</configuration>
หากเราต้องการเรียกใช้งานค่าจากไฟล์ app.config
ให้ทำการ Imports System.Configuration ก่อน เช่น
หลายคนที่เขียนโปรแกรมจะประกาศ Connection String ไว้ในฟอร์มที่ทำงานโดยตรง ซึ่งมีข้อเสีย ถ้าต้องการเปลี่ยนค่าของ Connection String ใหม่ ก็ต้องแก้ไขฟอร์มทุกฟอร์มใหม่ สำหรับ app.config ก็ให้เราสามารถกำหนดค่าของ Connection String ได้แล้วนำไปใช้ภายใต้ฟอร์มต่าง ๆ ดังนั้นหากต้องการแก้ไขค่า ก็สามารถทำได้ใน app.config ที่เดียวซึ่งก็จะทำให้ทุกฟอร์มสามารถเรียกใช้ได้ทันที่
สำหรับการประกาศ Connection String ภายใต้ไฟล์ app.config เราจะเขียนไว้ภายใต้บล๊อกคำสั่ง <connectionStrings>...</connectionStrings> เช่น
<connectionStrings>
<add name="myConnect" connectionString=""Data Source=ชื่อเซิร์ฟเวอร์;Initial Catalog=ชื่อฐานข้อมูล;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
จากนั้นที่ฟอร์มแต่ะลฟอร์ม เมื่อต้องการเชื่อมต่อฐานข้อมูลแล้วเรียกใช้งาน Connection String ก็ให้ทำการ Imports คลาส ดังนี้
Imports System.Configuration
จากนั้นเขียนคำสั่งเรียกใช้งาน connection string โดยเขียนไว้หลังจาก Public Class ชื่อ Class เช่น
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Configuration
Public Class Form1
Dim cs As String = ConfigurationSettings.AppSettings("myConnect")
Private Sub Form1_Load .....
' เขียนคำสั่งติดต่อตามต้องการ
End Sub
End Class
สวัสดี
เอากันตรงตัวเลย App = Application + Config = Configuration
เว้ากันซื่อ ๆ ก็ เอาไว้กำหนดค่าต่างๆของแอพพลิเคชัน เพื่อเอาไว้ใช้งานในระบบงาน
เช่น การกำหนดค่าต่าง ๆ เช่น กำหนดค่าคงที่, กำหนด Connectionstring เป็นต้น
เราสามารถสร้างไฟล์ app.config ในโปรเจกต์ ได้โดย
1. เลือกเมนู Project
2. เลือก Add New Item...
3. ที่รายการ Common Items เลือก General แล้วเลือกรายการ Application Configuration File
ที่ช่อง Name จะมีชื่อ app.config ให้คลิก OK
เราจะได้ไฟล์ ชื่อ app.config ปรากฎอยู่ในหน้าต่าง Solution Explorer
ให้ทำการเปิดขึ้นมาดู แล้วเพิ่มโค้ด ภายใต้บล๊อกคำสั่ง <appSettings> ... </appSettings> ดังนี้
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="name" value="Kasem"/>
<add key="surname" value="Kamolchaipisit"/>
</appSettings>
</configuration>
หากเราต้องการเรียกใช้งานค่าจากไฟล์ app.config
ให้ทำการ Imports System.Configuration ก่อน เช่น
' ประกาศไว้ต้นโปรแกรม Imports System.Configuration ' คำสั่งในโปรแกรม ' ... ' การเรียกใช้งาน Dim appSet As New AppSettingsReader() ' หาต้องการดึงค่าใน app.config มาเก็บไว้ในตัวแปร หรือนำไปใช้ตามต้องการ เขียนคำสั่ง ดังนี้ Dim myName , mySurname As String MyName = appSet.GetValue("name", GetType(String)) ' name คือชื่อของ key ใน app.config MySurname = appSet.GetValue("surname", GetType(String)) ' surname คือชื่อของ key ใน app.config Messagebox.Show(MyName & " " & MySurName) ' จะปรากฎชื่อ Kasem Kamolchaipisit
หลายคนที่เขียนโปรแกรมจะประกาศ Connection String ไว้ในฟอร์มที่ทำงานโดยตรง ซึ่งมีข้อเสีย ถ้าต้องการเปลี่ยนค่าของ Connection String ใหม่ ก็ต้องแก้ไขฟอร์มทุกฟอร์มใหม่ สำหรับ app.config ก็ให้เราสามารถกำหนดค่าของ Connection String ได้แล้วนำไปใช้ภายใต้ฟอร์มต่าง ๆ ดังนั้นหากต้องการแก้ไขค่า ก็สามารถทำได้ใน app.config ที่เดียวซึ่งก็จะทำให้ทุกฟอร์มสามารถเรียกใช้ได้ทันที่
สำหรับการประกาศ Connection String ภายใต้ไฟล์ app.config เราจะเขียนไว้ภายใต้บล๊อกคำสั่ง <connectionStrings>...</connectionStrings> เช่น
<connectionStrings>
<add name="myConnect" connectionString=""Data Source=ชื่อเซิร์ฟเวอร์;Initial Catalog=ชื่อฐานข้อมูล;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
จากนั้นที่ฟอร์มแต่ะลฟอร์ม เมื่อต้องการเชื่อมต่อฐานข้อมูลแล้วเรียกใช้งาน Connection String ก็ให้ทำการ Imports คลาส ดังนี้
Imports System.Configuration
จากนั้นเขียนคำสั่งเรียกใช้งาน connection string โดยเขียนไว้หลังจาก Public Class ชื่อ Class เช่น
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Configuration
Public Class Form1
Dim cs As String = ConfigurationSettings.AppSettings("myConnect")
Private Sub Form1_Load .....
' เขียนคำสั่งติดต่อตามต้องการ
End Sub
End Class
สวัสดี
10 กุมภาพันธ์ 2554
VB.Net กับ Transaction
Transaction เป็นกลุ่มคำสั่งที่สร้างขึ้นเพื่อการประมวลผลข้อมูล โดยที่กลุ่มคำสั่งของทรานแซกชันถือว่าเป็นหน่วยของงานที่ไม่สามารถแบ่งแยกออกเป็นส่วนย่อยได้อีก การทำงานจะทำตั้งแต่ต้นจนเสร็จสิ้นภายใต้หน่วยของทรานแซกชันนั้น หากเกิดเหตุอันไม่คาดคิดขณะประมวลผลคำสั่ง เช่น ระเบิดภูเขา เผากระท่อม ไฟดับ สายสัญญาณขาดหาย โปรแกรมผิดพลาด .... แล้วมีผลมาทำให้คำสั่งหยุดกลางครัน การทำงานที่ผ่านมาตั้งแต่เริ่มทำ Transaction ก็จะกลับสู่สภาพเดิมก่อนที่จะมีการทำ Transaction
ตัวอย่าง เช่น การโอนเงินผ่านธนาคาร จาก นาย ก. ไปให้ นาย ข. ถ้าเรามองการทำงานเวลาเราไปโอนเงินผ่านตู้ ATM เราจะเห็นว่ามีการทำงานแค่ครั้งเดียว คือ นาย ก. ไปโอนเงิน (เป็นการมองในระดับ High Level) แต่ในอีกมุมนึง การทำงานของโปรแกรม ซึ่งเป็นส่วนของการประมวลผลคำสั่งและปรับปรุงข้อมูลลงฐานข้อมูล จะเกิดขั้นตอนการปรับปรุงข้อมูลอย่างน้อย 2 คำสั่ง (มองในระดับ Low Level) คือ คำสั่งแรก จะต้องปรับปรุงข้อมูลของนาย ก. โดยลดยอดลง คำสั่งที่สอง จะเป็นการปรับปรุงข้อมูลโดยการเพิ่มเงินในบัญชีของนาย ข. ลักษณะนี้ เราจำเป็นต้องมีการทำ Transaction เพื่อป้องกันเหตุสุดวิสัยที่อาจจะทำให้การปรับปรุงข้อมูลข้างต้นไม่ให้เกิดข้อผิดพลาดในการปรับปรุงข้อมูลเกิดขึ้น
คุณสมบัติของทรานแซกชัน ประกอบด้วย
1. Atomicity คือ ความเป็นหนึ่งเดียว : การทำงานของกลุ่มคำสั่งภายใต้ทรานแซกชันจะถูกประมวลผลเสมือนเป็นคำสั่งเดียวกัน
2. Consistency คือ ความถูกต้องของข้อมูล : การทำงานของทรานแซกชันไม่ว่าจะสำเร็จหรือล้มเหลว ข้อมูลจะต้องสอดคล้องกันเสมอ
3. Isolation คือ การทำงานที่เป็นอิสระแกกัน : การทำงานของทรานแซกซันแต่ละทรานแซกชันจะเป็นอิสระจากกัน ข้อมูลที่ถูกปรับปรุงในทรานแซกชันหนึ่งจะไม่มีผลกันอีกทรานแซกชันหนึ่ง
4. Durability คือ ความคงอยู่ : ข้อมูลทั้งหมดจะคงอยู่หลังจากผ่านการคอมมิตทรานแซกชันแล้ว (commit transaction) ไม่ว่าจะเกิดเหตุการณ์ ระเบิดภูเขา เผากระท่อม หรืออื่น ๆ ก็ตาม
ตัวอย่าง การเขียนคำสั่งจัดการ Transaction ด้วยภาษา VB.Net
ให้ทำการสร้างฐานข้อมูลภายใต้ SQL Server 2008 และตารางข้อมูล พร้อมทั้งเพิ่มข้อมูลเข้าสู่ตาราง ดังนี้ (เปิดหน้าต่าง New Query ใน SQL Server 2008 แล้วป้อนคำสั่งตามตัวอย่างด้านล่าง)
ทำการเขียนโปรแกรมด้วย VB.Net
1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project....
เลือก Visual Basic -> Windows -> Windows Forms Application
ที่ช่อง Name ป้อน myTransaction
จากนั้นคลิกปุ่ม OK
2. ที่ฟอร์ม ให้เพิ่มคอนโทร Button1 และ DataGridView ตามตัวอย่าง ดังภาพ
3. ให้ดับเบิลคลิกที่ฟอร์ม หรือ ปุ่ม Button1 แล้วป้อนคำสั่ง ดังนี้
4. จากนั้นกดปุ่ม F5 เพื่อทำการ Run แล้วลองทดสอบ ตามภาพ
ข้อควรระวัง การใช้ทรานแซกชันระบบฐานข้อมูลจะทำการล็อกตารางที่อยู่ภายใต้ทรานแซกชัน ดังนั้นเวลาใช้ควรทำให้เสร็จในคราวเดียวกัน อย่าเปิดทรานแซกชันค้างไว้ โดยไม่ทำการ commit หรือ rollback
ขอส่งกำลังใจให้กับทหารกล้า ที่ปกป้องประเทศ ทุก ๆ ท่าน
ตัวอย่าง เช่น การโอนเงินผ่านธนาคาร จาก นาย ก. ไปให้ นาย ข. ถ้าเรามองการทำงานเวลาเราไปโอนเงินผ่านตู้ ATM เราจะเห็นว่ามีการทำงานแค่ครั้งเดียว คือ นาย ก. ไปโอนเงิน (เป็นการมองในระดับ High Level) แต่ในอีกมุมนึง การทำงานของโปรแกรม ซึ่งเป็นส่วนของการประมวลผลคำสั่งและปรับปรุงข้อมูลลงฐานข้อมูล จะเกิดขั้นตอนการปรับปรุงข้อมูลอย่างน้อย 2 คำสั่ง (มองในระดับ Low Level) คือ คำสั่งแรก จะต้องปรับปรุงข้อมูลของนาย ก. โดยลดยอดลง คำสั่งที่สอง จะเป็นการปรับปรุงข้อมูลโดยการเพิ่มเงินในบัญชีของนาย ข. ลักษณะนี้ เราจำเป็นต้องมีการทำ Transaction เพื่อป้องกันเหตุสุดวิสัยที่อาจจะทำให้การปรับปรุงข้อมูลข้างต้นไม่ให้เกิดข้อผิดพลาดในการปรับปรุงข้อมูลเกิดขึ้น
คุณสมบัติของทรานแซกชัน ประกอบด้วย
1. Atomicity คือ ความเป็นหนึ่งเดียว : การทำงานของกลุ่มคำสั่งภายใต้ทรานแซกชันจะถูกประมวลผลเสมือนเป็นคำสั่งเดียวกัน
2. Consistency คือ ความถูกต้องของข้อมูล : การทำงานของทรานแซกชันไม่ว่าจะสำเร็จหรือล้มเหลว ข้อมูลจะต้องสอดคล้องกันเสมอ
3. Isolation คือ การทำงานที่เป็นอิสระแกกัน : การทำงานของทรานแซกซันแต่ละทรานแซกชันจะเป็นอิสระจากกัน ข้อมูลที่ถูกปรับปรุงในทรานแซกชันหนึ่งจะไม่มีผลกันอีกทรานแซกชันหนึ่ง
4. Durability คือ ความคงอยู่ : ข้อมูลทั้งหมดจะคงอยู่หลังจากผ่านการคอมมิตทรานแซกชันแล้ว (commit transaction) ไม่ว่าจะเกิดเหตุการณ์ ระเบิดภูเขา เผากระท่อม หรืออื่น ๆ ก็ตาม
ตัวอย่าง การเขียนคำสั่งจัดการ Transaction ด้วยภาษา VB.Net
ให้ทำการสร้างฐานข้อมูลภายใต้ SQL Server 2008 และตารางข้อมูล พร้อมทั้งเพิ่มข้อมูลเข้าสู่ตาราง ดังนี้ (เปิดหน้าต่าง New Query ใน SQL Server 2008 แล้วป้อนคำสั่งตามตัวอย่างด้านล่าง)
CREATE DATABASE myDATA
GO
CREATE TABLE tblBankAccount (
[ACC_NO] [varchar](10) NOT NULL PRIMARY KEY,
[ACC_NAME] [varchar](50) NULL,
[AMOUNT] [money])
GO
INSERT INTO tblBankAccount (ACC_NO,ACC_NAME,AMOUNT)
VALUES('111','Kasem',50000)
INSERT INTO tblBankAccount (ACC_NO,ACC_NAME,AMOUNT)
VALUES('222','Mesak',100)
ทำการเขียนโปรแกรมด้วย VB.Net
1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project....
เลือก Visual Basic -> Windows -> Windows Forms Application
ที่ช่อง Name ป้อน myTransaction
จากนั้นคลิกปุ่ม OK
2. ที่ฟอร์ม ให้เพิ่มคอนโทร Button1 และ DataGridView ตามตัวอย่าง ดังภาพ
3. ให้ดับเบิลคลิกที่ฟอร์ม หรือ ปุ่ม Button1 แล้วป้อนคำสั่ง ดังนี้
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Dim strConn As String = "Data Source=.\SQLEXPRESS;Initial Catalog=myData;Integrated Security=SSPI;"
'Data Source เปลี่ยนตามเครื่องที่ติดต่อ
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Button1.Text = "คลิกเพื่อปรับปรุงยอดโอนเงิน"
Button1.Width = 200
DisplayData()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using objCS = New SqlConnection(strConn)
objCS.Open()
'คำสั่งจัดการ Transaction
Dim nTR As SqlTransaction
nTR = objCS.BeginTransaction
Try
'ปรับปรุงข้อมูลชุดแรก ภายใต้ทรานแซกชัน nTR
Dim strSQL1 As String = "UPDATE tblBankAccount SET Amount = Amount - 100 WHERE Acc_no = '111'"
Dim objSQL1 As New SqlCommand(strSQL1, objCS, nTR)
objSQL1.ExecuteNonQuery()
'ปรับปรุงข้อมูลชุดที่สอง ภายใต้ทรานแซกชัน nTR
Dim strSQL2 As String = "UPDATE tblBankAccount SET Amount = Amount + 100 WHERE Acc_no = '222'"
Dim objSQL2 As New SqlCommand(strSQL2, objCS, nTR)
objSQL2.ExecuteNonQuery()
'เมื่อข้อมูลถูกปรับปรุงทั้งหมดเรียบร้อยแล้วทำการ คอมมิตทรานแซกชัน
nTR.Commit()
Catch ex As Exception
'หากเกิดข้อผิดพลาก ให้ทำการโรลแบ็ก
nTR.Rollback()
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK)
End Try
End Using
DisplayData()
End Sub
Sub DisplayData()
' นำข้อมูลจากตาราง tblBankAccount มาแสดงในกริด
Using objCS = New SqlConnection(strConn)
Dim objDS As New DataSet()
Dim objDA = New SqlDataAdapter()
objDA.SelectCommand = New SqlCommand("SELECT * FROM tblBankAccount", objCS)
objDS.Clear()
objDA.Fill(objDS, "tblBankAccount")
DataGridView1.DataSource = objDS.Tables(0)
End Using
End Sub
End Class
4. จากนั้นกดปุ่ม F5 เพื่อทำการ Run แล้วลองทดสอบ ตามภาพ
ข้อควรระวัง การใช้ทรานแซกชันระบบฐานข้อมูลจะทำการล็อกตารางที่อยู่ภายใต้ทรานแซกชัน ดังนั้นเวลาใช้ควรทำให้เสร็จในคราวเดียวกัน อย่าเปิดทรานแซกชันค้างไว้ โดยไม่ทำการ commit หรือ rollback
ขอส่งกำลังใจให้กับทหารกล้า ที่ปกป้องประเทศ ทุก ๆ ท่าน
03 กุมภาพันธ์ 2554
VB.Net Google Translator
Google ได้ทำการวิจัยและผลิตผลงานออกมาให้เราใช้งานอย่างมากมาย แถมยังได้สร้าง API สำหรับผลงานที่ผลิตขึ้นมาซึ่งมีมากมาย สำหรับบทความนี้ก็จะยกตัวอย่าง API ของตัวแปลภาษา (Google Translate) ซึ่งใช้แปลภาษาต่าง ๆ เพื่อให้เราทั้งหลายนำไปเขียนโปรแกรมต่อยอด ซึ่งก็ไม่มีอะไซับซ้อน
Download API ของ Google Translate
เราต้องเข้าไปทำการดาวน์โหลด API มาเก็บไว้ที่เครื่องเราก่อน ที่เว็บไซต์ http://code.google.com/p/google-api-for-dotnet/downloads/list จะมี API ให้เลือกหลายรุ่น แนะนำให้ download ไฟล์ชื่อ
Download API ของ Google Translate
เราต้องเข้าไปทำการดาวน์โหลด API มาเก็บไว้ที่เครื่องเราก่อน ที่เว็บไซต์ http://code.google.com/p/google-api-for-dotnet/downloads/list จะมี API ให้เลือกหลายรุ่น แนะนำให้ download ไฟล์ชื่อ
| GoogleTranslateAPI_0.4_alpha.zip |
| จากนั้นทำการแตกไฟล์ ออกมาไว้ที่ floder ที่ต้องการ (แล้วจำไว้ด้วยว่าเก็บไว้ที่ไหน) เขียนโปรแกรมด้วย VB.Net 1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project.... เลือก Visual Basic -> Windows -> Windows Forms Application ที่ช่อง Name ป้อน GooPlae (อ่านว่า กูแปล) จากนั้นคลิกปุ่ม OK 2. ทำการ Add Reference โดยไปที่เมนู Project -> Add Reference.... ที่หน้าต่าง Add Reference ให้คลิกที่แทป Browse แล้วเลือก GoogleTranslateAPI.dll ที่เรา Download และทำการ Unzipไว้ตอนแรก (จะเก็บอยู่ภายใต้ Floder ที่เรา Unzip จะอยู่ที่ bin -> DotNet) 3. ที่ Form1 ให้เพิ่มคอนโทรล ลงในฟอร์ม ดังภาพ 4. ทำการเขียนคำสั่ง โดย double click ที่ฟอร์ม แล้วป้อนคำสั่งดังนี้ Imports Google.API.Translate
Imports System.Data
Public Class Form1
Private gooplae1 As New TranslateClient("")
Private dt As New Data.DataTable("FromCountry")
Private dt1 As New Data.DataTable("ToCountry")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dt.Columns.Add("CountryCode", GetType(System.String))
dt.Columns.Add("CountryName", GetType(System.String))
dt.Rows.Add(New Object() {"af", "AFRIKAANS"})
dt.Rows.Add(New Object() {"sq", "ALBANIAN"})
dt.Rows.Add(New Object() {"am", "AMHARIC"})
dt.Rows.Add(New Object() {"ar", "ARABIC"})
dt.Rows.Add(New Object() {"hy", "ARMENIAN"})
dt.Rows.Add(New Object() {"az", "AZERBAIJANI"})
dt.Rows.Add(New Object() {"eu", "BASQUE"})
dt.Rows.Add(New Object() {"be", "BELARUSIAN"})
dt.Rows.Add(New Object() {"bn", "BENGALI"})
dt.Rows.Add(New Object() {"bh", "BIHARI"})
dt.Rows.Add(New Object() {"br", "BRETON"})
dt.Rows.Add(New Object() {"bg", "BULGARIAN"})
dt.Rows.Add(New Object() {"my", "BURMESE"})
dt.Rows.Add(New Object() {"ca", "CATALAN"})
dt.Rows.Add(New Object() {"chr", "CHEROKEE"})
dt.Rows.Add(New Object() {"zh", "CHINESE"})
dt.Rows.Add(New Object() {"zh-CN", "CHINESE_SIMPLIFIED"})
dt.Rows.Add(New Object() {"zh-TW", "CHINESE_TRADITIONAL"})
dt.Rows.Add(New Object() {"co", "CORSICAN"})
dt.Rows.Add(New Object() {"hr", "CROATIAN"})
dt.Rows.Add(New Object() {"cs","CZECH"})
dt.Rows.Add(New Object() {"dv", "DHIVEHI"})
dt.Rows.Add(New Object() {"nl", "DUTCH"})
dt.Rows.Add(New Object() {"en", "ENGLISH"})
dt.Rows.Add(New Object() {"eo", "ESPERANTO"})
dt.Rows.Add(New Object() {"et", "ESTONIAN"})
dt.Rows.Add(New Object() {"fo", "FAROESE"})
dt.Rows.Add(New Object() {"tl", "FILIPINO"})
dt.Rows.Add(New Object() {"fi", "FINNISH"})
dt.Rows.Add(New Object() {"fr", "FRENCH"})
dt.Rows.Add(New Object() {"fy", "FRISIAN"})
dt.Rows.Add(New Object() {"gl", "GALICIAN"})
dt.Rows.Add(New Object() {"ka", "GEORGIAN"})
dt.Rows.Add(New Object() {"de", "GERMAN"})
dt.Rows.Add(New Object() {"el", "GREEK"})
dt.Rows.Add(New Object() {"gu", "GUJARATI"})
dt.Rows.Add(New Object() {"ht", "HAITIAN_CREOLE"})
dt.Rows.Add(New Object() {"iw", "HEBREW"})
dt.Rows.Add(New Object() {"hi", "HINDI"})
dt.Rows.Add(New Object() {"hu", "HUNGARIAN"})
dt.Rows.Add(New Object() {"is", "ICELANDIC"})
dt.Rows.Add(New Object() {"id", "INDONESIAN"})
dt.Rows.Add(New Object() {"iu", "INUKTITUT"})
dt.Rows.Add(New Object() {"ga", "IRISH"})
dt.Rows.Add(New Object() {"it", "ITALIAN"})
dt.Rows.Add(New Object() {"ja", "JAPANESE"})
dt.Rows.Add(New Object() {"jw", "JAVANESE"})
dt.Rows.Add(New Object() {"kn", "KANNADA"})
dt.Rows.Add(New Object() {"kk", "KAZAKH"})
dt.Rows.Add(New Object() {"km", "KHMER"})
dt.Rows.Add(New Object() {"ko", "KOREAN"})
dt.Rows.Add(New Object() {"ku", "KURDISH"})
dt.Rows.Add(New Object() {"ky", "KYRGYZ"})
dt.Rows.Add(New Object() {"lo", "LAO"})
dt.Rows.Add(New Object() {"la", "LATIN"})
dt.Rows.Add(New Object() {"lv", "LATVIAN"})
dt.Rows.Add(New Object() {"lt", "LITHUANIAN"})
dt.Rows.Add(New Object() {"lb", "LUXEMBOURGISH"})
dt.Rows.Add(New Object() {"mk", "MACEDONIAN"})
dt.Rows.Add(New Object() {"ms", "MALAY"})
dt.Rows.Add(New Object() {"ml", "MALAYALAM"})
dt.Rows.Add(New Object() {"mt", "MALTESE"})
dt.Rows.Add(New Object() {"mi", "MAORI"})
dt.Rows.Add(New Object() {"mr", "MARATHI"})
dt.Rows.Add(New Object() {"mn", "MONGOLIAN"})
dt.Rows.Add(New Object() {"ne", "NEPALI"})
dt.Rows.Add(New Object() {"no", "NORWEGIAN"})
dt.Rows.Add(New Object() {"oc", "OCCITAN"})
dt.Rows.Add(New Object() {"or", "ORIYA"})
dt.Rows.Add(New Object() {"ps", "PASHTO"})
dt.Rows.Add(New Object() {"fa", "PERSIAN"})
dt.Rows.Add(New Object() {"pl", "POLISH"})
dt.Rows.Add(New Object() {"pt", "PORTUGUESE"})
dt.Rows.Add(New Object() {"pt-PT", "PORTUGUESE_PORTUGAL"})
dt.Rows.Add(New Object() {"pa", "PUNJABI"})
dt.Rows.Add(New Object() {"qu", "QUECHUA"})
dt.Rows.Add(New Object() {"ro", "ROMANIAN"})
dt.Rows.Add(New Object() {"ru", "RUSSIAN"})
dt.Rows.Add(New Object() {"sa", "SANSKRIT"})
dt.Rows.Add(New Object() {"gd", "SCOTS_GAELIC"})
dt.Rows.Add(New Object() {"sr", "SERBIAN"})
dt.Rows.Add(New Object() {"sd", "SINDHI"})
dt.Rows.Add(New Object() {"si", "SINHALESE"})
dt.Rows.Add(New Object() {"sk", "SLOVAK"})
dt.Rows.Add(New Object() {"sl", "SLOVENIAN"})
dt.Rows.Add(New Object() {"es", "SPANISH"})
dt.Rows.Add(New Object() {"su", "SUNDANESE"})
dt.Rows.Add(New Object() {"sw", "SWAHILI"})
dt.Rows.Add(New Object() {"sv", "SWEDISH"})
dt.Rows.Add(New Object() {"syr", "SYRIAC"})
dt.Rows.Add(New Object() {"tg", "TAJIK"})
dt.Rows.Add(New Object() {"ta", "TAMIL"})
dt.Rows.Add(New Object() {"tt", "TATAR"})
dt.Rows.Add(New Object() {"te", "TELUGU"})
dt.Rows.Add(New Object() {"th", "THAI"})
dt.Rows.Add(New Object() {"bo", "TIBETAN"})
dt.Rows.Add(New Object() {"to", "TONGA"})
dt.Rows.Add(New Object() {"tr", "TURKISH"})
dt.Rows.Add(New Object() {"uk", "UKRAINIAN"})
dt.Rows.Add(New Object() {"ur", "URDU"})
dt.Rows.Add(New Object() {"uz", "UZBEK"})
dt.Rows.Add(New Object() {"ug", "UIGHUR"})
dt.Rows.Add(New Object() {"vi", "VIETNAMESE"})
dt.Rows.Add(New Object() {"cy", "WELSH"})
dt.Rows.Add(New Object() {"yi", "YIDDISH"})
dt.Rows.Add(New Object() {"yo", "YORUBA"})
With ComboBox1
.DataSource = dt
.DisplayMember = "CountryName"
.ValueMember = "CountryCode"
.SelectedValue = "en"
End With
dt1 = dt.Copy() ' Copy DataTable
With ComboBox2
.DataSource = dt1
.DisplayMember = "CountryName"
.ValueMember = "CountryCode"
.SelectedValue = "th"
End With
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text = "" Then
MessageBox.Show("Please Enter text", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBox1.Focus()
Return
End If
Try
TextBox2.Text = gooplae1.Translate(TextBox1.Text, ComboBox1.SelectedValue, ComboBox2.SelectedValue)
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
End Class 5. จากนั้นทำการ run โปรแกรมโดยกดปุ่ม F5 แล้วทดสอบการแปล หมายเหตุ ในการแปลของ Google Translate จำเป็นต้องเข้าสู่ระบบอินเตอร์เน็ตก่อนทุกครั้ง ตรุษจีน รวย รวย วันตรุษจีน มีทุกปี รวย ทุกปี ชอบบทความ อย่าลืมคลิกโฆษณา |
21 มกราคม 2554
VB.Net WMI สร้างคลาสแสดงรายละเอียดของคอมพิวเตอร์กับ WIN32
WMI หรือ Windows Management Instrumentation เป็นตัวจัดการโครงสร้างข้อมูลพื้นฐานและการดำเนินงานต่าง ๆ ภายใต้ระบบบฎิบัติการวินโดวส์ หรือเรียกง่ายๆ มันคือคลาสที่ใช้จัดการทุกเรื่องของวินโดวส์ สำหรับบทความนี้จะนำเสนอเสี้ยวหนึ่งของ WMI ที่เกี่ยวข้องกับ WIN32 โดยจะยกตัวอย่างโปรแกรม แสดงรายละเอียดต่าง ๆ ของระบบปฎิบัติการ และคอมพิวเตอร์ (hardware)
1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project....
เลือก Visual Basic -> Windows -> Windows Forms Application
ที่ช่อง Name ป้อน mySysInfo
2. จากนั้นให้เพิ่มคอนโทรล Button กับ Textbox ลงใน Form1 ดังภาพ
3. จากนั้นทำการเพิ่ม Reference สำหรับ WMI โดยไปที่เมนู Project -> Add Reference...
จะปรากฎหน้าจอดังภาพด้านล่าง
ให้เลือก System.Management แล้วคลิกปุ่ม OK
4. ทำการสร้างคลาส โดยไปที่เมนู Project -> Add New Item...จากนั้นคลิกเลือก Class ที่ช่อง Name ป้อนชื่อโปรแกรม myWMI.vb
5. ที่หน้าจอเขียนโปรแกรม myWMI.vb ให้ป้อนคำสั่งตามตัวอย่างด้านล่าง
Imports System.Management
Public Class myWMI
Private objOS As ManagementObjectSearcher
Private objCS As ManagementObjectSearcher
Private m_strComputerName As String
Private m_strManufacturer As String
Private m_StrModel As String
Private m_strOSName As String
Private m_strOSVersion As String
Private m_strSystemType As String
Private m_strTPM As String
Private m_strWindowsDir As String
Public Sub New()
Dim objMgmt As ManagementObject
objOS = New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
objCS = New ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem")
For Each objMgmt In objOS.Get
m_strOSName = objMgmt("name").ToString()
m_strOSVersion = objMgmt("version").ToString()
m_strComputerName = objMgmt("csname").ToString()
m_strWindowsDir = objMgmt("windowsdirectory").ToString()
Next
For Each objMgmt In objCS.Get
m_strManufacturer = objMgmt("manufacturer").ToString()
m_StrModel = objMgmt("model").ToString()
m_strSystemType = objMgmt("systemtype").ToString
m_strTPM = objMgmt("totalphysicalmemory").ToString()
Next
End Sub
Public ReadOnly Property ComputerName()
Get
ComputerName = m_strComputerName
End Get
End Property
Public ReadOnly Property Manufacturer()
Get
Manufacturer = m_strManufacturer
End Get
End Property
Public ReadOnly Property Model()
Get
Model = m_StrModel
End Get
End Property
Public ReadOnly Property OsName()
Get
OsName = m_strOSName
End Get
End Property
Public ReadOnly Property OSVersion()
Get
OSVersion = m_strOSVersion
End Get
End Property
Public ReadOnly Property SystemType()
Get
SystemType = m_strSystemType
End Get
End Property
Public ReadOnly Property TotalPhysicalMemory()
Get
TotalPhysicalMemory = m_strTPM
End Get
End Property
Public ReadOnly Property WindowsDirectory()
Get
WindowsDirectory = m_strWindowsDir
End Get
End Property
End Class
6. จากนั้นย้อนกลับไปยังหน้าจอ Form1 ให้ Double Click ที่ปุ่ม Button1 เพื่อเข้าไปเขียนคำสั่ง จากนั้นให้ป้อนคำสั่งดังนี้
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim SHOW_SPEC As New myWMI
With SHOW_SPEC
TextBox1.Text = "COMPUTER NAME : " & .ComputerName & vbCrLf & _
"MODEL : " & .Model & vbCrLf & _
"MANUFACTURER : " & .Manufacturer & vbCrLf & _
"SYSTEM TYPE : " & .SystemType & vbCrLf & _
"OS : " & .OsName & vbCrLf & _
"OS VERSION : " & .OSVersion & vbCrLf & _
"WINDOWS DIRECTORY : " & .WindowsDirectory & vbCrLf & _
"TOTAL MEMORY : " & .TotalPhysicalMemory
End With
End Sub
End Class
7. ทำการบันทึกแล้วกดปุ่ม F5 เพื่อสั่งรันโปรแกรม จะปรากฎฟอร์ม ให้คลิกปุ่ม Button1 จะแสดงรายละเอียดของเครื่องลักษณะดังภาพ
จริง ๆ รายละเอียดต่าง ๆ ที่แสดงอยู่ ยังไม่หมดเพียงเท่านี้ ผู้อ่านสามารถแสดงสิ่งต่าง ๆ ได้อีกมากมาย อยากรู้ให้คลิกเข้าไปดูที่ WMI Classes -> Win32 Classes
http://msdn.microsoft.com/en-us/library/aa394084%28v=VS.85%29.aspx
... อย่าเพิ่งเกาหัว และก็อย่าเพิ่งถามว่า แล้วจะใช้อย่างไร.... คำตอบมีอยู่ด้านล่างนี้แหละ
ย้อนกลับไปข้อ 5 ยังจำได้ไหมว่าเราได้สร้างคลาส myWMI.vb ดังนี้
Imports System.Management
Public Class myWMI
Private objOS As ManagementObjectSearcher ' ตัวแปร objOS สำหรับเก็บค่า OS
....
มีการสร้าง ตัวแปร property ด้วยคำสั่ง
Private m_strComputerName As String ' ตัวแปรสำหรับใช้ใน proerty ชือ ComputerName
Private m_strManufacturer As String ' ตัวแปรสำหรับใช้ใน proerty ชือ Manufacturer
.....
แล้วก็สร้าง property แบบ อ่านได้อย่างเดียวตามตัวแปรที่กำหนด
Public ReadOnly Property ComputerName()
Get
ComputerName = m_strComputerName ' ตัวแปร property ที่กำหนดไว้ก่อนหน้า
End Get
End Property
Public ReadOnly Property Manufacturer()
Get
Manufacturer = m_strManufacturer ' ตัวแปร property ที่กำหนดไว้ก่อนหน้า
End Get
End Property
จากนั้นมีการสร้าง Constructors เพื่ออ่านค่าของ WIN32 Class ที่เราต้องการ เช่น คลาส Win32_OperatingSystem
??? แล้ว Constructors มันคืออะไร มันคือ Sub New() .... End Sub
??? แล้ว Constructors เอาไว้ทำอะไร Sub New จะทำงานเองโดยอัตโนมัติเมื่อมีการสร้างวัตถุขึ้นมาจากคลาส เช่น
Dim SHOW_SPEC As New myWMI
จากคำสั่งข้างต้น Sub New()....End Sub หรือ Constructors มันจะทำงานอัตโนมัติ (ถ้ามองให้ดี ๆ คล้าย ๆ กับ Form -> Load ที่เกิดขึ้นอัตโนมัติตอนเปิดฟอร์ม)
ดังนั้น เมื่อเราต้องการดึงค่า WIN32_OperatingSystem หรือค่า WIN32 อื่น ๆ เราจึงต้องทำใน Constructors นี้ .... เข้าใจหรือยังครับ....
จากตัวอย่าง
Public Sub New()
Dim objMgmt As ManagementObject
objOS = New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
objCS = New ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem")
For Each objMgmt In objOS.Get
m_strOSName = objMgmt("name").ToString()
m_strOSVersion = objMgmt("version").ToString()
m_strComputerName = objMgmt("csname").ToString()
m_strWindowsDir = objMgmt("windowsdirectory").ToString()
Next
.....
.....
End Sub
คำสั่งข้างต้นจะมีการอ่านค่าแล้วมาเก็บไว้ใน property ที่สร้างเตรียมไว้แล้ว
แล้ว SELECT * FROM Win32_OperatingSystem มาได้อย่างไร
จริงๆ มันคือการคิวรี ค่าจากคลาส Win32 ในส่วนของ OperatingSystem
แล้วถ้าเป็นคลาสอื่นล่ะจะไปหามาจากไหนได้อย่างไร
หาไม่ยาก ก็อยู่ใน MSDN ของ Microsoft ที่ผู้เขียนแสดงชื่อ web ไว้ให้แล้ว
เช่น เราต้องการดู BIOS จะทำอย่างไร ก็เข้าไปที่ MSDN ของ Microsoft ในส่วนของ Win32_BIOS
http://msdn.microsoft.com/en-us/library/aa394077%28v=VS.85%29.aspx
คลิกแล้วจะแสดงหน้าตาดังภาพ
ถ้าเราต้องการดู SerialNumber ของ BIOS ตามลูกศรชี เราจะต้อง
1. สร้างตัวแปรสำหรับเก็บค่าของคิวรี SELECT ...
Private objBIOS As ManagementObjectSearcher
จากนั้นก็สั่งคิวรีข้อมูลจาก คลาส Win32_BIOS ชื่อจะตรงกับคลาสที่เราเปิดดูใน MSDN
objBIOS = New ManagementObjectSearcher("SELECT * FROM Win32_BIOS")
2. สร้างตัวแปร property ดังนี้
Private m_strBIOSSerialNumber As String ' ประเภทของข้อมูลต้องตรงกัน
3. อ่านค่าจาก objBIOS ซึ่งได้คิวรีข้อมูลมาจาก Win32_BIOS
For Each objMgmt In objBIOS.Get
m_strBIOSSerialNumber = objMgmt("SerialNumber").ToString()
Next
' SerialNumber ชื่อจะตรงกับค่าที่แสดงอยู่ใน MSDN
4. สร้าง property ดังนี้
Public ReadOnly Property BIOSSerialNumber()
Get
BIOSSerialNumber = m_strBIOSSerialNumber
End Get
End Property
มาถึงตรงนี้เราคงได้วิธีทำอะไรอื่น ๆ อีกมากมาย
ถ้าอยากรู้ Serial Number ของ Harddisk ก็ไม่ยากแล้วใช่หรือไม่ ....
อยากรู้อะไร WIN32 ทำได้หมด ถามถึงหวย ก็บอกได้จะเอาเบอร์อะไร
:-p
1. เปิด Visual Studio 20xx จากนั้นคลิกเลือก New Project....
เลือก Visual Basic -> Windows -> Windows Forms Application
ที่ช่อง Name ป้อน mySysInfo
2. จากนั้นให้เพิ่มคอนโทรล Button กับ Textbox ลงใน Form1 ดังภาพ
3. จากนั้นทำการเพิ่ม Reference สำหรับ WMI โดยไปที่เมนู Project -> Add Reference...
จะปรากฎหน้าจอดังภาพด้านล่าง
ให้เลือก System.Management แล้วคลิกปุ่ม OK
4. ทำการสร้างคลาส โดยไปที่เมนู Project -> Add New Item...จากนั้นคลิกเลือก Class ที่ช่อง Name ป้อนชื่อโปรแกรม myWMI.vb
5. ที่หน้าจอเขียนโปรแกรม myWMI.vb ให้ป้อนคำสั่งตามตัวอย่างด้านล่าง
Imports System.Management
Public Class myWMI
Private objOS As ManagementObjectSearcher
Private objCS As ManagementObjectSearcher
Private m_strComputerName As String
Private m_strManufacturer As String
Private m_StrModel As String
Private m_strOSName As String
Private m_strOSVersion As String
Private m_strSystemType As String
Private m_strTPM As String
Private m_strWindowsDir As String
Public Sub New()
Dim objMgmt As ManagementObject
objOS = New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
objCS = New ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem")
For Each objMgmt In objOS.Get
m_strOSName = objMgmt("name").ToString()
m_strOSVersion = objMgmt("version").ToString()
m_strComputerName = objMgmt("csname").ToString()
m_strWindowsDir = objMgmt("windowsdirectory").ToString()
Next
For Each objMgmt In objCS.Get
m_strManufacturer = objMgmt("manufacturer").ToString()
m_StrModel = objMgmt("model").ToString()
m_strSystemType = objMgmt("systemtype").ToString
m_strTPM = objMgmt("totalphysicalmemory").ToString()
Next
End Sub
Public ReadOnly Property ComputerName()
Get
ComputerName = m_strComputerName
End Get
End Property
Public ReadOnly Property Manufacturer()
Get
Manufacturer = m_strManufacturer
End Get
End Property
Public ReadOnly Property Model()
Get
Model = m_StrModel
End Get
End Property
Public ReadOnly Property OsName()
Get
OsName = m_strOSName
End Get
End Property
Public ReadOnly Property OSVersion()
Get
OSVersion = m_strOSVersion
End Get
End Property
Public ReadOnly Property SystemType()
Get
SystemType = m_strSystemType
End Get
End Property
Public ReadOnly Property TotalPhysicalMemory()
Get
TotalPhysicalMemory = m_strTPM
End Get
End Property
Public ReadOnly Property WindowsDirectory()
Get
WindowsDirectory = m_strWindowsDir
End Get
End Property
End Class
6. จากนั้นย้อนกลับไปยังหน้าจอ Form1 ให้ Double Click ที่ปุ่ม Button1 เพื่อเข้าไปเขียนคำสั่ง จากนั้นให้ป้อนคำสั่งดังนี้
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim SHOW_SPEC As New myWMI
With SHOW_SPEC
TextBox1.Text = "COMPUTER NAME : " & .ComputerName & vbCrLf & _
"MODEL : " & .Model & vbCrLf & _
"MANUFACTURER : " & .Manufacturer & vbCrLf & _
"SYSTEM TYPE : " & .SystemType & vbCrLf & _
"OS : " & .OsName & vbCrLf & _
"OS VERSION : " & .OSVersion & vbCrLf & _
"WINDOWS DIRECTORY : " & .WindowsDirectory & vbCrLf & _
"TOTAL MEMORY : " & .TotalPhysicalMemory
End With
End Sub
End Class
7. ทำการบันทึกแล้วกดปุ่ม F5 เพื่อสั่งรันโปรแกรม จะปรากฎฟอร์ม ให้คลิกปุ่ม Button1 จะแสดงรายละเอียดของเครื่องลักษณะดังภาพ
จริง ๆ รายละเอียดต่าง ๆ ที่แสดงอยู่ ยังไม่หมดเพียงเท่านี้ ผู้อ่านสามารถแสดงสิ่งต่าง ๆ ได้อีกมากมาย อยากรู้ให้คลิกเข้าไปดูที่ WMI Classes -> Win32 Classes
http://msdn.microsoft.com/en-us/library/aa394084%28v=VS.85%29.aspx
... อย่าเพิ่งเกาหัว และก็อย่าเพิ่งถามว่า แล้วจะใช้อย่างไร.... คำตอบมีอยู่ด้านล่างนี้แหละ
ย้อนกลับไปข้อ 5 ยังจำได้ไหมว่าเราได้สร้างคลาส myWMI.vb ดังนี้
Imports System.Management
Public Class myWMI
Private objOS As ManagementObjectSearcher ' ตัวแปร objOS สำหรับเก็บค่า OS
....
มีการสร้าง ตัวแปร property ด้วยคำสั่ง
Private m_strComputerName As String ' ตัวแปรสำหรับใช้ใน proerty ชือ ComputerName
Private m_strManufacturer As String ' ตัวแปรสำหรับใช้ใน proerty ชือ Manufacturer
.....
แล้วก็สร้าง property แบบ อ่านได้อย่างเดียวตามตัวแปรที่กำหนด
Public ReadOnly Property ComputerName()
Get
ComputerName = m_strComputerName ' ตัวแปร property ที่กำหนดไว้ก่อนหน้า
End Get
End Property
Public ReadOnly Property Manufacturer()
Get
Manufacturer = m_strManufacturer ' ตัวแปร property ที่กำหนดไว้ก่อนหน้า
End Get
End Property
จากนั้นมีการสร้าง Constructors เพื่ออ่านค่าของ WIN32 Class ที่เราต้องการ เช่น คลาส Win32_OperatingSystem
??? แล้ว Constructors มันคืออะไร มันคือ Sub New() .... End Sub
??? แล้ว Constructors เอาไว้ทำอะไร Sub New จะทำงานเองโดยอัตโนมัติเมื่อมีการสร้างวัตถุขึ้นมาจากคลาส เช่น
Dim SHOW_SPEC As New myWMI
จากคำสั่งข้างต้น Sub New()....End Sub หรือ Constructors มันจะทำงานอัตโนมัติ (ถ้ามองให้ดี ๆ คล้าย ๆ กับ Form -> Load ที่เกิดขึ้นอัตโนมัติตอนเปิดฟอร์ม)
ดังนั้น เมื่อเราต้องการดึงค่า WIN32_OperatingSystem หรือค่า WIN32 อื่น ๆ เราจึงต้องทำใน Constructors นี้ .... เข้าใจหรือยังครับ....
จากตัวอย่าง
Public Sub New()
Dim objMgmt As ManagementObject
objOS = New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
objCS = New ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem")
For Each objMgmt In objOS.Get
m_strOSName = objMgmt("name").ToString()
m_strOSVersion = objMgmt("version").ToString()
m_strComputerName = objMgmt("csname").ToString()
m_strWindowsDir = objMgmt("windowsdirectory").ToString()
Next
.....
.....
End Sub
คำสั่งข้างต้นจะมีการอ่านค่าแล้วมาเก็บไว้ใน property ที่สร้างเตรียมไว้แล้ว
แล้ว SELECT * FROM Win32_OperatingSystem มาได้อย่างไร
จริงๆ มันคือการคิวรี ค่าจากคลาส Win32 ในส่วนของ OperatingSystem
แล้วถ้าเป็นคลาสอื่นล่ะจะไปหามาจากไหนได้อย่างไร
หาไม่ยาก ก็อยู่ใน MSDN ของ Microsoft ที่ผู้เขียนแสดงชื่อ web ไว้ให้แล้ว
เช่น เราต้องการดู BIOS จะทำอย่างไร ก็เข้าไปที่ MSDN ของ Microsoft ในส่วนของ Win32_BIOS
http://msdn.microsoft.com/en-us/library/aa394077%28v=VS.85%29.aspx
คลิกแล้วจะแสดงหน้าตาดังภาพ
ถ้าเราต้องการดู SerialNumber ของ BIOS ตามลูกศรชี เราจะต้อง
1. สร้างตัวแปรสำหรับเก็บค่าของคิวรี SELECT ...
Private objBIOS As ManagementObjectSearcher
จากนั้นก็สั่งคิวรีข้อมูลจาก คลาส Win32_BIOS ชื่อจะตรงกับคลาสที่เราเปิดดูใน MSDN
objBIOS = New ManagementObjectSearcher("SELECT * FROM Win32_BIOS")
2. สร้างตัวแปร property ดังนี้
Private m_strBIOSSerialNumber As String ' ประเภทของข้อมูลต้องตรงกัน
3. อ่านค่าจาก objBIOS ซึ่งได้คิวรีข้อมูลมาจาก Win32_BIOS
For Each objMgmt In objBIOS.Get
m_strBIOSSerialNumber = objMgmt("SerialNumber").ToString()
Next
' SerialNumber ชื่อจะตรงกับค่าที่แสดงอยู่ใน MSDN
4. สร้าง property ดังนี้
Public ReadOnly Property BIOSSerialNumber()
Get
BIOSSerialNumber = m_strBIOSSerialNumber
End Get
End Property
มาถึงตรงนี้เราคงได้วิธีทำอะไรอื่น ๆ อีกมากมาย
ถ้าอยากรู้ Serial Number ของ Harddisk ก็ไม่ยากแล้วใช่หรือไม่ ....
อยากรู้อะไร WIN32 ทำได้หมด ถามถึงหวย ก็บอกได้จะเอาเบอร์อะไร
:-p
09 มกราคม 2554
เรียนภาษาอังกฤษ กับ Voice of America (VOA)
แนะนำ เว็บเรียนภาษาอังกฤษ จากเจ้าของภาษา ที่
http://www.voanews.com/learningenglish/theclassroom/activities/
http://www.voanews.com/learningenglish/theclassroom/activities/
07 มกราคม 2554
VB.Net Game BINGO พูดได้นะจะบอกให้
Game BINGO เป็นตัวอย่างของโปรเจกต์ ที่ผู้เขียนไม่ได้ตั้งใจนำเสนอการเขียนเกมส์หรอก จริง ๆ ต้องการนำเสนอวิธีการสร้างออปเจกต์ ขณะรันโปรแกรม (Runtime) ซึ่งปกติเราจะใช้วิธีลาก คอนโทรลของ .Net มาวาง ๆ ๆ บนฟอร์มที่เราสร้างขึ้น
แต่ในบางครั้งเราจำเป็นต้องสร้างออปเจกต์ แบบอัตโนมัติ พร้อมทั้งสามารถเชื่อมโยงไปยัง เหตุการณ์ (event) ที่เราต้องการ โดยผ่านคำสั่ง เช่น
AddHandler btnNew.MouseClick, AddressOf btnNew_Click
แล้วก็มีเรื่องของการอ้าง property ในแบบอาศัยตัวแปรแทนชื่อที่กำหนดไว้ เช่น
Me.Controls("Label" & RandomNumber.ToString).Enabled = False
แถมด้วย คำสั่งที่ใช้ออกเสียงภาษาอังกฤษ โดยอาศัย API ชื่อ SAPI (S น่าจะมาจาก Speech + กับ API) มาช่วย
และอื่น ๆ อีกมากมายจากโค้ดตัวอย่างต่อไปนี้ ลองทำดู แล้วจะรู้ว่าคุณทำได้
1. สร้าง Project เป็น Windows Form Application ขึ้นมา 1 ตัว ชื่อ BINGO ดังภาพด้านล่าง

2. ที่ Form1 ให้ คลิกเมาส์ที่ฟอร์ม เร็ว ๆ สองที (double-click Mouse) จะเข้าสู่หน้าต่าง เขียนคำสั่ง ให้นำคำสั่งด้านล่างนี้ไปแทนที่ได้เลย
เผื่อเปิดโต๊ะแข่ง กับ Bingo ตามงานวัด
แต่ในบางครั้งเราจำเป็นต้องสร้างออปเจกต์ แบบอัตโนมัติ พร้อมทั้งสามารถเชื่อมโยงไปยัง เหตุการณ์ (event) ที่เราต้องการ โดยผ่านคำสั่ง เช่น
AddHandler btnNew.MouseClick, AddressOf btnNew_Click
แล้วก็มีเรื่องของการอ้าง property ในแบบอาศัยตัวแปรแทนชื่อที่กำหนดไว้ เช่น
Me.Controls("Label" & RandomNumber.ToString).Enabled = False
แถมด้วย คำสั่งที่ใช้ออกเสียงภาษาอังกฤษ โดยอาศัย API ชื่อ SAPI (S น่าจะมาจาก Speech + กับ API) มาช่วย
และอื่น ๆ อีกมากมายจากโค้ดตัวอย่างต่อไปนี้ ลองทำดู แล้วจะรู้ว่าคุณทำได้
1. สร้าง Project เป็น Windows Form Application ขึ้นมา 1 ตัว ชื่อ BINGO ดังภาพด้านล่าง

2. ที่ Form1 ให้ คลิกเมาส์ที่ฟอร์ม เร็ว ๆ สองที (double-click Mouse) จะเข้าสู่หน้าต่าง เขียนคำสั่ง ให้นำคำสั่งด้านล่างนี้ไปแทนที่ได้เลย
Public Class Form1
Private lblNumber As New Label
Private lblCounter As New Label
Private btnRandom As New Button
Private btnNew As New Button
Private totLbl As Integer = 49
Private aNewlbl(totLbl) As Label
Private nTime As Integer = 0
Private nCounter As Integer = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'
'Form
'
Me.Text = "BINGO"
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(653, 414)
'
'lblNumber
'
lblNumber.BackColor = System.Drawing.SystemColors.ActiveCaption
lblNumber.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
lblNumber.Font = New System.Drawing.Font("Microsoft Sans Serif", 72.0!, _
System.Drawing.FontStyle.Bold, _
System.Drawing.GraphicsUnit.Point, _
CType(222, Byte))
lblNumber.ForeColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), _
CType(CType(0, Byte), Integer), _
CType(CType(0, Byte), Integer))
lblNumber.Location = New System.Drawing.Point(10, 272)
lblNumber.Name = "lblNumber"
lblNumber.Size = New System.Drawing.Size(490, 106)
lblNumber.Text = "B I N G O"
lblNumber.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.Controls.Add(lblNumber)
'
'lblCounter
'
lblCounter.BackColor = System.Drawing.SystemColors.ActiveCaption
lblCounter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
lblCounter.Font = New System.Drawing.Font("Microsoft Sans Serif", 36.0!, _
System.Drawing.FontStyle.Bold, _
System.Drawing.GraphicsUnit.Point, _
CType(222, Byte))
lblCounter.ForeColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), _
CType(CType(0, Byte), Integer), _
CType(CType(0, Byte), Integer))
lblCounter.Location = New System.Drawing.Point(522, 272)
lblCounter.Name = "lblCounter"
lblCounter.Size = New System.Drawing.Size(109, 63)
lblCounter.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
Me.Controls.Add(lblCounter)
'
'btnRandom
'
btnRandom.Font = New System.Drawing.Font("Microsoft Sans Serif", 16.0!, _
System.Drawing.FontStyle.Regular, _
System.Drawing.GraphicsUnit.Point, _
CType(222, Byte))
btnRandom.Location = New System.Drawing.Point(508, 18)
btnRandom.Name = "btnRandom"
btnRandom.Size = New System.Drawing.Size(137, 39)
btnRandom.Text = "Random"
btnRandom.UseVisualStyleBackColor = True
AddHandler btnRandom.MouseClick, AddressOf btnRandom_Click
Me.Controls.Add(btnRandom)
'
'btnNew
'
btnNew.Font = New System.Drawing.Font("Microsoft Sans Serif", 16.0!, _
System.Drawing.FontStyle.Regular, _
System.Drawing.GraphicsUnit.Point, _
CType(222, Byte))
btnNew.Location = New System.Drawing.Point(508, 67)
btnNew.Name = "Button2"
btnNew.Size = New System.Drawing.Size(137, 39)
btnNew.Text = "New Game"
btnNew.UseVisualStyleBackColor = True
AddHandler btnNew.MouseClick, AddressOf btnNew_Click
Me.Controls.Add(btnNew)
'
'Label
'
Dim tt As Integer = 10
For i As Integer = 0 To totLbl
aNewlbl(i) = New Label With {.Name = "Label" & CType(i + 1, String).Trim, _
.Text = CType(i + 1, String).Trim, _
.Location = New Point(CType(((i Mod 10) * 50) + 10, Integer), CType(tt, Integer)), _
.Size = New Size(40, 40), _
.Font = New System.Drawing.Font("Microsoft Sans Serif", _
16.0!, System.Drawing.FontStyle.Bold, _
System.Drawing.GraphicsUnit.Point, _
CType(222, Byte)), _
.TextAlign = System.Drawing.ContentAlignment.MiddleCenter, _
.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle, _
.BackColor = Color.Azure}
If i Mod 10 = 9 Then
tt = tt + 50
End If
Me.Controls.Add(aNewlbl(i))
Next i
End Sub
Private Sub btnRandom_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
btnRandom.Enabled = False
btnNew.Enabled = False
nCounter = nCounter + 1
RandomNumber()
btnRandom.Enabled = True
btnNew.Enabled = True
End Sub
Private Sub btnNew_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
'Reset
nCounter = 0
lblCounter.Text = ""
lblNumber.Text = "B I N G O"
For Each ctrl As Control In Me.Controls
If TypeOf ctrl Is Label Then
If ctrl.Name <> "lblNumber" And ctrl.Name <> "lblCounter" Then
ctrl.BackColor = Color.Azure
ctrl.Enabled = True
End If
End If
Next
PlaySound("lET'S START BINGO")
End Sub
Private Sub RandomNumber()
Dim RandomClass As New Random()
Dim RandomNumber As Integer
If nCounter <= 50 Then
'Create a new Random class in VB.NET
Do While True
RandomNumber = RandomClass.Next(1, 51)
If Me.Controls("Label" & RandomNumber.ToString).Enabled = True Then
Exit Do
End If
Loop
Else
MessageBox.Show("Complete BINGO")
Return
End If
lblCounter.Text = nCounter.ToString
lblNumber.Text = RandomNumber.ToString
PlaySound("Number " & lblNumber.Text)
Me.Controls("Label" & RandomNumber.ToString).Enabled = False
Me.Controls("Label" & RandomNumber.ToString).BackColor = Color.Red
If nCounter >= 50 Then
MessageBox.Show("B I N G O Complete !!!!", "BINGO", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
Private Sub PlaySound(ByVal Word As String)
Dim SAPI
SAPI = CreateObject("SAPI.spvoice")
SAPI.speak(Word)
End Sub
End Class
แล้วลอง Run โปรเจกต์ดู จะปรากรฎหน้าตาโปรแกรม คล้าย ๆ แบบนี้ ลองเล่นดู อิๆๆเผื่อเปิดโต๊ะแข่ง กับ Bingo ตามงานวัด
สมัครสมาชิก:
บทความ (Atom)
"I Believe in You"



































