เปลี่ยนข้อมูลตามเงื่อนไข
กระทู้เก่าบอร์ด อ.Yeadram

 3,365   27
URL.หัวข้อ / URL
เปลี่ยนข้อมูลตามเงื่อนไข

สวัสดีค่ะ วันนี้มีคำถามมาให้ชาว ไท Access ช่วยคิดหน่อยค่ะ
พอดีเรามี table 2 table
table แรกค่ะ เรา import ข้อมูลมาจาก text file ค่ะ ส่วนนี้ไม่ได้มีปัญหาอะไรค่ะ
table 2 ค่ะ คือ เราต้องการแปลงค่าจาก table แรก ตามเงื่อนไขค่ะ เช่น ถ้า table แรก มีฟิวด์ชื่อว่า
PlantCode ถ้าข้อมูลที่โหลดเข้ามาของฟิวด์นี้ มีค่าเท่ากับ 2
ที่ table ที่ 2 ส่วนของฟิวด์ที่ชื่อว่า Customer Code ต้องเท่ากับ A13 แบบนี้ค่ะ
เราจะมีวิธีการทำอย่างไรค่ะ ให้ค่าของ table ที่2 เปลี่ยนตามเงื่อนไขที่กำหนด

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

1 @R18851


อันนี้ไฟล์แนบค่ะ ลองส่งเป็นรูปภาพมาให้ดูค่ะ ประกอบคำอธิบายค่ะ

ขอบคุณทุกท่านล่วงหน้านะค่ะ สำหรับการช่วยเหลือ
2 @R18853
ผมเข้าใจถูกหรือเปล่าอะ (อ่านแล้วงงจนวิงเวียน)

1. ตาราง 1 ได้จากการ Import จาก Text File
2. ตารางที่ 2 มาจากไหน
    2.1 เป็นข้อมูลเดิม?
    2.2 เป็นข้อมูลที่เอามาจากตาราง 1 ?

แต่เป้าหมายคือต้องการเปลี่ยนค่าในตารางที่ 2 ใช่มั๊ย?

ถ้าใช่ ก็ใช้ Updated Query ครับ จะเปลี่ยนจากอะไรเป็นอะไร ที่ฟิลด์ไหนได้ทั้งหมด แต่ต้องให้ Data Type ถูกต้องด้วยเท่านั้นเอง

ที่ผมงงอีกอย่างคือ PlantCode ของตาราง 1 มีค่าเท่ากับ 2 แล้วทำไม Customer Code ที่ตารางที่ 2 ต้องเป็น A13 (ก็เลยคิดเอาเองว่าเป็นการนำเอาตาราง 1 มาทำเป็นตาราง 2 ใช่มั๊ย?)

ปล. ถ้าจะกดปุ่ม Ctrl+H ก็ได้นะ
3 @R18854
ขอบคุณค่ะ คุณ ธัชชัย
ตารางที่ 1 ได้จากการ import จาก TXT ถูกต้องค่ะ โดย import เข้า Access นะค่ะ
ตารางที่ 2 เป็นข้อมูลที่เอามาจากตาราง 1 ค่ะ
เป้าหมาย ใช่ค่ะ ต้องการเปลี่ยนค่าในตาราง 2ค่ะ โดยมีเงื่อนไข อย่างที่ยกตัวอย่างค่ะ ถ้าตาราง 1 มีค่า plantCode = 2 ที่ตาราง 2 ที่ customer Code ต้องเป็น A13 ค่ะ ถ้าจะเปรียบเทียบแล้ว plantcode จากตาราง 2 จะหายไป เป็น customer Code แทนค่ะ

