13 พฤษภาคม 2565

PostgreSQL : กำหนดให้ postgresql เก็บ log คำสั่ง SQL

การกำหนดให้ PostgreSQL เก็บ log คำสั่ง SQL

1. เข้าไปที่แก้ไขไฟล์ postgresql.conf กรณีใช้ postgresql 14 ถ้ารุ่นอื่นก็เปลี่ยนตัวเลขรุ่นตามต้องการ โดยป้อนคำสั่งผ่าน Terminal

        
sudo vim /etc/postgresql/14/main/postgresql.conf

        จากนั้น ไปหาและแก้ไขค่าตามนี้          

      

        กดปุ่ม i เพื่อเข้าโหมด insert ของ โปรแกรม vim แล้วแก้ไข

         log_destination = 'csvlog'
         logging_collector = on
         log_directory = 'pg_log'
         log_filename = 'test_postgresql-%Y-%m-%d_%H%M%S.log'
         log_statement = 'all'

         เมื่อแก้ไขเสร็จให้กดปุ่ม Esc เพื่อออกจากโหมดแก้ไข
         กด   
:w       บันทึก
          กด   
:q        ออก

2. ทำการ รีสตาร์ทเซอร์วิสของ postgresql ใหม่ ด้วยคำสั่ง

         sudo systemctl restart postgresql

จากนั้นไป เมื่อมีการใช้คำสั่ง SQL จัดการกับฐานข้อมูลก็จะถูกเก็บ log ไว้ที่          

        /var/lib/postgresql/14/main/   ภายใต้โฟลเดอร์ pg_log

เรียกดูไฟล์

        sudo ls -l /var/lib/postgresql/14/main/pg_log/

เมื่อพบไฟล์เป้าหมาแล้ว ก็เอาออกมาไว้ที่อื่น เช่น โฟลเดอร์ Desktop

        sudo cat /var/lib/postgresql/14/main/pg_log/ชื่อไฟล์log.csv > Desktop/ชื่อไฟล์log.csv

เป็นอันเรียบร้อย  


03 พฤษภาคม 2565

PostgreSQL : กำหนด Configuration สำหรับฐานข้อมูล PostgreSQL บน Ubuntu 20.04 ให้สามารถเข้าถึงผ่าน ip address จากภายนอก

การกำหนด Configuration สำหรับฐานข้อมูล PostgreSQL บน Ubuntu 20.04  ให้สามารถเข้าถึงผ่าน ip address จากภายนอก
สำหรับเครื่องที่ใช้ เป็นระบบปฏิบัติการ Windows 10 ดังนั้นเราจำเป็นต้องติดตั้ง Hyper-V ซึ่งเป็น Virtualization ของ Windows เอง ดั้งนั้นของที่มีก็ใช้แบบไม่ต้องไปหาอื่นไกล ส่วนการติดตั้ง Hyper-V และติดตั้ง Ubuntu 20.04 ไม่ขอกล่าวถึง


 

 

 

 

 

 

 

 

 

เปิด Terminal แล้วเรียกใช้คำสั่ง ifconfig ดู ip address แล้วจดไว้เพื่อจะ Connect เข้าถึงข้อมูล

เมื่อติดตั้ง Ubuntu ใน hyper-v เสร็จก็ไปทำการติดตั้ง PostgreSQL ต่อเลยโดยเข้าไปดูตาม Link ด้านล่างได้เลย 555

https://www.cherryservers.com/blog/how-to-install-and-setup-postgresql-server-on-ubuntu-20-04

 

ทำการเปิด firewall ให้กับ port ที่ต้องการ เช่น 5432 โดยพิมพ์คำสั่ง ดังนี้

sudo ufw allow from any to any port 5432 proto tcp 

* สั้ง List รายการเพื่อตรวจสอบว่า port เปิดหรือไม่

sudo lsof -i -P -n | grep LISTEN

ติดตั้งเสร็จ ให้เข้าไปแก้ไข config เพิ่มเติ่มจากเว็บก่อนหน้าที่ให้กำหนดไว้ โดยพิมพ์คำสั่งที่ Terminal

sudo vim /etc/postgresql/14/main/postgresql.conf

แล้วแก้ ตรงส่วนของ listen_addresses = 'local' ให้เป็น

listen_addresses = '*'

จากนั้นไปแก้ไฟล์ pg_hba.conf

sudo vim /etc/postgresql/14/main/pg_hba.conf

แล้วเพิ่มสิทธิ์เข้าไปตามนี้ หรือจะกำหนดเฉพาะไอพีก็ได้  แต่สำหรับตัวอย่างข้างล่างคือเปิดหมด

host     all    all     0.0.0.0/0           scram-sha-256
host     all    all     ::1/128              trust
host     all    all     127.0.0.1/32     trust

