บทความ

กำลังแสดงโพสต์จาก 2013

การใช้ Array ร่วมกับ Function

เพื่อทดสอบการใช้ VFP ร่วมกับตัวแปรประเภท Array ผมจึงเขียนคำสั่งดังข้างล่างนี้เพื่อทดสอบการใช้งาน Array ทั้งส่งข้อมูลเข้าไปใน Function และการรับค่า Array ที่คืนจาก Function ออกมาใช้งานต่อ แยกเป็นส่วนๆได้ดังนี้ * สร้างตัวแปร myarray ให้เป็น array แล้วกำหนดค่าเป็น A,B ตามลำดับ DIMENSION myarray[2] myarray[1]="A" myarray[2]="B" * ทดลองพิมพ์ออกมาดูว่าเก็บค่าอยู่จริงมั๊ย ?"test print array value" for i=1 to alen(myarray) ?i,myarray[i] next i * ส่งค่าไปใช้ในฟังก์ชั้น do print_r with myarray * การรับค่า array คืนจากฟังก์ชั่น dime pointer[5] && ต้องประกาศตัวแปร array ที่จะเป็นตัว contrainer (ส่งค่าไปและรับค่ากลับ) ขึ้นมาก่อน pointer = returnarray(@pointer) && จากนั้นส่ง pinter ของตัวแปร array ที่จะเป็นตัว contrainer ไปยังฟังก์ชั่น * ค่าที่รับมาแบบ pointer จะเป็น array หรือไม่ก็ได้ แต่กรณีนี้เป็น array เพราะฟังก์ชั่นคืนค่า pointer ของตัวแปร array กลับมา * ทดลองพิมพ์ค่าออกมาดูว่าเก็บค่าอะไรไว้ do print_r with pointer return * ฟังก

VFP index tag มีอยู่จริงหรือเปล่า?

ไปเจอมาจากเว็บ foxite.com   ครับ เอามาเก็บไว้ก่อน ส่วนจะใช้ได้ผลยังไงหรือไม่นั้น..แหะๆลองแล้วบอกกันมั่งนะครับ ฮี่ฮี่ฮี่ How can I check if a given file has an index available for use? * Passed the name of an index tag * returns true if it is a tag for the specified table. * Uses table in the current work area if no table name is passed. FUNCTION IsTag( tcTagName, tcTable ) LOCAL ARRAY laTags[1] LOCAL llRetVal *** Did we get a tag name? IF TYPE( 'tcTagName' ) # 'C' *** Error - must pass a Tag Name ERROR '9000: Must Pass a Tag Name when calling ISTAG()' RETURN .F. ENDIF *** How about a table alias? IF TYPE( 'tcTable' ) = 'C' AND ! EMPTY( tcTable ) *** Get all open indexes for the specified table ATagInfo( laTags, "", tcTable ) ELSE *** Get all open indexes for the current table ATagInfo( laTags, "" ) ENDIF *** Do a Case Insensitive, Exact=ON, Scan of the first column of arr

ใช้ APPEND เพิ่มข้อมูลจากตารางที่เปิดอยู่

SELECT SomeTable  APPEND FROM DBF('cFoundHistRecs')

อยากรู้ว่า..มีฟิลด์ (Field) นี้หรือไม่?

หากคุณอยากรู้ว่ามี FIELD นั้นๆอยู่ใน TABLE หรือไม่ อาจใช้เทคนิคลับตรวจสอบเรื่องนี้ด้วยฟังก์ชั่น TYPE โดยระบุชื่อ FIELD ลงไปแบบนี้ครับ TYPE(<FIELD_NAME>) ซึ่งปกติแล้วฟังก์ชั่น TYPE จะใช้ตรวจสอบว่า VARIABLE ที่เราสนใจนั้น ประกาศ/ทำให้มีขึ้นเพื่อใช้เก็บข้อมูลชนิดอะไร แต่เนื่องจากการทำงานของมัน หากไม่พบตัวแปรที่ระบุมันจะคืนค่าเป็น U ซึ่งย่อมาจาก Unrefined และสามารถนำมาใช้กับ FIELD ได้ด้วย ดังนั้นหากอยากรู้ว่า มีฟิลด์นี้มั๊ย? ก็แบบนี้แหละครับ ? iif(type("fieldname")="U","ไม่มีหรอก","มีสิ") เรียบร้อยครับ ง่ายๆแค่นี้เอง

