อยากแสดงรายกานลงใน command botton
กระทู้เก่าบอร์ด อ.Yeadram

 4,928   23
URL.หัวข้อ / URL
อยากแสดงรายกานลงใน command botton

รบกวนสอบถามหน่อยครับว่า

table test1 ผมมีฟิลด์ชื่อว่า item
aa
bb
cc
dd

อยากให้แสดง command botton ใน form โดยแสดงเป็น
command botton1 aa, command botton2 bb
command botton3 cc,   command botton4 dd

หรือถ้า command botton ทำไม่ได้แล้วใช้ตัวไหนทำได้ในลักษณะนี้บ้างครับ

ขอบคุณมากครับ

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

1 @R04559
ขออภัยพิมพ์ผิด command button
2 @R04561
me.ชื่อปุ่ม.caption = ชื่อที่อยากให้แก้
eg.
สร้าง button1
button1.caption = command botton1 aa
ครับ
ที่เหลือ ก็ loop ค่า จาก ข้อมูล มาทำเอา
3 @R04562
ขอบคุณมากครับ ขอดูวิธีการ loop ค่าจากข้อมูล พร้อมทั้งเก็บข้อมูลลงตารางด้วยได้ไหมครับ

ขอบคุณมากครับ
4 @R04580
ท่านใดว่างช่วยดูหน่อยครับ

ขอบคุณมากครับ
5 @R04584
สมมติ คุณมี ปุ่มอยู่ 20ปุ่ม
คุณตั้งชื??อปุ่มให้เป็นลำดับกัน และอยู่ในรูปแบบเดียวกัน เช่น
btt01, btt02, btt03 .....


ส่วนข้อมูล
สมมติว่าคุณมีข้อมูลอยู่แล้ว 20 รายการ
โดยเก็บข้อมูลไว้ในตารางชื่อ table1 ฟิลด์ชื่อ F1

เมื่อคุณอยากนำข้อมูลทั้ง 20 รายการ ไปวางเป็น caption ของปุ่มแต่ละปุ่มโดยให้วางปุ่มละ 1 รายการ (ซึ่งมันลงตัวพอดี มีปุ่ม20 = มีข้อมูล20) คุณก็เขียนลูปดังนี้

dim Rs as new adodb.recordset
rs.open "Select F1 From Table1", Currentproject.connection, 1
do while not rs.eof
   me("btt" & format(rs.absoluteposition,"00")).caption = rs(0)
   rs.movenext
loop
rs.close
set rs=nothing



------------------
ส่วนคำถามต่อ ที่ว่า "พร้อมทั้งเก็บข้อมูลลงตารางด้วย" อันนี้คืออะไร ไม่เข้าใจครับ
6 @R04591
เรียน อ.yeadram
ถ้ารายการมันไม่ลงตัวพอดี มีเพิ่มมีลดเหมือนข้อมูลในตาราง จะสามารถทำได้หรือไม่ครับ เช่นวันนี้มีข้อมูลอยู่ 20 รายการ พอพรุ่งนี้อาจมีการเพิ่มขึ้นอีก หรือมีการลบข้อมูลทำให้ข้อมูลลดลงอีก

"ส่วนคำถามต่อ ที่ว่า "พร้อมทั้งเก็บข้อมูลลงตารางด้วย" อันนี้คืออะไร ไม่เข้าใจครับ " // ข้อมูลใน command button เป็นรหัสสินค้า เมื่อเรากดปุ่มนี้ในฟอร์ม ก็อยากให้นำรหัสสินค้านี้ไปเก็บใน table อื่นๆ