ทำเสร็จก็ทำการ restart service ด้วยคำสั่ง

systemctl restart postgresql

เสร็จสำหรับ Ubuntu และ PostgreSQL

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

จากนั้นไปที่เครื่อง Client ที่เราต้องการติดต่อที่ Windows 10

ไปทำการดาวน์โหลด ODBC มาลงที่เครื่อง ที่เว็บ

https://www.postgresql.org/ftp/odbc/versions/msi/

ให้เลือกตัวใหม่ ๆ แล้วเลือก 32 bit หรือ 64 bit ขึ้นอยู่กับโปรแกรมที่เราจะติดต่อว่าเป็น 32 bit หรือ 64 bit ก็ลงตามนั้น

ส่วนการติดต่อก็ผ่าน connection string ประมาณนี้

Driver={PostgreSQL Unicode};Server=172.18.117.166;Port=5432;Database=ชื่อDatabase;Uid=postgres;Pwd=รหัสผ่าน;

ตัวอย่างโปรแกรมที่ใช้เขียนเพื่อติดต่อฐานข้อมูล

cPostgreSQL = [Driver={PostgreSQL Unicode};Server=172.18.117.166;Port=5432;Database=test_erp;Uid=postgres;Pwd=12345555;]
nHandle = SQLSTRINGCONNECT(cPostgreSQL)
IF nHandle > 0
    TEXT TO cSQL NOSHOW TEXTMERGE
        SELECT * FROM clients
    ENDTEXT
    nSuccess = SQLEXEC(nHandle,cSQL)
    IF nSuccess > 0
        ** นำข้อมูลมาแสดงข้อมูล
    ENDIF
    =SQLDISCONNECT(nHandle)
ENDIF


16 กุมภาพันธ์ 2565

macOS : macOS Monterey การติดตั้ง Home-brew และติดตั้ง apache php

macOS Monterey เป็นรุ่นที่ตัด php ออกจากสารบบ ถ้าจะใข้ต้องลงเอง 555

เริ่มกันเลย ก่อนอื่นให้เปิด Terminal ขึ้นมาก่อน แล้วป้อนคำสั่ง

1. ติดตั้ง Xcode command line tools

        xcode-select --install

2. ติดตั้ง Apache (ล้างของเก่าแล้วลงใหม่)

       sudo apachectl stop

        sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null


        brew install httpd


    จากนั้นก็ทำการ stop แล้ว start service ของ php

        brew services stop httpd

        

        brew services start httpd


    สำหรับ document root ในการนำไฟล์ html ไปใส่ จะเก็บที่ /usr/local/var/www     



3. ติดตั้ง Visual Studio Code กัน


        brew install --cask visual-studio-code


        แต่ถ้าเคยติดตั้ง VS Code ไปแล้วก็ให้หาดูว่ามี โฟลดเดอร์ /opt/homebrew/bin อยู่ไหม 

        ถ้าไม่มีให้สร้างก่อน ด้วยคำสั่ง mkdir  แล้วเรียกคำสั่ง ตามด้านล่าง


        sudo ln -s /Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code /opt/homebrew/bin/code


4. ติดตั้ง php 7.4   รุ่นอื่นรอให้เขาทำออกมาก่อน แล้วก็เปลี่ยนตัวเลขรุ่นด้านหลังคำสั่งเอาเองนะ


        brew install shivammathur/php/php@7.4

        

        กำหนด path ให้กับ php ด้วยคำสั่ง


        brew link --overwrite --force php@7.4  


        การ start / stop / restart  php จะสั่งอะไรก็เลือกเอาได้ ตามต้องการ 

        แต่ยังไงสุดท้ายก็อย่าลืม start ละ

        stop

        brew services stop shivammathur/php/php@7.4

        start

        brew services start shivammathur/php/php@7.4

         restart

         brew services restart shivammathur/php/php@7.4


        หลังจาก start php ได้แล้ว ลองทดสอบดู ถาม version ของ php กัน


        php -v


        ลองเรียกใช้งาน phpinfo()


        php -r 'phpinfo();'


  5. แก้ไขไฟล์ httpd.conf    

      ให้เข้าไปแก้ที่โฟลดเดอร์   /usr/local/etc/httpd/   (สำหรับ cpu intel นะ)

      ถ้า cpu M1 ก็ไปอีกที่ ... ลืม ไว้หาก่อน

    

        sudo code httpd.conf


        แล้วไปเพิ่ม 

    

        LoadModule php7_module    /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

        

        แก้ตรง dir_module ตามนี้


        <IfModule dir_module>

            DirectoryIndex index.php index.html

        </IfModule>

        <FilesMatch \.php$>

            SetHandler application/x-httpd-php

        </FilesMatch>

