Print VFP Report with .NET application

สั่งพิมพ์รายงาน FRX บน .NET Framework

การสร้างรายงานด้วยชุด Visual Studio บน .NET มักเลือกใช้ CR (Crystal Report) เป็นหลัก สำหรับ CR นี้จะมีอยู่ในชุด Professional ขึ้นไป เนื่องจากภาษาบน .NET ไม่มี VFP ดังนั้นหากต้องการอัปเกรดระบบงานที่พัฒนาด้วย VFP ไปรันบน .NET Framework ก็จำเป็นต้องเขียนโปรแกรมกันใหม่ทั้งหมด อย่างไรก็ตาม เราสามารถเรียกใช้รายงานต่าง ๆ (*.frx) ที่พัฒนาด้วย VFP จาก .NET โดยตรงก็ได้ ซึ่งวิธีการนี้ก็จะไม่ต้องเสียเวลาแปลงรายงานเป็น CR กันใหม่ทั้งหมด คนที่ใช้ฟอกส์สามารถประยุกต์ใช้สร้างรายงานบน .NET กับ Visual Studio ชุด Express ที่ไม่มี CR ก็ได้น่ะ :-)

ทำไมต้อง .NET

หลักการพัฒนาแอปพลิเคชันที่ไม่ต้องสนใจระบบปฎิบัติการ (OS) ไม่ต้องสนใจแพลตฟอร์ม (Platform) คอนเซ็ปท์เดียวกับ Java นั่นล่ะ ขอให้เครื่องนั้นมี .NET Framework ติดตั้งอยู่เท่านั้น สังเกตว่า Win7 แถม .NET ติดตั้งมาพร้อม ส่วนวินโดวส์อื่นก็ต้องหา .NET Framework มาติดตั้งเพิ่มเติม เพื่อให้เข้าใจง่าย ๆ ก็ให้มองว่า .NET Framework เหมือนกับ Runtime Libraries เพียงแต่มันเอาทุกอย่างมาอัดรวมไว้ทีเดียว เปรียบเสมือนก้อนภูเขาหิมะกลางมหาสมุทร มันจะก้อนโตไปเรื่อย ๆ แล้วก็เคลื่อนตัวช้า ๆ ลง ๆ เรื่อย ๆ การพัฒนาแอปพลิเคชันก็ยังต้องอิงกับเวอร์ชันของ Framework ปัญหาที่ไม่ได้ต่างไปจากของเดิม ขยะเต็มเครื่อง ...

VFP ถึงทางตันเมื่อไร

VFP นั้นประกาศหยุดการพัฒนาแล้ว คนใช้ฟอกส์คงไม่ได้หยุดนิ่งตามไปด้วย ก็ต้องพยายามเรียนรู้เทคโนโลยีใหม่เพิ่มเติม แต่สิ่งที่หลายคนคาดหวังก็คือ ปล่อยให้ VFP เป็น Open Source รันบนลีนุกซ์ชุด Desktop อย่างไรก็ตาม ระหว่างที่ไม่ค่อยมีความหวังนี้ เราก็ยังสามารถประยุกต์ใช้งานฟอกส์ไปจนกว่าจะถึงทางตัน คำถามที่มักถามกันบ่อยก็คือ เมื่อไร ? ให้ลองพิจารณาเรื่องต่อไปนี้

  • 32bit : VFP ถูกออกแบบมาให้ทำงานบนโหมด 32 บิต ดังนั้นถ้าในอนาคตทุกคนใช้วินโดวส์ 64 บิตทั้งหมด พูดง่ายว่า OS ไม่รองรับแอปพลิเคชัน 32 บิต เมื่อไร VFP ก็ถึงทางตันเมื่อนั้น
  • Unicode: VFP สนับสนุน ANSI ไม่รองรับ UTF8 ดังนั้นถ้าในอนาคตไม่มีใครรับ ANSI เมื่อไร VFP ก็ถึงทางตันเมื่อนั้น
  • ODBC : VFP ติดต่อกับฐานข้อมูลได้ทั้งแบบ DBF และระบบฐานข้อมูล DBMS อื่น เช่น MySQL, PostgreSQL, SQL Server เป็นต้น สำหรับ DBF นั้นใช้ไปได้เรื่อย ๆ ไม่มีปัญหา ส่วน DBMS นั้น VFP ใช้วิธี SPT (SQL Pass Thru) ติดต่อกับฐานข้อมูลผ่าน ODBC เป็นหลัก หากในอนาคตไม่มี ODBC เมื่อไร VFP เวอร์ชันต่ำก็จบข่าว ส่วน VFP8/9 ยังไปได้โดยอาศัย OLEDB และ XML กับ CursorAdaptive แทน
  • Dotnet: .NET Framework ไม่รองรับคำสั่ง VFP แต่มีเครื่องมือ ToolKit มาเสริมพอถูไถใช้งานได้ อย่างไรก็ตามเขียนใหม่เลยจะดีกว่า เลือกภาษาอะไรก็ได้ ถ้าหากมีพื้นฐานการเขียนโปรแกรมจริงแล้วเขียนภาษาอะไรก็ได้ทั้งนั้นตามสะดวก