ปล. ทั้ง 2 ตาราง อยู่ในโปรแกรม access ค่ะ แต่ที่แนบไฟล์รูป excel ไป เพียงต้องการ ให้เห็นภาพถึงการเปลี่ยนแปลงค่ะ ที่ต้องทำแบบนี้ เพื่อต้องการรับ txt file เข้า access แล้วเปลี่ยนแปลงค่าบางตัวตามเงื่อนไขค่ะ เมื่อได้ค่าที่เปลี่ยนแล้ว ต้องการ Export จากตารางที่ 2 ไปเป็น excel file ค่ะ
4 @R18855
ก่อนอื่นนะครับ
1. Copy ตาราง 1 มาเป็นตาราง 2
2. แก้ไขชื่อฟิลด์และ Data Type ในตารางที่ 2 ให้เป็นแบบที่คุณต้องการ
3. ตอนนี้คุณจะได้ตารางที่ 2 ที่มีข้อมูลทุกอย่างเหมือนตารางที่ 1 (แล้วไม่ต้องไปสนใจตาราง 1 อีกเลย มันจะทำให้งง)
4. นำตารางที่ 2 มาสร้าง Select Query
5. เปลี่ยน Select Query เป็น Update Query
6. กำหนดที่ฟิลด์ที่คุณต้องการเปลี่ยน เช่น Customer Code โดยกำหนด Criteria เป็น 2 ส่วน Update To ให้ใส่ A13

สั่ง Run Query เพียงเท่านี้ข้อมูลก็เปลี่ยนแล้วครับ
5 @R18859
ขอบคุณค่ะ สำหรับคำแนะนำ เดี๋ยวจะลองดูนะค่ะ ถ้าติดปัญหา
คงต้องรบกวนต่อ พอดีเพิ่งเคยจับ access ค่ะ บางอย่างยังคง
ไม่เข้าใจ ก็มีอยู่เยอะค่ะ
6 @R18867
ขอรบกวนอีกครั้งนะค่ะ
ที่ทางคุณธัชชัยแนะนำ criteria = 2 Update to เป็น A13 อันนี้มีเงื่อนไขเดียว ใส่ที่ update Query ได้แล้วค่ะ แต่ถ้ามีเงื่อนมากกว่า 1 ล่ะค่ะ เราจะมีการกำหนดยังไงค่ะ สมมุติมีเพิ่มเข้ามาอีกว่า ถ้า criteria = 3 Update to เป็น A14 ด้วย ซึ่งแล้วแต่ data ที่นำเข้าตารางในขณะนั้น

รบกวนอีกข้อค่ะ ถ้าเราต้องการเพิ่มตัวอักษรไปข้างหน้าข้อมูล เช่นจาก 1234 ให้ข้อมูลเปลี่ยนเป็น A1234 คือมี A เพิ่มเข้ามา 1 ตัว ที่ query มีการกำหนดอย่างไรค่ะ

ขอบคุณค่ะ รบกวนทุกคนด้วยนะค่ะ พอดีมือใหม่จริงๆค่ะ ไม่มีประสบการณ์ด้านนี้เลยค่ะ
7 @R18869
สำหรับข้อที่เพิ่มตัวอักษร a ข้างหน้าได้แล้วค่ะ ที่update to
ใส่เป็น "a"+[tablename]![fieldname]

ข้อคำตอบที่ต้องกำหนด ในกรณีที่เงื่อนไขหลายข้อพอค่ะ เราจะกำหนด
ยังไงค่ะ ขอบคุณค่ะ
8 @R18871
จาก R11867

ให้ทำทีละครั้งครับ

ถ้ามีหลายเงื่อนไข แนะนำว่าเปิดตารางแล้วใช้คำสั่ง Ctrl+H เถอะครับ

ยกเว้นเปลี่ยนข้อมูลทุกวัน อันนี้ผมคิดออกเป็น VBA ครับ

Select Case
9 @R18874
ค่ะ ขอบคุณมากๆค่ะ คุณธัชชัย
คิดว่าคงจะทำแบบ VBA ค่ะ เพราะเปลี่ยนข้อมูลทุกวันค่ะ
10 @R18877
ใช้คำสั่ง Select Case ครับ ทำเป็นใช่มั๊ย
11 @R18880
IIf([Export]![Cust_Code]="2","A13",IIf([Export]![Cust_Code]="6","A12","A14"))
ใช้ code ได้ค่ะ ใส่ไว้ที่ update To ค่ะ

ที่นี้มีคำถามใหม่มาค่ะ ถ้าตอน import ที่เวลาจะแสดงในตารางเป็น 9:30 แต่ที่นี้ ต้องการเปลี่ยน data ตอน Export จาก 9:30 เป็น 930 คือ เราไม่ต้องการเครื่องหมาย : ค่ะ มีวิธีการอย่างไรค่ะ พอช่วยแนะนำได้ไหมค่ะ
12 @R18881
ถ้าเองตอบเอง แถมทำง่ายกว่าที่ผมคิดอีกแบบนี้ไม่ใช่มือใหม่แล้วครับ