04 กันยายน 2564

Unity : การติดตั้ง Unity Remot 5

การติดตั้งและใช้งาน Unity Remote 5 สำหรับ OS Android

กำหนดค่า โทรศัพท์/แท็บเล็ต

1. ไปที่หน้า ตั้งค่า (Setting) แล้วเข้าไปที่ เกี่ยวกับเครื่อง (Aboout Phone) / เกี่ยวกับแท็บเล็ต (About Tablet)








2. ไปที่ หมายเลขรุ่น (Build Number) แล้วให้นิ้วแตะ 7 ครั้ง จนกระทั่งระบบแจ้งว่าเราเป็นนักพัฒนา (Developer)







3. 
ให้ออกมาที่หน้าตั้งค่า (Settingจะเห็นรายการ ทางเลือกผู้พัฒนา (Developer Option) ให้เปิดเข้าไป





4. ที่หน้า ทางเลือกผู้พัฒนา (Developer Option) ให้เปิดสถานะ และเปิดในส่วนของ การแก้ไขข้อบกพร่อง USB (USB Debugging)













5.
เชื่อมต่อสาย USB เข้ากับเครื่องคอมพิวเตอร์ แล้วให้สิทธิ์ในการเข้าถึงโทรศัพท์/แท็บเล็ต
6. ติดตั้งแอพ Unity Remote 5 จาก Play Store










7. เปิดแอพ Unity Remote 5 เพื่อรอรับการทดสอบเกมจากโปรแกรม Unity จากเครื่องคอมพิวเตอร์








กำหนดค่า โปรแกรม Unity

1. ที่โปรแกรม Unity เลือกเมนู File -> Build Setting ที่หน้าต่าง Build Setting ให้เลือก Android แล้วคลิกปุ่ม Switch Platform










2. เลือกเมนู Edit -> Project Setting ที่หน้าต่าง Project Setting เลือก Editor ในช่อง Device เลือก Any Android Device




จากนั้นก็ทำการคลิกปุ่ม Play เพื่อทดสอบเกม ตัวเกมก็จะไปปรากฎที่หน้าคอมพิวเตอร์ และหน้าจอโทรศัพท์/แท็บเล็ต พร้อม ๆ กัน ในการบังคับให้บังคับผ่านทางโทรศัพท์/แท็บเล็ต

ผ่านไป 1 ปี สำหรับการเพิ่มกระทู้ใหม่
มีโชคร่ำรวยเงินทอง


04 กันยายน 2563

SQL Server : Install SQL Server and MariaDB via Docker Container on Windows 10

 ทความนี้นำเสนอ การติดตั้ง Docker บน Windows 10 พร้อมติดตั้ง SQL Server บน Docker 

ติดตั้ง Docker 

 ให้ทำการดาวน์โหลดตัวติดตั้ง Docker สำหรับ Windows 10 โดยเข้าไปที่เว็บ

https://www.docker.com/get-started

จากนั้นทำการดาวน์โหลด Docker Desktop for Windows 

จะได้ไฟล์ Docker Desktop Installer เมื่อได้ไฟล์เรียบร้อยให้ทำการติดตั้งโปรแกรมได้เลย 

ขณะติดตั้งจะขึ้นหน้าต่าง 







ให้คลิก OK

โปรแกรมก็จะทำการติดตั้งจนเสร็จ 

จะปรากฎไอคอน Docker Desktop ที่หน้า Desktop ให้ดับเบิ้ลคลิกเพื่อเรียกใช้งาน Docker 

รอสักครู่ให้ Docker Start จนเร็จ จากนั้นไปคลิกที่ ปุ่ม Hidden Icon ที่ Task bar 







ให้คลิกที่ไอคอน Docker แล้วเลือก Dashboard จะปรากฎหน้าต่าง Docker Dashboard

จากนั้นคลิก Sign In
(หากยังไม่เคยสมัครให้ทำการสมัครก่อนโดยเข้าไปสมัครที่ http://hub.docker.com)








หน้าต่าง Dashboard จะเป็นตัวบริหารจัดการ Container ที่เราสร้างขึ้น 

ต่อไปเราไปทำการติดตั้ง SQL Server 


ติดตั้ง SQL Server

ไปที่ Windows Search ที่ Taskbar แล้วค้นหา PowerShell 

เมื่อเจอแล้วให้ เปิดหน้าต่าง Windows PowerShell ในโหมด Run as Administrator










เมื่อเปิดหน้าต่าง PowerShell ขึ้นมาแล้วให้พิมพ์

docker login

เริ่มต้นติดตั้ง SQL Server 

สำหรับตัวอย่างคำสั่ง 2019-CU6-ubuntu-16.04 จะเป็นการติดตั้ง SQL Server 2019 

หากต้องการติดตั้งในรุ่นอื่นสามารถกำหนดรุ่นได้ตามต้องการ โดยดูรุ่นต่าง ๆ ตามลิงค์
https://hub.docker.com/_/microsoft-mssql-server

1. ดาวน์โหลดไฟล์ติดตั้งสำหรับ SQL Server โดยพิม์คำสั่ง 

docker pull mcr.microsoft.com/mssql/server:2019-CU6-ubuntu-16.04

โปรแกรมจะทำการดาวน์โหลด SQL Server ดังภาพ







2. สร้าง Container และติดตั้ง SQL Server ให้กับ Docker โดยพิมพ์คำสั่ง

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=รหัสผ่าน" -p1433:1433 --name sql2019 -d mcr.microsoft.com/mssql/server:2019-CU6-ubuntu-16.04

*** กำหนดรหัสผ่านสำหรับ SA ตรง รหัสผ่าน ตามต้องการ






เมื่อกำหนดเสร็จ ไปที่หน้าต่าง Docker Dashboard จะปรากฎ SQL Server ดังภาพ







ยินดีด้วย ติดตั้ง SQL Server ภายใต้ Docker เสร็จเรียบร้อย ในหน้าต่างนี้เราสามารถบริหารจัดการ Container sql2019 ได้ผ่านไอคอนด้านหลัง 

ต่อไปเราจะทำการทดสอบ ให้ไปทำการปิด firewall ก่อน

แล้วทำการติดตั้ง SQL Management Studio ดาวน์โหลดได้ตามเว็บไซต์ด้านล่าง

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

ติดตั้งเสร็จทำการเปิดใช้งาน

แล้ว login เข้า SQL Server  ตามภาพด้านล่าง


ทดสอบดูว่าเราติดตั้ง SQL Server รุ่นใด












ยินดีด้วย ทำสำเร็จแล้ว เย้ ๆ ๆ ๆ 

สำหรับระบบปฎิบัติการ MacOS ก็ทำลักษณะเดียวกัน แต่ต้องระวังเรื่องการกำหนดรหัสผ่าน ซึ่งต้องเป็นรหัสผ่านที่เป็นไปตามข้อกำหนด คือ อย่างน้อย 8 ตัวอักษรและมีตัวอักษรใหญ่เล็ก เป็นต้น ไม่เช่นนั้นจะไม่สามารถ start ตัว sql container ได้

สำหรับระบบปฏิบัติการ MacOS Linux ยังไม่มี SSMS เราสามารถดาวน์โหลด Azure Data Studio มาใช้แทนได้ โดยไปทำการดาวน์โหลดได้ที่เว็บ 

https://github.com/Microsoft/azuredatastudio

ติดตั้ง MariaDB

1. เปิด Terminal หรือ Powershell แล้วป้อนคำสั่ง

docker login

2. ดาวน์โหลดไฟล์ติดตั้งสำหรับ MariaDB  โดยพิม์คำสั่ง 

docker pull mariadb:latest

รอจนกระทั่งทำการดาวน์โหลดโปรแกรมเสร็จ

3. สร้าง Container และติดตั้ง MariaDB ให้กับ Docker โดยพิมพ์คำสั่ง

docker run --name mariadb -e MYSQL_ROOT_PASSWORD=รหัสผ่าน -d mariadb 


*** กำหนดรหัสผ่านสำหรับ root ตรง รหัสผ่าน ตามต้องการ


หากไม่มีข้อผิดพลาดใด ๆ การติดตั้งสำเร็จเรียบร้อย ให้ไปเปิด Docker -> Dashboard จะปรากฎ Container ของ mariadb 



ติดตั้ง Web Server

1. เปิด Terminal หรือ Powershell แล้วป้อนคำสั่ง

docker login

2. ดาวน์โหลดไฟล์ติดตั้งสำหรับ PHP 7.4 โดยพิม์คำสั่ง (รุ่นล่าสุดปี 2563)

docker pull php:7.4-apache


3. สร้าง Container และติดตั้ง PHP ให้กับ Docker โดยพิมพ์คำสั่ง


docker run -p 80:80 --name webm php:7.4-apache  


กรณีที่มีการใช้งาน port 80 อยู่ก่อนแล้ว ให้ทำการเปลี่ยน port ใหม่ เช่น 8080


docker run -p 8080:80 --name webm php:7.4-apache 



4. เมื่อติดตั้งเสร็จเรียบร้อย ให้เปิด browser แล้วป้อน url ดังนี้


http://localhost


หากขึ้นข้อความ ว่า....

Forbidden

You don't have permission to access this resource.


Apache/2.4.38 (Debian) Server at localhost Port 80



ยินดีด้วย คุณติดตั้ง web server ได้แล้ว



กลับมานับ 1 กันใหม่


เราจะมาทำการเขียน php กัน ดังนั้น เริ่มต้นกันใหม่อีกครั้ง 


1. ให้ไปทำการสร้าง โฟลเดอร์ใหม่ ชื่ออะไรก็ได้ เช่น php_www

แล้วไปสร้างเท็กซ์ไฟล์ ธรรมด้า ธรรมดา ชื่อ Dockerfile  (ไม่ต้องมีนามสกุลไฟล์) 

ป้อนคำสั่งในไฟล์ ดังนี้


FROM php:7.4-apache



2. สร้างไฟล์ชื่อ docker-compose.yml แล้วเขียนคำสั่ง ดังนี้


version: "3"
services:
www01:
build: .
ports:
- "8080:80"
volumes:
- ./src:/var/www/html/
networks:
- default



3. สร้างโฟลเดอร์ ชื่อ src ภายใต้ php_www แล้วเขียนคำสั่ง php เพื่อทดสอบ 

โดยสร้างไฟล์ชื่อ phpinfo.php แล้วป้อนคำสั่ง


<?php 

    phpinfo();

?>


เมื่อสร้างไฟล์เสร็จจะได้ไฟล์ตามภาพด้านล่าง
















4. เปิดโปรแกรม Powershell หรือ Terminal

พิมพ์


docker login


แล้วย้ายตำแหน่งโฟล์เดอร์ไปที่ โฟลเดอร์ที่เก็บไฟล์ ( php_www ที่สร้างไว้ในข้อ 1 )


แล้วป้อนคำสั่งต่อ ดังนี้


docker-compose up

กลับไปดูที่ Docker dashboard จะปรากฎ container รันขึ้นมาอีกตัว



 














5. เปิดโปรแกรม browser ขึ้นมาแล้วป้อน url ดังนี้


http://localhost:8080/phpinfo.php


จะปรากฎหน้าจอ phpinfo ดังภาพ





















ที่เหลือก็นำไฟล์ .php มาใส่ไว้ใน โฟลเดอร์ src (โฟลเดอร์ที่สร้างไว้ในข้อ 3) ก็สามารถเรียกใช้งานได้แล้ว


สรุปง่าย ๆ แบบส่วนตัว


container ที่สร้างเหมือนเราสร้างโปรเจกต์ ในนั้นก็จะประกอบไปด้วยไฟล์ที่จำเป็น 

ไม่ใช้ก็ลบ container ออก หรือ หยุดก็ได้ 

ใช้เมื่อไหร่ก็เข้าไปที่โฟลเดอร์ แล้วก็เรียกคำสั่ง  docker-compose up 

ระวังเรื่อง port ชนกันให้ดี 


 ขอแสดงความยินดีด้วย



;-)


01 สิงหาคม 2563

UNITY : Assets\Standard Assets\Utility\SimpleActivatorMenu.cs(14,16): error CS0619: 'GUIText' is obsolete: 'GUIText has been removed. Use UI.Text instead.'

** Standard Assets ไม่ไปต่อ ไม่มีให้ดาวน์โหลดแล้ว
หากต้องการใช้งานให้ดาวน์โหลดจากเว็บด้านล่าง

สำหรับ Unity รุ่นสูงกว่า 2018 ดาวน์โหลด Standard Assets รุ่นแก้ไข  สามารถดาวน์โหลดได้ที่


สำหรับผู้ใช้รายใหม่ที่ไม่เคยดาวน์โหลด Standard Assets มาก่อน จะไม่สามารถดาวน์โหลได้ ให้ดาวน์โหลดผ่าน เว็บด้านล่าง
https://ryiah.com/unity/assets/StandardAssets20184.unitypackage



เมื่อทำการ Import ตัว Standard Assets เข้ามาใช้งาน หากเกิดอาการนี้ ให้แก้ไขตามด้านล่าง

ผู้ที่นำเอา Standard Assets มาใช้ใน Unity 2018 ขึ้นไป จะพบ Error ดังนี้

Assets\Standard Assets\Utility\SimpleActivatorMenu.cs(14,16): error CS0619: 'GUIText' is obsolete: 'GUIText has been removed. Use UI.Text instead.'

เอาง่าย ๆ GUIText มันใช้ไม่ได้แล้วบน (obsolate -> ล้าสมัย) ดังนั้นจะใช้ Standard Assets ก็ต้องใช้กับ Unity 2017 หรือ ต่ำกว่า

แต่..... ยังมีทางแก้ไข เมื่อพบ Error ให้ ดับเบิ้ลคลิกที่ Error ก็จะเข้าไปสู่คำสั่งที่ Error แล้วแก้ไขดังภาพ

ที่ไฟล์  SimpleActivatorMenu.cs แก้ไขตามภาพ

















เพิ่ม
using UintyEngine.UI;                       

เปลี่ยน
GUIText ไปเป็น Text


---------------------------------------------------------
ให้ลองเปิดไฟล์ ForcedReset.cs ถ้ามี GUITexture ให้แก้ไขตามด้านล่าง

ในไฟล์ ForcedReset.cs ให้แก้ไขในส่วนของ

เพิ่มคำสั่ง 
Using UnityEngine.UI;

และทำการแก้ไขบรรทัด

[RequireComponent(typeof (GUITexture))]
เป็น
[RequireComponent(typeof (Image))]


โชคดี รวย ๆ โควิดหายไป

06 มีนาคม 2563

SQL Server : How to Connect SQL Server via Python

ท่านที่ต้องการเชื่อมต่อฐานข้อมูล SQL Server ผ่านทาง Python ขอบอกไว้ตรงนี้เลยว่าไม่ได้ยาก ลองมาทำกัน ดังนี้
1. ทำการติดตั้ง Python กันก่อน (กรณีที่เครื่องเรายังไม่ได้ติดตั้ง)
    ให้ไปดาวน์โหลด Python แล้วทำการติดตั้งที่เว็บ
           
             https://www.python.org/downloads/

 2. ทำการติดตั้ง Pyodbc โดยให้เปิดหน้าต่าง cmd.exe ของ Windows ขึ้นมา
     จากนั้นเข้าไปยังโฟลดเดอร์ที่เราติดตั้ง Python เอาไว้
     สำหรับของผู้เขียนติดตั้งไว้ใน Folder                         
           
             C:\Users\Kasemiyake\Appdata\Local\Programs\Python\Python38

    ให้ทำการเปลี่ยนไดเรกทรอรี่ไปยังโฟลเดอร์ Scripts ที่อยู่ภายใต้โฟลดเดอร์ของ Python
    โดยพิมพ์คำสั่ง

              C:
              CD \Users\Kasemiyake\Appdata\Local\Programs\Python\Python38\Scripts 
   
    จากนั้นทำการติดตั้ง Pyodbc โดยพิมพ์คำสั่ง

              pip install pyodbc



เมื่อติดตั้งทุกอย่างเสร็จเรียบร้อย
ให้ทำการเปิดโปรแกรม Python Shell ขึ้นมาโดยพิมพ์  IDLE  ที่ช่อง Search ของ Windows ดังภาพ




















เมื่อเปิด Python Shell ขึ้นมาแล้ว ให้ไปคลิกเลือกเมนู File -> New File จากนั้นป้อนคำสั่งทดสอบการติดต่อฐานข้อมูล

import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=ชื่อ Server ของ SQL Server;'
                      'Database=ชื่อฐานข้อมูล;'
                      'Trusted_Connection=yes;')