VB.NET หรือ C#

VB นั้นไม่แตกต่างกับ VFP มากนัก อย่างไรก็ตามคนทั่วโลกใช้ C# เยอะกว่า เพราะว่า คนเรียนคอมพิวเตอร์จากสถาบันการศึกษามักมีพื้นฐาน C มาก่อน โครงสร้างภาษา C# เขียนสั้น ๆ ง่าย ๆ แต่ไล่ซอร์สโค้ดยาก เหมาะกับนักภาษาศาสตร์มากกว่า สิ่งที่ทำให้คนเริ่มหันมา C# ก็เนื่องจากเมื่อก่อนการพัฒนาเว็บแอปพลิเคชันด้วย ASP ต้องใช้กับ VB ส่วน ASP.NET นั้นรองรับหลากหลายภาษานั่นเอง แต่ไม่ว่าจะเลือก VB หรือ C# ก็เขียนโปรแกรมคำสั่งมากกว่า VFP หลายเท่า ยกตัวอย่างเช่น การบังคับปุ่ม Enter เลื่อนไปฟิลด์ถัดไป หรือไปคอลัมภ์ถัดไป ผ่านมากี่ปีกี่ปี M$ ก็ยังไม่เคยพัฒนา เป็นต้น หลายคนเสียเวลาทำ Input Mask กับ Textbox แค่ตัวเดียวเนี่ยอาจใช้เวลาเป็นปี !

เปรียบเทียบคำสั่ง VB กับ C# คลิกที่นี่

รู้จัก Sharpdev

โดยทั่วไปเรียกว่า #Develop ชื่อเต็มคือ Sharp Develop (ส่วนตัวเรียก #dev หรือ Sharpdev) เป็นเครื่องมือสำหรับพัฒนาแอปพลิเคชันบน .NET Framework ทำนองเดียวกับ Visual Studio สำหรับ Sharpdev เป็น Open Source ฟรี เร็ว และใช้งานง่าย ตัวนี้จะให้ความรู้สึกเหมือนกับ VFP9 ยังงัยอย่างงั้น ที่สำคัญคือ มันไม่กินอภิมหาทรัพยากรเหมือนกับ Visual Studio ของ M$

  • ฟรี เร็ว ใช้ง่าย ไม่หน่วงเครื่อง
  • มีแปลงภาษา C# <=> VB ฯลฯ

.NET Application กับ VFP Report

หลักการทั่วไปคือ โปรแกรมที่พัฒนาด้วย .NET สร้างไฟล์ข้อมูลชั่วคราวในรูปแบบ XML เก็บไว้ก่อนด้วย WriteXml Method ของ DataSet หลังจากนั้นก็สั่งให้รันโปรแกรมที่พัฒนาด้วย VFP อ่านไฟล์ข้อมูล XML ดังกล่าว แปลงเป็น Cursor ด้วยคำสั่ง XMLTOCURSOR() และพิมพ์ออกเป็นรายงานต่อไป สำหรับวิธีการนี้เรียกใช้งานโปรแกรม VFP ใน .NET โดยผ่านคำสั่ง Process ตรงๆ พูดง่าย ๆ ก็คือ ไม่ต้องติดต่อผ่าน COM จึงไม่ต้อง Register ไม่ต้องสร้างตัวเชื่อมหรือ Interop Assembly (.dll) ของ VFP ใด ๆ ให้ยุ่งยาก เพียงแต่ในเครื่องนั้นต้องติดตั้ง VFP Runtime Library ไว้ด้วย

