vb ที่ใช้ได้ vs ที่ใช้ไม่ได้ ช่วยเช็คด้วย ขอบคุณคร
กระทู้เก่าบอร์ด อ.Yeadram

 7,793   36
URL.หัวข้อ / URL
vb ที่ใช้ได้ vs ที่ใช้ไม่ได้ ช่วยเช็คด้วย ขอบคุณคร

ผมสร้างฟอร์มค้นหารายชื่อสมาชิกที่เิกิดในแต่ละเดือนนั้น โดยใช้วิซาร์ดสร้าง Option Group 13ปุ่ม ออกมาเป็น macro แล้ว convert เป็น vb ซึ่งใช้งานได้ดี ดังนี้
Private Sub SelectMonth_AfterUpdate()
On Error GoTo SelectMonth_AfterUpdate_Err

    With CodeContextObject
        If (.SelectMonth = 1) Then
             DoCmd.ApplyFilter "", "[BirthMonth] Like ""1""", ""       ' เลือก มค.
        End If
        If (.SelectMonth = 2) Then
             DoCmd.ApplyFilter "", "[BirthMonth] Like ""2""", ""        ' กพ
        End If
        If (.SelectMonth = 3) Then
             DoCmd.ApplyFilter "", "[BirthMonth] Like ""3""", ""        ' มีค
        End If
              ....
              ....
              ....
        If (.SelectMonth = 12) Then
            DoCmd.ApplyFilter "", "[BirthMonth] Like ""12""", ""        'ธค.
        End If
        If (.SelectMonth = 13) Then
            DoCmd.ShowAllRecords                                                'เลือกทั้งปี
        End If

        DoCmd.GoToControl "SelectMonth"
        Exit Sub
    End With

SelectMonth_AfterUpdate_Exit:
    Exit Sub

SelectMonth_AfterUpdate_Err:
    MsgBox Error$
    Resume SelectMonth_AfterUpdate_Exit

End Sub

แต่ผมอยากเขียน vb ออกมาเป็น do...case
จึงเอา vb ข้างต้นมาดัดแปลงเป็น
Private Sub SelectMonth_AfterUpdate()
    Select Case Month
        Case SelectMonth = 1
            [BirthMonth] = "1"
        Case SelectMonth = 2
            [BirthMonth] = "2"
        Case SelectMonth = 3
            [BirthMonth] = "3"
              ....
              ....
              ....
        Case SelectMonth = 12
            [BirthMonth] = "12"
        Case SelectMonth = 13
            DoCmd.ShowAllRecords
    End Select

SelectMonth_AfterUpdate_Exit:
    Exit Sub

SelectMonth_AfterUpdate_Err:
    MsgBox Error$
    Resume SelectMonth_AfterUpdate_Exit

End Sub
ปรากฏว่าเอาไปใช้งาน ไม่เกิดผลอะไรออกมาเลย
รบกวนอาจารย์ทั้งหลาย ช่วยดูให้หน่อยว่า ผมเขียนผิดตรงไหน
ขอบคุณล่วงหน้าครับ

36 Reply in this Topic. Dispaly 2 pages and you are on page number 2

21 @R13256
ไม่สำเร็จครับ อาจารย์
comply ทีแรก เครื่องฟ้อง complied error ที่ = '" & Nz(cmbTanon,'') & "'" '' ฟันหนูในวงเล็บ
ผมเลยลบฟันหนูทิ้ง ก็ complied ได้ จึงใช้เป็น
Me.srmVisit.form.recordsource = "select * from qryVisit where JungWat = '" & cmbJungWat & "' and AmPhur = '" & cmbAmPhur & "' and Nz(Tanon,'') = '" & Nz(cmbTanon) & "'"
แล้วเอา link Master/Child Field ออก (เดิม link ทั้ง Field JungWat, AmPhur และ Tanon)
พอคลิก cmbTanon (ผมเอา MsgBox ดักดู ก็เห็นว่าส่งค่าถูกต้อง) แต่เครื่องฟ้องว่า "You enter an expression that has an invalid reference to the property Form/Report)"
ผมเลยคาไว้อย่างนั้นก่อน ขอรบกวนอาจารย์อีกที
ขอบคุณครับ
======================================================
อาจารย์ครับ
เครื่องหมาย '" & __ & "' หมายถึง control ใช่ไหมครับ? ต้องเขียนแบบนี้เสมอ ใช่ไหมครับ?
22 @R13257
เพิ่มเติมครับ อาจารย์
พอคลิกที่ cmbTanon เครื่องฟ้องว่า "Method 'Form' of object '_SubForm' Failed" แล้ว SubForm ก็เปิด first record (ไม่ใช่ที่เลือก)ขึ้นมาให้
หวังว่าคงไม่ได้ทำให้อาจารย์งงมากขึ้น
ขอบคุณครับ
นับถือ
23 @R13258
- Nz(cmbTanon,'') เปลี่ยนเป็น Nz(cmbTanon,"")