cursor = conn.cursor()
cursor.execute('SELECT * FROM [ชื่อตาราง]')

for row in cursor:
    print(row)

หมายเหตุ ให้ทำการแก้ไขชื่อ Server และชื่อของตารางตามต้องการ

จากนั้นไปที่เมนู Run -> Run Module

ถ้าทำสำเร็จจะได้ข้อมูลดังภาพประกอบ























สำหรับการติดต่อกับฐานข้อมูล SQL Server ด้วยภาษา Python ผ่าน Pyodbc ก็ขอจบไว้เพียงเท่านี้

ปีนี้หนักหนา Covid-19 ขอให้ผ่านไป ประเทศไทยรอดพ้นวิกฤติ

30 พฤศจิกายน 2562

Windows : Install new Font

การติดตั้งฟอนต์ทำได้หลายวิธี แต่ในบทความนี้จะนำเสนอการเพิ่มฟอนต์ด้วยคำสั่ง โดยการเขียนเก็บไว้ในไฟล์ .cmd โดยเขียนคำสั่งดังนี้

1. ใช้ Text Editor สร้างไฟล์ชื่อ AddFont.cmd
2.  ป้อนคำสั่งดังนี้

AddFont.cmd

16 พฤศจิกายน 2562

Visual FoxPro : แจกหนังสือ Visual FoxPro

