วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2551

การอ้างถึง ชื่อ dataset จะผิดพลาดไม่ได้แม้แต่ช่องว่าง

สงสัยจริงๆว่า ทำไมเรา Search หาข้อมูลไม่เจอ ทำไม Datagrid View ไม่เอาข้อมูลใน Dataset มาโชว์
ไล่ไปไล่มาจนถึงบางอ้อ ในส่วนของ Dal นั้น ผมอ้างเป็น
Dim da as new SqlDataAdpter
Dim ds As new Dataset
da.Fill(ds, " SearchData ") <--- สังเกตุได้ว่า มีเว้นวรรคหน้าหลังในเครื่องหมาย Double Quote
Return ds
แต่พอเวลาไปเรียกใช้
Dim dsSearch as Dataset
Me.dgvShow.datasource = ds.Tables("SearchData") <--- ไม่มีวรรค
เวลากด Search ปั๊ป หายยกแผง เห่อะๆ
ทีหลังอ้างชื่อให้เหมือนทุกตัวและตำแหน่งดีที่สุด

การเข้าถึง Control ของอีก คลาสนึง

กตัวอย่างฟอร์มแม่กับฟอร์มลูกละกัน อย่างฟอร์มแม่ มี Status Bar เพื่อแจ้ง UserAccount ด้านล่าง
หลังจากที่ User LogIn ( หน้าฟอร์มลูก ) เสร็จ ก็จะเอา UserName เนี่ยะ ไปใส่ไว้ใน Status Bar
ทีนี้การเข้าถึง Control ของฟอร์มแม่ก็ทำได้ดังนี้ คือเราต้อง ใช้ตัวแปร Ref
'---Fomแม่ ชื่อว่า MainForm
Dim LoginPage as New Login
LoginPage.Form1 = me '<--- ส่ง Me เข้าไปให้ตัวแปรที่ Ref ถึง form แม่
LoginPage.ShowDialog()
'---Form Login ชื่อว่า Login
Public Form1 as MainForm '<--- Ref ไปถึง ฟอร์แม่
private sub btnok_click....
dim dal as new DalUser '<--- ประกาศ Object ของฐานข้อมูล
Dim HasAccount as boolean
HasAccount = Dal.CheckLogin(me.txtusername.text, me.txtpassword.text) '--- คืนค่าเป็น boolean
if HasAccount Then
Form1.StaShowUserName.text = me.txtUserName.text '--- อ้างถึง Cotrol ในฟอร์มแม่
me.dispose()
else
messagebox.show(" ไม่พบ Account ดังกล่าวกรุณาตรวจสอบ" ,"Error")
end if
end sub
เรียบร้อยครับ หรือ อาจจะคืนค่ามาเป็น String โดยเอา User ใน ฐานข้อมูลมาก็ได้ หรือถ้าไม่อ้างถึงแบบนี้ก็ไปทำเป็น Module ก็ได้ครับ
Special Thanks
อาจารย์สุเทพ

Splash Screen แบบ Transparent บนพื้น Window

พิ่มเติมอีกนิดสำหรับการทำ Splash Screen พอได้ได้คุณ มาโคโปโล แห่ง บอร์ด GF ได้ช่วยกรุณาตอบว่า การทำ Splash Screen แบบ Transpent นั้ต้องไปกำหนดว่า ให้กำหนด Property ของ Form ที่ชื่อว่า TransparencyKey ให้เป็น สีเดียวกับ Background แล้วมันก็จะ mask ส่วนที่เป็น Background ออกไป ผมก็ลองไปนั่งๆทำ ปรากฏว่าผมเซ็ต ใน หน้าของ Form Design แล้วไม่ได้ Splash Screen หายไปท้งหน้าเลย - -" เลยเปลี่ยนเป็น code ได้ดังนี้ :: me.transparencyKey = me.backcolor ปรากฏว่าเรียบร้อย รันได้แล้วครับ Many Thanks www.greatfriends.biz Special Thanks คุณ มาโคโปโล

มาทำ splash Screen อย่างง่ายๆ

