ขอ concept การทำปุ่ม copy ข้อมูล ครับ
กระทู้เก่าบอร์ด อ.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 กี่ครั้งก็ได้

ไม่ทราบว่าต้องทำไงครับ ขอบคุณล่วงหน้าครับ


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

1 @R15937
คุณต้องหา revision สุดท้ายของใบเสนอราคาเลขเดียวกันนั้นก่อน จากนั้นก็แค่บวก 1 แล้วก็เพิ่มเข้าไปในใบใหม่ คำสั่ง SQL ก็เป็นดังนี้

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 = 'เลขใบเสนอราคา'
2 @R15948
ขอบคุณครับ คุณ สันติสุข

ผมยัง ไม่ค่อยเข้าใจเท่าไหร่ แต่เด๋วจะลองนำไปใช้ดูครับ ต้องหาค่า revision ตัวสุดท้ายออกมาก่อน แล้วแทนค่าด้วย A , B ใช่มั๊ยครับ

พอดีผมไม่ถนัด การเขียนโค้ดเท่าไหร่ครับ หาวิธีทำมาหลายวันแล้วครับ ยังไม่ได้เลย
3 @R15949
สิ่งที่ผมให้ไปคือ SQL statement   ส่วน A และ B คือให้คุณป้อนตัวอักษร A และ B ตามที่ผมเขียนไปเลย   เหลือสิ่งที่คุณต้องทำคือ แทนค่าลงใน "ชื่อเทเบิล","เลขใบเสนอราคา", "ฟิลด์อื่นๆ" และ "..." ครับ

ถ้าไม่เขียนโค้ดเนี่ย หลายอย่างทำได้ยากถ้าใช้เพียงแมโคร หรืออาจทำไม่ได้เลย ลองหากระทู้เก่าด้วยคำว่า 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 ขึ้นแทบสีเหลืองครับ
ไม่ทราบต้องทำไงครับ

มือใหม่หัดเขียนจริงๆครับ
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 อีกบรรทัด
6 @R15969
ขอบคุณครับ คุณสันติสุข

ทำตามคุณสันติสุขแล้ว ขึ้น 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

ให้แทน ,... ,... ,... (ส่วนสีแดง ด้วยชื่อฟิลด์ต่างๆที่ต้องการ)
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 ต่อไปครับ
9 @R15975
ขอโทษครับผมอัพรูปผิดไป

รูปนี้คือรูปที่ run ตาม code ของคุณ สันติสุข เมื่อกดปุ่ม copy ครับ



ต้องขอขอบคุณอีกครั้งครับ

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