ใส่ Me. กับไม่ใส่ Me. ต่างกันอย่างไรคะ
กระทู้เก่าบอร์ด อ.Yeadram

 2,833   10
URL.หัวข้อ / URL
ใส่ Me. กับไม่ใส่ Me. ต่างกันอย่างไรคะ

ใส่ Me. กับไม่ใส่ Me. ในคำสั่ง มีความหมายต่างกันอย่างไรคะ ตัวอย่างเช่น

me.Text1.Setfocus

กับ

Text1.Setfocus (ไม่มี me.)

เห็นมันทำงานให้ผลได้เหมือนกัน อยากทราบว่าใช้งานต่างกันอย่างไรคะ
รบกวน ขอความรู้ด้วยค่ะ

10 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R21670
Me เป็น object variable ที่หมายถึง Form หรือ Report ตัวที่เป็นเจ้าของของโค้ดที่ตัวแปร Me เองถูกเรียกใช้   Access สร้างให้อัตโนมัติใน Form/Report นั้นๆโดยที่เราไม่ต้อง Declare เอง    (การเขียน Me ใน Module object อื่นๆจะเกิด error ขึ้น เพราะ Module เหล่านั้นไม่มี Form/Report เป็นของตัวเอง)

ผมไม่แน่ใจว่าจะมีเหตุผลอื่นอีกหรือไม่ แต่สำหรับผมแล้วมี 2 เหตุผลในการใช้ Me

1) โดยอาศัยเทคนิคการเขียนโค้ดบางอย่าง จะทำให้เราเปิด Form/Report เดียวกัน ออกมาเป็นกี่วินโดว์(ทางเทคนิคใช้คำว่า instance) ก็ได้ ทุก Form/Report มีชื่อเดียวกัน โค้ดในแต่ละ Form/Report นั้นๆก็คือโค้ดเดียวกัน การอ้างถึง Me จะทำให้ Access รู้ว่าเรากำลังหมายถึงตัว Form/Report ตัวที่กำลังรันโค้ดนั้นๆอยู่

2) เมื่อเรากำลังเขียนโค้ด พอเราเขียน Me. ปั๊ป ตัว VBA Editor จะเปิดรายชื่อของ Method, Property และ Control ต่างๆของ Form/Report นั้นมาให้เราเลือกออกมาให้ (เช่นเดียวกับการเขียน object variable อื่นๆแล้วตามด้วย . เช่นกัน) เป็นการอำนวยความสะดวกอย่างมาก ที่สำคัญคือลดความผิดพลาดในการเขียนโค้ด ทำให้ชีวิตโปรแกรมเมอร์มีความสุขขึ้นมาบ้างครับ
2 @R21671
ทางเทคนิค คือ เร็วขึ้นครับ

เร็วขึ้นโดย เปรียบได้กับการระบุ ที่อยู่ในการส่งจดหมายให้ชัดเจน
ไม่ต้องเสียเวลาตรวจสอบ
3 @R21672
สงสัยอยู่นาน ตอนนี้กระจ่างชัดแล้วค่ะ

ขอบคุณอาจารย์ทั้งสองท่านนะคะ
4 @R21675
ขอถามเพิ่มนะครับ แล้ว
Me.textbox
Me!textbox
มีความแตกต่างอะไรบ้างครับ ขอบคุณครับ
5 @R21676
ถ้าใช้ . Access จะตรวจสอบคอนโทรล (textbox) ตั้งแต่ช่วง Compile time ทำให้รู้ได้ว่ามี textbox อยู่จริงหรือไม่ ตั้งแต่ก่อนที่รันโปรแกรม