วันนี้เปิด Program Photoshop 7.0 มันจะมี screen แว๊บหนึ่งขึ้นมาก่อนที่จะเข้าโปรแกรม
ทีแรกไม่รู้หรอกเขาเรียกอะไร ก็ไป search หาคำว่า Screen ใน Gf มี แต่ไม่ใช่ แต่ก็ใกล้เคียง
เลยไปถามพี่เหมี่ยว เลยได้มาว่า มันเรียกว่า Splash Screen นั่นเอง
เริ่มแรกก็ไปสร้าง WindowForm ขึ้นมา 1 ตัว กำหนด Form Border Style เป็น None
ไปกดหนด Start Position เป็น CenterParent ( ผมทำใน Mdi Form ) เสร้จแล้วก็เอาภาพที่ตกแต่ง
มาใส่ในฟอร์ม แล้วก็โค้ดดังนี้
'--- FormLoad
For i As Double = 0.5 To 1.0 Step 0.1

My.Application.DoEvents() '--- มันจะแทรกคิวตัว me.Opacity เข้าไปเพื่อให้ Main Thread วาด Me.Opacity ก่อน

Me.Opacity = i '--- ในหน้า Design มันจะเป็น % พอโค้ดมันเป็น Double สูงสุดที่ 1.0 แปลงมาจาก % นั่นเองครับ

Nex

System.Threading.Thread.Sleep(5000) '--- เมื่อความชัด 100 % ให้อึ้งไป 5 วิ

For j As Double = 1.0 To 0.0 Step -0.05 '--- มาถึงการ Fade Out ออก ให้วิ่งทีละ 0.05

My.Application.DoEvents()

Me.Opacity = j

Next

Me.Close() '--- ปิดฟอร์มซ้า

พอเสร็จจากหน้า Splash Screen แล้วเรามาทำที่หน้า Main ( ของผมคือ ฟอร์มแม่ ( Parent ) นั่นเอง เพระผมทำเป็น Mdi ฟอร์ม )

'--- ฟอร์มแม่ Events Load

Me.Visible = False '--- ให้ซ่อนฟอร์มแม่ไว้ก่อน ตัว Splash Screen จะได้ไปโลดแล่นอยู่บนพื้น Window แทน ( ดูดีมีระดับ )

Dim a As New Screen '--- เรียกใช้งาน

a.ShowDialog() '--- แสดงผล ถึงตอนนี้มันก็ไปทำงานใน Event Load ของ Splash Screen จด มัน ปิดตัวเองไป

My.Application.DoEvents() '--- แทรก คิวให้ แสดงฟอร์มแม่ขึ้นมา

Me.Visible = True

OpenLogin() '--- อันนี้ผมให้ไป Call Method Login เป็นรายการต่อไป

--------------------

F5 ทดสอบ ซะ ทีนี้ว่าใครจะปรับให้หน่วงช้า หน่วงเร็ว ก็ไปปรับตรง Thread.Sleep ซะ หน่วยมันจะเป็น มิลลินะครับ

ส่วนความเร็วในการ Fade ก็แก้กันตามใจชอบเลยครับ ตรง Step ของ For Next

หวังว่า เป็นอีก 1 หนทางในการทำ Splash Screen ได้นะครับ ( มันสามารถทำได้หลายแบบฮับ )

Many Thanks.

www.greatfriends.biz www.codeProject.com

Special Thanks.

พี่เหมี่ยว

ทำความเข้าใจ sql กันสักหน่อย ( โง่มานาน )

