19 กันยายน 2561

SQL Server - LIKE กับภาษาไทย

ลาเราทำการคิวรีเพื่อสอบถามข้อมูลแบบไม่เจาะจง เช่น ต้องการสอบถามข้อมูลที่ขึ้นต้นด้วย "ก"  ส่วนใหญ่ก็จะใช้ วลีคำสั่ง LIKE เช่น

            SELECT [id], [name] FROM [TESTDB].[dbo].[TABLE01] WHERE [name] LIKE "ก%"

จากคำสั่งข้างต้น เราจะเห็นว่า ข้อมูลที่เป็นภาษาไทยที่ขึ้นต้นด้วย ก ก็น่าจะออกมาแสดงทั้งหมด แต่ท่านทราบไหมว่า ภาษาไทย คำว่า "เกษม"  เราก็ถือว่าขึ้นต้นด้วย "ก" แต่ผลลัพธ์ของที่ได้จากคำสั่งข้างต้น กลับไม่สามารถหาคำว่า เกษม เจอ  ...... คราวนี้ก็ยุ่งซิ ต้องการข้อมูลแต่กลับได้ออกมาไม่ตรง แล้วจะทำไงดี...... เราก็ต้องประยุกต์คำสั่งอื่นมาใช้แทน โดยอาศัยคำสั่ง CHARINDEX กับ COLLATE THAI_BIN มาช่วย ดังตัวอย่างตามภาพด้านล่าง


จากการทดสอบคำสั่งทั้ง 2 รูปแบบ ผลที่ได้ออกมาต่างกัน ดังนั้น หากต้องการสอบถามข้อมูลภาษาไทย ก็สามารถใช้ CHARINDEX เข้ามาช่วยได้

เช่น ถ้าต้องการหาข้อความ "ก"  ณ.ตำแหน่งใด ๆ ก็ได้  ให้ใช้

     CHARINDEX('ก',[ชื่อคอลัมน์] COLLATE THAI_BIN) > 0

หรือ  ถ้าต้องการหาข้อความ "ก"  ณ.ตำแหน่งเริ่มต้น  ให้ใช้

     CHARINDEX('ก',[ชื่อคอลัมน์] COLLATE THAI_BIN) BETWEEN 1 AND 2

เราสามารถนำไปประยุกต์ใช้ได้อีกหลากหลายตามต้องการ
สำหรับตัวอย่างที่กล่าวมาจะไม่คำนึงถึงความเร็วในการประมวลผล แต่ต้องการค่าที่ถูกต้องและตรงกับสิ่งที่ต้องการ

สวัสดี ฝนตกเยอะจริงปีนี้

23 มิถุนายน 2561

PHP - การติดตั้งไดร์เวอร์ SQL Server

** ปรับปรุง 2565
ปกติเราจะใช้งาน PHP กับระบบฐานข้อมูล mySQL หรือ MariaDB กันเป็นส่วนใหญ่ ซึ่งตัว xampp ได้ติดตั้งไดร์เวอร์มาให้เรียบร้อย แต่องค์กรส่วนใหญ่ก็มีการใช้งานระบบฐานข้อมูลตัวอื่น เช่น SQL Server ซึ่งไดร์เวอร์ส่วนของตัวติดตั้ง Web Server ของค่าย AppServ, WAMPP หรือ XAMPP ไม่ได้จัดเตรียมไว้ให้ ดังนั้นเมื่อติดตั้ง Web Server เสร็จก็ต้องทำการติดตั้งไดร์เวอร์สำหรับ SQL Server เพิ่มเข้าไปกันเอง

สำหรับบทความนี้ จะนำเสนอการติดตั้งบน XAMPP โดยเพิ่มไดร์เวอร์ ของ SQL Server ให้กับ PHP รุ่น 8.1 ภายใต้ระบบปฎิบัติการ Windows

** ขั้นตอนการติดตั้ง XAMPP  / PHP 8.1 จะไม่ขอกล่าวถึง จะข้ามไปที่ขั้นตอนติดตั้งไดร์เวอร์ของ SQL Server เลย โดยมีวิธีการดังนี้

1. เข้าไปที่เว็บ Micsrosft เพื่อดาวน์โหลไดร์เวอร์ SQL Server สำหรับ php โดยคลิกที่ Link ด้่านล่าง










เมื่อได้ zip ไฟล์มาแล้ว ให้แตก zip ไฟล์มาเก็บไว้ซักทีนึง ซึ่งเราจะเห็นไฟล์ไดร์เวอร์จำนวนมาก 
งานนี้ต้องตาดีได้ตาร้ายเสีย ดูรุ่นให้ตรงกับที่เราติดตั้ง PHP






















การเลือกไดร์เวอร์ต้องดูตอนติดตั้ง เช่น ติดตั้ง PHP 8.1 เป็นรุ่นไหน ระหว่าง nts หรือ ts และ x86 หรือ x64 ก็ต้องเลือกไฟล์ตามนั้น โดยเปิดดู PHPInfo ดูรายละเอียดรุ่นตามภาพ


















2. เมื่อเราได้ไฟล์เป้าหมายเรียบร้อย 
กรณีติดตั้ง XAMPP  ให้ไปที่โฟลเดอร์  C:\xampp\php\ext
จากนั้นให้ทำการก็อปไฟล์ไดร์เวอร์ตาม version ที่ต้องการมาใส่ได้เลย


