- แน่ใจหรือไม่ว่า subform control ชื่อ srmVisit ?   ลองเปลี่ยนเป็น
Me.srmVisit.form.recordsource = "select * from qryVisit" (นี่เป็นแค่การทดลอง ไม่ใช่ SQL ที่ถูกต้อง) ถ้ายังไม่ได้อีก ค่อนข้างแน่ใจว่าไม่ใช่ชื่อ srmVisit

- เครื่องหมาย & เอาไว้เชื่อม string 2 string เข้าด้วยกัน เช่น "A" & "B" จะได้เป็น "AB" หรือ "A" & cmbTanon แล้ว cmbTanon มีค่าเป็น "B" ก็จะได้ผลลัพธ์เป็น "AB" เช่นกัน    ส่วนชื่อคอลโทรลเราสามารถเขียนเฉพาะชื่อคอลโทรลเดี่ยวๆเช่น cmbJungWat ได้ แต่ปกติผมจะเขียนโดยมี predicate Me เป็น Me.cmbJungWat มากกว่าเพื่อความเชื่อมั่นในการเขียนและอ่านโค้ด

- string ต้องครอบด้วย double quote   ถ้าใน string ต้องการให้มีเครื่องหมาย double quote ด้วย เราต้องเขียน double quote 2 ติดกัน เช่น "A""B" จะตีความได้เป็น A"B   
24 @R13271
ขอเน้นอีกทีว่า ชื่อของ subform control บน main form นะครับ ไม่ใช่ชื่อของฟอร์มที่เป็น subform เช่น ฟอร์ม M มีคอนโทรล C ที่ใส่ subform S   ให้เอาคำว่า "C" มาครับ
25 @R13277
ขอบคุณครับ อาจารย์
ยังไม่สำเร็จครับ
ก่อนอื่น กราบขออภัยอาจารย์ก่อน ผมพิมพ์ sfmVisit ผิดเป็น srfVisit
ส่วนคอนโทรลซับฟอร์มบนเมนฟอร์มชื่อ cmbTanon ครับ
ผมแก้ '' เป็น "" แล้ว เป็นแบบนี้ครับ
Me.sfmVisit.Form.RecordSource = "select * from qryVisit where JungWat = '" & cmbJungWat & "' and AmPhur = '" & cmbAmPhur & "' and Nz(Tanon,"") = '" & Nz(cmbTanon) & "'"
พอรันงานดู ได้ "ถ.พหลโยธิน อ.เมือง จ.ปทุมธานี" กับ " อ.เมือง จ.ปทุมธานี"
พอคลิกที่ "ถ.พหลโยธิน อ.เมือง จ.ปทุมธานี" เครื่องฟ้องว่า "Method 'Form' of object '_SubForm' failed" แต่ในซับฟอร์มแสดง "ถ.สุขาภิบาล 1 อ.คลองกุ่ม จ.กทม" ซึ่งเป็นเรคอร์ดแรก และเรคอร์ดอื่นๆเรียงตามกันมา (ทำนอง select all)
แต่พอคลิก " อ.เมือง จ.ปทุมธานี" จะไม่ขึ้นเรคอร์ดใดๆในซับฟอร์มให้เห็นเลย
=====================================================
ขอเรียนถามอาจารย์ถึงการเขียนนิพจน์ = '" & Nz(cmbTanon) & "'" นี้ว่า เครื่องหมาย '&___&' มีความหมายอย่างไรครับ? หมายถึงคอนโทรลหรือเปล่า? ต้องเขียนเช่นนี้คล่อมคอนโทรล? ใช่หรือเปล่าครับ

