เริ่มต้นกับ Visual Foxpro

การสร้างระบบงานขึ้นมาสักหนึ่งระบบนั้น จำเป็นอย่างยิ่งที่จะต้องมีการเขียนโปรแกรมมาควบคุมการทำงานของส่วนต่างๆ ให้เป็นไปตามความต้องการของผู้ใช้งาน ในการเขียนโปรแกรมแต่ละภาษาจะมีวิธีการเขียนแตกต่างกันออกไป แต่โดยหลักการแล้วไม่ว่าคุณจะทำการเขียนโปรแกรมด้วยภาษาอะไรก็ตามคำสั่งและฟังก์ชั่นจะไม่เหมือนกันซักทีเดียว แต่หลักและวิธีการเขียนโปรแกรมจะเป็นในแนวทางเดียวกันในยุคปัจจุบันนี้วิธีการเขียนโปรแกรม ได้พัฒนาไปเป็นการเขียน
โปรแกรมเชิงวัตถุ (Object-Oriented Programming OOP) ซึ่งก่อนหน้านี้เราเคยชินกับการเขียนโปรแกรม แบบโครงสร้าง(Structure Programming) จะสังเกตได้ว่าพัฒนาการด้านโปรแกรมได้มีความก้าวหน้าขึ้นเรื่อยๆ ซึ่งจะอำนวยความสะดวกในการเขียนโปรแกรมให้แก่ผู้พัฒนาระบบงานมากยิ่งขึ้นกว่าเมื่อก่อน Visual FoxPro ก็เป็นอีกหนึ่งโปรแกรมที่ได้พัฒนามาจนกระทั่งเป็นโปรแกรมแบบ OOP ซึ่งก่อนจะพัฒนามาเป็น Visual FoxPro นั้นโปรแกรมได้พัฒนาเริ่มต้นมาจาก FoxBase, FoxPro แล้วก็มาถึง Visual FoxPro ที่เรากำลังกล่าวถึงอยู่นี้

เริ่มเขียนโปรแกรมแรก
เมื่อคุณเข้าสู่โปรแกรม Visual FoxPro แล้ว ให้คุณสร้างโปรแกรมตามตัวอย่างดังนี้

1. จากเมนู File เลือกคำสั่ง New
2. เลือก Program
3. พิมพ์ชื่อโปรแกรม ว่า Program1

หรือ ทำการพิมพ์คำสั่งผ่านทาง Command Window โดยพิมพ์ คำสั่ง
MODIFY COMMAND Program1 แล้วกดปุ่ม Enter

เคล็ดไม่ลับ ตอนเข้าสู่โปรแกรมถ้าไม่ต้องการให้ Visual FoxPro แสดงโลโก้ขึ้นมาให้ใส่parameter -T ไว้ข้างหลัง  VFP.EXE -T

Visual FoxPro จะทำการสร้างหน้าต่างขึ้นมาให้โดยมีชื่อว่า Program1 ซึ่งก็คือชื่อไฟล์ ถึงตอนนี้คุณก็ทำการป้อนคำสั่งตามตัวอย่างเข้าไปได้เลย

* Program1
#DEFINE myProgram “โปรแกรมของฉัน”
PRIVATE nVAR
myForm = CREATEOBJECT(“TestForm”)
myForm.Show
STORE 1 TO nVAR
DO WHILE nVAR <= 300
myForm.Height = nVAR
myForm.Width = nVAR
nVAR = nVAR + 1
ENDDO
FOR nVAR = 4 to 400 STEP 4
myForm.left = nVAR
myForm.top = nVAR / 4
ENDFOR && NEXT
READ EVENTS

DEFINE CLASS Testform AS FORM
Caption = myProgram
Left = 1
Top = 1
Height = 1
Width = 1

ADD OBJECT MyButton AS CommandButton WITH ;
Caption = “Cancel”, Forecolor = RGB(255,0,0), ;
Left = 100, Top = 120, Height = 30, Width = 100
* Define the command button myButton Click event method