Find Middle Value มีสามจะเอาหนึ่ง

ในเวลาที่ผมต้องเลือก 1 ใน 3 นี้ ถ้าเป็นการเลือกสาวสวยก็คงลำบากใจเหมือนกัน เพราะอาจเหมาไว้ทั้งหมด แต่หากเป็นการเลือกค่า 1 ค่าจาก 3 ค่าล่ะก็ไม่ยากครับ โดยเฉพาะฟังก์ชั่น max และ min นั้นก็มีกันอยู่แล้ว แต่นี่เป็นฟังก์ชั่นสั้นๆที่จะหาค่าที่ไม่มากและไม่น้อยไปกว่าค่าอีกสองค่าที่เหลือ มาแนวนี้เลยต้องใช้ชื่อว่า midvalue (ค่าขนาดกลาง) ยังไงล่ะครับ ... ไปดู code กันเลย function midvalue parameter val_1,val_2,val_3 maxvalue = max(val_1,val_2,val_3) minvalue = min(val_1,val_2,val_3) returnvalue = 0 do case case val_1>=minvalue .and. val_1<maxvalue returnvalue = val_1 case val_2>=minvalue .and. val_2<maxvalue returnvalue = val_2 case val_3>=minvalue .and. val_3<maxvalue returnvalue = val_3 endcase return returnvalue endfunc วิธีเรียกใช้ก็เหมือนฟังก์ชั่นทั่วไป ให้ a,b และ c เป็นตัวแปรที่มีค่าบรรจุอยู่แล้วเรียกใช้ฟังก์ชั่นว่า ... x=minvalue(a,b,c) ค่า x จะเป็นค่าที่คืนมาจากฟังก์ชั่น ซึ่งจะเป็นค่า 1 ใน 3 ค่าที่ส่งไป และจะไม่มากและไม่น้อ

Copy Table Structure to Cursor ลอกโครงสร้าง Table ไปเป็น Cursor

A : วันก่อนครับ B : ทำไมครับ A : เขียนโปรแกรมดึงข้อมูลจากหลาย Table มาใส่ใน Cursor เดียว วุ่นมาก โดยเฉพาะการสร้าง Cursor ต้องไป List Structure แล้วมาเขียนคำสั่งสร้าง Cursor หลายๆครั้งเข้าเลยทำเป็นโปรแกรมเลยสิ ก็เขียนอยู่นานตั้งหลายสิบบรรทัด วนรอบเช็ค Field name , Field type , Field size กันให้วุ่น เสร็จปุ๊บก็สบายละทีนี้ต่อไปไม่ต้องปวดหัวเรื่องนี้อีก ใช้มาเรื่อย ดีมากๆเลย เจ๋งเลย ภูมิใจมากๆเลย ชีวิตกูคงง่ายกว่าคนอื่นเยอะ จนวันนึงทำ Source Code ส่วนนั้นหาย เลยต้องมาเริ่มกันใหม่ แล้ว...แล้ว..เจือกจำไม่ได้ด้วยว่าเขียนยังไง!!! B : เวรล่ะครับ A : ก็เลยตั้งสติ เอาใหม่ เริ่มใหม่ ปรากฏว่าใช้คำสั่ง 3 บรรทัดออก B : เฮ้ย!! ขนาดนั้น A : จริงๆนะ บ้าที่สุดเลย หลงภูมิใจความโง่มาตั้งนาน เอ้าดูกันเลยครับ USE <table> AFIELDS(tblFields) CREATE CURSOR <cursorname> FROM ARRAY tblFields ข้อคิดดีๆที่ได้จากเรื่องนี้ - การที่เราทำเรื่องยากๆได้ ก็ใช่ว่าจะเจ๋งเสมอไป - เวลา Source Code โปรแกรมหายอย่าตกใจ!! ลองคิดใหม่ อาจมีอะไรที่เจ๋งกว่าเดิม - เขียนลง Blog เอาไว