ขอความช่วยเหลือด้วยครับ
กระทู้เก่าบอร์ด อ.Yeadram

 2,957   14
URL.หัวข้อ / URL
ขอความช่วยเหลือด้วยครับ



ขอบพระคุณมากๆครับ...

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

1 @R03703
งง ครับ
กด 001 ให้ช่องรายการโชว์ "001"
* แล้วมันโชว์น่ะ มันโชว์อย่างเดียว หรือมันเซฟด้วย ช่องรายการ ผูกกับฟิลด์อะไรหรือเปล่า เชื่อมกับตารางไหนหรือเปล่า หรือว่ามันเป็นคอนโทรลเดี่ยวๆ แบบ unbound
ถ้าผมต้องการให้แจ้งเตือนว่า 001 ได้มีข้อมูลแล้ว (ในวันเดียวกันนะครับ แต่ถ้าเป็นวันถัดไปก็สามารถบันทึกข้อมูลได้)
* ภาษาไทยคุณอ่อนมากนะครับ เหมือนๆ จะเป็นประโยคขัดแย้ง เพราะใช้คำว่า "แต่" เชื่อม แต่เนื้อความของมันไม่เห็นจะขัดแย้งกันเลย ลองวิเคราะห์ดูครับ

1) ถ้ามีข้อมูลอยู่แล้ว ให้แจ้งเตือน (ให้แจ้งเตือน)
2) ถ้าไม่มีข้อมูลอยู่ก่อน สามารถบันทึกข้อมูลได้เลย (ให้บันทึก)
อนุประโยคหมายเลข 1 กับหมายเลข 2 มันไม่ได้ขัดแย้งกันเลย คุณใช้คำว่า "แต่" มาเชื่อม
ข้อ 1 แจ้งเตือนแล้วทำอะไรต่อ จะให้บันทึกไหม
ข้อ 2 ให้บันทึกแล้วจะแจ้งเตือนไหม

ผมไม่ใช่ครูภาษาไทยหรอกครับ ไม่ซีเรียสมากนักหรอกเรื่องใช้คำ แต่บางทีถ้าคนถามระบุไม่ชัดเจนหรือเขียนให้คนอ่านสับสน มันก็ไม่เข้าใจกันสักทีนะครับ แล้วคุณก็จะได้คำตอบช้า มัน งง ครับ ไม่แน่ใจว่าจะตอบได้ถูกประเด็นหรือเปล่า เพราะการโพสต์บนเว็บ มันจะบันทึกไว้อีกนาน ถ้าตอบผิดประเด็นในกระทู้นั้นๆ ทำให้คนอื่นที่เข้าค้นมาเจอในภายหลังเขาก็จะผิดหวังกันไปตามๆ กัน
ถ้าถาม-ตอบกันใน chat ใน msn อาจจะตอบผิดประเด็นก็ได้ เพราะมันเดี๋ยวก็หายไปแล้ว ไม่ได้บันทึกเอาไว้ รู้กันสองคน

2 @R03708
คืออย่างนี้ครับอาจารย์
1. ผมต้องการคลิกที่ปุ่ม 001 แล้วเอาค่า 001 ไปโชว์ใน กล่องข้อความครับ
2. จากนั้นก็บันทึก
3. ถ้าผมเพิ่มข้อมูล 001 ในกล่องข้อความอีก ให้แจ้งเตือน (หมายถึง ว่ามันซ้ำกันน่ะครับ )

หมายเหตุ...มันเป็นตารางเดียว ฟอร์มเดียวเลยครับ
3 @R03724
มีปัญหาครับท่าน NOVA หลังจากที่ผมลองเขียนโค๊ตที่ ปุ่มคลิก

Private Sub Command4_Click()
    If DCount("id", "TBFIRST", "id=Forms!Form1.text0 AND date in =Forms! form1.text0") > 0 Then
MsgBox "ทดสอบดู"
Else
Text0 = 1
End If
End Sub

มันแจ้ง Error ในรูปที่แนบมาครับผม