PROCEDURE myButton.Click
RELEASE THISFORM
CLEAR EVENTS
ENDPROC
ENDDEFINE

หลังจากที่ป้อนเสร็จเรียบร้อยแล้ว ให้ทำการบันทึกโปรแกรม โดยการกดปุ่ม Ctrl-W หรือ
จากเมนู File เลือกคำสั่ง Save ก็ได้

ตอนนี้เราก็สามารถเรียกโปรแกรมขึ้นมาใช้งานได้แล้วโดย
1. จากเมนู Program เลือกคำสั่ง Do
2. เลือกโปรแกรมที่ต้องการ ซึ่งก็คือ Program1 แล้วคลิ๊กที่ปุ่ม DO

หรือ ทำการพิมพ์คำสั่งผ่านทาง Command Window โดยพิมพ์ คำสั่ง
DO Program1 แล้วกดปุ่ม Enter

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

ในกรณีที่คุณต้องการแก้ไขโปรแกรม
1. จากเมนู File เลือกคำสั่ง Open
2. เปลี่ย file of type เป็น Program
3. เลือกโปรแกรมที่ต้องการ แล้วคลิ๊กปุ่ม OK

หรือ ทำการพิมพ์คำสั่งผ่านทาง Command Window โดยพิมพ์ คำสั่ง
MODIFY COMMAND Program1 แล้วกดปุ่ม Enter

เอาละเขียนโปรแกรมเป็นแล้วละซิ ต่อจากนี้ไปเราจะมาดูถึงวิธีการและประเภทของข้อมูลใน
Visual FoxPro กัน ซึ่งประกอบไปด้วย
ประเภทของข้อมูลและฟิลด์ (Data and Field Types)
การเก็บค่าของข้อมูล (Storing Data)
โอเปอเรเตอร์ (Operators)
การสร้างนิพจน์ (Building Expressions)

ประเภทของข้อมูลและฟิลด์ (Data and Field Types)

การเก็บข้อมูลต่างๆ ลงแฟ้มข้อมูล เราจำเป็นต้องทราบว่าลักษณะของข้อมูลที่เราจะเก็บนั้นคืออะไร ควรจะเก็บเป็นแบบใด เพื่อให้ตรงกับความต้องการมากที่สุด

ประเภทข้อมูลใน Visual FoxPro

Data Type Description  Size Range
Character Any Text 1 Byte per Character Any Characters
Currency Monetary amounts  8 Bytes -92222337203685477.5808  to 922337203685477.5807
Date Chronological data Consisting of Month, Year and Date  8 Bytes  01/01/100 to 12/31/9999
DateTime Chronological data Consisting of Month,  Year ,Date and Time  8 Bytes 01/01/100 to 12/31/9999, plus 00:00:00 a.m. to 11:59:59 p.m.
Logical Boolean Value of true or false  1 Byte True(.T.) or False(.F.)
Numeric Integers or Fractions 8 Bytes in Memory; 1-20 Bytes in table -9999999999E+19 to .9999999999E+20

แฟ้มข้อมูลของ FoxPro จะมีนามสกุลว่า .DBF เพื่อให้ทันสมัยหน่อย ใน Visual FoxPro เลยเรียกแฟ้ม DBF ว่า Table เห็นที่ไหนก็อย่าไปแปลกใจ มันก็คือกันเด๊อ

ประเภทของฟิลด์ใน Visual FoxPro

Field Type Description Size Range
Double A double-precision Floating-point number 8 bytes +/-4.94065645841247E-324
Float Same as Number 8 bytes in Memory:1-20 Bytes in table -.9999999999E+19 to .9999999999E+20
General Reference to an OLE Object 4 bytes in table Limited by available memory
Integer Interger values 4 bytes -2147483647 to 2147483647
Memo Reference to a block of data 4 bytes in table Limited by available memory

 