นังสือ Visual FoxPro เล่มนี้ผู้เขียนได้เขียนไว้ตั้งแต่ปี 2543 จัดพิมพ์และจำหน่ายจนหมดแล้ว ถึงแม้ว่าโปรแกรมจะเก่าแต่ขอบอกว่าทำงานได้จนถึงทุกวันนี้ และก็ยังสามารถทำงานได้กับ Windows 10 ไปอีกยาวนาน เขียนโปรแกรมเก็บข้อมูล dbf file หรือจะติดต่อกับฐานข้อมูล SQL Server, MySQL, ORACLE และอื่น ๆ ได้อย่างง่ายดาย (หนังสือเล่มนี้ไม่ได้กล่าวถึงฐานข้อมูลที่เป็น Database Server)
หวังว่าผู้ที่เข้ามาศึกษาคงได้รับประโยชน์ และช่วยกันสร้างสรรค์โปรแกรมให้คนใช้งานกันเยอะ ๆ

ดาวน์โหลดหนังสือ คลิกที่นี่

https://1drv.ms/b/s!AnOzBJhrun8trHPeeMeHwxxZz1n9?e=bThXX5

ท่านสามารถบริจาคสมทบทุนช่วยเหลือใครที่ไหนก็ได้ตามกำลังศรัทธา ได้บุญร่วมกัน



