Run Time Error '2185' แก้อย่างไรค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 2,003   10
URL.หัวข้อ / URL
Run Time Error '2185' แก้อย่างไรค่ะ

Run Time Error '2185'

"you can't reference a property or method for a control unless the control
has the focus."

โค้ดตามนี้ค่ะ
Option Compare Database
Private Sub Command1_Click()
If Combo2.Text = Null Then               ' errorที่ บรรทัดนี้ค่ะ
MsgBox "กรุณาเลือกประเภทผู้ใช้"
ElseIf Text4.Text = Null And Text6.Text = Null Then
MsgBox "กรุณากรอก Username และ Password"
End If
End Sub



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

1 @R08786
มีความจำเป็นอะไรต้องใช้ .Text ครับ ทำไมไม่ใช้ .Value (หรือไม่ต้องเขียนอะไรตามหลังก็จะหมายถึง .Value เช่นกัน เพราะมันเป็น default property)
2 @R08787
ใช้ .Value แล้ว รันผ่านค่ะแต่ไม่ขึ้น MsgBox เลยค่ะ

*แล้ว.Text ใช้ในกรณีไหนหรอค่ะ

ขอบพระคุณมากค่ะ
3 @R08788
คือโค้ดนี้ต้องการจะตรวจสอบว่าcombobox   และ textbox เป็นค่าว่างหรือเปล่าอ่ะค่ะ ไม่ทราบโค้ดด้านบนเขียนถูกหรือผิดอย่างไรค่ะ

..รบกวนด้วยนะคะ
4 @R08789
Private Sub Command1_Click()
If Combo2="" or isnull(Combo2) Then
MsgBox "กรุณาเลือกประเภทผู้ใช้"
ElseIf (Text4="" or isnull(Text4)) And (Text6="" or isnull(Text6)) Then
MsgBox "กรุณากรอก Username และ Password"
End If
End Sub


.text จะใช้ได้ ก็ต่อเมื่อ โฟกัสอยู่ที่คอนโทรลนั้นๆ เท่านั้น มักใช้เพื่อหาค่าอักขระ ในเหตุการณ์ key_up, key_press, change เป็นต้น (คือเป็นเหตุการณ์ที่ยังไม่ได้ยังโฟกัสออกไปจากมัน)

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

แต่ใน asp java vb6 จะกลับกัน โดย .text เป็นตัว default เมื่อเขียนอ้างชื่อคอนโทรลโดยไม่ระบุพร็อพเพอร์ตี้ คุณจะได้ค่าของ .text โดยอัตโนมัติ

ความแตกต่าง ของมัน ยกตัวอย่าง
ถ้าผู้ใช้เขียนข้อความใน textbox ว่า "November 11, 2010"
ถ้าเราอ้าง .text เราจะได้ตัวหนังสือ (string)
ถ้าเราอ้าง .value เราจะได้ ค่าของวันที่ (Date/Time)

หรืออีกตัวอย่าง ถ้า textbox ตัวนี้ให้ผู้ใช้กรอกบ้านเลขที่ แล้วผู้ใช้กรอกว่า "255/5"
ถ้าเราอ้าง .text เราจะได้คำตอบเป็น string คือเขียนตามนั้นเป๊ะๆ
ถ้าเราอ้าง .value เราจะได้คำตอบเป็น 51
5 @R08791
ได้แล้วค่ะ ...ขอบพระคุณอย่างสูงค่ะ
6 @R08792
(เพิ่งเห็นว่ามี อ. Yeadram มาตอบแล้ว แต่ไหนๆผมเขียนแล้ว ก็ขอแปะลงไปด้วยแล้วกัน)

.Text สำหรับข้อความที่เห็นอยู่บนหน้าจอ เช่น 123,456.78
.Value สำหรับค่าจริงของคอลโทรลนั้น เช่น 123456.78

ปกติเราจะใช้ .Value ถ้าจะใช้ .Text คอลโทรลนั้นต้องมีโฟกัสอยู่ โค้ดของคุณถึงผิดไงครับ เพราะขณะที่เกิด event procedure Command1_Click โฟกัสก็ยังคงอยู่ที่คอลโทรล Command1

สิ่งที่เราเห็นว่าว่างๆบนหน้าจอ มันมีความเป็นไปได้ 3 อย่าง

1. เป็น NULL string หมายถึงยังไม่มีค่าอะไรอยู่เลย

2. เป็น "" Zero-Length string หมายถึงมีค่า แต่ความยาวของข้อความเป็น 0 ซึ่งแตกต่าง NULL string เช่น เมื่อเริ่มต้น คอลโทรลยังอาจบริสุทธิ์ ไม่ถูกใครแตะเลย ก็จะมีค่าเป็น NULL พอป้อน 123456.78 มันก็ไม่เป็น NULL แล้ว นึกได้อีกทีว่าไม่เอาแล้ว ต้องการลบค่าทิ้ง คุณก็กด backspace เพื่อลบจนมันว่าง มันก็จะเป็น Zero-Length string ไม่ใช่ NULL แล้วมีโอกาสกลับมาเป็น NULL ได้อีกไหม ก็มีครับ ถ้าเขียนโค้ดให้มันเป็น หรือแหล่งข้อมูลที่มันไปผูกด้วยนั้น (จาก ControlSource property) มันเป็น NULL อยู่แต่เดิมและเรากด ESC เพื่อยกเลิกข้อมูลที่ป้อนนั้น

3. มี Space character อยู่

วิธีตรวจสอบ ถ้าคิดว่าไม่เกิดกรณีที่ 3 ก็ใช้นิพจน์ Nz(Text1) = "" แต่ถ้าคิดว่ามีกรณีที่ 3 ด้วย ก็ใช้นิพจน์ Nz(Trim(Text1)) = "" แทนครับ คิดว่าจากนี้คุณก็คงพิจารณาได้เองแล้วว่าทำไมถึงไม่ขึ้นข้อความจาก MsgBox เลย

ฟังก์ชั่น Nz( ) คืออะไร ไปหาอ่านจากกระทู้เก่าๆเองครับ

ปล.
หรอค่ะ ต้องเขียน หรอคะ
หรือเปล่าอ่ะค่ะ ต้องเขียน หรือเปล่าอ่ะคะ
ถูกหรือผิดอย่างไรค่ะ ต้องเขียน ถูกหรือผิดอย่างไรคะ

ค่ะ เสียงต่ำ    คะ เสียงสูง
7 @R08793
ขอบคุณอ.สันติสุขมากคะ   สอนaccessไม่พอยังสอนภาษาไทยด้วย ดีจริงๆคะ

ขอให้อ.ทั้งสองเจริญๆ นะคะ จะพยายามใช้คำทั้งสองให้ถูกละกันนะคะ
8 @R08794
มากคะ ต้องเขียน มากค่ะ
ดีจริงๆคะ ต้องเขียน ดีจริงๆค่ะ
9 @R08796
^_^ ถ้าจะสอนยากค่ะ
10 @R08797
555555555555555
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3400s