Data Entry Form แบบ Client/Server

หลากหลายวิธีในการสร้างฟอร์มป้อนข้อมูลแบบ Client/Server (1)

วิชวลฟอกส์โปรมีเครื่องมือจัดการกับฐานข้อมูลแบบ Client/Server ให้เลือกใช้งานหลากหลายแบบ ก่อนอื่นต้องเข้าใจก่อนว่า ฐานข้อมูลของเรานั้นสนับสนุน OLEDB หรือ ODBC เพราะว่า เครื่องมือแต่ละตัวออกแบบมาให้ใช้งานไม่เหมือนกัน สรุปง่าย ๆ ดังตารางต่อไปนี้

เครื่องมือODBCOLEDBNative DBF
ADO (ActiveX Data Object)YesYesNo
SPT (SQL Pass Thru)YesNoNo
Remote ViewYesNoYes
CA (Cursor Adapter)YesYesYes

จากตารางข้างต้นจะเห็นได้ว่า เราสามารถเลือกเขียนคำสั่งติดต่อกับฐานข้อมูลตามที่เราถนัดแบบไหนก็ได้ ถ้าเคยใช้พวก ADO ใน Visual Basic มาก่อน ก็สามารถเขียนคำสั่งกับออปเจ็กต์ของ ADO ในฟอกส์โปรได้เลย หากต้องการใช้คำสั่ง Native DBF ของฟอกส์โปร เช่น GO, SKIP, LOCATE, APPEND, TABLEUPDATE ฯลฯ ก็เลือกใช้ CA หรือ Remote View ตามถนัด เพราะส่วนใหญ่ฐานข้อมูลจะมี ODBC มาให้อยู่แล้ว ส่วน SPT นั้นเป็นการเขียนคำสั่ง SQL กับฐานข้อมูลผ่าน ODBC โดยตรง กล่าวคือ มักใช้กับคำสั่ง SQL ที่ไม่ได้เป็นมาตรฐานนั่นล่ะ แต่ละตัวมักไม่เหมือนกัน เช่น คำสั่ง SELECT TOP ของ SQL Server แต่ใน MySQL ใช้คำสั่ง SELECT LIMIT เป็นต้น อย่างไรก็ตาม CA เป็นวิธีจัดการกับฐานข้อมูลได้หลากหลายและง่ายกว่า โดยใช้หลักการทำนองเดียวกับ ADO.NET นั่นล่ะ

ตัวอย่างฟอร์มป้อนข้อมูล

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

ฟอร์มทะเบียนพนักงาน

ฟอร์มค้นหารายชื่อพนักงาน

ฟอร์มเลือกข้อมูลก่อนพิมพ์รายงาน

รายงานทะเบียนพนักงาน

โครงสร้างฐานข้อมูลตัวอย่าง (Sample)

ฐานข้อมูลที่ต้องใช้กับฟอร์มบันทึกข้อมูลข้างต้น ประกอบด้วย 2 ตาราง ดังนี้

  1. ชื่อตาราง: t_employee

    ชื่อฟิลด์ความหมายประเภทข้อมูลขนาด
    c_codeรหัสพนักงานข้อความ10 ตัวอักษร
    c_nameชื่อพนักงานข้อความ100 ตัวอักษร
    c_sexเพศข้อความ5 ตัวอักษร
    c_provinceจังหวัดข้อความ30 ตัวอักษร
    c_phoneเบอร์ติดต่อข้อความ30 ตัวอักษร
    c_birthdateวันเกิดวันที่ 
    c_startdateวันเริ่มงานวันที่ 
    c_departmentแผนกข้อความ30 ตัวอักษร
    c_positionตำแหน่งข้อความ30 ตัวอักษร
    c_salaryเงินเดือนตัวเลข10 หลัก (ทศนิยม 2 ตำแหน่ง)

    หมายเหตุ - กำหนด Primary Key คือ ฟิลด์ c_code

  2. ชื่อตาราง: t_lookup

    ชื่อฟิลด์ความหมายประเภทข้อมูลขนาด
    c_tableรหัสตาราง (01-จังหวัด 02-แผนก)ข้อความ5 ตัวอักษร
    c_valueค่าในแต่ละตารางข้อความ30 ตัวอักษร

    ตัวอย่าง

    c_tablec_value
    01กระบี่
    01ขอนแก่น
    02บัญชี
    02การตลาด

Access

  • สร้างฐานข้อมูลโดยใช้ผลิตภัณฑ์ชุดไมโครซอฟต์ออฟฟิศ (Microsoft Office)

SQL Server

  • สร้างฐานข้อมูลโดยใช้ SQL Server Management Studio ( สำหรับชุด Express คลิกที่นี่ )