คำตอบสำหรับ R18880 คือ
ใช้คำสั่ง Left Right Mid Len ครับ

13 @R18882
จาก R18881 ผมชอบและชื่นชมนะครับ

เพราะได้แบ่งปันความรู้กัน บ่อยครั้งผมก็คิดเลยผ่านเรื่องง่ายๆ ไป เอะอะก็ VBA ยัน น่าเขกกะโหลกตัวเองจริงๆ
14 @R18891
มือใหม่จริงๆค่ะ คุณธัชชัย
แล้วที่โค้ดนั้นมาเพราะมีคนบอกมา เลยเอาลองดู ปรากฏว่ามันได้ เลยเอาแชร์กับคนอื่นๆบางค่ะ

ส่วน Left Right Mid Len ยังไม่ค่อยเข้าใจค่ะ มันต้องกำหนดยังไงค่ะ อ่านจากเน็ตก็ยังคงไม่เข้าใจเท่าไรค่ะ
รบกวนอธิบายให้ฟังหน่อยได้ไหมค่ะ แล้วถ้าสมมุติว่าเราต้องการกำหนดโค้ดนี้บน Query ชนิด Update จะได้ไหมค่ะ

15 @R18892
ดูจากรูปนะครับ
ผมใช้คำสั่ง

=Left([Data2],InStr(1,[Data2],":")-1) & Right([Data2],Len([data2])-InStr(1,[Data2],":"))

16 @R18893
Left คือหยิบตัวอักษรทางด้านซ้ายตามจำนวนตำแหน่งที่กำหนด
Right คือหยิบทางด้านขวา
InStr หาว่าตัวอักษรที่ต้องการอยู่ในตำแหน่งไหน
Len นับจำนวนตัวอักษรทั้งหมด

ลองค่อยๆ แงะสูตรดูนะครับ
17 @R18895
ลองใช้ฟังก์ชั่น Replace() ในคิวรี่ดูครับ เช่น

Expr1: Replace([Date2],":","")
18 @R18898
ขอบคุณค่ะ ถ้าทำแบบที่คุณธัชชัยบอก ทำได้แล้วค่ะ
แต่พอดีว่าเราได้การทำการเปลี่ยนข้อมูลบน Query บ้างตัว ที่ชนิด Query แบบ Update ค่ะ
เลยอยากสร้างโค้ดไว้ที่ส่วนนี้ค่ะ เพราะนอกจากจะตอ้งเปลี่ยนค่าเวลาแล้ว ก็มีค่าอื่นๆที่ต้องเปลี่ยน ซึ่งค่าอื่นที่เปลี่ยน ฃทำบน Query แบบ Update หมดเลยค่ะ เลยนี้เลยพยายามจะนำโค้ดในการเปลี่ยนเวลาไปไว้ที่เดียวกัน แต่พอไว้ที่เดียวแล้วกดรัน Query เวลาหายหมดเลยค่ะ เลยอยากทราบว่า จริงๆเราสามารถทำได้ไหมค่ะ
โดยเราได้ใส่โค้ดนี้ Left([DeliIsTime],InStr(1,[DeliIsDate],":")-1) & Right([DeliIsTime],Len([DeliIsTime])-InStr(1,[DeliIsTime],":")) ที่ Update To ค่ะ
ไม่เกิด error ใดๆค่ะ แต่เวลาหายหมดค่ะ
19 @R18899
ขอบคุณทุกๆท่านค่ะ ใช้ฟังค์ replace อย่างที่คุณ TTT บอกได้ค่ะ ขอบคุณทุกๆท่านอีกครั้งนะค่ะ
แต่สำหรับ R18898 ก็ยังคงอยากรู้คำตอบอยู่ดีนะค่ะ ^ ^
20 @R18901
1. ลืมนึกถึงคำสั่ง Replace ไปเลย สงสัยตัวเองทำไมชอบทำเรื่องง่ายให้เป็นเรื่องยาก
2. ผมทดลองใช้คำสั่งนี้ไปใช้ใน Update Query แล้วนะ ก็ทำงานปกตินี่

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