กระทู้เก่าบอร์ด อ.Yeadram
2,019 9
URL.หัวข้อ /
URL
ขอ concept การทำปุ่ม copy ข้อมูล ครับ
มีใครเคยทำปุ่ม copy บ้างครับ ขอแนวคิดหน่อยครับ
ตามที่ผมคิดคือ น่าจะ select ข้อมูลของแถวข้อมูลที่ต้องการ copy มาก่อนแล้วค่อยมา update ค่าฟิลด์ตัวหนึ่งเป็น 01,02 หรือ 03 ไปเรื่องๆ
ผมเอามาใช้กับการออกใบเสนอราคาครับ มันต้องมีใบที่รหัสเดียวกัน แต่ออกเป็นใบ revise เช่น Q560001 ใบ revise เป็น Q56001R01 เป็นต้นครับ
ผมแยก field เป็น QuoteID,ReviseID ครับ
ซึ่ง revise นี้เลขจะเปลี่ยนไปเรื่อยๆ แล้วแต่ user จะ revise กี่ครั้งก็ได้
ไม่ทราบว่าต้องทำไงครับ ขอบคุณล่วงหน้าครับ
ตามที่ผมคิดคือ น่าจะ select ข้อมูลของแถวข้อมูลที่ต้องการ copy มาก่อนแล้วค่อยมา update ค่าฟิลด์ตัวหนึ่งเป็น 01,02 หรือ 03 ไปเรื่องๆ
ผมเอามาใช้กับการออกใบเสนอราคาครับ มันต้องมีใบที่รหัสเดียวกัน แต่ออกเป็นใบ revise เช่น Q560001 ใบ revise เป็น Q56001R01 เป็นต้นครับ
ผมแยก field เป็น QuoteID,ReviseID ครับ
ซึ่ง revise นี้เลขจะเปลี่ยนไปเรื่อยๆ แล้วแต่ user จะ revise กี่ครั้งก็ได้
ไม่ทราบว่าต้องทำไงครับ ขอบคุณล่วงหน้าครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R15948
ขอบคุณครับ คุณ สันติสุข
ผมยัง ไม่ค่อยเข้าใจเท่าไหร่ แต่เด๋วจะลองนำไปใช้ดูครับ ต้องหาค่า revision ตัวสุดท้ายออกมาก่อน แล้วแทนค่าด้วย A , B ใช่มั๊ยครับ
พอดีผมไม่ถนัด การเขียนโค้ดเท่าไหร่ครับ หาวิธีทำมาหลายวันแล้วครับ ยังไม่ได้เลย
ผมยัง ไม่ค่อยเข้าใจเท่าไหร่ แต่เด๋วจะลองนำไปใช้ดูครับ ต้องหาค่า revision ตัวสุดท้ายออกมาก่อน แล้วแทนค่าด้วย A , B ใช่มั๊ยครับ
พอดีผมไม่ถนัด การเขียนโค้ดเท่าไหร่ครับ หาวิธีทำมาหลายวันแล้วครับ ยังไม่ได้เลย
3 @R15949
สิ่งที่ผมให้ไปคือ SQL statement ส่วน A และ B คือให้คุณป้อนตัวอักษร A และ B ตามที่ผมเขียนไปเลย เหลือสิ่งที่คุณต้องทำคือ แทนค่าลงใน "ชื่อเทเบิล","เลขใบเสนอราคา", "ฟิลด์อื่นๆ" และ "..." ครับ
ถ้าไม่เขียนโค้ดเนี่ย หลายอย่างทำได้ยากถ้าใช้เพียงแมโคร หรืออาจทำไม่ได้เลย ลองหากระทู้เก่าด้วยคำว่า RunSQL หรือ Execute นะครับ (RunSQL ดูจะง่ายกว่า)
ถ้าไม่เขียนโค้ดเนี่ย หลายอย่างทำได้ยากถ้าใช้เพียงแมโคร หรืออาจทำไม่ได้เลย ลองหากระทู้เก่าด้วยคำว่า RunSQL หรือ Execute นะครับ (RunSQL ดูจะง่ายกว่า)
4 @R15965
ขอบคุณครับคุณ สันติสุข
ผมทำตามแล้ว ตามนี้ครับ
DoCmd.RunSQL " INSERT INTO T_quotation (QuoteID,ReviseID ) SELECT A.QuoteID , (SELECT max(B.ReviseID ) +1 FROM T_quotation as B WHERE B.QuoteID = 'QuoteID'), A.QuoteID, A.ReviseID FROM T_quotation as A WHERE A.QuoteID = 'QuoteID' "
ผมเขียนที่ event onclick บนปุ่ม copy ครับ แต่มัน error ขึ้นแทบสีเหลืองครับ
ไม่ทราบต้องทำไงครับ
มือใหม่หัดเขียนจริงๆครับ
ผมทำตามแล้ว ตามนี้ครับ
DoCmd.RunSQL " INSERT INTO T_quotation (QuoteID,ReviseID ) SELECT A.QuoteID , (SELECT max(B.ReviseID ) +1 FROM T_quotation as B WHERE B.QuoteID = 'QuoteID'), A.QuoteID, A.ReviseID FROM T_quotation as A WHERE A.QuoteID = 'QuoteID' "
ผมเขียนที่ event onclick บนปุ่ม copy ครับ แต่มัน error ขึ้นแทบสีเหลืองครับ
ไม่ทราบต้องทำไงครับ
มือใหม่หัดเขียนจริงๆครับ
5 @R15967
- event onclik ให้เลือก [Event Procedure] แล้วคลิกปุ่ม ... ข้างท้ายบรรทัด
- มันจะเปิดหน้าต่าง VBA เพื่อให้เราป้อนโค้ด (ส่วนที่เป็นสีน้ำเงินนั้นผมเดานะ มันจะเป็นชื่อของเท็กซ์บ็อกซ์ของฟิลด์ QuoteID และ ReviseID บนฟอร์ม ผมไม่ทราบว่าคุณตั้งชื่อเดียวกันกับฟิลด์หรือไม่ ถ้าไม่ก็เปลี่ยนไปให้ถูกต้องด้วยแล้วกัน)
DoCmd.RunSQL " INSERT INTO T_quotation (QuoteID,ReviseID ) SELECT A.QuoteID , (SELECT max(B.ReviseID ) +1 FROM T_quotation as B WHERE B.QuoteID = '" & Me.QuoteID & "') FROM T_quotation as A WHERE A.QuoteID = '" & Me.QuoteID & "' "
จากนั้นไปที่เมนู Debug แล้วคลิก Compile ครับ ถ้าไม่มีปัญหาอะไรในเบื้องต้น มันจะไม่มีข้อความอะไรแสดงออกมา
- ปิดหน้าต่าง VBA แล้วก็สั่งให้โปรแกรมทำงาน
- แต่ใบเสนอราคาใหม่ที่สร้างขึ้นจะไม่แสดงบนหน้าจอนะครับ ถ้าอยากให้แสดง คุณต้องเพิ่มคำสั่ง Me.Requery อีกบรรทัด
- มันจะเปิดหน้าต่าง VBA เพื่อให้เราป้อนโค้ด (ส่วนที่เป็นสีน้ำเงินนั้นผมเดานะ มันจะเป็นชื่อของเท็กซ์บ็อกซ์ของฟิลด์ QuoteID และ ReviseID บนฟอร์ม ผมไม่ทราบว่าคุณตั้งชื่อเดียวกันกับฟิลด์หรือไม่ ถ้าไม่ก็เปลี่ยนไปให้ถูกต้องด้วยแล้วกัน)
DoCmd.RunSQL " INSERT INTO T_quotation (QuoteID,ReviseID ) SELECT A.QuoteID , (SELECT max(B.ReviseID ) +1 FROM T_quotation as B WHERE B.QuoteID = '" & Me.QuoteID & "') FROM T_quotation as A WHERE A.QuoteID = '" & Me.QuoteID & "' "
จากนั้นไปที่เมนู Debug แล้วคลิก Compile ครับ ถ้าไม่มีปัญหาอะไรในเบื้องต้น มันจะไม่มีข้อความอะไรแสดงออกมา
- ปิดหน้าต่าง VBA แล้วก็สั่งให้โปรแกรมทำงาน
- แต่ใบเสนอราคาใหม่ที่สร้างขึ้นจะไม่แสดงบนหน้าจอนะครับ ถ้าอยากให้แสดง คุณต้องเพิ่มคำสั่ง Me.Requery อีกบรรทัด
6 @R15969
ขอบคุณครับ คุณสันติสุข
ทำตามคุณสันติสุขแล้ว ขึ้น error ตามภาพครับ
field QuoteID ผมกำหนดไว้เป็น Number ครับ
field ReviseID ผมกำหนดไว้เป็น Text ครับ
เวลาที่เราจะสั่ง copy ข้อมูล จำเป็นต้อง copy ทุก field ด้วยหรือเปล่าครับ เพราะผม insert into แค่ ฟิวล์ QuoteID,ReviseID มัน error เพราะเหตุนี้หรือเปล่าครับ
ทำตามคุณสันติสุขแล้ว ขึ้น error ตามภาพครับ
field QuoteID ผมกำหนดไว้เป็น Number ครับ
field ReviseID ผมกำหนดไว้เป็น Text ครับ
เวลาที่เราจะสั่ง copy ข้อมูล จำเป็นต้อง copy ทุก field ด้วยหรือเปล่าครับ เพราะผม insert into แค่ ฟิวล์ QuoteID,ReviseID มัน error เพราะเหตุนี้หรือเปล่าครับ
7 @R15970
เกิดข้อผิดพลาดเพราะเราสร้างคำสั่งโดยคิดว่า QuoteID เป็นข้อมูลประเภท Text ดังนั้นคำสั่งจะไม่ต้องมี single quote ครอบข้อมูลที่เป็น Numberic
DoCmd.RunSQL " INSERT INTO T_quotation (QuoteID,ReviseID ) SELECT A.QuoteID , (SELECT max(B.ReviseID ) +1 FROM T_quotation as B WHERE B.QuoteID = " & Me.QuoteID & ") FROM T_quotation as A WHERE A.QuoteID = " & Me.QuoteID
และเพราะเราจะมีฟิลด์อื่นๆอีก ดังนั้นคำสั่งก็จะเป็น
DoCmd.RunSQL " INSERT INTO T_quotation (QuoteID,ReviseID ,... ,... ,... ) SELECT A.QuoteID , (SELECT max(B.ReviseID ) +1 FROM T_quotation as B WHERE B.QuoteID = " & Me.QuoteID & ") ,... ,... ,... FROM T_quotation as A WHERE A.QuoteID = " & Me.QuoteID
ให้แทน ,... ,... ,... (ส่วนสีแดง ด้วยชื่อฟิลด์ต่างๆที่ต้องการ)
DoCmd.RunSQL " INSERT INTO T_quotation (QuoteID,ReviseID ) SELECT A.QuoteID , (SELECT max(B.ReviseID ) +1 FROM T_quotation as B WHERE B.QuoteID = " & Me.QuoteID & ") FROM T_quotation as A WHERE A.QuoteID = " & Me.QuoteID
และเพราะเราจะมีฟิลด์อื่นๆอีก ดังนั้นคำสั่งก็จะเป็น
DoCmd.RunSQL " INSERT INTO T_quotation (QuoteID,ReviseID ,... ,... ,... ) SELECT A.QuoteID , (SELECT max(B.ReviseID ) +1 FROM T_quotation as B WHERE B.QuoteID = " & Me.QuoteID & ") ,... ,... ,... FROM T_quotation as A WHERE A.QuoteID = " & Me.QuoteID
ให้แทน ,... ,... ,... (ส่วนสีแดง ด้วยชื่อฟิลด์ต่างๆที่ต้องการ)
8 @R15971
ขอบคุณครับ คุณสันติสุข
จาก code sql ของคุณสันติสุข เกิด error ตอนกดปุ่ม copy ตามภาพครับ
ผมเลยปรับแก้ไขที่ Key หลักของ Table quotation ดังนี้ครับ
T_quotation T_quotationDetail
QuoteID QuoteID
ReviseID ReviseID
pro_id
เดิมที ที่ T_quotation ผมใช้ QuoteID เป็น key หลักตัวเดียว เพราะว่าพอใช้ ReviseID เป็นคีย์หลักด้วย เวลาเชื่อมความสัมพันธ์ มันจะแสดงความสัมพันธ์เป็นIndeterminateครับ
ผมลองไม่เลือกตัวเลือกอะไรเลย
พอกดปุ่ม copy แล้วมัน copy เป็นอีก record ให้แล้วครับ
ต้องขอขอบคุณ คุณสันติสุข มากๆๆๆๆ เลยครับ ผมดีใจมาก ติดตัวนี้อยุ่นานมากครับ ผมจะพยายาม ศึกษา access และ command VB ต่อไปครับ
จาก code sql ของคุณสันติสุข เกิด error ตอนกดปุ่ม copy ตามภาพครับ
ผมเลยปรับแก้ไขที่ Key หลักของ Table quotation ดังนี้ครับ
T_quotation T_quotationDetail
QuoteID QuoteID
ReviseID ReviseID
pro_id
เดิมที ที่ T_quotation ผมใช้ QuoteID เป็น key หลักตัวเดียว เพราะว่าพอใช้ ReviseID เป็นคีย์หลักด้วย เวลาเชื่อมความสัมพันธ์ มันจะแสดงความสัมพันธ์เป็นIndeterminateครับ
ผมลองไม่เลือกตัวเลือกอะไรเลย
พอกดปุ่ม copy แล้วมัน copy เป็นอีก record ให้แล้วครับ
ต้องขอขอบคุณ คุณสันติสุข มากๆๆๆๆ เลยครับ ผมดีใจมาก ติดตัวนี้อยุ่นานมากครับ ผมจะพยายาม ศึกษา access และ command VB ต่อไปครับ
9 @R15975
ขอโทษครับผมอัพรูปผิดไป
รูปนี้คือรูปที่ run ตาม code ของคุณ สันติสุข เมื่อกดปุ่ม copy ครับ
ต้องขอขอบคุณอีกครั้งครับ
รูปนี้คือรูปที่ run ตาม code ของคุณ สันติสุข เมื่อกดปุ่ม copy ครับ
ต้องขอขอบคุณอีกครั้งครับ
Time: 0.3714s
insert into ชื่อเทเบิล (QuoteID,ReviseID, ...) select A.QuoteID, (select max(B.ReviseID) +1 from ชื่อเทเบิล as B where B.QuoteID = 'เลขใบเสนอราคา'), A.ฟิลด์อื่นๆ, A.ฟิลด์อื่นๆ, ... from ชื่อเทเบิล as A where A.QuoteID = 'เลขใบเสนอราคา'