MySQL

  • ดาวน์โหลด MySQL ODBC Driver [ คลิกที่นี่ ]
  • สร้างฐานข้อมูลโดยใช้ phpMyAdmin ผ่านเว็บบราวเซอร์ (หรือ MySQL Administrator บน Desktop)

    สำหรับ MySQL เวอร์ชัน 5 นั้น เพื่อให้แสดงผลภาษาไทยถูกต้อง ให้ทำดังนี้ :-

    1. การสร้างฐานข้อมูลให้กำหนด Charset เป็น tis620 และ Collate เป็น tis620_thai_ci
    2. ODBC Connection String ระบุ charset=tis620 หรือ stmt="set names tis620";

PostgreSQL

  • ดาวน์โหลด PostgreSQL ODBC Driver [ คลิกที่นี่ ]
  • สร้างฐานข้อมูลโดยใช้ pgAdmin III (หรือ phpPgAdmin ผ่านเว็บบราวเซอร์)

โครงสร้างโปรเจ็กต์ตัวอย่างในวิชวลฟอกส์โปร

แต่ละโปรเจ็กต์ (.prx) มีรูปแบบโครงสร้างของส่วนประกอบต่าง ๆ เหมือนกัน ดังนี้

Programsmain.prgโปรแกรมหลัก ฟังก์ชันและโพรซิเยอร์ต่าง ๆ
Formsem001.scxฟอร์มทะเบียนพนักงาน
em101.scxฟอร์มค้นหารายชื่อพนักงาน
em201.scxฟอร์มเลือกข้อมูลก่อนพิมพ์รายงาน
Reportsem001.frxรายงานทะเบียนพนักงาน

ตัวอย่าง โปรแกรมหลัก (main.prg)

วิธีจัดการกับฐานข้อมูลแบบ Client/Server ในฟอกส์โปร (V 8/9)

สำหรับตัวอย่างโปรเจ็กต์นี้ไม่ได้กำหนดฐานข้อมูลตายตัว พูดเป็นนัยว่า เลือกใช้ฐานข้อมูลอะไรก็ได้ อาทิ Access, SQL Server, MySQL, PostgreSQL เป็นต้น โดยที่โปรแกรมจะค้นหา ประโยคเชื่อมต่อ (Connection String) กับฐานข้อมูลจากไฟล์ชื่อ dbconnect.txt หากการเชื่อมต่อกับฐานข้อมูลไม่สำเร็จก็จะรันโปรแกรม Notepad ของวินโดวส์เปิดไฟล์ดังกล่าวขึ้นมาให้อัตโนมัติ ตัวอย่างแสดงดังรูป

หมายเหตุ การกำหนด DSN (Data Source Name) ด้วย ODBC Manager ใน Control Panel นั้นใช้กับฐานข้อมูลที่มี ODBC Driver เท่านั้น

ตัวอย่าง ประโยคเชื่อมต่อกับฐานข้อมูล (Connection String) ในโปรเจ็กต์ตัวอย่าง

OLEDB
Access 97-2003Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Data\Sample.mdb;
SQL Server 2000Provider=SQLOLEDB;Server=(local);Initial Catalog=sample;Uid=an;Pwd=;
SQL Server 2005Provider=SQLNCLI;Server=(local);Initial Catalog=sample;Uid=an;Pwd=;

ODBC
Access 97-2003Driver={Microsoft Access Driver (*.mdb)};DBQ=Data\Sample.mdb;
SQL Server 2000Driver={SQL Server};Server=(local);Database=sample;Uid=an;Pwd=;
SQL Server 2005Driver={SQL Native Client};Server=(local);Database=sample;Uid=an;Pwd=;
MySQLDriver={MySQL ODBC 3.51 Driver};Server=localhost;Database=sample;
Uid=an;Pwd=;stmt=SET NAMES tis620;
PostgreSQLDriver={PostgreSQL ANSI};Server=localhost;Database=sample;Uid=an;Pwd=;

ตัวอย่าง การสร้างประโยคเชื่อมต่อกับฐานข้อมูล

2.1 แบบ ADO (ActiveX Data Object)

สร้างตัวแปรออปเจ็กต์ของ ADO ด้วยคำสั่ง CreateObject เขียนคำสั่งจัดการฐานข้อมูลผ่าน OLEDB สามารถใช้ได้กับฐานข้อมูลที่มี OLEDB Provider และ ODBC Driver

ตัวอย่าง การเปิดใช้งานฐานข้อมูล

ตัวอย่าง การค้นหาข้อมูลใส่ใน Listbox

2.2 แบบ SPT (SQL Pass Thru)