* ตัวอย่าง ภาพเป็นการใช้ไฟล์ไดร์เวอร์
php_pdo_sqlsrv_81_ts_x64.dll
php_sqlsrv_81_ts_x64.dll


3. ให้ไปเปิดไฟล์ php.ini ขั้นมาแก้ไข แล้วเพิ่มคำสั่งด้านล่างเข้าไป
(ไฟล์นี้เก็บอยู่ใน C:\xampp\php)

extension=php_pdo_sqlsrv_81_ts_x64
extension=php_sqlsrv_81_ts_x64















4. จากนั้นทำการ Restart service ของ web server ใหม่ 
แล้ว เข้าไปสำรวจ phpinfo จะต้องมี pdo_sqlsrv และ sqlsrv ปรากฎอยู่
ถ้าไม่มี เริ่มใหม่ ดูว่าไดร์เวอร์ตรงไหม



















สวัสดีติดต่อฐานข้อมูลของ SQL Server ได้แล้ว

 

18 มิถุนายน 2561

กำหนดให้ Web Browser Control เรียกใช้งาน IE 11

ปัญหาการเขียนโปรแกรม Windows Desktop Application แล้วเรียกใช้งาน Web Browser Control เพื่อเปิดดูเว็บที่สร้างด้วย HTML5 ซึ่งตัว Web Browser Control จะไปเรียกใช้ IE 9 รุ่นเก่าไม่สนับสนุน HTML5 (ใช้งานไม่ค่อยได้) ทำให้เกิดปัญหา error เพื่อแก้ปัญหาที่เกิดขึ้น สามารถกำหนดค่าในการเรียกใช้งาน browser ในรุ่น IE 11 ซึ่งสนับสนุน HTML5 แล้วมาแทนที่ โดยการเข้าไปแก้ใน Registry ของ Windows ในสว่นของ FEATURE_BROWSER_EMULATION โดยการกำหนดค่าหรือรุ่นของ IE ใหม่เข้าไปให้กับโปรแกรมของเรา โดยทำดังนี้
1. ให้ทำการเปิด Registry Editor ขึ้นมา (search ที่วินโวส์หาคำว่า regedit)
2. จากนั้นให้เข้าไปที่ FEATURE_BROWSER_EMULATION ตามลำดับการเข้าถึงดังนี้

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_BROWSER_EMULATION
                     yourapp.exe = (DWORD) version

3. ให้คลิกเมาส์ปุ่มขวาในส่วนของ  FEATURE_BROWSER_EMULATION แล้วเลือก New ->  DWORD (32-bit) Value   จากนั้นให้กำหนดชื่อของโปรแกรมที่เราใช้งาน เช่น  yourapp.exe เมื่อกำหนดชื่อเรียบร้อยให้ ดับเบิ้ลคลิกเข้าไปแก้ไขค่า โดยกำหนดค่าในส่วนของ Value data: เป็น 11001 และ Base เลือก Decimal ดังภาพ

ถึงตอนนี้เราก็สามารถเรียกใช้งาน เว็บไซต์ที่สร้างด้วย HTML5 ผ่านทางโปรแกรมของเราด้วย Web Browser Control  ได้แล้ว

cr. โก๋แก แห่ง FoxBoard

รายละเอียดเพิ่มเติม สามารถอ่านได้ที่ 

สวัสดี ขอให้คนอ่านมีความสุข รวย ๆ 

02 มิถุนายน 2561

VS Code : Open Web Browser in VS Code

เครื่องมือที่ใช้เขียนคำสั่งในยุคนี้ ตัวที่ได้รับความนิยมสูงคงหนีไม่พ้น VS Code ของ Microsoft หากลองติดตั้งและใช้งานรับรองว่าจะติดใจ คุณสามารถดาวน์โหลดได้ที่ https://code.visualstudio.com/download

หลายคนลองเขียนคำสั่ง HTML ง่ายๆ แล้วจะรันผ่าน VS Code ทำอย่างไรดี ????? มีหลายวิธีซึ่งแต่ละวิธีก็คงต้องออกแรงกันหน่อย สำหรับบทความนี้เราจะอาศัย Extension เอามาใส่เสริมเพิ่มเข้าไป

วิธีการทำให้ VS Code สามารถรัน HTML ผ่าน browser

1. ให้กดปุ่ม Ctrl+Shift+X หรือกดปุ่ม Extension ตามลูกศรชี้ในภาพด้านล่าง เพื่อเปิดช่องหน้าต่าง EXTENSIONS
2. ในช่องค้นหาด้านบน ให้พิมพ์คำว่า open in browser
3. ก็คลิกที่ปุ่ม Install    เมื่อทำการติดตั้งเสร็จเรียบร้อยก็ให้คลิกที่ปุ่ม Reload

จากนั้นเมื่อต้องการรันไฟล์ HTML ก็ทำการคลิกขวาที่ไฟล์แล้วเลือกรายการ Open In Default Browser

วิธีการทำให้ VS Code สามารถ Preview Browser