เคล็ดไม่ลับ คุณสามารถใช้ฟังก์ชั่น TYPE() เพื่อแสดงประเภทของข้อมูลที่เก็บได้ 

การเก็บข้อมูล (Storing Data)

การเก็บข้อมูลของคุณนั้นคุณควรคำนึงถึงการเก็บข้อมูลให้เหมาะสมกับชนิดที่มันบรรจุอยู่(Container) โดยแสดงไว้ตามตารางดังนี้

Container

Scope

Example

Constants Private #DEFINE myprogram “โปรแกรมของฉัน”
Variables Public,Private STORE 1 to nVAR
Arrays Public,Private cARRAY[1,1] = “อะเรย์ของฉัน”
Fields Permanent storage REPLACE name WITH “ชื่อของฉัน”
Object Properties Referenced through the object Testform.Caption = myProgram

ในVisual FoxPro คุณจะได้พบกับ Contrainer อยู่ตลอดเวลาแล้วมันคืออะไร ?
ผมก็ไม่ค่อยจะรู้สักเท่าไหร่ แต่พอจะเดาๆ ได้ว่า มันคืออะไรก็ตามที่เก็บทุกอย่างเกี่ยวกับข้อมูลของคุณ ไม่ว่าจะเป็น ตัวแปร,ฟิลด์,อะเรย์ หรือแม้แต่คุณสมบัติของวัตถุ (Object Properties)

ค่าคงที่ (Constants)

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

#DEFINE ConstantName eExpression

เช่น #DEFINE myprogram “โปรแกรมของฉัน”

ถ้าต้องการยกเลิกค่าคงที่ให้ใช้คำสั่ง #UNDEF ConstantName

ตัวแปร (Variables)

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

STORE หรือ =

เช่น STOR 1 TO nVAR
nVAR = 1

ขอบเขต(scope)การใช้งานตัวแปรเราสามารถกำหนดให้ตัวแปรนั้นๆเป็นตัวแปรแบบ
ท้องถิ่น (Private) หรือเป็นตัวแปรแบบสาธารณะ(Public) ได้โดยการใช้คำสั่ง

สำหรับตัวแปรท้องถิ่น PRIVATE MemVarList

– หรือ –

PRIVATE ALL [LIKE Skeleton | EXCEPT Skeleton]

สำหรับตัวแปรสาธารณะ PUBLIC MemVarList

– หรือ –

PUBLIC [ARRAY] ArrayName1 (nRows1 [, nColumns1])
[, ArrayName2 (nRows2 [, nColumns2])] …

แล้มันมีประโยชน์อย่างไรล่ะ?
การใช้ตัวแปรในโปรแกรมต่างๆถ้าเราไม่ได้กำหนดว่าเป็น Public
ทาง Visual FoxPro จะถือว่าตัวแปรนั้นเป็นแบบ Private
ข้อแต่ต่างของมันอยู่ตรงที่ ตัวแปรPrivate ค่าต่างๆสามารถใช้ได้เฉพาะ
ในโปรแกรม(procedure) นั้นๆเท่านั้นเมื่อนำชื่อตัวแปรไปใช้ในโปรแกรมอื่นค่าต่างๆ
ก็จะถูกล้างออก ส่วน Public ค่าต่างๆที่กำหนดไว้สามารถใช้ได้ทุกที่ของระบบงานของคุณ
โดยมันจะมีค่าตามค่าหลังสุดที่กำหนดให้

อะเรย์ (Arrays)

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

        DECLARE [cFunctionType] FunctionName IN LibraryName [AS AliasName]
[cParamType1 [@] ParamName1, cParamType2 [@] ParamName2, …]

หรือ DIMENSION ArrayName1 (nRows1 [, nColumns1])
[, ArrayName2 (nRows2 [, nColumns2])] …

  เช่น  DIMENSION cARRAY[5]

DECLARE cARRAY[2,5]

ฟิลด์ (Fields)