ขอบคุณมากๆเลยครับ ที่อาจารย์กรุณาสละเวลาอันยาวนานมาช่วยเคลียปัญหาให้ผม ขอบคุณจากใจจริงครับ

ปล.ที่จริงผมเข้ามาอ่านคำตอบของอาจารย์ตั้งแต่วันเสาร์แล้วครับ
แต่ว่า เครื่องที่บ้าน Access 2010 ไว้ ส่วนเครื่องที่บริษัทเป็น Access 2007
mdb ที่ทำที่บริษัท พอเอามารันที่บ้าน ก็ไม่ active เลยต้องรอมาทำที่บริษัท ถึงได้เขียนแจ้งมาล่าช้าไป ขออภัยด้วยครับ
26 @R13285
ผมชักงงแล้ว เชื่อว่าเส้นผมบังภูเขาแน่ๆ กรุณาส่งไฟล์โปรแกรม (.mdb) มาที่ accboard@gmail.com ครับ

ปล.ช่วงนี้สุขภาพไม่ค่อยดี ถ้าช่วงนี้ตอบช้าหรือหายไปเป็นวัน ช่วยโพสขอให้ท่านอื่นตอบแทนนะครับ
27 @R13288
อาจารย์ครับ
ส่งไปให้แล้วครับ
ขอให้อาจารย์หายไวๆนะครับ
จะได้กลับมาเป็นที่พึ่งของพวกเราเร็วๆ
ขอให้หายไวๆครับ
28 @R13289
เซฟเป็นไฟล์ .mdb มาครับ ผมไม่มี Access 2007/2010
29 @R13295
อาจารย์ครับ
ส่งไปให้ใหม่แล้วครับ ไม่ทราบว่าใช้ได้หรือเปล่าครับ?
30 @R13296
เครื่องหมาย & มีไว้ใช้ ต่อ string ครับ

เช่น "A" & "B" = "AB"
ถ้ามี ตัวแปร FName มีค่า = "Robert"
อยากให้แสดงผลว่า "Robert ครับ" ให้ทำอย่างนี้
MyString = FName & " ครับ"

31 @R13299
ขอบคุณครับ อ.PichaiTC ที่กรุณาเข้ามาแนะนำอีกท่านหนึ่ง
ผมพยายามเอาคำไปแทนค่าตามที่อาจารย์อธิบายมา แต่ก็ยังคงงงอยู่ครับ ขอถามอาจารย์ตามนิพจน์ข้างล่างนี้นะครับ
...JungWat = '" & cmbJungWat & "' and AmPhur = '" & cmbAmPhur & "' ...
= '" & cmbJungWat & "' มีความหมายว่าอะไรครับ? ที่เอา & -- & ไปคร่อม cmbJungWat หมายถึงเครื่องหมายแสดงให้เครื่องรู้ว่านี่เป็นคอนโทรลหรือเปล่าครับ?
และคำว่า and ผมสามารถเขียนแทนด้วย & ได้ไหมครับ?
ขอบคุณครับ
32 @R13303
ผมส่งโปรแกรมที่แก้ไขกลับไปแล้ว มีจุดต่างๆที่แก้ไขเยอะมาก แนะนำให้เช็คดูทุกคอลโทรลบนฟอร์มว่ามีอะไรที่ไม่เหมือนเดิมบ้าง

เนื่องจากไม่แน่ใจว่าที่ต้องการคืออย่างไรแน่ ผมจึงทำให้มีเช็คบ็อกซ์ Only all match เพื่อว่าเมื่อเลือกแล้ว จะแสดงเฉพาะข้อมูลที่ตรงตามจังหวัด อำเภอและถนนเท่านั้น แต่ถ้าไม่เลือกเช็คบ็อกซ์ ก็จะแสดงข้อมูลทันที เช่น เมื่อเลือก กรุงเทพฯ ข้อมูลทั้งหมดของกรุงเทพฯก็จะแสดงออกมาใน subform    พอเลือกพญาไท ข้อมูลทั้งหมดของกรุงเทพเขตพญาไทก็จะแสดงออกมาใน subform เช่นกัน

