กระทู้เก่าบอร์ด อ.Yeadram
3,967 19
URL.หัวข้อ /
URL
การคำนวณสลับช่องล่างบน
ผมมี table1 มี field ( ชิ้น,ค่าชิ้น,B/เดื่อน)
ชิ้น ค่าชิ้น ฿/เดือน
12 50 ……. 50
13 50 ……. 100
14 50 ……. 150
15 55 ……. 205
16 55 ……. 260
อยากให้คำนวณคือ ถ้าบรรทัดแรก ชิ้นที่ 12 ค่าชิ้น 50 B/เดือนให้เท่ากับค่าชิ้น 50 เลย
แต่บรรทัดที่ 2 ตั้งแต่ชิ้น 13 เป็นต้นไปให้เอาค่าชิ้นของตัวเองไปบวกกับ B/เดือนที่อยู่ด้านบนสลับกันลงมาจนหมด
เช่นตัวอย่างที่อยู่ริมขวาสุด
ชิ้น ค่าชิ้น ฿/เดือน
12 50 ……. 50
13 50 ……. 100
14 50 ……. 150
15 55 ……. 205
16 55 ……. 260
อยากให้คำนวณคือ ถ้าบรรทัดแรก ชิ้นที่ 12 ค่าชิ้น 50 B/เดือนให้เท่ากับค่าชิ้น 50 เลย
แต่บรรทัดที่ 2 ตั้งแต่ชิ้น 13 เป็นต้นไปให้เอาค่าชิ้นของตัวเองไปบวกกับ B/เดือนที่อยู่ด้านบนสลับกันลงมาจนหมด
เช่นตัวอย่างที่อยู่ริมขวาสุด
19 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R10476
ขอบคุณ คุณ U&ME มากครับ เดี่ยวไปลองทำดู ได้ความอย่างไรจะมาบอกครับ
ขอบคุณครับ
ขอบคุณครับ
3 @R10478
คุณ U&ME ครับ พอคลิกที่query มันขึ้นแบบนี้ครับ ผมทำขั้นตอนตามที่แนะนำทุกอย่างเลยครับ
Fld1 Fld2 fld3
12 50 #Error
13 50 #Error
14 50 #Error
15 55 #Error
16 55 #Error
17 55 #Error
ช่วยดูให้อีกครั้งครับ ถ้าใครมีอะไรใหม่ๆ ช่วยเสนอด้วยครับ
ขอบคุณเพื่อนๆสมาชิกครับ
Fld1 Fld2 fld3
12 50 #Error
13 50 #Error
14 50 #Error
15 55 #Error
16 55 #Error
17 55 #Error
ช่วยดูให้อีกครั้งครับ ถ้าใครมีอะไรใหม่ๆ ช่วยเสนอด้วยครับ
ขอบคุณเพื่อนๆสมาชิกครับ
4 @R10482
ส่งโปรแกรมมาที่บอร์ด ครับ
5 @R10483
ผมจะส่งแบบไหนครับ ช่วยแนะนำให้ด้วยครับ
6 @R10485
ไหนไหนก็ถามแล้วขอถามต่อครับ
ผมขอแทรก 1 field ที่ table1 (Model,fld1,fld2,fld3)
ตอนนี้ผมกำลังปวดหัวมากกับโปรเจคที่ได้รับ เป็นโปรเจค Insentive
คือว่า table1 จะเป็น Master สำหรับค่าชิ้น : Model (ตัวสินค้า), fld1(จำนวนชิ้น), fld2(ค่าชิ้น), fld3(ค่าชิ้นสะสม ซึ่งต้องคำนวณจาก Query1
table3 คือยอดจากผลิตได้จริง ( Name[ชื่อของพนักงาน] ,Model, fld1[ยอดชิ้นที่ผลิตได้จริง] , fld3 (คือต้องเอายอดจาก query1 fld3 มาใส่)
table1
MODEL Fld1 Fld2 Fld3
AA2398 12 50 บรรทัดแรกของ Model ให้ fld3 = fld2
AA2398 13 50 บรรทัดต่อมา ให้ fld3 =fld2+fld3 ที่อยู่ด้านบน
AA2398 14 50
AA2398 15 55
AA2398 16 55
AA2398 17 55
AA2455 12 50 บรรทัดแรกของ Model ให้ fld3 = fld2
AA2455 13 50 บรรทัดต่อมา ให้ fld3 =fld2+fld3 ที่อยู่ด้านบน
AA2455 14 50
AA2455 15 55
AA2455 16 55
AA2455 17 55
AA2459 12 50 บรรทัดแรกของ Model ให้ fld3 = fld2
AA2459 13 50 บรรทัดต่อมา ให้ fld3 =fld2+fld3 ที่อยู่ด้านบน
AA2459 14 50
AA2459 15 55
AA2459 16 55
AA2459 17 55
ผมขอแทรก 1 field ที่ table1 (Model,fld1,fld2,fld3)
ตอนนี้ผมกำลังปวดหัวมากกับโปรเจคที่ได้รับ เป็นโปรเจค Insentive
คือว่า table1 จะเป็น Master สำหรับค่าชิ้น : Model (ตัวสินค้า), fld1(จำนวนชิ้น), fld2(ค่าชิ้น), fld3(ค่าชิ้นสะสม ซึ่งต้องคำนวณจาก Query1
table3 คือยอดจากผลิตได้จริง ( Name[ชื่อของพนักงาน] ,Model, fld1[ยอดชิ้นที่ผลิตได้จริง] , fld3 (คือต้องเอายอดจาก query1 fld3 มาใส่)
table1
MODEL Fld1 Fld2 Fld3
AA2398 12 50 บรรทัดแรกของ Model ให้ fld3 = fld2
AA2398 13 50 บรรทัดต่อมา ให้ fld3 =fld2+fld3 ที่อยู่ด้านบน
AA2398 14 50
AA2398 15 55
AA2398 16 55
AA2398 17 55
AA2455 12 50 บรรทัดแรกของ Model ให้ fld3 = fld2
AA2455 13 50 บรรทัดต่อมา ให้ fld3 =fld2+fld3 ที่อยู่ด้านบน
AA2455 14 50
AA2455 15 55
AA2455 16 55
AA2455 17 55
AA2459 12 50 บรรทัดแรกของ Model ให้ fld3 = fld2
AA2459 13 50 บรรทัดต่อมา ให้ fld3 =fld2+fld3 ที่อยู่ด้านบน
AA2459 14 50
AA2459 15 55
AA2459 16 55
AA2459 17 55
7 @R10486
table3
NAME MODEL Fld1 Fld3
A AA2398 12 xxx query1
A AA2398 14 xxx query1
A AA2398 15 xxx query1
A AA2398 16 xxx query1
A AA2398 17 xxx query1
B AA2398 15 xxx query1
B AA2398 16 xxx query1
B AA2398 17 xxx query1
C AA2455 16 xxx query1
C AA2455 18 xxx query1
C AA2455 19 xxx query1
D AA2455 16 xxx query1
D AA2455 17 xxx query1
E AA2459 15 xxx query1
E AA2459 18 xxx query1
F AA2459 12 xxx query1
F AA2459 15 xxx query1
F AA2459 16 xxx query1
จะมีวิธีการเขียนแบบไหนให้ table3 เอาข้อมูลจาก query1 มาใส่โดยมีเงื่อนไข table3.Model = query1.Model , table3.fld1=query1fld1 , table3.fld3=query1.fld3
และใน 1 Model อาจจะมีพนักงานมากกว่า 1 คนทำชิ้นเท่ากัน
ต้องรบกวนท่าน U&ME และท่านสมาชิกทุกท่านด้วยครับ
ขอบคุณครับ
NAME MODEL Fld1 Fld3
A AA2398 12 xxx query1
A AA2398 14 xxx query1
A AA2398 15 xxx query1
A AA2398 16 xxx query1
A AA2398 17 xxx query1
B AA2398 15 xxx query1
B AA2398 16 xxx query1
B AA2398 17 xxx query1
C AA2455 16 xxx query1
C AA2455 18 xxx query1
C AA2455 19 xxx query1
D AA2455 16 xxx query1
D AA2455 17 xxx query1
E AA2459 15 xxx query1
E AA2459 18 xxx query1
F AA2459 12 xxx query1
F AA2459 15 xxx query1
F AA2459 16 xxx query1
จะมีวิธีการเขียนแบบไหนให้ table3 เอาข้อมูลจาก query1 มาใส่โดยมีเงื่อนไข table3.Model = query1.Model , table3.fld1=query1fld1 , table3.fld3=query1.fld3
และใน 1 Model อาจจะมีพนักงานมากกว่า 1 คนทำชิ้นเท่ากัน
ต้องรบกวนท่าน U&ME และท่านสมาชิกทุกท่านด้วยครับ
ขอบคุณครับ
8 @R10493
มีท่านใด พอช่วยได้บ้างครับ
9 @R10495
ขออนุญาตคุณ U&ME นะครับ ขอแทรกนิดนึง
ผมไม่ได้อ่านรายละเอียดของคำถามนี้นะครับ ไม่ค่อยมีเวลาเท่าไหร่ แค่อ่านผ่านๆตา มันดูใกล้เคียงกับคำถาม http://www.thai-access.com/yeadram_view.php?topic_id=2188 นี้หรือไม่ ลองเอาไปศึกษาดูครับ
ผมไม่ได้อ่านรายละเอียดของคำถามนี้นะครับ ไม่ค่อยมีเวลาเท่าไหร่ แค่อ่านผ่านๆตา มันดูใกล้เคียงกับคำถาม http://www.thai-access.com/yeadram_view.php?topic_id=2188 นี้หรือไม่ ลองเอาไปศึกษาดูครับ
10 @R10497
ผมได้ลองเอาไปใช้ดูแล้วครับ work ครับ ก็ไม่ตรงสักเท่าไร แต่ดัดแปลงใช้ได้เลยครับ โดยไม่ต้องเอา table1 ไปคำนวณอีก แต่ใช้ table3 คำนวณจาก table1 ได้เลย
ขอบคุณคุณสันติสุขมากครับ
ขอบคุณคุณสันติสุขมากครับ
11 @R10862
ผมกลับมาถามอีกแล้วครับ
ผมมีข้อมูลที่เป็นวันที่ เวลา เรียงตามบรรทัดลงมา sort จากน้อยลงมาหามากจะทำอย่างไรให้หาค่าแตกต่างของเวลาได้ครับ โดยใช้เวลาที่มากกว่าลบตัวที่น้อยกว่าตัวอย่าง เช่น
ในที่นี้เราจะใช้เวลาเป็นหลักโดยอยู่ในขอบเขตของวัน order by ttime
model ttime Diff time
AA2398 13:40:47 00:00:00
AA2398 13:40:59 00:00:12
AA2398 13:41:02 00:00:03
AA2398 14:25:28 00:44:26
AA2398 14:25:30 00:00:02
AA2455 14:25:34 00:00:04
AA2455 14:38:11 00:12:37
AA2455 14:38:34 00:00:23
ขอบคุณครับ
ผมมีข้อมูลที่เป็นวันที่ เวลา เรียงตามบรรทัดลงมา sort จากน้อยลงมาหามากจะทำอย่างไรให้หาค่าแตกต่างของเวลาได้ครับ โดยใช้เวลาที่มากกว่าลบตัวที่น้อยกว่าตัวอย่าง เช่น
ในที่นี้เราจะใช้เวลาเป็นหลักโดยอยู่ในขอบเขตของวัน order by ttime
model ttime Diff time
AA2398 13:40:47 00:00:00
AA2398 13:40:59 00:00:12
AA2398 13:41:02 00:00:03
AA2398 14:25:28 00:44:26
AA2398 14:25:30 00:00:02
AA2455 14:25:34 00:00:04
AA2455 14:38:11 00:12:37
AA2455 14:38:34 00:00:23
ขอบคุณครับ
12 @R10868
มีแต่เวลา แล้วไม่มีวันที่ด้วยหรือ ? และถ้าไม่มีวันที่ เวลาของวันนี้กับวันอื่นๆจะเรียงออกมาเป็นอย่างไร ?
13 @R10871
ขอบคุณอาจารย์สุภาพครับ ที่แนะนำครับ ความจริงแล้วผมใช่ด้วยครับ
ตามนี้ครับ
MODEL ttime Diff time
AA2398 30/08/2011 13:40 0
AA2398 30/08/2011 13:40 ?
AA2398 30/08/2011 13:41 ?
AA2398 30/08/2011 14:25 ?
AA2398 30/08/2011 14:25 ?
AA2455 30/08/2011 14:25 ?
AA2455 30/08/2011 14:38 ?
AA2455 30/08/2011 14:38 ?
ขอบคุณครับ
ตามนี้ครับ
MODEL ttime Diff time
AA2398 30/08/2011 13:40 0
AA2398 30/08/2011 13:40 ?
AA2398 30/08/2011 13:41 ?
AA2398 30/08/2011 14:25 ?
AA2398 30/08/2011 14:25 ?
AA2455 30/08/2011 14:25 ?
AA2455 30/08/2011 14:38 ?
AA2455 30/08/2011 14:38 ?
ขอบคุณครับ
14 @R10872
เพิ่มใหม่ครับ ครั้งก่อนไม่มี วินาที
model ttime diff time
AA2398 30/08/2011 13:40:47 0
AA2398 30/08/2011 13:40:59 ?
AA2398 30/08/2011 13:41:02 ?
AA2398 30/08/2011 14:25:28 ?
AA2398 30/08/2011 14:25:30 ?
AA2455 30/08/2011 14:25:34 ?
AA2455 30/08/2011 14:38:11 ?
AA2455 30/08/2011 14:38:34 ?
ขอบคุณครับ
model ttime diff time
AA2398 30/08/2011 13:40:47 0
AA2398 30/08/2011 13:40:59 ?
AA2398 30/08/2011 13:41:02 ?
AA2398 30/08/2011 14:25:28 ?
AA2398 30/08/2011 14:25:30 ?
AA2455 30/08/2011 14:25:34 ?
AA2455 30/08/2011 14:38:11 ?
AA2455 30/08/2011 14:38:34 ?
ขอบคุณครับ
15 @R10876
ขอตัวไปธุระก่อนนะครับ บ่ายๆจะกลับมาตอบ
16 @R10878
จะเห็นได้ว่า MODEL ไม่มีส่วนเกี่ยวข้องกับการหาผลลัพธ์ จะใช้แต่ ttime เป็นหลักเท่านั้น ส่วน diff time นั้นต้องเขียนฟังก์ชันเอาครับ เพราะไม่มี built-in function อะไรที่ให้ผลตรงตามที่ต้องการนี้
ดังนั้นสิ่งแรกคือไปสร้างฟังก์ชั่นใน Module เสียก่อนด้วยโค้ดนี้
Public Function TimeDiff(StartDT As Variant, EndDT As Variant) As String
Dim SecDiff As Long
Dim HH As Integer
Dim NN As Integer
Dim SS As Integer
If IsNull(StartDT) Then StartDT = EndDT
SecDiff = DateDiff("s", StartDT, EndDT)
HH = Int(SecDiff / 3600#)
NN = Int((SecDiff Mod 3600#) / 60#)
SS = (SecDiff Mod 3600#) Mod 60#
TimeDiff = Format(HH, "00") & ":" & Format(NN, "00") & ":" & Format(SS, "00")
End Function
ส่วนคำสั่ง SQL Statement ก็เขียนดังนี้
เท่านี้เองครับ ลองเอาโค้ดไปไล่ดูนะครับ ไม่เข้าใจตรงไหนก็มาถามแล้วกัน
ดังนั้นสิ่งแรกคือไปสร้างฟังก์ชั่นใน Module เสียก่อนด้วยโค้ดนี้
Public Function TimeDiff(StartDT As Variant, EndDT As Variant) As String
Dim SecDiff As Long
Dim HH As Integer
Dim NN As Integer
Dim SS As Integer
If IsNull(StartDT) Then StartDT = EndDT
SecDiff = DateDiff("s", StartDT, EndDT)
HH = Int(SecDiff / 3600#)
NN = Int((SecDiff Mod 3600#) / 60#)
SS = (SecDiff Mod 3600#) Mod 60#
TimeDiff = Format(HH, "00") & ":" & Format(NN, "00") & ":" & Format(SS, "00")
End Function
ส่วนคำสั่ง SQL Statement ก็เขียนดังนี้
select a.model, a.ttime, TimeDiff((select max(b.ttime) as prevtime from ชื่อเทเบิล as b where b.ttime < a.ttime) ,a.ttime) as difftime
from ชื่อเทเบิล as a
order by a.ttime
เท่านี้เองครับ ลองเอาโค้ดไปไล่ดูนะครับ ไม่เข้าใจตรงไหนก็มาถามแล้วกัน
17 @R10879
เอาฟังก์ชั่นนี้ไปดีกว่า ไม่ลุ่มล่ามเหมือนอันที่เพิ่งเขียนให้ไปครับ แต่ได้ผลลัพธ์เหมือนกัน
Public Function TimeDiff(StartDT As Variant, EndDT As Variant) As String
Dim HH As Integer
Dim NN As Integer
Dim SS As Integer
If IsNull(StartDT) Then StartDT = EndDT
HH = DateDiff("h", StartDT, EndDT)
NN = DateDiff("n", StartDT, EndDT) Mod 60
SS = DateDiff("s", StartDT, EndDT) Mod 60
TimeDiff = Format(HH, "00") & ":" & Format(NN, "00") & ":" & Format(SS, "00")
End Function
Public Function TimeDiff(StartDT As Variant, EndDT As Variant) As String
Dim HH As Integer
Dim NN As Integer
Dim SS As Integer
If IsNull(StartDT) Then StartDT = EndDT
HH = DateDiff("h", StartDT, EndDT)
NN = DateDiff("n", StartDT, EndDT) Mod 60
SS = DateDiff("s", StartDT, EndDT) Mod 60
TimeDiff = Format(HH, "00") & ":" & Format(NN, "00") & ":" & Format(SS, "00")
End Function
18 @R10884
ขอบคุณ อ.สันติสุข ที่ช่วยปิดกระทู้ให้ (อีกตามเคย)
จริงๆ ผมก็พยามจะตอบเหมือนกันแต่คำถามมัน ^4S$@A=] ยากแก่การเข้าใจ บางคนก็ยกตัวอย่างข้อมูล ตัวอย่างผลลัพธ์ที่ต้องการ (อันนี้ดูง่ายหน่อยไม่ต้องแปลโจทย์) แต่บางคนโจทย์สั้นกระทัดรัด(คิดแต่ว่าตัวเองเข้าใจ) ไอ้คนจะตอบก็ตอบไปสั้น ๆ เหมือนกัน [ก็ไม่ว่ากันครับ "คนไม่รู้" ก็ไม่รู้จะเริ่มถามจากตรงไหน] ยังดีที่ อ.สันติสุข สามารถเข้าใจทุกอณู คนถามก็เลยได้คำตอบ
จริงๆ ผมก็พยามจะตอบเหมือนกันแต่คำถามมัน ^4S$@A=] ยากแก่การเข้าใจ บางคนก็ยกตัวอย่างข้อมูล ตัวอย่างผลลัพธ์ที่ต้องการ (อันนี้ดูง่ายหน่อยไม่ต้องแปลโจทย์) แต่บางคนโจทย์สั้นกระทัดรัด(คิดแต่ว่าตัวเองเข้าใจ) ไอ้คนจะตอบก็ตอบไปสั้น ๆ เหมือนกัน [ก็ไม่ว่ากันครับ "คนไม่รู้" ก็ไม่รู้จะเริ่มถามจากตรงไหน] ยังดีที่ อ.สันติสุข สามารถเข้าใจทุกอณู คนถามก็เลยได้คำตอบ
19 @R10885
ผมได้ไปลองใช้แล้วครับ ใช้ได้เลยครับ
ขอบคุณอาจารย์สันติสุขมากครับ มีปัญหาอะไรที่เราคิดว่ายากส่งกระทู้มาทีไรก็ได้คำตอบทุกครั้งเลยครับ
และขอบคุณคุณ U&ME ด้วยครับ
ขอบคุณอาจารย์สันติสุขมากครับ มีปัญหาอะไรที่เราคิดว่ายากส่งกระทู้มาทีไรก็ได้คำตอบทุกครั้งเลยครับ
และขอบคุณคุณ U&ME ด้วยครับ
Time: 0.3472s
กรณีนี้สร้างคิวรี่เพื่อคำนวณผลลัพธ์
-วิธีการ
1. สร้างคิวรี่ใหม่
2. เปลี่ยนเป็นมุมมอง SQL แล้วคัดลอกคำสั่งข้างล่างนี้ไปวาง
SELECT Table1.fld1, Table1.fld2, IIf([fld1]>=12,([fld2]+(preBMonth([fld1]))),[fld2]) AS fld3
FROM Table1;
3. บันทึก
4. สร้างฟังก์ชั่นใน Module
Public Function preBMonth(prvNum As Integer) As Currency
Dim rst As Recordset
If prvNum < 12 Then
'
Else
Set rst = CurrentDb.OpenRecordset("SELECT * From Query1 WHERE [fld1] = " & (prvNum - 1))
preBMonth = Nz(rst.Fields(2))
rst.Close
End If
End Function
5. ในหน้าต่าง VB เลือกเมนู Debug-->Compile...
*** หมายเหตุ
จากบรรทัดคำสั่งของทั้งในฟังก์ชั่นและคิวรี่นี้ [fld1] หมายถึงฟิลด์ "ชิ้น" [fld2] หมายถึงฟิลด์ "ค่าชิ้น" [fld3] หมายถึง B/เดือน แต่ถ้าชื่อฟิลด์แตกต่างจากนี้ ให้เปลี่ยนเป็นชื่อฟิลด์ของคุณเอง