การพัฒนาแอปพลิเคชันจะแบ่งออกเป็น 2 ส่วน คือ ส่วนการออกแบบฟอร์ม (Form Designer) พัฒนาบน .NET ด้วย Sharpdev และส่วนออกแบบรายงาน (Report Designer) พัฒนาด้วย VFP พูดเป็นนัยว่า เราจะใช้ VFP แทน Crystal Report นั่นล่ะ ประโยชน์ของการออกรายงานด้วย VFP ประการหนึ่งก็คือ เราสามารถแก้ไขฟอร์มรายงาน (*.frx) ขณะรันไทม์ด้วยคำสั่ง MODI REPORT ได้ด้วย

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

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

อ่านบทความนี้ควบคู่กับเรื่อง หลากหลายวิธีในการสร้างฟอร์มป้อนข้อมูลแบบ Client/Server

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

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

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

รายงานทะเบียนพนักงานด้วย VFP (*.FRX)

โครงสร้างฐานข้อมูลตัวอย่าง (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การตลาด

SQL Server

  • ตัวอย่างโปรเจ็กต์ .NET นี้ใช้กับ SQL Server หากต้องการใช้กับฐานข้อมูลอื่นให้แก้ไขในซอร์สโค้ดเอง
  • อ่านเพิ่มเติมเรื่องการเขียนคำสั่งติดต่อฐานข้อมูลด้วย ADO.NET [ คลิกที่นี่ ]
  • ดาวน์โหลด SQL Server ชุด Express [ คลิกที่นี่ ]
  • สร้างฐานข้อมูลโดยใช้ SQL Server Management Studio ( สำหรับชุด Express คลิกที่นี่ )



  • ดาวน์โหลด ไฟล์ฐานข้อมูลตัวอย่าง (Sample.MDF) [ คลิกที่นี่ ]

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

[ VfoxPrint.EXE ]

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

Programsmain.prgโปรแกรมหลัก ฟังก์ชันและโพรซิเยอร์ต่าง ๆ
Reportsem001.frxรายงานทะเบียนพนักงาน

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



II. โครงสร้างโปรเจ็กต์ตัวอย่างใน Sharpdev (C#)

[ Sample_cs.EXE ]

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

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

ตัวอย่าง การสั่งพิมพ์รายงานด้วย VFP (em201.cs)

III. ทดสอบการทำงาน (Test Run)

  • ดาวน์โหลดโปรเจ็กต์ตัวอย่างด้านล่าง แตกไฟล์ไว้ในเครื่อง
  • เปิดโฟลเดอร์ Data สร้างฐานข้อมูล Sample ไว้ที่เครื่องไหนก็ได้ตามสะดวก
  • เปิดโฟลเดอร์ TestRun แก้ไขไฟล์ dbconnect.txt ระบุ ConnectionString ชื่อฐานข้อมูล ชื่อเครื่องและล็อกอินให้ถูกต้อง
  • ถ้าเครื่องที่จะรันโปรแกรมไม่มี .NET Framework และ VFP9 Runtime Library ก็ให้ดาวน์โหลดไฟล์ด้านล่างติดตั้งให้เรียบร้อยก่อน
  • รันโปรแกรม Sample_cs.EXE เพิ่มข้อมูล | คลิกปุ่มพิมพ์รายงาน ...
  • โปรเจ็กต์พร้อมซอร์สโค้ดของ .NET และ VFP อยู่ในโฟลเดอร์ Sharpdev และ Vfoxprint ตามลำดับ
  • ทดสอบโปรเจ็กต์ใน Sharpdev ให้เลือกเมนู Build | Edit configurations/platforms เลือก Debug

  • สามารถใช้ VS2008 หรือ Microsoft Visual Studio 2008 กับตัวอย่างโปรเจ็กต์ Sharpdev นี้ก็ได้

ความคิดเห็น

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

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

ทำไมรันโปรแกรม EXE แล้วหายแว๊บ !

FAQ: Visual Foxpro Runtime Error