ฟิลด์คือชื่อของข้อมูลที่เก็บอยู่ในเรคคอร์ด(record) ชื่อฟิลด์จะสร้างโดยการสร้าง Table การสร้าง Table ใน Visual FoxPro ใช้คำสั่ง

        CREATE TABLE | DBF TableName1 [NAME LongTableName] [FREE]
(FieldName1 FieldType [(nFieldWidth [, nPrecision])]
[NULL | NOT NULL]
[CHECK lExpression1 [ERROR cMessageText1]]
[DEFAULT eExpression1]
[PRIMARY KEY | UNIQUE]
[REFERENCES TableName2 [TAG TagName1]]
[NOCPTRANS]
[, FieldName2 …]
[, PRIMARY KEY eExpression2 TAG TagName2
|, UNIQUE eExpression3 TAG TagName3]
[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP]
REFERENCES TableName3 [TAG TagName5]]
[, CHECK lExpression2 [ERROR cMessageText2]])
| FROM ARRAY ArrayName

    หรือ CREATE [FileName | ?]

เช่น CREATE TABLE customer (SalesID c(6), CustName c(20),;
FOREIGN KEY SalesId TAG SalesId REFERENCE SALESMAN)

วัตถุ (Object)

วัตถุคือ คลาส(class)สำเร็จรูป คุณสามารถนำมันไปใช้งานได้ งงใช่ไหมผมก็ยังงงๆอยู่แต่งงของผมมี
งอ งู 20 ตัว งั้นผมยกตัวอย่าง(เอาแม่น้ำทั้ง 5 น้ำทั้งนั้น)เลยแล้วกัน ว่าไอ้ที่เขาบอกว่าเป็น
Object-Oriented Programming มันเป็นอย่างไร คุณเคยเล่น ตัวต่อ hobby หรือไม่
ถ้าไม่เคยไม่ต้องมาบอกผม มันจะแยกเป็นชิ้นๆสำเร็จมาให้แล้วใช่หรือไม่ แล้วมันก็จะมีกาว
มีสี มีอะไรอีกก็ช่างมันก็แล้วกัน ไอ้ตัวนี้แหละมันก็เสมือนเป็นคลาส เราก็นำมันมาประกอบกัน
โดยนำกาวมาติดนำสีมาแต้ม พวกนี้ก็คือ คุณสมบัติ(properties)ซึ่งเรานำมาแต่งแต้มมันเข้าไป
เมื่อทำเสร็จมันก็จะเป็นหุ่นให้เรา เหมือกันกับ OOP นั่นแหละเอาคลาสมามั่วๆกันเดี๋ยว
มันก็ออกมาเป็นโปรแกรมเอง ส่วนระละเอียดแบบเนื้อ สด ตับ ไว้ติดตามได้ในบทต่อๆไป

โอเปอเรเตอร์ (Operators)

โอเปอเรเตอร์จะเป็นตัวที่ทำให้คุณสามารถเคลื่อนย้ายข้อมูล เปรียบเทียบข้อมูลต่างๆ
ใน Visual FoxPro ได้แบ่ง โอเปเรเตอร์ไว้ดังนี้

       โอเปอเรเตอร์ตัวอักษร (Character Operators)
โอเปอเรเตอร์วันที่และเวลา(Date and Date Time Operators)
โอเปอเรเตอร์ตรรกะ(Logical Operators)
โอเปอเรเตอร์เปรียบเทียบ(Relational Operators)
โอเปอเรเตอร์ตัวเลข(Numeric Operators)

โอเปอเรเตอร์ตัวอักษร (Character Operators)

โอเปอเรเตอร์ตัวอักษรจะใช้สำหรับเชื่อมตัวอักษร ตั้งแต่ 2 กลุ่มเข้าด้วยกัน
โดยการใช้โอเปอเรเตอร์ + – และ เปรียบเทียบตัวอักษร 2 กลุ่มโดยใช้โอเปอเรเตอร์ $

       เช่น     ? ‘สวัสดี      ‘ + ‘ครับ’
