กระทู้เก่าบอร์ด อ.Yeadram
7,898 25
URL.หัวข้อ /
URL
สอบถามข้อมูลจากท่านอาจาร์ย yeadram และท่านผู้รู้ทุ
อ้างอิงจาก :: http://www.thai-access.com/yeadram_view.php?topic_id=391
ผมได้ส่งไฟล์ไปทางเมล์ของบอร์ดแล้วน่ะครับ
จากกระทู้ที่อ้างอิง ผมได้ทำการแก้ไขเรียบร้อยตามที่ต้องการแล้วครับ และตอนนี้มี requirement เข้ามาเพิ่มครับ คือ
1. ต้องการให้มีระบบรักษาความปลอดภัย คือ มี user แค่หนึ่งหรือที่กำหนดไว้สามารถแก้ไขข้อมูลทั้งหมดได้ ส่วน user ที่ไม่ได้กำหนดไว้ทำได้แค่ดูอย่างเดียวครับ
===> แนวคิดผมก็คือ สร้างตาราง user ขึ้นมาเพิ่มไว้ และกำหนดเงื่อนไขด้วยการ if..then ตอนที่ form_load ครับ ไม่ทราบถูกหรือไม่
2. ต้องการระบบรายงานโดยใช้เงื่อนไขตามที่ต้องการ (frmreport1) จากในรูปครับ
จะให้ user เลือก ประเภทของการจัดเรียงข้อมูลใน รายงาน โดยมี ฝ่ายงาน รายชื่อ และ วันที่เริ่มงาน (starting_date) และให้ใส่รายละเอียดที่ต้องการใน textbox16 ที่อยู่โดดๆ ระหว่างตัวเลือกทั้งสองครับ ต่อไปให้เลือกประเภทของ license และให้ใส่วันหมดอายุที่ต้องการ และเมื่อกดปุ่มจะโชว์รายงานออกมาตามที่ใส่เงื่อนไขไว้
===> ปัญหาคือ ผมไม่ทราบว่าจะใส่เงื่อนไขอย่างไร เคยลองแกะจากตัวอย่างโปรแกรม แล้วนำมาใช้งาน ปรากฎว่าไม่มีข้อมูลขึ้นตามที่ต้องการเลยครับ
3. มีทางไมครับ ที่จะให้มีคำอธิบายตัวเลือกใน combo-box โดยปกติถ้าไม่มีการเลือกก็จะไม่มีคำอธิบายขึ้นมา แต่พอมีการเลือกหรือ focus ไปจะมีคำอธิบายขึ้นมา พอไม่มีการโฟกัส คำอธิบายก็จะหายไป
4. ถ้าจะ export ข้อมูลไปยัง excel โดยเราสามารถกำหนดเงื่อนไขที่จะทำการ export เฉพาะข้อมูลที่ตรงกับเงื่อนไขที่ระบุ
ผมได้ส่งไฟล์ไปทางเมล์ของบอร์ดแล้วน่ะครับ
จากกระทู้ที่อ้างอิง ผมได้ทำการแก้ไขเรียบร้อยตามที่ต้องการแล้วครับ และตอนนี้มี requirement เข้ามาเพิ่มครับ คือ
1. ต้องการให้มีระบบรักษาความปลอดภัย คือ มี user แค่หนึ่งหรือที่กำหนดไว้สามารถแก้ไขข้อมูลทั้งหมดได้ ส่วน user ที่ไม่ได้กำหนดไว้ทำได้แค่ดูอย่างเดียวครับ
===> แนวคิดผมก็คือ สร้างตาราง user ขึ้นมาเพิ่มไว้ และกำหนดเงื่อนไขด้วยการ if..then ตอนที่ form_load ครับ ไม่ทราบถูกหรือไม่
2. ต้องการระบบรายงานโดยใช้เงื่อนไขตามที่ต้องการ (frmreport1) จากในรูปครับ
จะให้ user เลือก ประเภทของการจัดเรียงข้อมูลใน รายงาน โดยมี ฝ่ายงาน รายชื่อ และ วันที่เริ่มงาน (starting_date) และให้ใส่รายละเอียดที่ต้องการใน textbox16 ที่อยู่โดดๆ ระหว่างตัวเลือกทั้งสองครับ ต่อไปให้เลือกประเภทของ license และให้ใส่วันหมดอายุที่ต้องการ และเมื่อกดปุ่มจะโชว์รายงานออกมาตามที่ใส่เงื่อนไขไว้
===> ปัญหาคือ ผมไม่ทราบว่าจะใส่เงื่อนไขอย่างไร เคยลองแกะจากตัวอย่างโปรแกรม แล้วนำมาใช้งาน ปรากฎว่าไม่มีข้อมูลขึ้นตามที่ต้องการเลยครับ
3. มีทางไมครับ ที่จะให้มีคำอธิบายตัวเลือกใน combo-box โดยปกติถ้าไม่มีการเลือกก็จะไม่มีคำอธิบายขึ้นมา แต่พอมีการเลือกหรือ focus ไปจะมีคำอธิบายขึ้นมา พอไม่มีการโฟกัส คำอธิบายก็จะหายไป
4. ถ้าจะ export ข้อมูลไปยัง excel โดยเราสามารถกำหนดเงื่อนไขที่จะทำการ export เฉพาะข้อมูลที่ตรงกับเงื่อนไขที่ระบุ
25 Reply in this Topic. Dispaly 2 pages and you are on page number 2
21 @R01872
ผมลองทำดูแล้ว ผลก็คือมันยังขึ้นให้ใส่พารามิเตอร์อ่ะครับ
22 @R01874
ส่งไฟล์มาครับ เดี๋ยวช่วยดูให้
ระบุหัว จดหมายว่า "กระทู้ 413 ความเห็น 1872"
บอกมาด้วยว่า งานนี้ มันอยู่ที่ฟอร์มใด หรือเหตุการณ์ใด หรือมีออบเจคที่เกี่ยวข้องอะไรบ้าง เช่น คิวรี่ที่เกี่ยวข้องกับงานนี้ ฟอร์มที่เกี่ยวข้องกับงานนี้ แมคโครที่เกี่ยวข้อง
จะได้มองหาได้ถูกจุดครับ ส่วนอื่นๆ ผมจะไม่ต้องเข้าไปดูครับ
ระบุหัว จดหมายว่า "กระทู้ 413 ความเห็น 1872"
บอกมาด้วยว่า งานนี้ มันอยู่ที่ฟอร์มใด หรือเหตุการณ์ใด หรือมีออบเจคที่เกี่ยวข้องอะไรบ้าง เช่น คิวรี่ที่เกี่ยวข้องกับงานนี้ ฟอร์มที่เกี่ยวข้องกับงานนี้ แมคโครที่เกี่ยวข้อง
จะได้มองหาได้ถูกจุดครับ ส่วนอื่นๆ ผมจะไม่ต้องเข้าไปดูครับ
23 @R01885
ผมได้ส่งไปทางเมล์พร้อมกับรายละเอียดแล้วน่ะครับ ขอบคุณครับ
24 @R01887
1 คุณวางลำดับงานสับสนครับ
-ถ้ากรณี user ไม่คลิ๊กอะไรเลยแล้วกดปุ่มคำสั่ง คุณคิดว่าจะเกิดอะไรขึ้น
-ถ้ากรณี user ติ๊กเอาเครื่องหมายออก แต่โปรแกรมของคุณก็ยังทำงานตรงนั้น เพราะคุณไม่ได้เช็คว่าเขาติ๊กเอา หรือติ๊กออก แต่คุณไปเช็คว่า ถูกคลิ๊กหรือไม่ เพราะในเหตุการณ์จริง แม้ user จะกำลังติ๊กเพื่อเอาออก แต่นั่นก็เกิดเหตุการณ์ onclick เช่นกัน
ผมเลยลบทิ้งทั้งหมด แล้วให้เหลือแค่ procedure เดียวดังนี้ครับ
จุดสังเกตุเพิ่มเติมอีก 4 จุด ระหว่างโค้ดเก่าของคุณกับของผม
1 คำว่า Type กับคำว่า Name เป็นคำสงวนของระบบ ถ้าจะเอาคำสงวนไปใช้ใน statement ต้องคร่อมด้วยเครื่องหมายวงเล็บสี่เหลี่ยมเสมอ
2 การอ้างชื่อฟิลด์ คุณอ้างผิด มันก็เลยเกิด dialog parameter มาให้คุณ ฟิลด์ที่คุณอ้างถึงนั่น มันเป็นอดีตไปแล้ว ตอนนี้มันมาเป็นฟิลด์ของ QyrAll แล้ว และมันก็ได้ถูกเปลี่ยนชื่อไปหมดแล้ว (โดยคุณเองนั่นแหละครับ ที่ใส่ As ให้มัน) เมื่อคุณจะอ้างถึงมันอีก คุณต้องเอาชื่อใหม่ของมัน
3 ก่อนสั่งรัน statement แบบ Action ไม่ควรให้มันแสดงคำเตือนอีก เพราะมันต้องรันบ่อยๆ user เขาจะรำคาญเอา ดังนั้น setwarnings เป็น false ไปเลยครับ
4 คุณต้องคิดเผื่อด้วยว่า กรณี user อยากลองเล่น คือกดปุ่มคำสั่งโดยไม่ติ๊กเลือกอะไรเลย คุณต้องสั่งให้ยกเลิกการทำงาน หรือ... อีกทางก็คือ ต้องให้มีอย่างน้อย 1 ฟิลด์ เพื่อให้โค้ดมันทำงานได้ต่อ โดยไม่เกิด error เช่นที่ผมยกตัวอย่างคือ อย่างน้อย ให้ได้ แค่ฟิลด์ ID ออกมา ก็ยังดี ดีกว่าไม่มีฟิลด์อะไรให้มันรัน
-ถ้ากรณี user ไม่คลิ๊กอะไรเลยแล้วกดปุ่มคำสั่ง คุณคิดว่าจะเกิดอะไรขึ้น
-ถ้ากรณี user ติ๊กเอาเครื่องหมายออก แต่โปรแกรมของคุณก็ยังทำงานตรงนั้น เพราะคุณไม่ได้เช็คว่าเขาติ๊กเอา หรือติ๊กออก แต่คุณไปเช็คว่า ถูกคลิ๊กหรือไม่ เพราะในเหตุการณ์จริง แม้ user จะกำลังติ๊กเพื่อเอาออก แต่นั่นก็เกิดเหตุการณ์ onclick เช่นกัน
ผมเลยลบทิ้งทั้งหมด แล้วให้เหลือแค่ procedure เดียวดังนี้ครับ
Private Sub Command10_Click()
Dim sql As String
sql = "SELECT ID"
If check_name Then sql = sql & ", [type], [name]"
If check_section Then sql = sql & ", section"
If check_derivative Then sql = sql & ", equity,equity_start,equity_active,equity_expire,equity_id"
If check_single Then sql = sql & ", futures,futures_start,futures_active, futures_year,futures_expire,futures_id"
DoCmd.SetWarnings False
DoCmd.RunSQL sql & " INTO tmp FROM QryAll"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tmp", "Test12345.xls"
End Sub
จุดสังเกตุเพิ่มเติมอีก 4 จุด ระหว่างโค้ดเก่าของคุณกับของผม
1 คำว่า Type กับคำว่า Name เป็นคำสงวนของระบบ ถ้าจะเอาคำสงวนไปใช้ใน statement ต้องคร่อมด้วยเครื่องหมายวงเล็บสี่เหลี่ยมเสมอ
2 การอ้างชื่อฟิลด์ คุณอ้างผิด มันก็เลยเกิด dialog parameter มาให้คุณ ฟิลด์ที่คุณอ้างถึงนั่น มันเป็นอดีตไปแล้ว ตอนนี้มันมาเป็นฟิลด์ของ QyrAll แล้ว และมันก็ได้ถูกเปลี่ยนชื่อไปหมดแล้ว (โดยคุณเองนั่นแหละครับ ที่ใส่ As ให้มัน) เมื่อคุณจะอ้างถึงมันอีก คุณต้องเอาชื่อใหม่ของมัน
3 ก่อนสั่งรัน statement แบบ Action ไม่ควรให้มันแสดงคำเตือนอีก เพราะมันต้องรันบ่อยๆ user เขาจะรำคาญเอา ดังนั้น setwarnings เป็น false ไปเลยครับ
4 คุณต้องคิดเผื่อด้วยว่า กรณี user อยากลองเล่น คือกดปุ่มคำสั่งโดยไม่ติ๊กเลือกอะไรเลย คุณต้องสั่งให้ยกเลิกการทำงาน หรือ... อีกทางก็คือ ต้องให้มีอย่างน้อย 1 ฟิลด์ เพื่อให้โค้ดมันทำงานได้ต่อ โดยไม่เกิด error เช่นที่ผมยกตัวอย่างคือ อย่างน้อย ให้ได้ แค่ฟิลด์ ID ออกมา ก็ยังดี ดีกว่าไม่มีฟิลด์อะไรให้มันรัน
25 @R01895
เรียบร้อยครับ ขอบคุณครับ
เดี่ยวมีข้อสงสัยอื่นๆ จะมาสอบถามต่อครับ ขอบคุณมากครับ
เดี่ยวมีข้อสงสัยอื่นๆ จะมาสอบถามต่อครับ ขอบคุณมากครับ
Time: 0.2904s