ขอบคุณมากครับ
7 @R04592
1) สร้างปุ่มไว้ตามจำนวนที่ต้องการ ตั้งชื่อตามลำดับ และให้อยู่ในรูปแบบเดียวกัน btt01, btt02, btt03, ...
2) เปิด recordset ดึงข้อมูลจากตารางมาเก็บไว้ใน ตัวแปร Rs
3) วนลูป เพื่อโปรยข้อมูลลงใน caption ของแต่ละปุ่ม
4) ในลูป ต้องมีการเช็คเงื่อนไขด้วยว่า ถ้าข้อมูลหมด หรือ ถ้าปุ่มครบจำนวนแล้วให้หยุดทำงาน
5) แต่ละปุ่มต้องฝังคำสั่งให้เรียกใช้ฟังก์ชั่น โดยส่งค่าอาร์กิวร์เมนต์เข้าไปในฟังก์ชั่นด้วย (ต้องเขียนขึ้นเอง เช่นเขียนฟังก์ชั่นชื่อ insBttCaption() ให้มีการรับค่าอาร์กิวเมนต์ ชื่อปุ่ม)

สมมติคุณมีปุ่มทั้งหมด 17 ปุ่ม

dim Rs as new adodb.recordset
rs.open "Select F1 From Table1", Currentproject.connection, 1
do while not rs.eof
   if rs.absoluteposition > 17 then exit do
   me("btt" & format(rs.absoluteposition,"00")).caption = rs(0)
   rs.movenext
loop
rs.close
set rs=nothing


ในแต่ละปุ่มให้เปิด dialog คุณสมบัติ ดูที่แท็บ Event
ในช่อง "เมือคลิ๊ก" ให้เขียนว่า =insBttCaption("btt01")
โดยที่ค่าที่อยู่ในเครื่องหมายฟันหนูนั้น ต้องเป็นชื่อของปุ่มนั้นๆ คือถ้าเขียนในปุ่มที่1 ก็ให้ใส่ btt01 ถ้าเขียนในปุ่ม btt02 ก็ให้เขียนว่า btt02
ปล. งานนี้อาจจะลำบากหน่อยถ้ามีหลายปุ่ม ไม่งั้นก็ต้องเขียนฟังก์ชั่นขึ้นมาช่วยงาน (ดูตัวอย่างจากระทู้ถัดไป)

ทีนี้ให้เขียนฟังก์ชั่นฝั้งไว้ในฟอร์มนี้ ดังนี้

Private Function insBttCaption(bttName as string)
dim mData as string
dim sql as string
mData=""
mData = me(bttName).caption
if mData="" then exit function
sql = "Insert into .......... เขียนสเตทเมนต์ให้เอาค่าจาก mData ไปใช้งานตามต้องการ หรือไปเก็บในตารางตามความต้องการของเนื้องาน"
on error resume next
Currentproject.connection.execute sql
End function
8 @R04593
สมมติ ฟอร์มของคุณชื่อ fmAutocap
สมมติ เหล่าปุ่มคำสั่งของคุณ(ที่จะใช้การเปลี่ยน caption) มีชื่อที่ขึ้นต้นด้วย "btt" (ถ้ามีปุ่มปิดฟอร์ม ปุ่มบันทึกข้อมูล ควรตั้งชื่อปุ่มให้ขึ้นต้นด้วยคำอื่นที่ไม่ใช่ btt)

สร้างโมดูลใหม่มาตัวหนึ่ง (จบงานแล้วก็ลบทิ้ง)
เขียนโปรแกรมดังนี้

sub tttt()
dim ctl as control
dim frm as form
set frm =forms("fmAutocap")
for each ctl in frm.controls
if typeof ctl is commandbutton and left(ctl.name,3)="btt" then _
ctl.onclick = "=insBttCaption(" & chr(34) & ctl.name & chr(34) & ")"
next
end sub

1) เปิดฟอร์ม fmAutocap ไว้ในมุมมองออกแบบ
2) วางเคอร์เซอร์ไว้ในโมดูลตัวใหม่นี้ โดยวางไว้ภายใน sub
3) กดปุ่ม F5 บนแป้นคีย์บอร์ด
4) เมื่อมันทำงานเสร็จแล้ว ปิดหรือลบโมดูลนี้ทิ้งได้เลย
9 @R04597
รบกวน อ.yeadram อีกรอบครับ
ถ้ามีข้อมูลเพิ่มขึ้น ให้ฟอร์มมันสร้างปุ่ม command button เพิ่มขึ้นโดยอัตโนมัติ ได้หรือไม่ครับ คือผมอยากให้ฟอร์มมันสร้างปุ่มให้อัตโนมัติ เท่ากันจำนวนของข้อมูลใน table1

