พอดีเพื่อนๆ ที่ได้เขียนโปรแกรม VFP มีการนำเสนอ โปรเจกต์ พิมพ์รายงานของ VFP ผ่านทาง ASP และ ASP.net เลยทำให้อยากทำบ้าง ดังนั้นก็เป็นที่มาของวิธีการสร้าง VFP COM Object ขึ้นมาเพื่อจะได้ทำให้ VFP โลดแล่นอยู่บนเว็บบ้าง
การสร้าง VFP COM Object
1. เปิดโปรแกรม VFP (ตอนเปิดให้คลิกเมาส์ปุ่มขวา แล้วเลือก Run as Administrator) จากนั้นพิมพ์คำสั่งที่ Command Window
MODIFY COMMAND myclass.prg
2. ทำการป้อนคำสั่งดังนี้
** คำสั่งได้มาจากเว็บ -> http://www.tek-tips.com/faqs.cfm?fid=3381
DEFINE CLASS myclass AS session OLEPUBLIC
PROCEDURE MyDoCmd(cCmd as String) as Variant ;
helpstring "Execute a VFP cmd"
&cCmd && just execute parm as if it were a fox command
FUNCTION MyEval(cExpr as String) ;
helpstring "Evaluate a VFP expression"
RETURN &cExpr && evaluate parm as if it were a fox expr
FUNCTION Error(nError, cMethod, nLine)
COMreturnerror(cMethod+' err#='+str(nError,5)+;
' line='+str(nline,6)+' '+message(),_VFP.ServerName)
&& this line is never executed
ENDDEFINE
ทำการบันทึก โดยกดปุ่ม Ctrl + W
3. ทำการ build dll เพื่อสร้าง .dll โดยพิมพ์คำสั่งที่ Command Window
BUILD PROJECT myserver FROM myclass
BUILD DLL myserver from myserver recomp
หากไม่เกิดข้อผิดพลาดใดๆ เป็นอันเสร็จ ก็จะได้ไฟล์ชื่อ myserver.dll เรียบร้อย
ทำการทดสอบว่า ไฟล์ dll และคำสั่งที่สร้างขึ้น ใช้ได้หรือไม่ โดยพิมพ์คำสั่งที่ Command Window
ox = CREATEOBJECT("myserver.myclass")
?ox.myeval("DATE()")
หากขึ้นวันที่บนหน้าจอแสดงว่า สำเร็จเรียบร้อย
ก็สามารถนำเอา myserver.dll ไปใช้ได้
สำหรับการเรียกใช้ใน asp.net ก็ให้ไปที่เมนู PROJECT เลือกรายการ Add Reference
จะเข้าสู่หน้าต่าง Reference Manage ให้คลิกเลือกที่ COM -> Type Libraries แล้วหาไฟล์ myserver.dll ที่เราสร้างขึ้น แล้วคลิกเลือก
ส่วนการเขียนคำสั่ง ใน ASP.Net เช่น ที่ Form -> Load
Dim oVFP As New myserver.myclass
Dim nRecno As Integer
Response.Write(oVFP.MyEval("time()"))
oVFP.MyDoCmd("USE c:\customer")
While oVFP.MyEval("!EOF()")
nRecno = nRecno + 1
Response.Write(nRecno)
Response.Write(oVFP.MyEval("code"))
Response.Write(oVFP.MyEval("name"))
oVFP.MyDoCmd("SKIP")
End While
oVFP.MyDoCmd("USE IN customer")
สำหรับคำสั่งต่างๆ ที่เหลือก็ทดสอบดู หรือนำไปประยุกต์ตามต้องการ
หากต้องการนำไฟล์ myserver.dll ไปใช้งานกับเครื่องที่ไม่ได้ติดตั้งโปรแกรม Visual FoxPro ต้องทำการติดตั้้ง Runtime ของ Visual FoxPro ไปแทน
สวัสดี /:-{)
04 สิงหาคม 2558
29 พฤษภาคม 2558
SQL Server - OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
การ Query ข้อมูลจากตาราง Excel ด้วย SQL Server ด้วยคำสั่ง
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)"
returned message "Unspecified error"
และทำเช่นเดียวกันกับ โฟลดเดอร์ Temp ที่อยู่ใน
C:\Windows\ServiceProfiles\LocalService\AppData\Local
สวัสดี มีความสุข
SELECT * FROM
OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=D:\YourExcelFile.xlsx;
User=Admin;Password=;HDR=Yes;IMEX=1',
'SELECT * FROM [Sheet1$]');
แล้วเกิด Error เช่น
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)"
returned message "Unspecified error"
ก่อนอื่นก็ต้องไปดูที่ โปรแกรม Microsoft SQL Server Manage Studio
เปิดหน้าต่าง New Query... แล้วพิมพ์คำสั่ง
exec sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE
exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE WITH OVERRIDE
กดปุ่ม F5
เปิดหน้าต่าง New Query... แล้วพิมพ์คำสั่ง
exec sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE
exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE WITH OVERRIDE
กดปุ่ม F5
จากนั้น ที่หน้าต่าง Object Explorer ดูตรง Linked Servers ว่าเรามี Provider ชื่อ Microsoft.ACE.OLEDB.12.0 อยู่แล้ว ดังภาพ
จากนั้นคลิกเมาส์ปุ่มขวา เลือก Properties จากนั้นให้คลิกเลือกที่
Dynamic parameter และ Allow inprocess แล้วคลิกปุ่ม OK
Dynamic parameter และ Allow inprocess แล้วคลิกปุ่ม OK
จากนั้นไปทำการสำรวจ folder ที่เป็นพื้นที่เก็บข้อมูลชั่วคราวหรือ Temp file ซึ่งก็จะอยู่ภายใต้ Folder ชื่อ C:\User\ชื่อผู้ใช้\AppData\Local (ไฟล์จะถูกซ่อนอยู่ แต่ละเครื่องอาจจะอยู่คนละที่กัน ลอง Search หาดู)
จากนั้นคลิกเมาส์ปุ่มขวาที่ folder ชื่อ Temp เลือก Properties
แล้วเอา Attribute ตรง Read-Only ออก
และทำเช่นเดียวกันกับ โฟลดเดอร์ Temp ที่อยู่ใน
C:\Windows\ServiceProfiles\LocalService\AppData\Local
เท่านี้ก็ทำให้เราสามารถแก้ไขปัญหา Error ที่เกิดขึ้นกับการเปิดไฟล์ Excel จากภายนอกได้แล้ว
สวัสดี มีความสุข
28 มีนาคม 2558
ASP.NET connect to a DBF file
การเชื่อมต่อกับไฟล์ dbf ด้วย ASP.NET
ก่อนอื่นให้ทำการ Download File VFPOleDB จากนั้นทำการติดตั้ง โปรแกรม (VFPOLEDBSetup.msi)
1. เปิดโปรแกรม Visual Studo 20xx เลือก New Project....
2. คลิกที่รายการ Web -> ASP.NET Empty Web Application แล้วตั้งชื่อที่ช่อง Name: WebForm1
3. ทำการ Add -> New Item... -> Web Form ขึ้นมา
4. ไปที่เมนู PROJECT หรือ WEBSITE เลือกรายการ Add Refrence...
5. ที่หน้าต่าง Reference Manager ให้เลือกที่รายการ COM -> Type Libraries
ติ๊กเลือก Microsoft OLE DB Provider for Visual FoxPro 7.0 Type Library ตามภาพ แล้วคลิก OK
6. ทำการเขียนคำสั่ง ในส่วนของ Web Form เช่น
ต้องการเรียกดูข้อมูลจากตาราง D:\CSS\Data\GROUP.dbf
ส่วนคำสั่ง SQL ทำการ Select ข้อมูล เฉพาะที่กำหนด
เขียนคำสั่ง ดังนี้ (ปรับเปลี่ยนตามข้อมูลของแต่ละท่าน)
Imports System.Data
Partial Class WebForm1
Inherits System.Web.UI.Page
Dim DataDBF As String = "D:\CSS\Data\"
Dim ConnectionString As String = String.Empty, sCommand As String = String.Empty
Dim dBaseConnection As OleDb.OleDbConnection = Nothing, dBaseCommand As OleDb.OleDbCommand = Nothing
Dim retVal As Integer = 0
Dim reader As OleDb.OleDbDataReader
Dim cSearch As String
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Try
'if use visual fox pro Connect to a single DBF-file
ConnectionString = "Provider=vfpoledb;Data Source=" & IO.Path.GetDirectoryName(DataDBF) & ";Collating Sequence=machine;"
dBaseConnection = New OleDb.OleDbConnection(ConnectionString)
dBaseConnection.Open()
cSearch = "อ" ' ค้นหาตัวอักษร อ
sCommand = "Select gr_code,gr_desc from group.dbf where gr_desc like '%" & cSearch & "%' "
dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
'myDA = New OleDbDataAdapter(comm)
'dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
retVal = dBaseCommand.ExecuteNonQuery()
reader = dBaseCommand.ExecuteReader()
While reader.Read()
Response.Write(reader("gr_code").ToString & " ")
' second column
Response.Write(reader("gr_desc").ToString & " ")
'intCount = intCount + 1
End While
dBaseConnection.Close()
Catch ex As OleDb.OleDbException
Response.Write(ex.Message)
End Try
End Sub
End Class
ทำการบันทึกแล้วเรียกดู จะปรากฏข้อมูล ดังภาพ
จากตัวอย่างข้างต้นเป็นตัวอย่างการใช้ออปเจ็กต์ Reader เพื่ออ่านเรคคอร์ดทีละรายการเพื่อทำการแสดงโดยผ่านคำสั่ง HTML ภายใต้ Response.Write
สำหรับตัวอย่างต่อไปนี้ จะเป็นการแสดงข้อมูลผ่านทาง GridView
ให้ทำการลาก GridView มาไว้ที่เว็บฟอร์ม ดังภาพ
ตั้งชื่อ GridView -> GridView1
จากนั้น ก็ดัดแปลงคำสั่งใหม่ดังนี้
Imports System.Data
Partial Class WebForm1
Inherits System.Web.UI.Page
Dim DataDBF As String = "D:\CSS\Data\"
Dim ConnectionString As String = String.Empty, sCommand As String = String.Empty
Dim dBaseConnection As OleDb.OleDbConnection = Nothing, dBaseCommand As OleDb.OleDbCommand = Nothing
Dim cSearch As String
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Try
'if use visual fox pro Connect to a single DBF-file
ConnectionString = "Provider=vfpoledb;Data Source=" & IO.Path.GetDirectoryName(DataDBF) & ";Collating Sequence=machine;"
dBaseConnection = New OleDb.OleDbConnection(ConnectionString)
dBaseConnection.Open()
cSearch = "อ" ' ค้นหาตัวอักษร อ
sCommand = "Select gr_code,gr_desc from group.dbf where gr_desc like '%" & cSearch & "%' "
dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
'
Dim dt As DataTable = GetData(dBaseCommand)
GridView1.DataSource = dt
GridView1.DataBind()
'
dBaseConnection.Close()
Catch ex As OleDb.OleDbException
Response.Write(ex.Message)
End Try
End Sub
Private Function GetData(ByVal cmd As OleDb.OleDbCommand) As DataTable
Dim dt As New DataTable()
Dim sda As New OleDb.OleDbDataAdapter()
cmd.CommandType = CommandType.Text
cmd.Connection = dBaseConnection
sda.SelectCommand = cmd
sda.Fill(dt)
sda.Dispose()
Return dt
End Function
End Class
หลังจากนั้น ก็ทำการบันทึก แล้วเรียกโปรแกรมดู
จะปรากฎข้อมูลดังตัวอย่าง
สวัสดี มีสุข
ก่อนอื่นให้ทำการ Download File VFPOleDB จากนั้นทำการติดตั้ง โปรแกรม (VFPOLEDBSetup.msi)
1. เปิดโปรแกรม Visual Studo 20xx เลือก New Project....
2. คลิกที่รายการ Web -> ASP.NET Empty Web Application แล้วตั้งชื่อที่ช่อง Name: WebForm1
3. ทำการ Add -> New Item... -> Web Form ขึ้นมา
4. ไปที่เมนู PROJECT หรือ WEBSITE เลือกรายการ Add Refrence...
5. ที่หน้าต่าง Reference Manager ให้เลือกที่รายการ COM -> Type Libraries
ติ๊กเลือก Microsoft OLE DB Provider for Visual FoxPro 7.0 Type Library ตามภาพ แล้วคลิก OK
6. ทำการเขียนคำสั่ง ในส่วนของ Web Form เช่น
ต้องการเรียกดูข้อมูลจากตาราง D:\CSS\Data\GROUP.dbf
ส่วนคำสั่ง SQL ทำการ Select ข้อมูล เฉพาะที่กำหนด
เขียนคำสั่ง ดังนี้ (ปรับเปลี่ยนตามข้อมูลของแต่ละท่าน)
Imports System.Data
Partial Class WebForm1
Inherits System.Web.UI.Page
Dim DataDBF As String = "D:\CSS\Data\"
Dim ConnectionString As String = String.Empty, sCommand As String = String.Empty
Dim dBaseConnection As OleDb.OleDbConnection = Nothing, dBaseCommand As OleDb.OleDbCommand = Nothing
Dim retVal As Integer = 0
Dim reader As OleDb.OleDbDataReader
Dim cSearch As String
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Try
'if use visual fox pro Connect to a single DBF-file
ConnectionString = "Provider=vfpoledb;Data Source=" & IO.Path.GetDirectoryName(DataDBF) & ";Collating Sequence=machine;"
dBaseConnection = New OleDb.OleDbConnection(ConnectionString)
dBaseConnection.Open()
cSearch = "อ" ' ค้นหาตัวอักษร อ
sCommand = "Select gr_code,gr_desc from group.dbf where gr_desc like '%" & cSearch & "%' "
dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
'myDA = New OleDbDataAdapter(comm)
'dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
retVal = dBaseCommand.ExecuteNonQuery()
reader = dBaseCommand.ExecuteReader()
While reader.Read()
Response.Write(reader("gr_code").ToString & " ")
' second column
Response.Write(reader("gr_desc").ToString & " ")
'intCount = intCount + 1
End While
dBaseConnection.Close()
Catch ex As OleDb.OleDbException
Response.Write(ex.Message)
End Try
End Sub
End Class
จากตัวอย่างข้างต้นเป็นตัวอย่างการใช้ออปเจ็กต์ Reader เพื่ออ่านเรคคอร์ดทีละรายการเพื่อทำการแสดงโดยผ่านคำสั่ง HTML ภายใต้ Response.Write
สำหรับตัวอย่างต่อไปนี้ จะเป็นการแสดงข้อมูลผ่านทาง GridView
ให้ทำการลาก GridView มาไว้ที่เว็บฟอร์ม ดังภาพ
ตั้งชื่อ GridView -> GridView1
จากนั้น ก็ดัดแปลงคำสั่งใหม่ดังนี้
Imports System.Data
Partial Class WebForm1
Inherits System.Web.UI.Page
Dim DataDBF As String = "D:\CSS\Data\"
Dim ConnectionString As String = String.Empty, sCommand As String = String.Empty
Dim dBaseConnection As OleDb.OleDbConnection = Nothing, dBaseCommand As OleDb.OleDbCommand = Nothing
Dim cSearch As String
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Try
'if use visual fox pro Connect to a single DBF-file
ConnectionString = "Provider=vfpoledb;Data Source=" & IO.Path.GetDirectoryName(DataDBF) & ";Collating Sequence=machine;"
dBaseConnection = New OleDb.OleDbConnection(ConnectionString)
dBaseConnection.Open()
cSearch = "อ" ' ค้นหาตัวอักษร อ
sCommand = "Select gr_code,gr_desc from group.dbf where gr_desc like '%" & cSearch & "%' "
dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
'
Dim dt As DataTable = GetData(dBaseCommand)
GridView1.DataSource = dt
GridView1.DataBind()
'
dBaseConnection.Close()
Catch ex As OleDb.OleDbException
Response.Write(ex.Message)
End Try
End Sub
Private Function GetData(ByVal cmd As OleDb.OleDbCommand) As DataTable
Dim dt As New DataTable()
Dim sda As New OleDb.OleDbDataAdapter()
cmd.CommandType = CommandType.Text
cmd.Connection = dBaseConnection
sda.SelectCommand = cmd
sda.Fill(dt)
sda.Dispose()
Return dt
End Function
End Class
จะปรากฎข้อมูลดังตัวอย่าง
สวัสดี มีสุข
06 มีนาคม 2558
SQL Server - การสร้าง Login , User และกำหนดสิทธิ แบบง่ายๆ
ตัวอย่างนี้นำเสนอ การสร้าง Login ชื่อ Kasem เพื่อเข้าใช้งาน SQL Server จากนั้นทำการเรียกฐานข้อมูลชื่อ myData แล้วทำการสร้าง User ภายใต้ฐานข้อมูล myData จากนั้นทำการกำหนดสิทธิในระดับ Database และ ระดับ Object
---ต้อง Login เป็น sa ก่อน
USE master
GO
-- สร้าง Login เพื่อเข้าใช้งาน SQL Server
CREATE LOGIN kasem
WITH PASSWORD ='P@ssw0d'
GO
-- เปิด Database ที่ต้องการสร้าง User
USE myData
GO
-- สร้าง User ให้เข้าใช้งาน Database ได้ แต่ทำอะไรไม่ได้
CREATE USER Kasem
GO
------- ระดับ DataBase จะมีผลกับทุกๆ ตาราง วิว etc....
-- Grant ระดับ database ว่าให้ user Kasem ทำอะไรได้บ้าง
-- การ grant User เพื่อให้สิทธิใช้ เรียกดูข้อมูลได้ อย่างเดียว
GRANT SELECT TO [Kasem] WITH GRANT OPTION
-- การ grant User เพื่อให้สิทธิเพิ่มข้อมูลได้
GRANT INSERT TO [Kasem] WITH GRANT OPTION
-- ส่วน UPDATE, DELETE หรือ อื่นๆ ก็กำหนดตามต้องการ
------- ระดับ Object จะมีผลกับตัวที่ระบุ
-- การ Grant ระดับ Object เลือกเฉพาะตารางหรือ object ที่ต้องการ
GRANT UPDATE ON vwStudent TO Kasem
GRANT DELETE ON vwStudent TO Kasem
---ต้อง Login เป็น sa ก่อน
USE master
GO
-- สร้าง Login เพื่อเข้าใช้งาน SQL Server
CREATE LOGIN kasem
WITH PASSWORD ='P@ssw0d'
GO
-- เปิด Database ที่ต้องการสร้าง User
USE myData
GO
-- สร้าง User ให้เข้าใช้งาน Database ได้ แต่ทำอะไรไม่ได้
CREATE USER Kasem
GO
------- ระดับ DataBase จะมีผลกับทุกๆ ตาราง วิว etc....
-- Grant ระดับ database ว่าให้ user Kasem ทำอะไรได้บ้าง
-- การ grant User เพื่อให้สิทธิใช้ เรียกดูข้อมูลได้ อย่างเดียว
GRANT SELECT TO [Kasem] WITH GRANT OPTION
-- การ grant User เพื่อให้สิทธิเพิ่มข้อมูลได้
GRANT INSERT TO [Kasem] WITH GRANT OPTION
-- ส่วน UPDATE, DELETE หรือ อื่นๆ ก็กำหนดตามต้องการ
------- ระดับ Object จะมีผลกับตัวที่ระบุ
-- การ Grant ระดับ Object เลือกเฉพาะตารางหรือ object ที่ต้องการ
GRANT UPDATE ON vwStudent TO Kasem
GRANT DELETE ON vwStudent TO Kasem
31 ธันวาคม 2557
ตัวอย่าง Windows API
ตัวอย่าง Windows API จาก เว็บ http://www.news2news.com
1. เปิดเครื่องคิดเลขของวินโดว์ในโปรแกรมที่เราสร้างขึ้นเอง
http://www.news2news.com/vfp/?example=245&ver=vfp
2. หา Mac Address
http://www.news2news.com/vfp/?example=585&ver=vfp
3. Convert to Unicode
http://www.news2news.com/vfp/?example=212&ver=vfp
4. Play MIDI note
http://www.news2news.com/vfp/?example=537&ver=vfp
5. Create desktop shotcut
http://www.news2news.com/vfp/?example=583
6. Display On-screen Keyboard
http://www.news2news.com/vfp/?example=582&ver=vfp
7. Set Default Printer
http://www.news2news.com/vfp/?example=589&ver=vfp
1. เปิดเครื่องคิดเลขของวินโดว์ในโปรแกรมที่เราสร้างขึ้นเอง
http://www.news2news.com/vfp/?example=245&ver=vfp
2. หา Mac Address
http://www.news2news.com/vfp/?example=585&ver=vfp
3. Convert to Unicode
http://www.news2news.com/vfp/?example=212&ver=vfp
4. Play MIDI note
http://www.news2news.com/vfp/?example=537&ver=vfp
5. Create desktop shotcut
http://www.news2news.com/vfp/?example=583
6. Display On-screen Keyboard
http://www.news2news.com/vfp/?example=582&ver=vfp
7. Set Default Printer
http://www.news2news.com/vfp/?example=589&ver=vfp
04 มิถุนายน 2557
Excel VBA - 1. เริ่มต้นเขียน VBA กัน
สำหรับผู้ที่ใช้ Excel 2007, 2010 หรือ รุ่นที่ใหม่กว่า ก่อนอื่นเราต้องกำหนดค่าเพื่อให ้สามารถใช้ VBA และ Macro ก่อน โดยทำตามขั้นตอน ดังนี้
เปิดโปรแกรม Excel 2007, 2010 หรือ รุ่นที่ใหม่กว่า จากนั้น
1. เลือก เมนู File -> Options
2. ที่หน้าต่าง Excel Options ให้คลิกที่รายการ Customize Ribbon
3. ในส่วนของ กล่อง Main Tabs ให้ติ๊กเครื่องหมายถูกหน้ารายกา ร Develop จากนั้นคลิกปุ่ม OK
จากนั้นเมนูของ Excel ก็จะปรากฎรายการเมนู Developer เพิ่มขึ้นมา
4. ให้คลิกที่เมนู Developer เลือก Macro Security
5. ที่หน้าต่าง Trust Center ให้เลือกรายการ Macro Setting
6. ในส่วนของ Macro Settings ให้เลือกรายการ
Enable all macros (not recommended; potentially dangerous code can run)
และ Trust access to the VBA project object model จากนั้น คลิกปุ่ม OK
เท่านี้โปรแกรม Excel ของเราก็สามารถใช้งาน VBA ได้แล้ว
เริ่มเขียนคำสั่ง VBA กัน
1. ที่ Excel ให้เลือกเมนู Developer
2. จากนั้นคลิกเลือก ไอคอน Visual Basic จะปรากฎหน้าต่าง Microsoft Visual Basic for Application ขึ้นมา
3. ไปที่เมนู Insert เลือก รายการ Module
4. ที่หน้าต่าง Module1(Code) ให้ทำการป้อนคำสั่ง ดังนี้
Sub mySub()
MsgBox ("Hello World")
End Sub
จากนั้นทำการบันทึก Excel Workbook
เมื่อต้องการเรียกใช้งานให้คลิกปุ่ม F5 หรือไปที่เมนู Run เลือกรายการ Run Sub/UserForm
ก็จะปรากฎ Messagebox ขึ้นมาดังภาพ
*** เมื่อต้องการบันทึก workbook ของ Excel เวลาบันทึกให้กำหนดประเภทของไฟล์ เป็น Excel Macro-Enabled Workbook (*.xlsm)
การเรียกใช้งาน subroutine อัตโนมัติ
สำหรับ subroutine ที่จะถูกเรียกใช้งานแบบอัตโนมัติ จะใช้ชื่อว่า Workbook_open ซึ่งจะถูกเรียกใช้งานโดยอัตโนมัติเมื่อเราทำการเปิดไฟล์ Workbook ของ Excel
วิธีการกำหนดสามารถทำได้ดังนี้
1. ทำการเพิ่ม Subroutine ใหม่ โดยใช้ชื่อว่า Workbook_Open ทำได้โดย ไปที่หน้าต่าง
Project - VBAProject แล้ว ดับเบิ้ลคลิกที่รายการ ThisWorkbook
จะเข้าสู่หน้าต่างเขียนคำสั่ง ให้เขียนคำสั่ง ดังนี้
Private Sub Workbook_Open()
mySub 'mySub คือชื่อ subroutine ที่เราสร้างขึ้นเอง
End Sub
ทำการ บันทึก (save) workbook แล้วปิด (close)
*** อย่าลืม --- การบันทึก workbook ให้กำหนดประเภทของไฟล์ เป็น Excel Macro-Enabled Workbook (*.xlsm)
จากนั้นเปิด workbook ใหม่อีกรอบ ก็จะมีการเรียกใช้งาน mySub ผ่านทาง subroutine Workbook_Open โดยอัตโนมัติ
สำหรับ Excel VBA ตอนแรก ก็ขอจบไว้เพียงเท่านี้
ช่วงนี้มี เป็นช่วง เคอร์ฟิว (curfew) คือ การห้ามออกจากเคหสถานเวลาค่ำคืน ตามที่รัฐกำหนด
ขอให้ทุกคนหลับฝันดี รวยๆ เจริญๆ
เปิดโปรแกรม Excel 2007, 2010 หรือ รุ่นที่ใหม่กว่า จากนั้น
1. เลือก เมนู File -> Options
2. ที่หน้าต่าง Excel Options ให้คลิกที่รายการ Customize Ribbon
3. ในส่วนของ กล่อง Main Tabs ให้ติ๊กเครื่องหมายถูกหน้ารายกา
จากนั้นเมนูของ Excel ก็จะปรากฎรายการเมนู Developer เพิ่มขึ้นมา
4. ให้คลิกที่เมนู Developer เลือก Macro Security
5. ที่หน้าต่าง Trust Center ให้เลือกรายการ Macro Setting
6. ในส่วนของ Macro Settings ให้เลือกรายการ
Enable all macros (not recommended; potentially dangerous code can run)
และ Trust access to the VBA project object model จากนั้น คลิกปุ่ม OK
เท่านี้โปรแกรม Excel ของเราก็สามารถใช้งาน VBA ได้แล้ว
เริ่มเขียนคำสั่ง VBA กัน
1. ที่ Excel ให้เลือกเมนู Developer
2. จากนั้นคลิกเลือก ไอคอน Visual Basic จะปรากฎหน้าต่าง Microsoft Visual Basic for Application ขึ้นมา
3. ไปที่เมนู Insert เลือก รายการ Module
4. ที่หน้าต่าง Module1(Code) ให้ทำการป้อนคำสั่ง ดังนี้
Sub mySub()
MsgBox ("Hello World")
End Sub
จากนั้นทำการบันทึก Excel Workbook
เมื่อต้องการเรียกใช้งานให้คลิกปุ่ม F5 หรือไปที่เมนู Run เลือกรายการ Run Sub/UserForm
ก็จะปรากฎ Messagebox ขึ้นมาดังภาพ
*** เมื่อต้องการบันทึก workbook ของ Excel เวลาบันทึกให้กำหนดประเภทของไฟล์ เป็น Excel Macro-Enabled Workbook (*.xlsm)
การเรียกใช้งาน subroutine อัตโนมัติ
สำหรับ subroutine ที่จะถูกเรียกใช้งานแบบอัตโนมัติ จะใช้ชื่อว่า Workbook_open ซึ่งจะถูกเรียกใช้งานโดยอัตโนมัติเมื่อเราทำการเปิดไฟล์ Workbook ของ Excel
วิธีการกำหนดสามารถทำได้ดังนี้
1. ทำการเพิ่ม Subroutine ใหม่ โดยใช้ชื่อว่า Workbook_Open ทำได้โดย ไปที่หน้าต่าง
Project - VBAProject แล้ว ดับเบิ้ลคลิกที่รายการ ThisWorkbook
จะเข้าสู่หน้าต่างเขียนคำสั่ง ให้เขียนคำสั่ง ดังนี้
Private Sub Workbook_Open()
mySub 'mySub คือชื่อ subroutine ที่เราสร้างขึ้นเอง
End Sub
ทำการ บันทึก (save) workbook แล้วปิด (close)
*** อย่าลืม --- การบันทึก workbook ให้กำหนดประเภทของไฟล์ เป็น Excel Macro-Enabled Workbook (*.xlsm)
จากนั้นเปิด workbook ใหม่อีกรอบ ก็จะมีการเรียกใช้งาน mySub ผ่านทาง subroutine Workbook_Open โดยอัตโนมัติ
สำหรับ Excel VBA ตอนแรก ก็ขอจบไว้เพียงเท่านี้
ช่วงนี้มี เป็นช่วง เคอร์ฟิว (curfew) คือ การห้ามออกจากเคหสถานเวลาค่ำคืน ตามที่รัฐกำหนด
ขอให้ทุกคนหลับฝันดี รวยๆ เจริญๆ
26 เมษายน 2557
การสร้างผู้ใช้ใหม่ สำหรับ SQL Server
การสร้างผู้ใช้ใหม่ (user) สำหรับเข้าถึงทรัพยากรต่างๆ ของ SQL Server มีวิธีการอยู่หลายวิธี
สำหรับบทความนี้จะนำเสนอ วิธีง่ายๆ 3 ขั้นตอน สามารถทำได้ไม่ยากโดยอาศัยคำสั่ง T-SQL ซึ่งมีขั้นตอนวิธีทำดังนี้
สำหรับคำสั่งในขั้นตอนต่างๆ จะใช้สิทธิ์ของผู้ใช้ ชื่อ sa
ทำการสร้างฐานข้อมูลเตรียมไว้โดยกำหนดชื่อ เป็น kasem_db
ขั้นตอนที่ 1
ให้ทำการสร้าง ชื่อล็อกอิน (Login Name) เช่น kasem (อยู่ภายใต้เซิร์ฟเวอร์ชื่อ SUPERMAN-TWIST)
โดยกำหนดรหัสผ่านเป็น P@ssw0d และกำหนดดีฟอล์ตฐานข้อมูลชื่อ kasem_db
ขั้นตอนที่ 2
ต่อมาทำการสร้าง ชื่อผู้ใช้งานฐานข้อมูล (User Name) ปกติจะใช้ชื่อเดียวกันกับชื่อ ล็อกอินที่สร้างขึ้นก่อนหน้า เช่น kasem ให้กับฐานข้อมูล kasem_db
สำหรับบทความนี้จะนำเสนอ วิธีง่ายๆ 3 ขั้นตอน สามารถทำได้ไม่ยากโดยอาศัยคำสั่ง T-SQL ซึ่งมีขั้นตอนวิธีทำดังนี้
สำหรับคำสั่งในขั้นตอนต่างๆ จะใช้สิทธิ์ของผู้ใช้ ชื่อ sa
ทำการสร้างฐานข้อมูลเตรียมไว้โดยกำหนดชื่อ เป็น kasem_db
ขั้นตอนที่ 1
ให้ทำการสร้าง ชื่อล็อกอิน (Login Name) เช่น kasem (อยู่ภายใต้เซิร์ฟเวอร์ชื่อ SUPERMAN-TWIST)
โดยกำหนดรหัสผ่านเป็น P@ssw0d และกำหนดดีฟอล์ตฐานข้อมูลชื่อ kasem_db
USE
master
GO
CREATE
LOGIN [SUPERMAN-TWIST\kasem] WITH PASSWORD = 'P@ssw0d'
DEFAULT_DATABASE = [kasem_db]
GO
ต่อมาทำการสร้าง ชื่อผู้ใช้งานฐานข้อมูล (User Name) ปกติจะใช้ชื่อเดียวกันกับชื่อ ล็อกอินที่สร้างขึ้นก่อนหน้า เช่น kasem ให้กับฐานข้อมูล kasem_db
USE [kasem_db]
GO
CREATE
USER kasem FOR LOGIN kasem
GO
ขั้นตอนที่ 3
ทำการกำหนดบทบาทของผู้ใช้งานฐานข้อมูล (database role) สำหรับตัวอย่างนี้จะใช้บทบาทของ SQL Server ได้จัดเตรียมไว้ให้ ดังแสดงในตาราง
ทำการกำหนดบทบาทของผู้ใช้งานฐานข้อมูล (database role) สำหรับตัวอย่างนี้จะใช้บทบาทของ SQL Server ได้จัดเตรียมไว้ให้ ดังแสดงในตาราง
ตารางแสดงรายละเอียดของ Fixed
database role
|
Database Role
|
รายละเอียด
|
|
db_owner
|
กำหนดให้มีสิทธิ์ในการทำงานทุกอย่างในฐานข้อมูล
|
|
db_accessadmin
|
กำหนดให้มีสิทธิ์ในการ
เพิ่ม ลบ ผู้ใช้งานฐานข้อมูล รวมถึงบทบาทของผู้ใช้
|
|
db_securityadmin
|
กำหนดให้มีสิทธิ์ในการจัดการสิทธิ์ต่างๆ
ของผู้ใช้งานฐานข้อมูล
|
|
db_ddladmin
|
กำหนดให้มีสิทธิ์ในการใช้งานคำสั่งในกลุ่ม
Data
Definition Language (DDL)
|
|
db_backupoperator
|
กำหนดให้มีสิทธิ์ในสำรองข้อมูล
(backup)
|
|
db_datareader
|
กำหนดให้มีสิทธิ์ในการอ่านข้อมูลของตารางในฐานข้อมูล
|
|
db_datawriter
|
กำหนดให้มีสิทธิ์ในการ
เพิ่ม แก้ไข ลบ ข้อมูลในตารางของฐานข้อมูล
|
|
db_denydatareader
|
กำหนดให้ไม่สามารถอ่านข้อมูลของตารางในฐานข้อมูล
|
|
db_denydatawriter
|
กำหนดให้ไม่สามารถ
เพิ่ม แก้ไข ลบ ข้อมูลในตารางของฐานข้อมูล
|
ในที่นี้กำหนดบทบาทให้กับผู้ใช้ kasem เป็น db_owner โดยเขียนคำสั่งดังนี้
USE
TestDB
GO
EXECUTE
sp_addrolemember 'db_owner' , 'Kasem'
GO
หรือถ้าหากต้องการกำหนดเป็นอย่างอื่น เช่น ต้องการให้ทำได้เฉพาะ การเพิ่ม แก้ไข ลบข้อมูลในตาราง และสิทธิ์ในการสำรองข้อมูล ซึ่งต้องใช้บทบาทหลายๆ อย่าง ก็สามารถเขียนคำสั่งได้ดังนี้
USE
TestDB
GO
EXECUTE
sp_addrolemember 'db_datareader' , 'Kasem'
EXECUTE
sp_addrolemember 'db_datawriter' , 'Kasem'
EXECUTE
sp_addrolemember 'db_backupoperator' , 'Kasem'
GO
เพียงขั้นตอนง่ายๆ 3 ขั้นตอน คุณก็สามารถสร้างชื่อผู้ใช้งานฐานข้อมูลได้เอง
สวัสดีมีเงินใช้ ถึงอากาศจะร้อน แต่ใจเราอย่าใจร้อน
11 ตุลาคม 2556
FLASH สอนการเขียนเกมตีตัวตุ่น
ตอนนี้นำเสนอ วีดีโอ สอนการเขียนเกมด้วย Flash ตอน เกม ตีตัวตุ่น
Source Code
Source Code
import flash.ui.Mouse;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.text.engine.TypographicCase;
var nR:uint = 0;
var nMin:uint = 1;
var nMax:uint = 15;
var nScore:uint = 0;
stage.addChild(myMouse);
myMouse.mouseEnabled = false;
myMouse.addEventListener(Event.ENTER_FRAME, fnMyMouse);
function fnMyMouse(event:Event):void {
myMouse.x = stage.mouseX;
myMouse.y = stage.mouseY;
}
Mouse.hide();
var gTimer:Timer;
gTimer = new Timer(500, 0);
gTimer.addEventListener(TimerEvent.TIMER, fnRandom);
gTimer.start();
for (var i:int = nMin; i <= nMax; i++) {
this["m"+i].gotoAndPlay(i);
this["m"+i].addEventListener(MouseEvent.CLICK, onClick(i));
this["m"+i].visible = false;
}
function onClick(j:int):Function {
return function(event:MouseEvent):void {
fnScore(j);
}
}
function fnScore(k:int) {
nScore++ ;
this["m"+k].visible = false;
txtScore.text = nScore.toString();
}
function fnRandom(event:TimerEvent):void {
nR = Math.floor(Math.random() * (1 + nMax - nMin) + nMin);
this["m"+nR].visible = true;
}
สวัสดี มีความสุข
สมัครสมาชิก:
บทความ (Atom)
"I Believe in You"









