สงศัยเรื่องหลักการ สร้างตารางชั่วคราวครับ
กระทู้เก่าบอร์ด อ.Yeadram

 3,688   11
URL.หัวข้อ / URL
สงศัยเรื่องหลักการ สร้างตารางชั่วคราวครับ

ปัจจุบัน ผมบันทึก Record ไปเลย เมื่อ เรียกข้อมูลแก้ไข ก็บันทึกเลย
หากบันทึกถูกก็ OK หากผิด ก็เรียกคืนไม่ได้ (ไม่มี clear data)
กำลังมองหาวิธีที่คนอื่นเขาทำกัน การสร้างตารางชั่วคราวก่อน
UPDATE เข้า TABLE จริง น่าจะเป็นคำตอบ แต่ผมไม่รู้หลัการว่า
เขาทำอย่างไรนะครับ รบกวนนะครับ ขอบคุณครับ

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

1 @R00886
ผมคิดว่าถ้าอยากให้เรียกคืนได้ ก็ต้องมีการเก็บประวัติเก่าไว้ทุกครั้งที่บันทึกข้อมูลใหม่ ไม่เช่นนั้นแล้ว ไม่ว่าจะแก้ไขปัญหาด้วยการสร้าง Temp Table หรือวิธีใดก็แล้วแต่ ถ้ายังมีการป้อนข้อมูลผิด สุดท้ายก็ไม่สามารถเรียกคืนข้อมูลได้อยู่ดีครับ
2 @R00888
(ในการเรียกข้อมูลมาแก้ไข)
อาจารย์ครับ ใน Program ทั้วๆไป ที่ผมเห็น สมมุติว่ามี Control 5 ตัว
ไว้รับ Field ต่างๆ กัน แล้ว เขามี command Btt SAVE เมื่อบันทึก และดูแน่ใจแล้ว เมื่อกด SAVE มันจึงจะนำขู้มูลไปเก็บ ใน TABLE พร้อมกันทุก FIELD
แต่ ถ้า ไม่แน่ใจ เขาทำ command Btt Clear data เมื่อกดก็ clear data =" " ประมาณนี้   ไม่ว่าจะแก้ถึง control ตัวที่ 1 2 หรือ 5 ก็เท่ากับยังไม่ save เท่ากับมาเริ่มต้นใหม่ ส่วนข้อมูลเก่าเขาก็ยังอยู่ เมื่อเรียกมาอีกครัง ก็ได้ข้อมูลเดิม มาอีกครั้ง(เพราะว่ายังไม่ได้กด SAVE)

คือก็เหมือน WORD นะครับ ถ้าไม่ SAVE ข้อมูลใหม่ก็ยังไม่เก็บ และก็เราก็ยังเรียกข้อมูลเก่ามาได้ แต่ ACCESS ที่ผมทำตอนนี้ คือ ผมอาจจะ แก้ไข FIELD มาถึง FIELDที่3 ใน RECORD พลันผมก็นึกได้ว่า ข้อมูลที่ลง ใน FIELD ที่ 1 และ 2ผิด เดี๋ยวเอาใหม่ ขอ Clear ทิ้งทั้งหมด แล้วจะเรียกมาแก้ใข RECORD นี้ใหม่แต่.... Field 1 และ 2 ได้ Update เข้า TABLE ไปแล้ว....
มันต้องเขียนดัก ใน เหตุการณ์ Before Update อะไรประมาณนี้หรือเปล่าครับ
3 @R00889
ผมมีวิธีที่เมื่อก่อนผมเคยใช้
วิธีง่ายนั่นก็คือสร้างฟิลด์ใส่ข้อมูลขึ้นมาหรอกๆขึ้นมา
สมมุติ มี Filed ใน Table ชื่อ
Name
Address
HBD
โดยตอนที่คุณสร้างฟอร์มก็จะมี 3 ฟิลด์นี้อยู่แล้วถูกไหมครับ
ให้คุณสร้างเพิ่มอีก 3 ฟิลด์ที่ชื่อคล้ายกับ 3 ฟิลด์แรก สมมุติ
I_Name
I_Address
I_HBD
พอสร้างแล้วต้องมาเขียน VBA นิดหน่อยโดย
ไปเพิ่ม ที่ OnCurrent ของ Form ให้เป็น

I_Name = Name
I_Address = Address
I_HBD = HBD

(เอาแบบถึกๆไปก่อนนะครับ)
เสร็จแล้วก็ไปสร้างปุ่ม save
และก็ใส่ Code ให้เหมือนกันเป็น