หากต้องการจะเห็นหน้าเว็บว่าสิ่งที่เราแก้ไขเป็นอย่างไร (หลังจากบันทึก Ctrl-S) แบบทันทีทันใด (Preview) ก็สามารถทำได้ไม่ยากอีกเช่นกัน โดยไปหา Extension มาเสริม
1. ให้กดปุ่ม Ctrl+Shift+X หรือกดปุ่ม Extension
2. ในช่องค้นหาด้านบน ให้พิมพ์คำว่า VSCode Browser Sync
3. ก็คลิกที่ปุ่ม Install    เมื่อทำการติดตั้งเสร็จเรียบร้อยก็ให้คลิกที่ปุ่ม Reload

การใช้งาน เมื่อเราอยู่ที่ไฟล์ ที่เราเขียนคำสั่ง หากต้องการใช้งานให้ทำดังนี้
1. ให้กดปุ่มบนคีย์บอร์ด Ctrl+Shift+ P เพื่อเปิดช่อง Command แล้วพิมพ์ Browser Sync: Server mode at side panel
จะปรากฎหน้าต่างบราวเซอร์แสดงทางด้านซ้ายมือของโปรแกรม ถึงตอนนี้ให้ทำการแก้ไขคำสั่ง HTML ตามต้องการ แล้วทำการบันทึก (Ctrl-S) เราก็จะเห็นข้อมูลบนหน้าเว็บถูกปรับปรุงตาม

ตานี้ก็มาถึงกรณีถ้าเราเขียนโปรแกรมแบบ Server Site พวก PHP ละจะทำอย่างไร

1. ให้กดปุ่ม Ctrl+Shift+P เพื่อเปิดช่อง Command แล้วพิมพ์ Browser Sync: Proxy mode in browser กดปุ่ม Enter

2. โปรแกรมจะรอให้เราป้อน url เข้าไป ให้ป้อน http://localhost หรือ http://localhost/ชื่อโฟลเดอร์  แล้วแต่ว่าจะกำหนดอะไรไป
   เช่น http://localhost/kasem1  แล้ว Enter 2 ครั้ง ก็จะปรากฎโปรแกรม Browser แสดงขึ้นมา

ถึงตอนนี้ลองแก้โค้ดคำสั่ง แล้ว Save ดู ที่ browser ก็จะเปลี่ยนตามอัตโนมัติด้วยเช่นกัน

แปลกแต่จริง ที่ Microsoft พัฒนา VS Code มาให้ใช้งาน แต่..... ไม่มีเมนู Print มาให้
ดังนั้นหากต้องการพิมพ์คำสั่งออกทางเครื่องพิมพ์ก็ต้องไปหาดาวน์โหล Extension มาใช้งาน

สามารถเข้าไปดาวน์โหลดส่วนเสริม PrintCode ได้ที่
https://marketplace.visualstudio.com/items?itemName=nobuhito.printcode

หลังจากติดตั้งส่วนเสริม PrintCode เรียบร้อยแล้ว 
ทำการเรียกใช้งานโดยกดปุ่ม Ctrk + Shift + P
พิมพ์ PrintCode ดังภาพ แล้วคลิกเรียกใช้งาน ดังภาพ

หอมปากหอมคอสำหรับการเริ่มใช้งาน VS Code เบื้องต้น

เขียนโปรแกรมง่ายนิดเดียว ที่เหลือยากหมด
สวัสดี

08 พฤษภาคม 2561

UNITY 3D Course : Learning 3D Game With Unity สอนเขียนเกม 3 มิติ

วิีดิโอ สอนเขียนเกม 3 มิติ ด้วย Unity 3D ทำไว้ชุดใหญ่ มาดูมาชมกันนะครับ
คลิกที่ลิงค์ตามที่อยู่เว็บด้านลา่งได้เลย

https://www.youtube.com/channel/UCnJrFe1pM8cP_7eRmP5XcNQ/videos

ภาพตัวอย่าง

 คลิกเพื่อเข้าสู่วีดิโอ
ไม่เรียนก็ไม่รู้ ไม่ดูก็ไม่เป็น ไม่เห็นคงไม่เชื่อ ไม่ทำก็ไม่ชำนาญ ไม่พยายามก็ไม่รู้ถึงอุปสรรค .....

เรียนก็รู้ ดูก็เป็น เห็นก็เชื่อ ทำก็ชำนาญ พยายามก็ผ่านอุปสรรค....

07 พฤษภาคม 2561

SQL Server - STOCK BALANCE และ ACCUMULATE

ริ่นหัวโพสว่า STOCK BALANCE และ ACCUMULATE เชื่อหลายท่านถ้าให้เขียนโปรแกรมหาเพื่อยอดคงเหลือของสต็อก หรือหายอดสะสม คงนั่งคิดและเขียนโปรแกรมกันยาวเหยียด แต่ถ้าเราใช้ความสามารถของ SQL Server แล้ว ขอบอกว่าสั้นนิดเดียว ช่วยลดเวลาเอาสมองไปคิดอย่างอื่นได้อีกมากมาย มาเริ่มกันเลย

การหายอดสต็อกคงเหลือ  (STOCK BALANCE)

สร้างตารางชั่่วคราวตัวอย่างทดสอบกันก่อน  (มีชื่อว่า #Test)

CREATE TABLE #Test    (
      id INT IDENTITY(1,1) NOT NULL,
      ItemCode CHAR(10) ,
      QtyIn MONEY ,
      QtyOut MONEY
    )