ลองเอาไปศึกษาดูนะครับ โค้ดของเดิมหลายอย่างตัดทิ้งเพราะ Access2003 ที่ผมมีไม่สามารถเข้าใจคำสั่งใหม่ๆใน Access2007/2010 ได้
33 @R13304
ขอบคุณครับ อาจารย์ ผมจะนำไปศึกษาครับ
รู้สึกว่า Access2007/2010 ก็มีปัญหาในตัวของมันเองไม่น้อยนะครับ
ผมทำ Access2007 ที่บริษัท แต่พอเอาไปรันบน Access2010 ที่บ้าน มันไม่ยอมทำงานเลย
เห็นทีต้องย้อนกลับมาใช้ Access2003 ก่อน แล้วรอให้ Access2007/2010 เสถียรมากกว่านี้ค่อยใช้ละมังครับ
ขอบคุณครับ อาจารย์
34 @R13308
ใช้ Access2010 หน่ะ ผมว่าดีแล้ว เพียงแต่เราอาจไม่เข้าใจอะไรบางอย่าง หรือไฟล์มันเกิดปัญหาภายในก็เป็นไปได้ครับ บางครั้งต้องแก้ด้วย Compact and repaire หรือการ Decompile ลองอ่านกระทู้เก่าๆถึงความหมายของคำเหล่านี้ดูครับ
35 @R13320
ขอบคุณครับ อาจารย์
ผมจะทำตามครับ
สำหรับไฟล์ที่อาจารย์ส่งกลับมา ผมศึกษาดูแล้วครับ เยี่ยมมากเลยครับ
ขออนุญาตอาจารย์ ผมขอสรุปให้ชาวเว็บได้รู้ถึงประเด็นที่อาจารย์สอนมานะครับ
ผิดพลาดประการใด รบกวอาจารย์ช่วยเสริมด้วยครับ
๑.เดิมที ผมคิดแบบทื่อๆ แบบเถรตรง จะเลือกจังหวัด-อำเภอ-ถนน ให้ได้ แต่ของอาจารย์แก้มาให้เป็นว่า เมื่อเลือกจังหวัด-อำเภอได้แล้ว (กรณีที่ถนนเป็น "") ก็ไม่ต้องไปเลือกถนน ให้แสดงเฉพาะข้อมูลที่อยู่ที่มีจังหวัด-อำเภอก็ใช้ได้แล้ว (ซึ่งตรงกับความต้องการ)
๒.อาจารย์ยังคง keep ความต้องการของผมด้วยการเพิ่มเช็คบ็อกซ์อันหนึ่งมาให้ ถ้ายังอยากจะเลือกตามข้อ๑. ก็สามารถทำได้
๓.อาจารย์เขียน Sub Call เรียกคอนโทรลจังหวัด-อำเภอ-ถนนแยกไว้ต่างหาก เมื่อเราเรียก Sub นี้จะเปิดซับฟอร์มได้อย่างรวดเร็ว
๔.Rowsource ในฟอร์ม อาจารย์แทบจะไม่ได้ไปอิงกับตาราง/คิวรีเลย ใช้ SQL เรียกมาเกือบหมด
๕.อาจารย์เขียนฟังค์ชั่น screen.PreviouControl.name สั่งให้คอนโทรลบนหน้าจอทำงานเมื่อคอนโทรลใดถูกเลือก
ขอบคุณครับ อาจารย์ ผมได้เรียนรู้เทคนิกใหม่ๆมากขึ้นเยอะเลย จะลองปรับแก้ใน mdb ของผมใน Access2007 ดู (ตามที่อาจารย์แนะนำครับ)
36 @R21359
รบกวนสอบถามผู้รู้ครับ

มี Text Box = ชื่อ A
มี ปุ่ม Check Box ชื่อ Check
ข้อมูล มีฟิลด์ที่ชื่อว่า Sent Date

ผมต้องการเขียนโค๊ดโดยเมื่อคลิกที่ปุ้ม Check แล้วกรอกข้อมูล วันที่ที่ A ให้ ฟิลด์ Sent Date ทุก Record บันทุกข้อมูลตามนั้น ยกเว้น Record ที่มีข้อมูลอยู่แล้วครับ

ต้องเขียนโค๊ดอย่างไรบ้างครับ

ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3511s