05 พฤศจิกายน 2562

SQL Server - Edit Top 200 Rows - How to Edit Data in Result Grid

ารแก้ไขข้อมูลภายใต้ SQL Server Management Studio ด้วย Edit Top 200 Rows เราก็จะเห็นข้อมูลแสดงออกมาในกริด และแก้ไขได้เฉพาะ 200 แถวแรกเท่านั้น แต่ถ้าต้องการเปลี่ยนเงื่อนไขในการแสดงผลข้อมูลตามที่ต้องการ ก็สามารถทำได้ไม่ยาก ดังนี้

ให้ทำการเลือกตารางที่ต้องการแก้ไข โดยคลิกเมาส์ปุ่มขวาที่ตาราง จากนั้นเลือก Edit Top 200 Rows


สำรวจว่ามี Toolbars ชื่อ Query Designer แสดงอยู่บนหน้าจอหรือไม่
โดยไปคลิกเลือกเมนู View -> Toolbars แล้วดูว่าหน้ารายการ Query Designer มีเครื่องหมายถูกอยู่ด้านหน้าหรือไม่ (ถ้าไม่มีให้คลิกเลือก)

จะปรากฎ Toolbars ของ Query Designer

วิธีที่ 1 สำหรับผู้ที่ชอบใช้คำสั่ง SQL
ให้คลิกเลือกปุ่ม SQL (Show SQL Pane) จากนั้นทำการเพิ่มเงื่อนไขในการแสดงข้อมูลที่ต้องการแก้ไข เช่น  WHERE  Title = 'Ms.' แล้วกดปุ่ม Ctrl  R เพื่อแสดงผลข้อมูล แล้วทำการเข้าไปแก้ข้อมูลในกริดตามต้องการ