INSERT  INTO #Test
   VALUES  ( '1', 200, 0 ),
           ( '1', 250, 0 ),
           ( '1', 300, 0 ),
           ( '2', 150, 0 ),
           ( '2', 0, 150 ),
           ( '2', 300, 0 ),
           ( '2', 100, 0 )

-- เรียกดูข้อมูล
SELECT * FROM #Test

-- ทำการหายอดคงเหลือของสต็อก แสดงในลักษณะของการ์ดแสดงยอดคงเหลือ (Stock Card)
SELECT  * ,
        SUM(QtyIn - QtyOut) OVER ( PARTITION BY ItemCode ORDER BY ItemCode, id ) 
                 AS CurrBAL
FROM    #Test
ORDER BY ItemCode, id

จะได้ผลลัพธ์ดังภาพ












จะเห็นว่าการนำเอา OVER PARTITION BY มาใช้งานทำให้เราสามารถคำนวณยอดสต็อกออกมาได้อย่างง่ายดาย

การหายอดสะสม  (ACCUMULATE)

การคำนวณยอดสะสมเราก็มักจะโดยให้ทำรายงานหรีอเขียนโปรแกรมกันบ่อยๆ ซึ่งก็ไม่ยากอีกเช่นกัน มาลองศึกษาตามกันเลยครับ

CREATE TABLE #DrCr   (
      id INT IDENTITY(1,1) NOT NULL,
      ItemCode CHAR(10) ,
      Amt1 MONEY ,
      Amt2 MONEY
    )

INSERT  INTO #DrCr
   VALUES  ( '101', 200, 100 ),
           ( '101', 50,100 ),
           ( '101', 150, 100 ),
           ( '102', 550, 50 ),
           ( '102', 200, 150 ),
           ( '102', 10, 100 ),
           ( '102', 60, 300 )

ทีนี้เราจะนำเอายอดของ Amt1 บวกกับ Amt2 แล้วสะสมไปเรื่อยๆ โดยแบ่งตามกลุ่มของ ItemCode

SELECT id, ItemCode, Amt1, Amt2,
       SUM(Amt1+Amt2) OVER (PARTITION BY ItemCode
             ORDER BY ItemCode, id ROWS UNBOUNDED PRECEDING) AS AccuAmt
FROM #Accu

จะได้ผลลัพธ์ดังภาพ












จะเห็นว่ามีการนำเอา OVER PARTITION BY ItemCode -- คำสั่งนี้จะหมายถึงแบ่งกลุ่มตาม ItemCode
แล้วเรียงลำดับตาม ItemCode, id ด้วยคำสั่ง ORDER BY ItemCode, id
ROWS เป็นการกำหนดการคำนวณค่าที่เกิดขึ้นของแถวต่างๆ ที่เกี่ยวข้องให้กับแถวปัจจุบัน
UNBOUNDED PRECEDING เป็นการกำหนดให้เริ่มคำนวณต้้งแต่แถวแรกของกลุ่ม (PARTITION BY) จนถึงแถวปัจจุบัน

เอาละครับสำหรับการหา Stock Balance และ Accumulate ก็คงทำให้การทำงานสะดวกขึ้น
สวัสดีมีเวลาเยอะๆ


SQL Server - รันเลขที่เอกสาร (SEQUENCE)

กติเวลาเขียนโปรแกรม เช่น ใบสั่งซื้อ (PO) ใบขายสินค้า (Invoice) ใบส่งสินค้า (DO) และใบอื่นๆ อีกมากมาย ซึ่งเอกสารเหล่านี้จะต้องมีหมายเลข หรือเลขที่เอกสารกำกับเสมอ วิธีนึงที่ใช้กันมาตั้งแต่อดีต คือเราจะสร้างตารางสำหรับเก็บเลขที่เอกสาร แล้วไปเรียกมาใช้งานแล้วปรับปรุงเลขที่ๆใช้แล้วกลับไป (หลายขั้นตอนจัง บางคนทำไม่ถูกก็เกิดซ้ำก็มี บางคนเลขกระโดดก็มี)
ตั้งแต่ SQL Server 2012 เป็นต้นมา Microsoft ได้เพิ่มเรื่องของการจัดการ SEQUENCE หรือการรันเลขที่มาให้เราใช้งาน ซึ่งสามารถนำมาประยุกต์ใช้งานในการจัดการเลขที่ของเอกสารได้อย่างสะดวกและง่ายดาย

การสร้างเลขลำดับ

คำสั่งในการสร้างลำดับของเอกสาร
เช่น ต้องการสร้างลำดับของเอกสารใบสั่งซื้อ (PO) สามารถทำได้โดยใช้คำสั่ง

CREATE SEQUENCE PO 
   START WITH 1
   INCREMENT BY 1 ;

ต้องการสร้างลำดับของเอกสารใบสั่งซื้อ (Invoice) สามารถทำได้โดยใช้คำสั่ง

CREATE SEQUENCE IV
   START WITH 1
   INCREMENT BY 1 ;

สำหรับ PO และ IV เป็นชื่อที่เราใช้อ้างถึงในการเรียกใช้งานเลขลำดับ