สวัสดี         ครับ (ผลลัพท์ที่ได้)

cVAR = ‘สวัสดี ‘
? cVAR – ‘ครับ’
สวัสดีครับ (ผลลัพท์ที่ได้)

?’ครับ’ $ ‘สวัสดีครับ
.T. (ผลลัพท์ที่ได้)

โอเปอเรเตอร์วันที่และเวลา (Date and Date Time Operators)

ใช้บวก หรือลบวันที่

        เช่น   SET DATE DMY
? DATE() + 30 (สมุติวันที่ปัจจุบันเเป็น 15/09/98)
10/15/98 (ผลลัพท์ที่ได้)

? DATE() – {17/06/98}
90  (ผลลัพท์ที่ได้)

โอเปอเรเตอร์ตรรกะ(Logical Operators)

ใช้ได้กับทุกประเภทของข้อมูล ซึ่งประกอบด้วยโอเปอเรเตอร์ () , NOT หรือ ! , AND , OR

        เช่น  IF !(cVAR=’สวัสดี’) OR (nSaraly >= 50000)

โอเปอเรเตอร์เปรียบเทียบ(Relational Operators)

โอเปอเรเตอร์เปรียบเทียบประกอบไปด้วย

<  น้อยกว่า
> มากกว่า
<>, # , != เท่ากับ
<= ไม่เท่ากับ
>= มากกว่าหรือเท่ากับ
== ใช้เปรียบเทียบข้อความ 2 ข้อความ

โอเปอเรเตอร์ตัวเลข(Numeric Operators)

ใช้ในการคำนวณค่าต่างๆ ประกอบไปด้วย

 Operator Description  ลำดับการทำงาน
( ) แบงกลุ่มคำนวณ ลำดับที่ 1
 **, ^ ยกกำลัง ลำดับที่ 2
* , /  คูณ , หาร ลำดับที่ 3
% หาเศษ ลำดับที่ 4
+ , – บวก , ลบ ลำดับที่ 5

เช่น   ? (4+5) * 10 – (12%10) ^ 2
86.00 (ผลลัพท์ที่ได้)

การสร้างนิพจน์ (Building Expressions)

นิพจน์คืออะไร คือถ้อยแถลงที่มีความหมายทำให้โปรแกรมรู้จัก สามารถปฎิบัติตามคำสั่งได้
ถ้ายังไม่ค่อยจะเข้าใจให้ลองย้อนกลับไปดูตัวอย่างโปรแกรมแรก ในโปรแกรมหนึ่งๆ
จะประกอบได้วยถ้อยแถลงหลายๆ ถ้อยแถลงมาประกอบกัน เช่น
nVAR = 1 + 2
IF (nVAT = 10/100)
FOR nVAR = 4 to 400 STEP 4
? DATE()
เป็นต้น

การเขียนนิพจน์ เป็นศิลปะอย่างหนึ่งขึ้นอยู่ว่าผู้ที่เขียนนั้นๆ ต้องการให้โปรแกรมเป็นอย่างไร
นิพจน์นั้นอาจประกอบไปด้วย ตัวอักษร โอเปอเรเตอร์(Operators) ค่าคงที่(Constants)
ตัวแปร(Variable) ฟังก์ชั่น(Function) ดังที่ได้กล่าวมาแล้วข้างต้น

การตั้งชื่อใน Visual FoxPro
1. ใช้ตัวอักษร, _ (Under Score) และตัวเลข
2. ตัวแรกต้องขึ้นต้นด้วยตัวอักษร หรือ Under Score
3. สามารถตั้งชื่อได้ตั้งแต่ 1 ตัวถึง 254 ตัวอักษร
ยกเว้นชื่อ Field ใน Free Table (file ที่มีนามสกุล .DBF)
และ Index Tag ตั้งชื่อได้ไม่เกิน 10 ตัวอักษร
4. ห้ามใช้คำสงวนใน Visual FoxPro