แต่ถ้าใช้ !   การตรวจสอบจะทำช่วง Rutime   ถ้า textbox นั้นไม่มีอยู่จริง กว่าจะรู้ว่าไม่มี ก็ตอนเกิด runtime error ไปแล้วครับ   นั่นมีส่วนทำให้โปรแกรมที่ใช้ ! น่าจะทำงานช้ากว่าการใช้ . ครับ
6 @R21694
ขอบคุณอาจารย์มากครับ
ว่าแต่...เท่าที่อ่านมา เราควรจะใช้ . มากกว่าใช่ไม๊ครับ แล้ว ! มีไว้เพื่ออะไรครับ ทำไมต้องมีสองอย่างให้เลือกใช้อะครับ
7 @R21696
Access ทำการปรับปรุงระบบให้เข้าใกล้ Object Oriented (จำไม่ได้ว่าตั้งแต่เวอร์ชั่นอะไร) โดยนำเอาชื่อของคอนโทรลต่างๆ เช่น Textbox1, Combobox2 มาสร้างเป็น Property ของฟอร์ม ดังนั้นเลยใช้ Notation (สัญญลักษณ์ที่ใช้ในการระบุ Object) เป็นเครื่องหมาย . ตามรูปแบบของระบบ Object Oriented ครับ    แต่สมัยแรกๆไม่ได้เข้าใกล้ Object Oriented อย่างนี้   Object ต่างๆจะเป็นแค่ Member ของ Collection (ซึ่งปัจจุบันก็ยังเป็นอยู่) การอ้างถึง Member จะใช้เครื่องหมาย !

ตอนนี้ถ้ายังต้องการอ้างอิง Member ของ Collection ก็ยังใช้ ! ได้ แต่ถ้าอันไหนถ้าเปลี่ยนเป็น . ได้ ผมก็จะใช้ . แทนครับ อย่างเช่นถ้าจะอ้างถึงฟอร์มอื่น ก็สามารถเขียน Forms!ชื่อฟอร์มอื่น ถ้าอ้างฟอร์มของตัวโค้ดเอง ก็อ้าง Me แทน แต่การอ้างฟอร์มอื่นก็สามารถเขียนเป็น Form_ชื่อฟอร์ม ได้เหมือนกันครับ
8 @R21698
โดยปกติแล้ว
Me! จะตามด้วยชื่อของ object หรือ Control ได้เลย
เช่น Me!Control1

Me. จะตามด้วย property หรือ method ซึ่งจะอ้างถึง control สักตัว ต้องผ่าน property ที่เป็น member ของ Me อีกที
เช่น Me.Controls("Control1")

โดยสรุปแล้ว ! เป็นทางลัดของ code ครับ

ทางเทคนิคที่เคยอ่านเจอ คือ ! จะทำงานเร็วกว่าครับ

แต่ที่เขียน code เป็น Me.Control1 ได้เลย เข้าใจว่า Access เอาใจคนใช้ครับโดยเพิ่มวิธีการเขียนแบบนี้ได้
9 @R21699
ถ้าเป็นรูปธรรมหน่อย นึกถึงก็คล้ายกับการเรียกใช้ Set rs ครับ คือ rs. จะเป็นการเรียกใช้ Property ส่วน rs! จะเป็นการระบุชื่อฟิลด์

ส่วนใน VBA ผู้พัฒนา VBA ใน MS Access เพิ่มความสามารถทำให้ชื่อ object control เป็นส่วนหนึ่งของ Property น่าจะเพื่อทำให้สะดวกรวดเร็วในการเขียนมากขึ้น

ความเห็นส่วนตัว ใครเขียนโค๊ดเยอะๆ ใน MS Access แล้วเจอปัญหารวน คืออยู่ดีๆก็รันไม่ได้ ฟ้อง error ทั้งๆที่เปิดครั้งที่แล้วยังใช้ได้ เอ๋อๆ ต้อง Decompile ใหม่
ปัญหาส่วนหนึ่งอาจมาจากความสามารถนี้ ถ้าเขียนโค๊ตที่ซับซ้อน และอ้าง Object เยอะๆ ผมแนะนำให้ใช้ Me! ในการระบุชื่อ Object Control ส่วน Me. ใช้ในส่วนของการเรียก Property จะลดการเอ๋อในการอ่านโค๊ตลงได้ เช่น
Me!TextBox1
Me.Requery
Forms!MainForm!SubForm.Form!TextBox1.Value
เป็นต้น
คือทำให้มันเป็นแบบพื้นฐานมากที่สุด ซึ่งการเขียนก็จะยากขึ้นเช่นกัน
ปล. อันนี้เป็นแค่แนวคิดความเชื่อนะครับ ความรู้สึกล้วนๆ 555
10 @R21707
ขอบคุณอาจารย์ทุกท่านมากๆครับผม
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2960s