ทำการ Excute คำสั่งก็จะได้ข้อมูลสำหรับเก็บเลขลำดับของ PO และ IV  ซึ่่งเลขลำดับที่เราสร้างขึ้นจะถูกเก็บไว้ภายใต้ ตาราง (System Views) ชื่อ sys.sequences ซึ่งเราสามารถเรียกดูข้อมูลของ SEQUENCE ที่เราสร้างได้โดยใช้คำสั่ง

SELECT * FROM sys.sequences      -- จะแสดงข้อมูลทั้งหมด

SELECT name, current_value FROM sys.sequences   -- จะแสดงชื่อและลำดับปัจจุบันออกมา

การลบเลขลำดับ

กรณีสร้างไว้เยอะเกินก็สามารถลบออกได้โดยใช้ คำสั่ง DROP SEQUENCE เช่น

DROP SEQUENCE IV  ;

การเรียกใช้งานเลขลำดับ

การเรียกใช้งานเลขลำดับสามารถเรียกใช้งานได้ภายใต้คำสั่งต่างๆ เช่น SELECT, INSERT, UPDATE หรือ ภายใต้ตัวแปร เป็นต้น โดยใช้คำสั่ง

NEXT VALUE FOR ชื่อ

เช่น
SELECT NEXT VALUE FOR PO 

หรือ SELECT NEXT VALUE FOR PO  AS PONO

หรือ
DECLARE @PO VARCHAR(10)
DECLARE @SEQ INT
SET @SEQ = NEXT VALUE FOR PO
SET @PO = 'PO' + RIGHT('00000' + CAST(@SEQ AS VARCHAR(5)),5)
SELECT @PO
 -- ผลลัพธ์ที่ได้    PO00001

การแก้ไขเลขลำดับ หรือกำหนดเลขลำดับใหม่

การกำหนดเลขลำดับใหม่สามารถทำได้โดยใช้คำสั่ง ALTER SEQUENCE
เช่น ต้องการกำหนดลำดับของ PO ใหม่เป็น 101

ALTER SEQUENCE PO
    RESTART WITH 100          -- เมื่อเรียกเลขลำดับในครั้งต่อไปจะได้เลข 101


การนำไปใช้งาน

สำหรับตัวอย่างต่อไปนี้เป็นการสร้าง Stored Procedure สำหรับสร้างและเรียกใช้งาน SEQUENCE