4 @R03725
ดูที่ code AND date in =Forms! form1.text0
date in เป็นชื่อ field ? ถ้าใช่ ลองแก้เป็น [date in] หรือ date_in
Forms! form1 ก็อย่าให้มีช่องว่างครับให้พิมพ์เป็น Forms!form1
5 @R03727
ได้แล้วครับขอบคุณครับผม....
ถามอีกครับ
1. ถ้าผมจะใส่ ตัวอักษรข้างหน้าเป็น A001 ได้มั้ย ผมลองแล้วมันไม่ขึ้นครับ ได้แต่ตัวเลขอย่างเดียว
2. ผมไม่แน่ใจว่า ตรง โค๊ตตรงนี้ If DCount("id", "TBFIRST", "id=Forms!Form1.text0 AND [date in]=Forms! form1.text0") > 0 Then
MsgBox "ทดสอบดู ว่าซ้ำมั้ย" เป็นการตรวจสอบ ข้อมูลซ้ำ ใช่หรือไม่ ถ้าใช่ มันไม่แจ้งเตือนครับ
3. ผมอยากให้มันแจ้งเตือน อย่างนี้ครับ
- ถ้าเป็นวันเดียวกัน คือ ตรง text0=a001 มันจะต้องแจ้งเตือนว่าซ้ำครับ
- ถ้าเ็ป็นวันถัดไป    คือ สามารถใ่ส่ข้อมูลได้ครับ ไม่ต้องแจ้งเตือนซ้ำ
หมายเหตุ .... ข้อมูลที่ว่า คือที่ช่อง text0 นะครับผม

ถามงง ไปมั้ยน้อ....
6 @R03728
ตอบข้อ 1
ถ้าอยากใส่ เป็น A001 ก็แก้ code
text0=001 เป็น text0=A001
ตอบข้อ 2,3
code if.... เป็น code ที่ตรวจดูว่ามีค่านั้นในวันที่นั้นอยู่ในตารางหรือไม่
ถ้ามีก็แจ้งเตือนตาม msgbox ที่กำหนดนะครับ ถ้าไม่มีจึงจะกำหนดให้ text0 รับค่าตามปุ่มที่กดนะครับ
7 @R03730
ได้แล้วครับ บางส่วน !!!!! ไม่รู้ผิดตรงไหน

มีปัญหา ตรงที่ text0 ครับ
- เปลี่ยนจาก text0=001 เป็น text0=A001 ไม่ได้ ไม่โชว์ที่กล่องข้อความครับ
- ถ้าเป็นตัวเลข ไม่มีพยัญชนะ คือ A มันจะโชว์

หมายเหตุ...text0 มาจากตาราง TBFISRT ชื่อฟิลด์ id ชนิด text ขนาดเขตข้อมูล 50 ครับ

......ขอบพระคุณ ล่วงหน้าครับผม.......

8 @R03731
เข้ามาแอบเก็บครับ ท่านพจน์น้อยช่วยลงโค๊ตเต็ม ที่ทำได้ ให้ด้วยนะครับ :-) ขอบคุณท่านNovaและท่านพจน์น้อยด้วยครับ
9 @R03732
อันนี้คือ โค๊ตเต็ม ครับ !!!! ยังไม่ครอบคลุมน่ะครับ....

Private Sub Command5_Click()
    If DCount("id", "TBFIRST", "id=Forms!Form1.text0 AND [date in] =Forms!Form1.text8") > 0 Then