Name = I_Name
Address = I_Address
HBD = I_HBD

อาจจะเพิ่ม record save ไปอีกซะบรรทัดนึงก็ได้
ก็ลองเอาแบบง่ายไปก่อนใช่ดูก่อนละกัน

ตัวอย่างที่ยกมาให้เป็นเพียง code สั้นที่ผมเขียนสด ต้องพอมีพื้นฐานอยู่บ้างนะครับจึงจะเอาไปใช้ต่อได้ ซึ่งผมเชื่อว่าคุณน่าจะมี

ส่วนถ้าไม่เข้าในตรงไหนก็ลองถามดูอีกทีก็ได้
หรืออยากได้แบบที่ hiso หรือ ซับซ้อนกว่านี้ อันนี้ต้องค่อยมาว่ากันอีกที
หรืออาจจะมีท่านอื่นมาช่วย
4 @R00890
ลองดูตัวอย่างจากที่นี่ซิครับ พอเป็นแนวทาง
http://www.widebase.net/developer/access/mdbsample/mdbsamplevb_Dao_AddNew.shtml
5 @R00891
คำถามที่คุณเขียนเอง ระหว่างย่อหน้าแรกกับย่อหน้าสอง ผมว่ามันแตกต่างกันนะครับ ... ในย่อหน้าแรก คุณเรียกคืนข้อมูลในขณะที่ยังไม่ได้บันทึกข้อมูลลงเทเบิล ก็พอทำได้คือ

1.1) ถ้าต้องการทำแบบ Unbound Form ซึ่งใช้วิธีของคุณแดนก็ได้ (อืม... เหมือนสโลแกน Dr.Dan Can Do ของผู้สมัครผู้ว่า กทม. ยังไงยังงั้นเลย) แต่ใน Unbound Form จะไม่มี Form_OnCurrent event ให้คุณใช้หน่ะสิครับ ก็คงต้องเก็บค่าเข้า I_NAME, ... จาก event อื่นหรือจุดไหนก็ตามที่หน้าจอแสดงข้อมูลของเรคอร์ดอื่นอีกที

1.2) แต่ถ้าเป็น Bound Form มันก็มี build-in ความสามารถเรียกข้อมูลคืนโดยการกด Esc 1 ครั้งก็เรียกคืนฟิลด์ปัจจุบัน ถ้ากด Esc ต่ออีก 1 ครั้งก็จะเรียกคืนเรคอร์ดปัจจุบันครับ ไม่ต้องเขียนโปรแกรมแต่อย่างใด

ส่วนย่อหน้าสองนั้นต้องการกู้คืนหลังบันทึกลงเทเบิลไปแล้ว แต่คุณอธิบายก็ยังขัดแย้งกันเองเพราะถ้าบันทึกลงเทเบิลไปแล้ว ไม่ต้องไปดักที่ไหนแล้วครับ ไม่มี event ให้ดักแล้ว มันจบกระบวนการบันทึกข้อมูลไปแล้ว ถ้าอยากทำก็ต้องใช้อย่างที่ว่าไว้คือเก็บลงเทเบิลฃั่วคราวที่ไหนสักที่โดยทำไว้ใน Form_AfterUpdate event ครับ แล้วถ้าอยากเรียกคืนก็ทำปุ่มอะไรสักปุ่มเพื่อเรียกเรคอร์ดสุดท้ายที่แก้ไขกลับคืนมา โดยการเขียนทับกลับไป แต่ก็จะนำมาซึ่งปัญหาว่า แล้วเมื่อไหร่ที่จะไม่ให้นำเอาเรคอร์ดที่เก็บไว้กลับมาแล้ว ?
6 @R00892
ต้อง ขอโทษด้วยครับ ที่ถามไม่ Clear เดี๋ยวผมลองใช้ ข้อ 1.2 ของ
อ.สันติ ดูก่อน(FORM ผม เป็นการทำงานระหว่าง FORM กับ SUBFORM ครับ)
ต้องลองก่อนว่าผลจะเป็นเช่นไรครับ ขอบคุณทุกท่านครับ
7 @R00894
ไม่ใช่ให้สร้าง unbound form นะครับ
แต่ให้สร้าง bound form นั่นแหละถูกแล้ว ส่วน control หรือ textbox ใดๆที่เก็บค่าจริงให้ hide เอาไว้
พอนึกภาพออกไหมครับ
สมมุติ ต้องการ update field ที่ชื่อว่า name
ก็จะมี textbox อยู่ 2 ตัว
1.Name ซึ่งเชื่อมไปที่ table โดยตรง (อันนี้ให้ visible false เอาไว้)
2.I_Name อันนี้เป็น Textbox ที่ไม่ได้เชื่อมไปยัง table โดยตรง