หลังจากเอา Sql 2005 Express มาลง ( ทันสมัยแร้วว ) ก้ไปสร้าง Table พอมาถึง Type ของ ข้อมูล ก็นึกสงสัย ( จริงเคยอ่านเจอมาแล้ว แต่ลืมไปหมดแล้ว ) ความแตกต่างระหว่าง Char กับ NChar , Varchar กับ NVarchar ( ไม่มี N กับ มี N ) ก็ไปหาข้อมูลในเน็ต แล้วก็ไปถามพี่ที่เป็นเจ้าของเว็บ http://www.thaisql.com ( ขอบคุณมากครับ ) a ได้ใจความมาว่า Char , Varchar คือการเก็บเป็นตัวอักษร NChar , NVarchar คือการเก็บเป็น Unicode และใช้ 2 Byte ในการเก็บค่า www.thaisql.com said: N แปลว่าใช้ 2Byte เก็บค่านะครับ ปกติจะใช้ 1 Byte 1 ตัวอักษร แต่ถ้า N นำหน้าใช้ 2 Byte 1 ตัวอักษร ก็จะเป็นพวก ภาษาแปลกเช่น เยอรมัน นะครับ บ.ผมต้องเก็บเยอรมัน ผมเลยต้องใช้ N ช่วยนะครับ แต่โดยทั่วไป แค่ไทย กับ อังกฤษ ไม่ใช้ N ก็ได้สบายเลยนะครับ แต่เวลาค้นหาข้อมูลก็ต้อใช้ N นำหน้าด้วยนะครับ select * from firstname = N'xxx' Unicode ในปัจจุบันมีตัวอักษรให้เลือกใช้อยู่หลายแบบ มี Character set อยู่มากมาย เช่น ตัวอักษรภาษาไทย, ตัวอักษรภาษาญี่ปุ่น ฯลฯ ในอดีตเวลาที่เรา Encode ภาษา ถ้าเป็น ASCII ขนาด 1 byte จะมี 8 bit ซึ่ง ASCII code ก็คือพวกที่เก็บตัวอักษรภาษาอังกฤษตัวเล็ก, ตัวใหญ่, ตัวเลข, เครื่องหมายมากกว่า, น้อยกว่า, ไม่เท่ากับ, full stop, # เป็นต้น ใช้พื้นที่แค่ 7 bit ก็สามารถ Encode ข้อมูลของได้ครบแล้ว ส่วน bit ที่ 8 นี่ก็ใส่ 0 ลงไป แต่ในประเทศที่ไม่ได้ใช้ตัวอักษรภาษาอังกฤษในการเขียน ก็อยากจะมีรหัสในการเขียนตัวอักษรเป็นของตัวเองเหมือนกัน ดังนั้นแล้วในการแก้ปัญหา ก็คือ จะเอา bit ที่ 8 มาใช้ เช่น ตั้ง bit ที่ 8 เป็น 1 แล้วก็ Encode ข้างในด้วยรหัสของตัวเอง แต่ต้องเป็นรหัสที่ ASCII code ยังไม่ได้ใช้ เช่น 1000011 เป็น ‘ก’, 1000012 เป็น ‘ข’, 1000013 เป็น ‘ค’ เป็นต้น วิธีการเช่นนี้ทำให้เราสามารถเก็บได้ 2 ภาษา แต่ว่าการทำแบบนี้ไม่ international เพราะว่า ภาษาจีนหรือภาษาญี่ปุ่นก็ใช้แบบเดียวกัน ก็เอา bit ที่ 8 มาใช้ เพราะฉะนั้นแล้ว ตัว ‘ก’ ของภาษาไทยก็จะไปมีรหัสเหมือนกับตัวอะไรซักอย่างในภาษาจีน ดังนั้นก็เลยมีปัญหาว่าถ้าเราต้องการทำ international business จริงๆ ควรจะมีรหัสเดียวสำหรับอักษรตัวเดียว และในแต่ละภาษาก็ไม่ควรมีรหัสซ้ำกัน ดังนั้นเราก็เลยมี Unicode ขึ้นมา Unicode ต่างจาก ASCII คือ ASCII เก็บ byte เดียว แต่ Unicode เก็บ 2 byte ซึ่งข้อมูล 2 byte เก็บข้อมูลได้มากมายมหาศาล สามารถเก็บข้อมูลได้มากมายหลายภาษาในโลก อย่างภาษาไทยก็อยู่ใน Unicode นี้ด้วยเหมือนกัน ดังนั้นรหัสภาษาไทยเอาไปเปิดในภาษาจีน ก็ยังเป็นภาษาไทยอยู่ ไม่ออกมาเป็นภาษาจีน เพราะว่ามี code ตายตัวอยู่ว่า code นี้จองไว้สำหรับภาษาไทย แล้ว code ตรงช่วงนี้เป็นภาษาจีน ตรงนี้เป็นภาษาญี่ปุ่น จะไม่ใช้ที่ซ้ำกัน เป็นต้น ส่วน Unicode เป็นชุดอักษรที่ใช้ได้สำหรับทุกภาษาในโลก ซึ่งจะเป็นระบบ 1 อักษรใช้หลาย byte ถ้าใช้ Unicode ที่เข้ารหัสแบบ UTF-8 ภาษาไทยจะใช้ 3 byte ครับ Many Thanks : www.thaisql.com for Instruction http://www.expert2you.com/article1/2888/index.htm?page_no=1 for Unicode