CREATE PROCEDURE spRunDoc (@DocType AS NVARCHAR(20))
AS
BEGIN
 DECLARE @cmd NVARCHAR(250)
 DECLARE @zero NVARCHAR(5) = '00000'
 IF NOT EXISTS(SELECT name FROM sys.sequences WHERE name = @DocType)
 BEGIN
  SET @cmd = 'CREATE SEQUENCE ' + @DocType + ' START WITH 1 INCREMENT BY 1'
  EXECUTE(@cmd)
 END
 SET @cmd = 'SELECT ''' + @DocType + ''' + RIGHT(''' + @zero + ''' + CAST(NEXT VALUE FOR ' + @DocType + ' AS NVARCHAR),5)'
 EXECUTE(@cmd)
END

การนำไปใช้

EXEC spRunDoc 'PO'   -- จะส่งตารางของลำดับออกมา

EXEC spRunDoc 'PO61'  -- จะส่งตารางของลำดับออกมา

จาก  Stored Procedure ข้างต้นจะเป็นการสร้าง Sequence ให้ใหม่เมื่อตรวจสอบไม่พบชื่อ Sequence ที่อ้างถึง จากนั้นก็ทำการเรียกเลขลำดับออกมา


สวัสดีมีเลขลำดับไว้ใช้งาน





14 มีนาคม 2561

VFP - แปลงตัวเลขเป็นตัวอักษรไทย (เงินบาท) ฟังก์ชั่นในตำนาน

ไปเจอฟังก์ชั่นในตำนานที่มีการโพสไว้เมื่อยี่สิบปีก่อน หลายคนนำไปใช้ อึ้งและทึ่งกับคนที่คิด วันนี้เวลาผ่านไปนานมาก ฟังก์ชั่นนี้ก็ยังคงอยู่ในใจหลายๆ คน
แปลงค่าเงิน มาเป็นตัวอักษรไทย
999.99 (เก้าร้อยเก้าสิบเก้าบาทเก้าสิบเก้าสตางค์) คิดได้สุดยอดมาก บรรทัดเดียวจริงๆ

FUNCTION spell
PARAMETER Vn
Va = STRT(TRAN(Vn,'@R G9A9B9C9D9E9F9A9B9C9D9E9F9.9F9S'),' F0.','')

RETURN STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(;
STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(STRT(;
SUBS(Va,RAT(' ',Va)+2,35),'1','หนึ่ง'),'2','สอง'),'3','สาม'),'4','สี่'),;
'5','ห้า'),'6','หก'),'7','เจ็ด'),'8','แปด'),'9','เก้า'),'.0F0S','บาทถ้วน'),;
'0F',''),'0E',''),'0D',''),'0C',''),'0B',''),'0',''),'A','ล้าน'),;
'B','แสน'),'C','หมื่น'),'D','พัน'),'E','ร้อย'),'F','สิบ'),'.','บาท'),;
'หนึ่งสิบ','สิบ'),'สองสิบ','ยี่สิบ'),'สิบหนึ่ง','สิบเอ็ด'),'S','สตางค์')

ขอบคุณ คุณ Karun ที่ได้สร้างฟังก์ชั่นนี้ไว้ให้พวกเราใช้งาน

07 มีนาคม 2561

SQL Server - Clear Transaction Log

Transaction Log คือ ข้อมูลที่เกิดขึ้นจากการบันทึกการทำงานทั้งหมดของฐานข้อมูล โดยจะเกิดขึ้นเมื่อเรากำหนดรูปแบบการกู้คืนข้อมูล (Recover Model) เป็นแบบ full หรือ bulk operation ซึ่งกำหนดในระหว่างที่เราสร้างฐานข้อมูล หรือถ้าเป็นฐานข้อมูลเดิมก็เข้าไปแก้ไขรูปแบบได้โดยคลิกขวาที่ฐานข้อมูล แล้วเลือกรายการ Properties ดังภาพ

จะปรากฎหน้าต่าง Database Properties ขึ้นมาก ให้เลือกรายการ Options จะปรากฏรายละเอียดดังภาพ

สามารถกำหนดรูปแบบการกู้คืนได้ตามต้องการ ปกติถ้าเป็นฐานข้อมูลที่ใช้งานจะกำหนด Recovery Mode เป็นแบบ Full ซึ่งรูปแบบนี้จะทำให้ทุกครั้งที่มีการกระทำกับฐานข้อมูลเมื่อมีการสั่งงานคำสั่ง เช่น  INSERT UPDATE DELETE หรือ SELECT เป็นต้น ทุกคำสั่งที่สั่งงานก็จะมีการเก็บ LOG ไว้ภายใต้ไฟล์ Transaction Log ทำให้เมื่อใช้งานไปนานวัน ก็จะทำให้ไฟล์ Transaction มีขนาดใหญ่มาก กินพื้นที่ของฮาร์ดดิสก์เป็นจำนวนมาก แต่ถ้าเราทำการเคลียร์ข้อมูลของ Transaction Log ออกไปก็จะทำให้ไม่สามารถกู้คืนข้อมูลในช่วงเวลาที่ทำการเก็บ Transaction Log นั้นได้อีก **  ดังนั้น  ก่อนจะทำการเคลียร์ Transaction Log ให้ทำการ Backup แบบ Full Backup ข้อมูลเก็บไว้ก่อน เมื่อทำการ Backup แล้วก็ทำการเคลียร์เพื่อเพิ่มพื้นที่ได้ตามต้องการ

สำหรับวิธีการเคลียร์ Transaction Log สามารถทำได้โดยใช้คำสั่ง ดังนี้

สำหรับ SQL Server 2005 หรือเก่ากว่า

BACKUP LOG ชื่อฐานข้อมูล WITH TRUNCATE_ONLY
BACKUP LOG ชื่อฐานข้อมูล WITH NO_LOG

ทั้ง 2 คำสั่งทำหน้าที่เหมือนกัน คำสั่ง WITH NO_LOG ใช้ในกรณีที่เราไม่สามารถใช้ TRUNCATE_ONLY ได้ ดังนั้น ก็สั่งได้ทั้ง 2 คำสั่งได้เลย

แล้วทำการลดขนาดของไฟล์ Transaction Log ให้เหลือน้อยๆ เช่น เหลือ 1 MB

DBCC SHRINKFILE (ชื่อฐานข้อมูล_log, 1)

สำหรับ SQL Server 2008 ขึ้นไป

สำหรับชื่อฐานข้อมูล ให้เติม    _log  ต่อท้ายด้วย

DBCC SHRINKFILE (N'ชื่อฐานข้อมูล_log' , 0, TRUNCATEONLY)
DBCC SHRINKFILE (N'ชื่อฐานข้อมูล_log' , 1)


สวัสดีมีพื้นที่เหลือใช้
อย่าลืม BACKUP ข้อมูลก่อนน่ะครับ

18 มกราคม 2561

SQL Server - ติดตั้ง SQL Server บน Linux (Ubuntu)

        เป็นการปรับตัวของ Microsoft ที่พัฒนา SQL Server สำหรับติดตั้งบน OS Linux ทำให้ผู้ที่อยากใช้ Linux เป็น Server ทำการติดตั้ง SQL Server ได้แล้ว (ประหยัดงบไปได้เยอะสำหรับ หน่วยงานเบี้ยน้อยหอยน้อย) เอาละมาเริ่มกันเลย

1. ทำการติดตั้งระบบปฏิบัติการ Linux สำหรับผู้เรียนใช้ Ubuntu 16.04 ซึ่ง Microsoft ก็ระบุให้ใช้รุ่น 16.04 หรือใหม่กว่า

2. เปิดหน้าต่าง Terminal ขึ้นมาแล้วลุยกันเลย (วิธีติดตั้งอ้างอิงมาจาก https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu)

          2.1 Import the public repository GPG keys: ด้วยคำสั่ง

             wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

          2.2 Register the Microsoft SQL Server Ubuntu repository: ด้วยคำสั่ง

               sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"

          2.3 ติดตั้ง SQL Server : ด้วยคำสั่ง

                sudo apt-get update 
        sudo apt-get install -y mssql-server

                ในขั้นตอนนี้การติดตั้งจะให้

          2.4 ทำการเรียก mssql-conf setup เพื่อเลือกว่าจะติดตั้ง SQL Server รุ่นไหน มีทั้งเสียเงินและฟรี หลายรุ่นมาก และกำหนดรหัสผ่านสำหรับ sa : ด้วยคำสั่ง

                sudo /opt/mssql/bin/mssql-conf setup


           เมื่อถึงขั้นตอนที่ให้เลือกว่าจะติดตั้ง SQL Server ให้พิมพ์ข้อ 3 เพื่อติดตั้ง SQL Server รุ่น Express ระบบจะติดตั้งและ ให้กำหนดรหัสผ่าน  
           การกำหนดรหัสผ่านให้กำหนดอยา่งน้อย 8 ตัว มีตัวอักษรพิมพ์ใหญ่ พิมพ์เลข ตัวเลข

           2.5 ดูสถานะของ service ที่ run : ด้วยคำสั่ง
     
        systemctl status mssql-server  

           ** หากมีการใช้งานแบบรีโมท SQL Server ให้เปิดพอร์ด 1433 และ 433 ด้วยคำสั่ง 
               
        sudo ufw enable
        sudo ufw allow 1433
        sudo ufw allow 433
 

          เรียบร้อยสำหรับการติดตั้ง SQL Server บน Linux แต่ยังไม่จบ... อ่านต่อข้อ 3

3. ติดตั้ง SQL Server Command Line Tools เครื่องมือป้อนคำสั่ง SQL แบบ textmode บน Linux

         3.1 Import the public repository GPG keys: ด้วยคำสั่ง         

         wget -qO- https://packages.microsoft.com/keys/microsoft.asc 
| sudo apt-key add -

          3.2 Register the Microsoft SQL Server Ubuntu repository: ด้วยคำสั่ง

          sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/prod.list)"

          3.3 ติดตั้ง SQL Command Line : ด้วยคำสั่ง

          sudo apt-get update
          sudo apt-get install -y mssql-tools unixodbc-dev

         3.4 ทำการเพิ่ม PATH สำหรับเรียกใช้งาน sqlcmd จากที่ไหนก็ได้ : ด้วยคำสั่ง 

          echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
          echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
          source ~/.bashrc

 *** เรียบร้อยสำหรับการติดตั้ง SQL Server บนระบบปฏิบัติการ Linux

การเรียกใช้ SQL Server ผ่านทาง SQL Server Command Line ใช้คำสั่ง

          sqlcmd -S localhost -U SA -P รหัสผ่าน

ที่เหลือก็สร้าง database สร้าง table ด้วยคำสั่ง T-SQL ตามต้องการ

หรือ เปิดใช้งาน SQL Server Management Studio จากเครื่องที่เป็น Windows ที่อยู่ในเครือข่ายเดียวกันโดยอ้าง Server ด้วยหมายเลข ip ของ Server Linux

 ต้องการดูหมายเลข ip ของ Linux ให้ใช้คำสั่ง 
 
         ifconfig


4. การติดตั้ง Full Text Search

         4.1 ติดตั้ง mssql-server-fts : ด้วยคำสั่ง

        sudo apt-get update 
        sudo apt-get install -y mssql-server-fts

5. หากต้องการจัดการฐานข้อมูลด้วย SQL Server Management Studio (SSMS) สำหรับในช่วงเวลานี้จำเป็นต้องติดตั้งบนระบบปฏิบัติการ Windows ที่เครื่องลูกข่ายเท่านั้น ยังไม่รู้ว่าอีกเมื่อไหร่ MS จะทำ SSMS สำหรับ Linux มาให้เราใช้
         5.1 ให้ดาวน์โหลด SSMS ตั้งแต่รุ่น SSMS 17.x ขึ้นไปมาใช้งาน โดยเข้าไปดาวน์โหลดที่เว็บ

         https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms

6. ติดตั้ง MariaDB
 
        sudo apt-get update 
        sudo apt-get install mariadb-server
  
           ทำการกำหนดรหัสผ่านให้กับ root โดยพิมพ์คำสั่ง
  
        sudo apt-get install mysql_secure_installation
 
            จะขึ้นให้กำหนดรหัสผ่านสำหรับ root จากนั้นกำหนด
            Remove anonymous user ?    Y
            Disallow root login remotely?  Y
            Remove test database and access to it? Y
            Reload privilege tables now? Y

            เข้าใช้งาน mysql ด้วยคำสั่ง

         sudo mysql -uroot -pรหัสผ่าน

7. ติดตั้ง PHP7
 
        sudo apt-get update 
        sudo apt-get install php-fpm

           ทำให้ nginx มองเห็น php
 
        sudo nano /etc/nginx/sites-enabled/default 
 
           ให้ไปที่บรรทัด

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
           แล้วแก้เพิ่ม index.php เข้าไป

        index index.php index.html index.htm index.nginx-debian.html; 
  
           ไปแก้ตรง pass the PHP script โดยเอาเครื่องหมาย # ออก ตามตัวอย่าง

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
               include snippets/fastcgi-php.conf;
        #
        #       # With php7.0-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php7.0-fpm:
               fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }        
  
           และตรงบรรทัด deny access to .htaccess file
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
               deny all;
        }
 
           กดปุ่ม Ctrl-O แล้ว Enter จากนั้นกด Ctrl-X เพื่อบันทึก และออกจากการแก้ไข

8. ติดตั้ง nginx เพื่อทำ web server
 
        sudo apt-get update 
        sudo apt-get install nginx
 
           การ เปิด - ปิด Service ของ nginx
          
        sudo service nginx stop         -- ปิด Service ของ nginx
        sudo apt-get install nginx      -- เปิด Service ของ nginx

           สำหรับไฟล์ html ต่างๆ จะถูกจัดเก็บไว้ภายใต้ /var/www/html สามารถเข้าไปดูได้โดยใช้คำสั่ง

        cd /var/www/html 
        ls -l 

           ทำการสร้างไฟล์ php เพื่อทดสอบ

        sudo nano /var/www/html/index.php
 
           จากนั้นพิมพ์คำสั่งดังนี้          
           
       <?php 
            phpinfo();
       ?>
 
           บันทึกแล้วทดสอบ....

9. ติดตั้ง phpmyadmin สามารถเข้าไปดูได้โดย
อ้างอิงจาก https://websiteforstudents.com/install-phpmyadmin-on-ubuntu-17-04-17-10-with-nginx-mariadb-and-php-fpm-support/ 

       sudo apt-get install phpmyadmin php-gettext
 
ระหว่างติดตั้งจะให้กำหนดรหัสผ่านสำหรับ MariaDB หรือ MySQL
จากนั้น เมื่อถึงหน้าจอกำหนด Web Server ให้คลิกปุ่ม Tab เพื่อมาที่ปุ่ม OK โดยไม่ต้องเลือก Web Server  ดังภาพ















แล้วทำการติดตั้งไปจนเสร็จ

10. ส่วนนี้เพิ่มเติม สำหรับ ทำให ้Files (File Manager) เปิดแบบใช้สิทธิ root ให้ติดตั้งโปรแกรม ด้วยคำสั่ง
           
      sudo apt-get install -y nautilus-admin

      nautilus -q 

11. การเปิด File Manager ของ Ubuntu ผ่านทาง Terminal
           ให้ไปที่ Folder ที่ต้องการ เช่น cd  /var/www/html
           จากนั้นเปิด File Manager ด้วยคำสั่ง

      sudo xdg-open .


การติดตั้ง SQL Server , nginx , PHP 7, MariaDB  บน Ubuntu ง่ายนิดเดียว

สวัสดีมีเงินเหลือใช้

16 มกราคม 2561

VB.Net : Send email

การส่ง Email ด้วย VB.Net ผ่านทาง gmail ของ google
1. ให้ทำการสร้างฟอร์ม จากนั้นทำการออกแบบหน้าจอตามตัวอย่าง

 ให้กำหนดชื่อ Textbox  และ Label ตามภาพ

- txtTo คือ email ที่เราต้องการส่ง
- txtSubject คือ ข้อความหัวเรื่อง
- txtMessage คือข้อความที่ส่ง
      - กำหนด Multiline = true
- lblSendResult ไว้สำหรับแสดงสถานะการส่งว่าสำเร็จหรือไม่
- ปุ่ม Send Mail ไว้คลิกส่ง email

2. จากนั้นทำการดับเบิ้ลคลิกที่ปุ่ม Send Mail เพื่อทำการเขียนคำสั่ง ดังนี้ (คำสั่งสีน้ำเงิน)
** ทำการ Import System.Net.Mail เข้ามาด้วย ห้ามลืม เดี๋ยวจะ Error

Imports System.Net.Mail 

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim Mail As New MailMessage
        Try
            Mail.Subject = txtSubject.Text
            Mail.To.Add(txtTo.Text)
            Mail.From = New MailAddress("ใส่EmailของGoogle@gmail.com")
            Mail.Body = txtMessage.Text

        
            ' หากต้องการแนบไฟล์ ก็เพิ่มตรงส่วนนี้เข้าไป
            Dim attachment As System.Net.Mail.Attachment
            attachment = New System.Net.Mail.Attachment("D:\Pictures\vbSendMail.png")
            Mail.Attachments.Add(attachment)


            Dim SMTP As New SmtpClient("smtp.gmail.com")
            SMTP.EnableSsl = True
            SMTP.Credentials = New System.Net.NetworkCredential("ใส่EmailของGoogle@gmail.com", "ใส่ Email Password")
            SMTP.Port = 587
            SMTP.Send(Mail)
            lblSendResult.Text = "Email sent successfully!"

            txtTo.Text = ""
            txtSubject.Text = ""
            txtMessage.Text = ""
        Catch ex As Exception
            lblSendResult.Text = ex.Message
        End Try
    End Sub

End Class


ทำการบันทึกฟอร์ม

3. จากนั้นทำการ login เข้าไปที่ gmail ที่เราจะใช้สำหรับเป็นตัวส่ง email

4. หลังจากที่ login เข้า gmail แล้วให้เข้าไปกำหนดสิทธิโดยเข้าไปที่เว็บ 

https://myaccount.google.com/lesssecureapps

แล้วทำการเปิดสิทธิ์ตามภาพ


จากนั้นก็ไป run ฟอร์มที่ VB.Net แล้วทดสอบส่ง Email ดู

หมายเหตุ  สำหรับการกำหนดค่า เซิร์ฟเวอร์ SMTP ของ gmail สามารถเข้าดูได้ที่
https://support.google.com/a/answer/176600?hl=th


โชคดีมีเมล์ส่ง


"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.