เ??ลาที่เราไปใส่ code ไว้ที่ OnCurrent ของ Form
มันจะเป็น

I_Name = Name

เวลาเราเคลื่อนย้ายไปที่ record ใดๆ มันก็จะดึงค่าที่มีอยู่ใน Name มาใส่ที่ I_Name ให้

ในทางกลับกัน
เราก็ไปเพิ่ม code

Name = I_Name

ไว้ที่ OnClick ของปุ่ม Save
เท่านี้เองครับ... เคล็ดลับอยู่ที่ซ่อน textbox จริงเอาไว้นั่นเอง
อุตสาห์แนะนำวิธีง่ายๆให้แล้วนะ...
8 @R00895
ครับ ขอบคุณครับ
เดี๋ยว ลองดูครับ
9 @R00896
วิธีคุณแดนเป็นวิธีที่ดีอีกวิธีนึง ตอนแรกผมเข้าใจว่า I_NAME นั้นเป็นตัวที่ซ่อน ไม่ได้นึกถึงว่าทำกลับกัน ต้องขอโทษด้วยครับที่อ่านไม่ละเอียดเอง
10 @R02114
เข้าใจหลักการแล้วครับ
ถ้าต้องการ EDIT เรียกข้อมูลใส่ TABLE ชั้วคราว เอา ID ที่ต้องการเท่านั้น

TABLE ชั่วคราว โครงสร้างเหมือน TABLE จริง สร้าง ComBTT SAVE
ถ้า SAVE ย้าย ข้อมูลจากตาราง ชั่วคราวไปทับ ตารางจริง ในเงื่อนไข ID
เดียวกัน ถ้า CANCEL หรือ ปิด FORM ให้ CLEAR ตารางชั่วคราวทิ้ง ถือว่า
ไม่ต้องการ แก้ข้อมูล

ถ้า ADDNEW ก็เหมือนกัน เพียงแต่ไม่ต้องอ่านข้อมูลมา แล้วย้ายไปตารางจริงอีกที

เข้าใจหลักการครับ แต่ว่า....................ทั้ง FORM และ SUBFORM
ทั้งหลาย ต้องแก้ทั้งหมดเพื่อให้ได้แบบเดียวกัน
โอยอยากจะร้องให้ แต่ถ้าไม่ทำ ก็ดูเหมือนจะมีจุดด้อย ที่คาใจอยู่นั่นเอง
ผิดมาตั้งแต่แรก เอาไว้ Project หน้าดีไหมนี่ เฮ้อ
11 @R02144
อืม 2 -3 วันที่แล้ว ไป งมทำอยู่พักหนึ่ง เออก็พอได้นี่นา เพราะมีทรัพยากรอยู่
แล้ว COPY TABLE เดิม FORM เดิม เปลียนชื่อนิดหน่อย
ทำเป็นตารางชั่วคราว กับ FORM สำหรับ EDIT ข้อมูล
และทดลองใช้ DAO และ SQL ในการเคลื่อนย้ายถ่ายโอนข้อมูล
ก็พอทำได้แหะ ไม่ยากอย่างที่คิด และไม่ต้องไปยุ่งกับ QUERY ดูวุ่นวาย
อย่างที่คุณ YEADRAM เคยบอกไว้ และ เจอปัญหาบางอย่างคือ
สำหรับ ตารางที่มี PRIMARY เป็น AUTORUN จะเป็นปัญหาได้เหมือนกัน
ต้องแก้ไขโครงสร้าง TABLE ชั่วคราวนิดหน่อย และผมจำได้ว่า
อาจาร์สันติเคยแนะนำว่า การใช้ AUTORUN เป็น PRIMARY KEY นั้น
ทำให้มีปัญหายุ่งยาก ก็เห็นจะจริง
      สำหรับผู้ใช้ระดับกลางอย่างผม ผมว่าการเรียงลำดับขั้นตอนว่าจะทำอะไรก่อนหลังและความเข้าใจเรื่อง RECORDSET มีความสำคัญมากๆ
เพราะเมื่อเข้าใจ ลองทำมันก็เห็นจริงอย่างนั้น มันท้าทายให้เรียนรู้ดีครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3216s