ขอบคุณมากครับ
10 @R04598
อ่านตามลิงค์ครับ
http://thai-access.spaces.live.com/blog/cns!4286F7EA1717450A!135.entry
11 @R04600
ขอบคุณ อ.yeadram มากครับ
ผมลองเข้าไปดูแล้ว แต่ก็ยังงงๆ และมีข้อสงสัยว่า
แล้ว command button มันจะผูกกับ filed itemcode ใน table ได้ยังไงครับ

ขอบคุณมากครับ
12 @R04609
ไม่ทราบว่า พอจะเป็นไปได้บ้างไหมครับ

ขอบคุณมากครับ
13 @R04613
ไม่ต้องผูก
ไม่คิดจะผูก
ไม่จำเป็นต้องไปผูกครับ
มันมีฟังก์ชั่นเอาค่าไปเก็บแล้วนี่ครับ ปุ่มกด ไว้ทำหน้าที่ เหมือนตัวติ๊กเลือก แค่นั้นเอง มันไม่ผูกกับอะไรเลยครับ มันทำงานได้แล้ว
14 @R04626
รบกวน อ.yeadram ทำเป็นตัวอย่าง .mdb ให้ดูได้ไหมครับ
ตอนนี้ผมงงมากๆ เลย
ไม่รู้จะเป็นการรบกวน อ.yeadram มากเกินไปหรือเปล่า
ถ้า อ.yeadram ไม่ว่างก็ไม่เป็นไรครับ

ขอบคุณมากครับ
15 @R04632
A) ดูงานสร้างฟอร์ม สร้างข้อมูลจำลองได้จาก Module1 (ความจริงแล้วเมื่อใช้งานจริง Module1 ต้องลบทิ้ง)
B) ดูผลงานการสร้างและลบคอนโทรล ด้วยการ 1)ปรับเพิ่มหรือลดรายการจาก Table1 ก่อนแล้ว.. 2) กดปุ่ม List Data
C) ดูโค้ดงานของข้อ B ได้จากโค้ดในฟอร์มหลัก มีคอมเมนต์เป็นไกด์ให้แนวคิด อาจนำไปปรับแต่งใช้ตามใจชอบ
D) ดูงานการเพิ่มข้อมูลได้จากโค้ดในฟอร์ม Form1
E) โหลดไฟล์ตัวอย่างได้จากเมล์ accboard gmail ในกลุ่ม "จดหมายร่าง" ชื่อเรื่อง "T01051 : อยากแสดงรายการลงใน command botton"
F) ประเด็นศึกษาที่อาจจะหาได้จากตัวอย่างนี้ ได้แก่
- การสร้างคอนโทรล หรือการลบคอนโทรล ในขณะรันโปรแกรม
- เทคนิคการเขียนโปรแกรมย่อย เพื่อใช้เฉพาะกิจในการสร้างหรือออกแบบฟอร์ม
- เทคนิคการสุ่มสร้างตัวอย่างข้อมูล การ Random เพื่อสมมติข้อมูล
- เทคนิคการออกแบบฟอร์มให้เรียกใช้ฟังก์ชั่นเดียวกัน ในเหตุการณ์คล้ายๆ กัน
- เทคนิคการบังคับ การควบคุม ฟอร์มย่อย
- เทคนิคการสร้างฟอร์มโดยไร้ แหล่งข้อมูล (Unbound control) (เป็นพื้นฐานสำคัญในการเริ่มเรียนรู้การเขียนโปรแกรมด้วย VB)
16 @R04634
ขอบคุณ อ.yeadram มากครับ
17 @R04726
ขอรบกวน อ.yeadram อีกครั้งหนึ่งครับ

Table1(Category )มี field catID,     catName
ผมได้ทำแบบ Form1 ที่ อ.yeadram ส่งให้ได้แล้ว แต่ผมยังมี

Table3(Product) มี field ProID, ProName, catID