สร้างตัวแปรสำหรับการเชื่อมต่อกับฐานข้อมูลด้วยคำสั่ง SQLSTRINGCONNECT() เขียนคำสั่งจัดการฐานข้อมูลด้วยคำสั่ง SQLEXEC() หรือคำสั่ง Native DBF ของฟอกส์โปรผ่าน Remote View สำหรับ SPT และ Remote View สามารถใช้ได้กับฐานข้อมูลที่มี ODBC Driver เท่านั้น ในส่วนของการออกแบบ Remote View กับฐานข้อมูลในโปรเจ็กต์ควรกำหนด Mapping ให้ตรงกับฐานข้อมูลที่สร้างไว้ เพื่อความสะดวกในการอัปเดทข้อมูลกับคำสั่ง TABLEUPDATE() ในโปรเจ็กต์ตัวอย่างจะกำหนดชนิดของข้อมูลเป็น Varchar และกำหนดค่าดีฟอลต์คือ .NULL. ดังรูป

ตัวอย่าง การเปิดใช้งานฐานข้อมูล

ตัวอย่าง การค้นหาข้อมูลใส่ใน Listbox

2.3 แบบ CA (Cursor Adapter)

สร้างออปเจ็กต์ของ CA ได้ 2 แบบ คือ คำสั่ง CreateObject("CursorAdapter") ในโปรแกรม (Runtime) หรือสร้างใน Data Environment ในขณะออกแบบฟอร์ม (Design) ตัวอย่างแสดงดังรูป

วิธีสร้าง CA ในฟอร์มให้คลิกขวาใน Data Environment เลือกเมนู Add CursorAdapter หรือเลือกเมนู Builder... ช่วยลร้าง CA ให้อัตโนมัติตามสะดวก การกำหนดชื่อฟิลด์และชนิดของข้อมูลไว้ใน CursorSchema Property ใน Data Environment จะช่วยให้การสร้างคอนโทรลต่างๆ ในฟอร์มสะดวกขึ้น กล่าวคือ เวลาสร้างคอนโทรลพวก Textbox, ComboBox, Grid ในฟอร์มจะมีรายชื่อตารางและชื่อฟิลด์มาให้เลือกอัตโนมัติในช่อง RowSource, RecordSource เป็นต้น เมื่อสร้างออปเจ็กต์ CA ในฟอร์มแล้วก็จะสามารถใช้คำสั่ง Native DBF ของฟอกส์โปรจัดการกับฐานข้อมูลได้โดยตรง อาทิ GO, SKIP, INDEX, LOCATE, APPEND, TABLEUPDATE เป็นต้น

หมายเหตุ สามารถกำหนดชนิดของ Cursor Adapter คือ Native, ADO, ODBC และ XML ใน Data Environment ให้เหมือนกันหมด (กำหนด DataSourceType Property ของ Data Environment) หรือผสมคละกันก็ได้ (กำหนดที่ DataSourceType Property ของ CA)

2.3.1 CA กับ ADO (OLEDB)

กำหนด DataSourceType เป็น ADO สำหรับการอัปเดทฐานข้อมูลที่ผูกกับ CA ให้ระบุชื่อฟิลด์ใน UpdatableFieldList Property ตัวอย่างแสดงดังรูป

ในส่วนของโปรแกรมระบุข้อมูลจาก Recordset ของ ADO และแสดงผลด้วย CursorFill Method

ตัวอย่าง Form.Init()

หมายเหตุ สร้าง Property ใหม่ชื่อ rs ในฟอร์มไว้สำหรับอ้างอิงตัวแปรออปเจ็กต์ Recordset ของ ADO

ตัวอย่าง การค้นหาข้อมูลใส่ใน Listbox

2.3.2 CA กับ ODBC (SPT)

กำหนด DataSourceType เป็น ODBC สำหรับการอัปเดทฐานข้อมูลที่ผูกกับ CA ให้ระบุชื่อตารางใน Tables Property ชื่อฟิลด์ใน UpdatableFieldList และ UpdateNameList Property ตัวอย่างแสดงดังรูป

ในส่วนของโปรแกรมระบุการเชื่อมต่อฐานข้อมูลจากคำสั่ง SQLCONNECT() หรือ SQLSTRINGCONNECT() แบบ SPT ใน DataSource Property ส่วนการแสดงข้อมูลก็ระบุคำสั่ง SQL ใน Selectcmd และสั่งรันด้วย CursorFill Method ตามลำดับ

ตัวอย่าง Form.Init()

ตัวอย่าง การค้นหาข้อมูลใส่ใน Listbox




ความคิดเห็น

  1. ขอบคุณสำหรับความรู้ที่ให้มีประโยชน์มากครับ

    ตอบลบ
  2. Harrah's Reno Casino & Hotel - Mapyro
    Find your 군산 출장마사지 way around 서울특별 출장마사지 the casino, find 포천 출장샵 where everything is located with the map. This is an area with a large casino 군포 출장마사지 and lots 상주 출장마사지 of slots.

    ตอบลบ

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

FAQ: Visual Foxpro Runtime Error

หลายหลายวิธีแสดงข้อมูลด้วย Grid

คำสั่ง Transaction ใน Visual Foxpro