วิธีที่ 2
ให้คลิกเลือกปุ่ม Show Criteria Pane จะปรากฎหน้าต่างให้เราสามารถกำหนดเงื่อนไขแบบไม่ต้องเขียนคำสั่ง ดังภาพ

สวัสดีวันหยุดพิเศษ ประชุมอาเซียนซัมมิท

11 พฤษภาคม 2562

SQL Server - CTE Recursive Query

ตั้งแต่ SQL Server 2005 เป็นต้นมา ได้มีการนำ CTE (Common Table Expression's) เข้ามาสริม ซึ่ง CTE ถ้าจะเปรียบก็เหมือนกับตารางชั่วคราวตัวนึง  ซึ่งสามารถนำไปทำอะไรได้เยอะ  สิ่งนึงที่เป็นความสามารถของ CTE คือการทำรีเคอซีฟ (recursive) ตัวมันเองเรียกตัวมันเอง ดังนั้นตารางใดที่มีการต้องคิวรีเพื่อหาข้อมูลตัวมันเองซ้ำไปซ้ำมานั้นแหละ CTE เหมาะสุด
หลายท่านคงงง แล้วจะใช้งานได้อย่างไร ?
เพื่อให้เห็นภาพ ขอยกตัวอย่างข้อมูลสายการบังคับบัญชาของหน่วยงาน โดยการสร้างตารางเก็บข้อมูลตำแหน่งงาน ด้วยคำสั่ง ดังนี้

CREATE TABLE [dbo].[tblPosition](
[PositionID] [nchar](10) NOT NULL PRIMARY KEY,
[Description] [nvarchar](100) NULL,
[DependOn] [nchar](10) NULL
);
GO

ทำการเพิ่มข้อมูลตำแหน่งงาน และสายการบังคับบัญชา ดังนี้

INSERT INTO tblPosition VALUES('00000', 'President', NULL);
INSERT INTO tblPosition VALUES('10000', 'Managing Director', '00000');
INSERT INTO tblPosition VALUES('11000', 'Account Manager', '10000');
INSERT INTO tblPosition VALUES('12000', 'Marketing Manager', '10000');
INSERT INTO tblPosition VALUES('13000', 'IT Manager', '10000');
INSERT INTO tblPosition VALUES('11001', 'Accountant', '11000');
INSERT INTO tblPosition VALUES('12001','Marketing Representative','12000');
INSERT INTO tblPosition VALUES('13001', 'System Analyst', '13000');
INSERT INTO tblPosition VALUES('13002', 'Senior Programmer', '13000');
INSERT INTO tblPosition VALUES('13003', 'Programmer', '13000');

เมื่อเราเรียกแสดงข้อมูลด้วยคำสั่ง SELECT * FROM tblPosition จะได้ข้อมูลดังภาพ

ถ้าหากเราต้องการแสดงโครงสร้างตามลำดับขั้นของตำแหน่งต่าง ๆ ว่าตำแหน่งใดอยู่ภายใต้ตำแหน่งใด เราสามารถเขียนคำสั่งคิวรีโดยอาศัย CTE ได้ดังนี้

WITH CTE (DependOn, PositionID, [Description], LevelNumber)
  AS (
SELECT DependOn, PositionID, [Description], 1 LevelNumber
   FROM tblPosition  WHERE DependOn IS NULL
UNION ALL
SELECT E.DependOn, E.PositionID, E.[Description], LevelNumber + 1 AS LevelNumber
   FROM tblPosition E
INNER JOIN CTE ON E.DependOn=CTE.PositionID
        )
SELECT * FROM CTE ORDER BY  PositionID, LevelNumber;

เมื่อเรียกคำสั่งข้างต้น จะปรากฎข้อมูลดังภาพ

จากภาพจะเห็นว่ามีคอลัมน์ LevelNumber ปรากฎขึ้นมา ซึ่งจะแสดงถึงระดับของตำแหน่ง เช่น President อยู่ Level ที่ 1 ส่วน Programmer อยู่ Level ที่ 4 เป็นต้น

หมายเหตุ 
WITH CTE (DependOn, PositionID, [Description], LevelNumber)
เป็นการประกาศตารางชั่วคราวชื่อ CTE และภายใต้ตารางนี้มีคอลัมน์ต่าง ๆ ประกอบด้วย DependOn, PositionID, [Description], LevelNumber

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

WITH CTE(PositionID, [Narration], [Description], LevelNumber ,DependOn)
  AS (
SELECT PositionID, CONVERT(nvarchar(max) ,[Description]) AS [Narration], [Description],
   1 AS LevelNumber, DependOn
   FROM tblPosition  WHERE DependOn IS NULL
UNION ALL
SELECT E.PositionID, CONVERT(nvarchar(max) ,REPLICATE(SPACE(2), LevelNumber) + E.[Description]) AS [Narration],
   E.[Description], LevelNumber + 1 AS LevelNumber, E.DependOn
   FROM tblPosition E
INNER JOIN CTE ON E.DependOn=CTE.PositionID
)
SELECT * FROM CTE ORDER BY  PositionID, LevelNumber;

เมื่อเรียกคำสั่งข้างต้นจะได้ผลลัพธ์ดังภาพ

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

แต่จากทั้ง 2 ตัวอย่างข้างต้น ยังมีข้อผิดพลาดอยู่ ซึ่งผู้เขียนตั้งใจให้มันเกิด
ติ๊ก ต๊อก ติ๊ก ต๊อก หาดูว่าผิดตรงไหน

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

WITH CTE(PositionID, [Narration], [Description], LevelNumber ,DependOn, Trace)
  AS (
SELECT PositionID, CONVERT(nvarchar(max) ,[Description]) AS [Narration], [Description],
   1 AS LevelNumber, DependOn , CONVERT(nvarchar(max),PositionID) AS Trace
   FROM tblPosition  WHERE DependOn IS NULL
UNION ALL
SELECT E.PositionID, CONVERT(nvarchar(max) ,REPLICATE(SPACE(2), LevelNumber) + E.[Description]) AS [Narration],
   E.[Description], LevelNumber + 1 AS LevelNumber, E.DependOn ,
   CONVERT(nvarchar(max),CTE.Trace + E.PositionID) AS Trace
   FROM tblPosition E
   INNER JOIN CTE ON E.DependOn=CTE.PositionID
)
SELECT * FROM CTE ORDER BY  Trace;

ผลจากการปรับคำสั่งข้างต้น จะได้ผลลัพธ์ออกมาดังภาพ

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

แค่ตาราง tblPosition เพียงตารางเดียว ทำไมมันช่างงงงวย วกวนเช่นนี้ ทาเกชิ สู้ ๆ

ยุคสมัยเปลี่ยนไปเดี๋ยวทำงานที่ไหนก็ได้ โชคดี  =  (โชค + อธิบดี) มีเงินใช้

เพื่อนผมชื่อโชค ครับ  ย้ำ โชค นะครับ

"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.