ขออนุญาติตั้งกระทู้ใหม่นะครับ ถามวิธีการลิ้งข้อมูล
กระทู้เก่าบอร์ด อ.Yeadram

 6,748   32
URL.หัวข้อ / URL
ขออนุญาติตั้งกระทู้ใหม่นะครับ ถามวิธีการลิ้งข้อมูล



อธิบายจากรูปนะครับ คือต้องการทำให้เวลาเพิ่มสินค้าหรือเลือกสินค้าไปในฐานข้อมูล เวลาเลือก combobox มีจะขึ้น M'Samsung 1 ตัว M'Sony 1 ตัว สมมุติเลือก Samsung พอจะไปเลือก PS มันก็ให้เลือก 15 กับ 17 ( 16กับ 18เป็นของ M'Sony) สมมุติเลือก 15 พอเลือกเสร็จก็เลือก PW มันก็จะมีแค่ 20 (เพราะ 21 เป็นของ PS 17) สุดท้ายก็บันทึกลง Table1

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

1 @R14562
ฟอร์มต้องสร้างจาก Table1 และให้ Default View เป็น Datasheet และควรต้องมีอีกเทเบิล (สมมุติชื่อ P) ที่มี 3 ฟิลด์ เพื่อเก็บค่าของ PName, PS, PW ทั้งหมดเท่าที่เป็นไปได้ไว้ก่อน

ในคอมโบบ็อกซ์ของช่อง PName ที่อยู่บนหน้าฟอร์ม (สมมุติชื่อ cboPName) ให้ใส่
- Control Source เป็น PName
- Row Source เป็น select PName, PS, PW from P order by PName, PS, PW สำหรับแสดง 3 ฟิลด์จากเทเบิล P
- Bound Column เป็น 1
- Limit To List เป็น Yes
- Auto Expand เป็น Yes
- Column Count เป็น 3
- List Width เป็นความยาวของลิสท์ เดิมเป็น Auto ให้เปลี่ยนเป็นความยาวที่เพียงพอต่อการแสดงทั้ง 3 คอลัมน์ (ของ 3 ฟิลด์) เช่น 4 ซึ่งก็แล้วแต่หน่วยของเครื่องคุณที่ตั้งไว้ว่า

ความยาวเป็น cm หรือ inch
- Column Width เป็นความยาวของแต่ละคอลัมน์ คั่นด้วยเครื่องหมาย semicolon ( ; ) เช่น 2;1;1

ดังนั้นเมื่อคุณมาที่ช่อง cboPName และกดลิสท์ คุณก็จะเห็นลิสท์เช่น
M'Samsung 15 20
M'Samsung 17 21
M'Sony 16 ...
M'Sony 18 ...

ใน AfterUpdate event procedure ของ cboPName ให้เขียนโค้ด
(สมมุติชื่อของคอมโบบ็อกซ์ของ PS และ PW ชื่อ cboPS และ cboPW ตามลำดับ)

if nz(me.cboPName,"") = "" then
   cboPS = null (ถ้าเกิด error ที่บรรทัดนี้ระหว่างการทำงาน ให้เปลี่ยนจาก null เป็น "")
   cboPW = null (เหมือนข้างบน)
else
   cboPS = me.cboPName.Column(1)
   cboPW = me.cboPName.Column(2)
end if

'--------------------------------------------------

ที่ cboPS ให้
- Control Source เป็น PS
- Row Source ปล่อยว่างไว้
- Bound Column เป็น 1
- Limit To List เป็น Yes
- Auto Expand เป็น Yes
- Column Count เป็น 2
- List Width (เช่นเดียวกับ cboPName)
- Column Width (เช่นเดียวกับ cboPName)

ใน OnEnter event procedure ของ cboPS ให้เขียนโค้ด
if nz(me.cboPName,"") = "" then
cboPS.RowSource = ""
else
cboPS.RowSource = "select PS, PW from P where PName = '" & me.cboPName & "' order by PS, PW"
end if

ใน AfterUpdate event procedure ของ cboPS ให้เขียนโค้ด
if nz(me.cboPS,"") = "" then
   cboPW = null (ถ้าเกิด error ที่บรรทัดนี้ระหว่างการทำงาน ให้เปลี่ยนจาก null เป็น "")
else
   cboPW = me.cboPS.Column(1)
endif

'--------------------------------------------------

ที่ cboPW ให้
- Control Source เป็น PS
- Row Source ปล่อยว่างไว้
- Bound Column เป็น 1
- Limit To List เป็น Yes
- Auto Expand เป็น Yes
- Column Count เป็น 1
- List Width เป็น Auto
- Column Width ปล่อยว่างไว้

ใน OnEnter event procedure ของ cboPW ให้เขียนโค้ด
if nz(me.cboPS,"") = "" then
cboPW.RowSource = ""
else
cboPW.RowSource = "select PW from P where PName = '" & me.cboPName & "' and PS = '" & me.cboPS & "' order by PW"
end if

'--------------------------------------------------

ใน BeforeUpdate event procedure ของฟอร์ม ให้เขียนโค้ด
if (nz(me.cboPName,"") = "") or (nz(me.cboPW,"") = "") or (nz(me.cboPS,"") = "") then
   cancel = true
   msgbox "ต้องป้อนให้ครบทั้ง PName, PS และ PW"
end if

'--------------------------------------------------
2 @R14565
ขอบคุณครับ อาจารย์สันติสุข ได้ได้ทำไว้ที่ from product แล้ว แล้วสร้างอีก from ชื่อ main โดยดึง from มาใส่ แล้วเลือก มุมมองเริ่มต้นเป็น datasheet ได้แบบต้องการแล้ว แต่ปัญหาคือ ผมต้องการจะเพิ่มรายการ เพิ่มไม่ได้ครับ - -" เช่น มันมีแค่บรรทัดเดียว แต่เมื่อผมเลือกเสร็จแล้วผมก็ไปคลิกที่ตารางต่อไป
3 @R14566
ไม่เข้าใจครับ อ่านไม่รู้เรื่องเลย อธิบายให้ละเอียดกว่านี้ครับ อย่าอธิบายสั้น อย่างที่ผมเขียนให้คุณดูข้างบนนั่น ผมก็ใช้เวลาเป็นชั่วโมงกว่าจะเขียนเสร็จ คุณเขียนเสร็จแล้ว คุณลองนึกว่าคุณเป็นคนอ่านที่ไม่ได้รู้เรื่องอะไรของระบบคุณเลย ทั้งยังไม่เห็นหน้าจออะไรด้วย อ่านแล้วรู้เรื่องหรือไม่ ถ้าคิดว่าขาดตกบกพร่องอะไรไป ก็ขัดเกลาประโยคเสียใหม่ครับ
4 @R14575
อ๋อขอโทษครับงั้นเอาไหม่ คือผมอยากได้ที่เป็นแบบตารางข้อมูลเลย คือสามารถเพิ่มข้อมูลได้เรื่อยๆ
ที่ผมทำตามอาจารย์สันติสุขก็เกือบทำได้ตามที่ผมต้องการแล้ว แต่ติดที่มันไม่สามารถเพิ่มข้อมูลได้มากกว่า 1 record
5 @R14577


อธิบายเพิ่มเติมนะครับ คือผมได้สร้างโค้ดทั้งหมดที่อาจารย์สันติสุขให้มาไว้ใน form ชื่อ Product แล้วปรับให้เป็นมุมมองเริ่มต้นเป็น datasheet แล้วสร้าง from main แล้วดึง form Product มาใส่ใน main ครับ แต่ปัญหาคือมันเพิ่ม record ดังที่ผมวงไว้ไม่ได้ครับ เช่น ผมเลือก samsung แล้วผมต้องการจะเพิ่ม sony อีกผมก็เ้พิ่มไม่ได้ อีกย่างครับ มันบันทึกไม่ได้
6 @R14581
โค้ดของผมจะกันการบันทึกก็เฉพาะไม่ได้ป้อนให้ครบทั้ง PName, PS และ PW เท่านั้นครับ ไม่ได้มีส่วนไหนที่จะกันให้เพิ่มเรคอร์ดไม่ได้ ลองเช็คดูที่ Allow Addition property ของฟอร์มครับว่าเป็น Yes แล้วหรือยัง    หรือไม่ก็ฟอร์มของคุณไม่ได้ผูกกับเทเบิล Table1 แต่เพียงอย่างเดียว (Record Source property ของฟอร์มไม่ได้เป็นชื่อเทเบิล) อาจไปผูกกับคิวรี่ที่นำเอาหลายๆเทเบิลมา join รวมกัน ซึ่งสาเหตุหลังนี้ อาจทำให้แก้ไขเรคอร์ดไม่ได้ หรือไม่ได้ทั้งแก้ไขและทั้งเพิ่มเรคอร์ดก็เป็นไปได้

อีกอย่าง... คอลัมน์ "รุ่น" และ "จอ" คือ PS และ PW ใช่ไหม ทำไมไม่เป็นคอมโบบ็อกซ์อย่างที่ผมบอกไป เพราะอะไร
7 @R14584
ขอโทษนะครับผมยังทำให้มันเพิ่ม record ไม่เป็นเลย รบกวนชี้แนะด้วยครับ

ตอนแรกผมทำ Combo ทั้ง ชื่อสินค้า รุ่น และจอ แต่เปลี่ยน มุมมองเริ่มต้นเป็น datasheet มันเลยมองเป็นแบบนั้น แต่ถ้าเลือกที่คอลัมน์ รุ่น หรือ จอ มันก็จะกลายเป็น combo ครับ
8 @R14586
ตกลงที่ผมบอกสาเหตุที่อาจเป็นไปได้ที่ทำให้มันแก้ไข/เพิ่มเรคอร์ดไม่ได้ คุณได้ตรวจหรือยัง เป็นอย่างไรบ้าง เพราะปกติถ้าฟอร์มผูกกับเทเบิลเดียว ก็จะแก้ไข/เพิ่มเรคอร์ดได้อยู่แล้ว
9 @R14587
คือปัญหาตอนนี้ผมใช้ ms.office 2007 ภาษาไทยอยู่ซึ่งอาจจะเซ็ตไม่เหมือนอาจารย์เพราะบางอย่างผมแปลผิด แต่ผมคิดว่าผมก็น่าจะทำถูกนะครับ ไม่ทราบว่าผมจะส่งไฟล์ให้ทางอาจารย์ตรวจได้ไหมครับ
10 @R14588
ผมไม่มี 2007 ครับ
11 @R14589
แปลงมาเป็น Access 2003 นามสกุล .mdb แล้วส่งมาที่ accboard@gmail.com แล้วกัน
12 @R14590
ส่งไปแล้วนะครับ ขอบคุณครับ
13 @R14591
ไม่เห็นมีเมล์นะครับ
14 @R14592
เออยู่ใน junk mail หรือป่าวครับ เพราะผมส่งไปแล้ว งั้นผมส่งใหม่แล้วกันนะครับ
15 @R14593
ยังไม่เห็นมีครับ accboard@gmail.com รหัสผ่าน accgmail ครับ เข้า account นี้ไปแล้วเขียนเมล์ในนั้นเลยแล้วกัน
16 @R14594
ไม่มีจริงด้วย ผมใช้ hotmail ส่ง 2 ครั้งแล้ว copy ชื่อเมล์ด้วย แต่ผมใช้เมลล์อาจารย์ส่งหาอาจารแล้วครับ รับรองมีชัวครับ ขอบคุณครับ

ขออนุญาติเปลี่ยนแปลงข้อมูลจากคำถามเดิมนะครับ เช่น ps เปลี่ยนเป็น Pmodel และ pw เปลี่ยนเป็น Psize
17 @R14595
ดูแล้วครับ แก้ให้แล้ว หลักๆก็ไม่มีอะไรนอกจากคุณไม่ได้กำหนดตามที่ผมบอกเท่านั้นเอง
- RecordSource ของฟอร์ม ไม่ได้กำหนด
- ControlSource ของทั้ง 3 คอมโบบ็อกซ์ ไม่ได้กำหนด
- Limi To List property ไม่ได้เป็น True
- บรรทัด select size from ... ก็ผิด ที่ถูกต้องเป็น select Psize from ...

ส่วนที่ผมเพิ่มเติมให้เพื่อให้ถูกต้องยิ่งขค้นก็คือ
- จาก select .... from ...   เปลี่ยนเป็น select distinct ... from ...
- ผมเพิ่มคำสั่ง me.cbo...dropdown เข้าไปในโค้ดเพื่อให้คอมโบบ็อกซ์แสดงลิสท์ให้เลยเมื่อเราไปยังคอมโบบ็อกซ์นั้นๆ

กลับไปดูไฟล์ในเมล์ได้ครับ ผมเขียนไว้แล้ว

ปล. ถ้าติดตั้ง Access ให้แสดงเมนูทุกอย่างเป็นภาษาอังกฤษได้จะดีครับ เพราะภาษาไทยอ่านไปก็ไม่ค่อยจะรู้เรื่อง มันเป็นเทคโนโลยี่ของฝรั่ง คำจำนวนมากไม่มีคำแปลในไทย คุณจะคุยกับคนอื่นๆเกี่ยวกับ Access ไม่รู้เรื่องนะครับ
18 @R14596
ขอบคุณครับอาจารย์ที่ช่วยแก้ให้ แต่ยังเพิ่ม record ไม่ได้เลยครับ มันมีแค่ record เดียว
19 @R14597
ขอโทษครับอาจารย์ผม ดูผิดอันไป ขอบคุณนะครับที่ให้การช่วยเหลือ
20 @R14598
ที่เครื่องผมแก้ไขได้นะ ทั้งที่เปิดผ่านฟอร์ม Main และ ฟอร์ม Product ก็ใช้ได้
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3304s