ผมอยากทำแบบนี้ครับ โดยเมื่อมีการกด Comand Button catID ใน Form1 ตัวไหนแล้วให้ไปเปิด table3 นำเอา ProName มาแสดงแทนที่ CatName ใน Command Button โดยอ้างอิงจาก catID ที่เรากด Command Button ก่อนหน้านี่ ครับ

ขอบคุณมากครับ
18 @R04734
ก็แก้ไขคำสั่งในฟังก์ชั่นนั่นเลยซิครับ

me(ctlN).caption = Dlookup(.........)
19 @R04735
เรียน อ.yeadram
แบบที่ อ.yeadram แนะนำมันจะดึงชื่อมาแสดงได้แค่ ปุ่มเดียว ชื่อเดียว

ผมขอให้รายละเอียดเพิ่มเติมอย่างนี้นะครับ
Table1
catID             catName
1001             อาหาร
1002             เครื่องดื่ม
1003             อื่นๆ
อันนี้ผมได้ทำให้แสดงใน command button ใน Form1 ตามตัวอย่างที่ อ. ทำมาให้ดูได้แล้ว
และผมยังมี Table3
proID            proName              catID
10011           ข้าวผัด                  1001
10012           ผัดไทย                 1001
10013           ผัดกระเพรา            1001

10021          โค้ก                      1002
10022          เป๊บซี่                     1002
10023          เบียร์                      1002

10031          บุหรี่                      1003
10032          ไฟแช็ค                   1003

เมื่อเรากด command button อาหาร ใน Form1
ผมก็อยากให้แสดง ข้าวผัด     ผัดไทย      ผัดกระเพรา
ใน command button 3 ปุ่ม และปุ่มย้อนกลับ(ไปหาหมวดหลัก อาหาร เครื่องดื่ม อื่นๆ)
และพอ command button ก็ให้มันไปเก็บข้อมูลไว้ใน Table2

พอกดปุ่ม เครื่องดื่ม หรือ ปุ่มอื่นๆ ก็ให้ทำงานในลักษณะเดียวกันครับ

ขอบคุณมากครับ
20 @R04736
เปิดเรคคอร์ดเซ็ตโดยระบุเงื่อนไข ก็เห็นตัวอย่างแล้ว
dim RS
dim sql
sql = "select ..... where....
rs.open sql......

คุณก็เปิด เรคคอร์ดเซ็ต ตารางที่ 3 ขึ้นมา แล้วนับจำนวนเรคคอร์ด ก็ทำให้เห็นแล้ว
rs.recordcount

ทีนี้ก็นับปุ่มในฟอร์ม ถ้าปุ่มในฟอร์มมีเกินจำนวนเรคคอร์ด ก็ลบปุ่มออก
วิธีลบปุ่ม ก็เห็นตัวอย่างแล้ว

ถ้าปุ่มบนฟอร์มมีน้อยกว่าจำนวนเรคคอร์ด ก็เพิ่มปุ่มขึ้นมาให้มันครบ
วิธีเพิ่มปุ่มก็มีตัวอย่างแล้ว

เมื่อจำนวนปุ่ม กับจำนวนเรคคอร์ด เท่ากันแล้ว ก็โปรยข้อมูลลงไป
วิธีวนลูปโปรย caption ก็มีตัวอย่างแล้ว

เมื่อโปรยข้อมูลครบ คุณก็ปิด recordset เคลียร์แรม
ก็เห็นตัวอย่างแล้ว

คุณแค่ต้องแยกออกให้เป็นคนละฟังก์ชั่นกัน
-ฟังก์ชั่นตัวแรก เพื่อโปรยข้อมูลย่อย
-ฟังก์ชั่นตัวสอง เพื่อ Insert ข้อมูล
เวลาโปรยข้อมูล ก็ให้ดูว่า
ปุ่มไหนใช้ข้อมูลจากตารางที่ 1มาเป็นแคปชั่น เวลาตั้งค่าเรียกใช้ฟังก์ชั่นให้คุณเรียกใช้ฟังก์ชั่นแรก
ctl.onclick="=ฟังก์ชั่นแรก"

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