MsgBox "รายการซ้ำ ตรวจสอบข้อมูลอีกครั้ง"
Else
Text0 = 222
End If
End Sub
--------------------------------------------
id คือ ฟิลด์จากตาราง = ข้อมูล Text
text0 คือ ช่องรายการ = ฟอร์ม
date in คือ ฟิลด์จากตาราง = ข้อมูลวันที่
text8 คือ ช่องวันที่ = ฟอร์ม
ส่วน Else Text0 = 222 น่าจะเป็นข้อมูลของ ปุ่มCommand ครับ (ผมก็เดาเอานะ เพราะยังหัดขับ เหมือนกัน ไม่รู้ว่าดูโค๊ต ถูกหรือเปล่า...นะครับ ท่านปรมาจารย์ ช่วยแนะนำด้วย....
----------------------------------------------------------------
เท่าที่ใช้ดูก็ใช้ได้ แต่ยังไม่ครอบคลุมครับผม ยังไงก็ขอบพระคุณท่าน NOVA มากมายครับ....ก็ช่วยกันศึกษากันไปครับ จนกว่า Access จะไม่มีคำตอบให้เรา ชาว Ac ครับ
---------------------------------------------------------------
ปัญหามีดังนี้ครับผม คือว่า

1. เมื่อคลิกที่ปุ่ม Command (ปุ่มที่1) ค่าจากปุ่ม คือ 222 มันจะโผล่ที่ช่อง รายการ คือ Id บันทึกเป็นวันที่ 6-10-52
2. ถ้าคลิกที่ปุ่ม Command (ปุ่มที่ 1) ค่าจากปุ่ม คือ 222 มันจะโผล่ที่ช่อง รายการ คือ Id บันทึกเป็นวันที่ 6-10-52 เหมือนเดิม จะแจ้งเตือนก็ต่อเมื่อ คลิกปุ่มเดิม อีกครั้ง "รายการซ้ำ ตรวจสอบข้อมูลอีกครั้ง" ครับ มันเป็น จะอี้ิ เด้อ.....
---------------------------------------------------------------

คำถาม ถามข้อที่ 2 ครับ....
- ถ้าจะให้มันแจ้งเตือนก่อนที่จะโผล่ต้องทำจัง ดั๋ยน้อ ก็คือให้ตรวจสอบก่อนจะส่งค่าไปที่ ช่องรายการ ครับผม เพราะค่ามันซ้ำกัน วันที่เดียวกันนะครับ ท่าน เช่น

บันทึกวันที่ 6-10-52   ข้อมูลเดิม ซ้ำ

A001 บันทึกแล้ว
A001 กำลังส่งค่าไป แจ้งเตือนว่า " ซ้ำ "

บันทึกวันที่ 7-10-52   ข้อมูลเดิม บันทึกได้
A001 ไม่ซ้ำ

ให้มันเป็นจั่งซี้ จั่งซี้......ขอบพระคุณปรมานจารย์ทุกท่าน ครับ.....
10 @R03733
ขอบคุณนะครับ ;-) เผื่อจะมีอะไรที่ใช้แบบนี้บ้าง
11 @R03737
Private sub command5_click()
filText0("command5")
end sub

Private sub command6_click()
filText0("command6")
end sub

Private sub command7_click()
filText0("command7")
end sub




sub filText0(ctl as string)
dim xs as integer
dim mLable as string
mLabel = "A" & me(ctl).caption
xs = dcount("id","tbFirst","[id] Like '" & text0 & "' AND cdate([Date in]) = cdate('" & text8 & "')")
if xs >0 then
msgbox "มีรายการอยู่แล้ว ไม่อนุญาตให้บันทึก"
'me.undo
else
text0= mLabel
end if
end sub
12 @R03743
อันนี้ ยิ่ง เง็ง ไปกัน ใหญ่เลย
แต่จะถามว่า

Private sub command5_click()
filText0("command5")
sub filText0(ctl as string)
dim xs as integer
dim mLable as string
mLabel = "A" & me(ctl).caption
xs = dcount("id","tbFirst","[id] Like '" & text0 & "' AND cdate([Date in]) = cdate('" & text8 & "')")
if xs >0 then
msgbox "มีรายการอยู่แล้ว ไม่อนุญาตให้บันทึก"
'me.undo
else
text0= mLabel
end if
end sub
end sub

เอาไปใช้แบบนี้ ป่าวคับ....
13 @R03746
เขียนไปอย่างที่ผมเขียนนั่นแหละครับ
ไม่ต้องย้ายมัน
procedure มันซ้อนกันไม่ได้ครับ

เมื่อกดปุ่ม command5 ให้มันไปเรียกใช้โปรแกรมย่อย
เมื่อกดปุ่ม command6 ก็ให้มันไปเรียกใช้โปรแกรมย่อย
เพราะว่าการทำงานของสองปุ่มมันเหมือนกัน ดังนั้น เพื่อประหยัดเวลาในการเขียน ในการแก้ไขในภายหลัง เราจึงเขียนเป็นโปรแกรมย่อย แล้วค่อยเรียกใช้
ในปุ่มคำสั่ง command5 แม้มันจะมีแค่คำสั่งเดียวก็ไม่ต้องกังวลว่ามันจะทำงานไม่ได้ เพราะคำสั่งเดียวที่มันมี เป็นคำสั่งเรียกใช้โปรแกรมย่อยตัวอื่น ซึ่งยังมีอีกหลายๆ คำสั่งให้มันทำครับ
14 @R03751
ใช้ได้แล้วครับ ขอบคุณท่าน อาจารย์ yeadram ครับ ...
ส่วนอื่นๆผมจะนำไปประยุกต์ใช้ครับผม มีประโยชน์อย่างมากมาย
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3081s