แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - SakDa

หน้า: 1 2 3 [4] 5 6 7
49
คำตอบที่แล้วผมไม่ได้มีเวลาไล่ตามนิพจน์หรือสูตรจำนวนมากมาตรวจสอบนะครับ ถ้าที่คุณตั้งนั้นถูกอยู่แล้ว สุดท้ายแล้วก็หนีไม่พ้นค่าและประเภทข้อมูลเท่านั้นเอง คุณลองค่อยๆตรวจสอบไปทีละนิพจน์ดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

50
ลองนำไปทดสอบดูนะครับ

ขั้นตอนแรกสร้าง Module ขึ้นมา แล้วเอาโค้ดนี้ไปวาง
โค๊ด: [Select]
Function InsertSpace(strInput As String, n As Long) As String
Dim strTemp As String
Dim lngIndex As Long

For lngIndex = 1 To Len(strInput) Step n
strTemp = strTemp & " " & Mid$(strInput, lngIndex, n) 'ตรง " "   อยากให้กว้างกว่านี้อีกก็กด spacebar เพิ่มอีกได้
Next lngIndex
InsertSpace = Mid$(strTemp, 2)
End Function

ขั้นที่ 2 เวลาจะเรียกใช้กับ Field ไหน ยกตัวอย่าง ฟิวส์ POSID มีสตริงคือ 123456
         ให้ใส่ ประโยคนี้เข้าไปใน ControlSource ของ textbox ในรายงานได้เลย
         เช่น
       
โค๊ด: [Select]
=InsertSpace([POSID],1) '1 คือให้เว้นช่องทุก 1 ตัวอักษรนะครับ ถ้าอยากให้ แบ่งทุก 3 ตัวอักษรใส่เลข 3 แทนได้
       ที่รายงาน textbox ดังกล่างจะแสดงเป็น 1 2 3 4 5 6
       ไม่รู้ว่าอยากได้แบบนี้หรือไม่ ? ถ้าไม่ใช่อธิบายเพิ่มเติมมาอีกหน่อยนะครับผมยังไม่ค่อยเข้าใจโจทย์  :sweat: :sweat:
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

51
แก้โค้ดตรงนี้ครับ จะบันทึกได้ปกติ

โค๊ด: [Select]
Private Sub BtnSave_Enter() 'ปกติเมื่อแสกน Barcode แล้วเครื่องจะมีระบบ Enter อัตโนมัติ คำสั่งนี้จะทำงานเองทันที คือบันทึกลงตาราง
Dim strBarcode As String
On Error Resume Next
strBarcode = Forms!FrmStart_Working!Barcode
strBarcode = Replace(strBarcode, " ", "")
Barcode = strBarcode
If IsNull(DLookup("EmpName", "tblEmployee", "EmpID='" & Forms!FrmStart_Working!Barcode & "'")) Then
Me.Lb_Status.Caption = "ไม่พบข้อมูลพนักงานคนนี้กรุณาลงทะเบียนก่อน"
Me.Barcode.SetFocus
Me.Undo
Else
Me.txtTimeIn = Format(Now(), "HH:mm:ss AM/PM")
Me.txtNameEmployee = DLookup("EmpName", "tblEmployee", "EmpID='" & Forms!FrmStart_Working!Barcode & "'")
Call SaveRecord
Me.Lb_Status.Caption = "บันทึกข้อมูลเสร็จเรียบร้อย"
Me.Barcode.SetFocus
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

52




อยากให้ค่า Error หายไปครับ
ตรง brithday จะมีค่าว่าง ซึ่งต้องการเว้นว่างไว้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

53
ผมมีข้อมูลอยู่ 70 เรคคอด
เอามาทำ รายงาน โดยที่ในแต่ละหน้า ต้องการเพียงแค่ 15 เรคคอด
แล้วตัดขึ้นหน้าใหม่ โดยแต่ละหน้า มีบรรทัด Sum ด้วย
ผมต้องตั้งค่าตรงไหน หรือ ทำอย่างไรบ้างครับ
ขอบคุณครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

54
สมมุติฟิลด์เลขลำดับที่ชื่อ R และมี data type เป็น Integer หรือ Long นะครับ

SQL = "update M4_sobgen_sci T0 set R = dcount('*', 'M4_sobgen_sci', 'room_sob = ''' & T0.room_sob & ''' and number_sob < ''' & T0.number_sob & '''')"
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

55
สมมุติเทเบิลชื่อ T และ data type ของฟิลด์ห้องสอบเป็น Numeric

Dim SQL as String

SQL = "update T as T0 set room_sob = int(dcount(""*"", ""T"", ""number_sob < "" & T0.number_sob)/40)+1"
CurrentDB.Execute SQL, dbFailOnError
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

56
สมมติว่า มีฟิลด์ อยู่ 2 ฟิลด์ ชื่อ  number_sob  (เลขประจำตัวสอบ)  และ  room_sob  (ห้องสอบ)
เลขประจำตัวสอบ จะเรียงจากน้อยไปหามากเช่น   21001  21002  ไปเรื่อยๆ เช่นถึง  21900     
- ต้องการสร้างปุ่ม โดยการเขียนโค๊ด  ให้ใส่หมายเลขห้องสอบ  40 คนแรก (เลขประจำตัวสอบจากน้อยไปหามาก 40 หมายเลขแรก) เป็นห้องสอบที่ 1 (ใส่เลข 1 ในฟิลด์ room_sob)  ต่อไป คนที่ 41-80  ให้ เขียนเลข 2 ในฟิลด์  room_sob   คนที่ 81-120  ให้ เขียนเลข 3 ในฟิลด์  room_sob  ทำเช่นนี้ไปเรื่อยๆ ครับ
-  สรุปคือ 40 คนแรก ให้เขียนเลข  1 ในฟิลด์  room_sob  , 40  คนต่อไป  ให้เขียนเลข  2 ในฟิลด์  room_sob ,  40  คนต่อไป  ให้เขียนเลข  3 ในฟิลด์  room_sob , ทำแบบนี้ไปเรื่อยๆ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

57
Excel มีให้โหลดเป็นโค้ดหรืออะไรครับ อยู่ที่เวปไหน จะได้ดูว่ามันเป็น VBA อยู่แล้วหรือเปล่า
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

58
ครับ ต้องตั้งค่าตรงนี้เป็นไทย หรือ อังกฤษ ครับ



ตัวอย่างแปลงแล้วด้านล่างครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

59
อาจสร้าง 2 เทเบิลเพื่อเก็บข้อมูลชั่วคราวสำหรับ ที่ดินที่เลือกมาทำธุรกรรม และสำหรับ ป้อนที่ดินที่เกิดใหม่หลังจากธุรกรรม แล้วพอคลิก สร้างธุรกรรม ก็เอาข้อมูลเหล่านี้ไปสร้างลงเทเบิลจริงอีกที ส่วนการเขียนโค้ดสำหรับสร้างเรคอร์ด กรณีนี้มีหลายเรคอร์ดและหลายฟิลด์ แนะนำใช้ .AddNew, .Edit และ .Update สำหรับ Recordset ต่างๆที่เกี่ยวข้อง จะดูสะอาดตาดีกว่าเขียน SQL INSERT/UPDATE statement ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

60
ห้อง MS Access / : Record Source
« เมื่อ: 26 ก.พ. 63 , 11:42:02 »
ก่อนอื่นถ้าน้องอยากเริ่มสร้างโปรแกรม สิ่งเริ่มต้นที่ควรศึกษาก่อนคือ
1.ER Diagram

2.ศึกษาความสัมพันธ์ของตาราง (RelationShip)

3.ศึกษาการทำ normalization เพื่อให้ได้ข้อมูลที่ถูกต้องไม่ซ้ำซ้อนกัน

รวม ทุกขั้นตอนจากลิ้งนี้ เครดิตอาจารย์ TTT
https://www.youtube.com/watch?v=HuztS7t9hZc link

การสร้างโปรแกรม ต้องกำหนดเป้าหมาย และทำเป็นขั้นตอนครับเช่น
1.กำหนดวัตถุประสงค์ของฐานข้อมูลว่าเราจะสร้างเพื่ออะไร (ศึกษา ER Diagram)
2.ค้นหาและจัดระเบียบข้อมูล ที่คุณอาจต้องการบันทึกไว้ในฐานข้อมูล เช่น ชื่อผลิตภัณฑ์และหมายเลขคำสั่งซื้อ ชนิดข้อมูลเช่น เป็น อักษร วันที่ ตัวเลข อื่นๆ
3.แบ่งข้อมูลเป็นตาราง   
4.เปลี่ยนรายการข้อมูลเป็นคอลัมน์
5.ระบุคีย์หลัก  เลือกคีย์หลักของแต่ละตาราง คีย์หลักเป็นคอลัมน์ที่ใช้ระบุแถวแต่ละแถวแบบไม่ซ้ำกัน ตัวอย่างอาจเป็น ID ผลิตภัณฑ์หรือ ID คำสั่งซื้อ
6.ตั้งค่าความสัมพันธ์ตาราง   (ศึกษาความสัมพันธ์ของตาราง (RelationShip))
7.จำกัดการออกแบบของคุณ  สร้างตารางแล้วเพิ่มระเบียนข้อมูลตัวอย่างบางระเบียน ดูว่าคุณได้รับผลลัพธ์ที่คุณต้องการจากตารางของคุณหรือไม่ ปรับเปลี่ยนการออกแบบตามจำเป็น (การทำ normalization)


อ้างถึง
ต้องการเชื่อมเพื่อที่จะให้สามารถรับข้อมูลได้จาก frm_car เป็นหลักไปเพิ่มข้อมูลที่ tb_car แล้วถึงจะไปเพิ่มข้อมูลให้ตารางอื่นๆค่ะ
จากที่ตอบมาคือ tb_car คือ ตารางหลัก มีรายการต่างๆ เป็นส่วนประกอบ ของตารางนี้ ซึ่งจริงๆแล้ว
อ้างถึง
ถึงจะไปเพิ่มข้อมูลให้ตารางอื่นๆค่ะ
ตารางอื่นๆนั้น ควรเพิ่มก่อนด้วยซ้ำไปเพราะเป็นรายละเอียด ที่จะมาใส่ในตารางหลักครับ

ซึ่งการกำหนด Gen , Size , offten และ Type นั้น เปรียบเสมือน การแยกส่วนต่างๆ มาเก็บไว้รวมกัน เท่านั้น ไว้เป็นตัวเลือก ในการระบุ รายละเอียดของรถ ในตาราง tbl_Car ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

61


ที่ออกแบบดูประมาณนี้ถูกต้องไหมครับ

ตัวอย่างการแยกที่ดินออกเป็น 2 แปลง

PK  รหัสที่ดิน (ai) + ลำดับ(ค่าเริ่มต้น 0 ) หากเป็นที่ดินที่เพิ่มเข้าในระบบใหม่ จะมีค่าลำดับเป็น 0
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

62
เป็นฟอร์มหลักแล้วเรียกตาราง tblAssign มาเพื่อทำการแก้ไขข้อมูลโดยตรง ในตารางมีรหัสงานอยู่เป็นจำนวนมาก อยากเช็คเวลาเรียน เพราะเวลาเรียนเช็คทุกวันและทุกคาบ ขี้เกียจเลื่อนเมาส์ไปหารหัสงานตัวนี้  เลยอยากจะให้มันแสดงข้อมูลชื่อฟิล์ด ่jobcode-รหัสงาน jobcode นี้มีค่าเท่ากับ class เวลาเราคลิกเรียกใช้ฟอร์มนี้ อยากให้มันกรองค่าและแสดงเฉพาะ ่jobcode = "class" ครับ
ทำได้หลายแบบมากครับ
แบบที่ 1 ใช้การกำหนด โดยใช้ FormLoad แบบที่คุณอยากทำ


เราใช้การกำหนด RecordSource แบบ Fix เงื่อนไข
ตรงข้อมูลแหล่งระเบียน เว้นว่างๆ ไว้นะครับ แล้วใส่โค้ดนี้เข้าไปแทน

Private Sub Form_Load()
Dim sql As String
sql = "SELECT tblAssign.* FROM tblAssign WHERE (((tblAssign.jobcode)='class'));"
Me.RecordSource = sql
End Sub

แบบที่ 2 กำหนด Criteria ไว้เลยว่าเอาเฉพาะ Class แบบนี้ไม่ต้องใช้ Event Form_Load



แบบที่ 3 ใช้ Combobox ในการเลือก Jobcode ที่ต้องการ อันนี้ผมคิดเผื่อไว้ในอนาคตถ้าอยาก แก้ไขตัวอื่นด้วย
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

63
ที่ดินเกิดธุรกรรม ทำให้ข้อมูลของที่ดินรหัสนั้นๆมีการเปลี่ยนแปลง และเนื่องจากต้องการเก็บประวัติ ดังนั้นรหัสของที่ดิน (FL_CODE) อย่างเดียว นำไปเป็น primary key ไม่ได้ ก็ต้องมีอีกฟิลด์ที่เป็นลำดับแสดงสถานะภาพของที่ดินรหัสนั้นร่วมอยู่ด้วย (ผมไม่แน่ใจว่าในนี้คือ FL_ID หรือเปล่า) เช่น F100 ลำดับที่ 1 เมื่อมีการเปลี่ยนแปลงอะไรไปก็จะเป็น F100 ลำดับที่ 2

ต่อไปที่ดินมีเกิดธุรกรรมคือ การแบ่ง ทำให้เกิดความสัมพันธ์ one-to-many ระหว่าง รหัสที่ดิน+ลำดับสถานะภาพนั้นๆ กับ รหัสที่ดิน(รหัสเดิมและ/หรือรหัสใหม่)+ลำดับสถานะภาพใหม่  ส่วนธุรกรรม การรวม ที่ดินก็ทำให้เกิดความสัมพันธ์ many-to-one  ระหว่าง รหัสที่ดิน+ลำดับสถานะภาพนั้นๆ กับ รหัสที่ดิน(รหัสเดิมและ/หรือรหัสใหม่)+ลำดับสถานะภาพใหม่  จะสังเกตเห็นว่ามันเป็นความสัมพันธ์แบบ many-to-many ระหว่างเทเบิล Tbl_Farmland กับตัวมันเอง ฟังดูแล้วอาจจะแปลกๆเพราะปกติจะเห็นแต่ความสัมพันธ์ระหว่างเทเบิลที่แตกต่างกัน แต่ความสัมพันธ์แบบนี้ก็มีครับ และเป็นกฏเกณฑ์เลยว่าเมื่อมี many-to-many ก็จะต้องสร้างเทเบิลกลางขึ้นมาใหม่อีกตัว และมีความสัมพันธ์กับเทเบิลเดิมแบบ many-to-one เทเบิลใหม่นี้คือเทเบิล "ความสัมพันธ์ของที่ดินจากธุรกรรม" ซึ่งน่าจะประกอบไปด้วย 6 ฟิลด์เป็นอย่างน้อย (สามารถใช้ทั้ง 6 ฟิลด์รวมเป็น primary key ได้) คือ
   - เลขที่ธุรกรรม
   - รหัสที่ดินก่อนธุรกรรม
   - ลำดับสถานะภาพของที่ดินในฟิลด์ที่ 2
   - รหัสที่ดินหลังธุรกรรม
   - ลำดับสถานะภาพของที่ดินในฟิลด์ที่ 4
   - ประเภทธุรกรรม (แบ่ง,รวม,โอน)
จากเทเบิลนี้ ก็สามารถเช็คได้ว่าที่ดินรหัสนั้นๆมีธุรกรรมอะไรเกิดขึ้น แต่ต้องเช็คทั้ง 2 ขาคือเช็คในฟิลด์ที่ 2 และ 4 ด้วยครับ

ส่วนการออกแบบนี้จะไปขัดอะไรกับของเดิมที่คุณได้ออกแบบไปแล้วหรือเปล่า ต้องไปเช็คเองนะครับ ผมเพียงอธิบายตามสิ่งที่ผมคิดว่ามันควรจะเป็นเท่านั้น
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

64
อธิบายเพิ่มเติมอีกนิดครับ ผมยังงงคำถาม  :XD:
โพสต์นี้ได้รับคำขอบคุณจาก: SakDa

หน้า: 1 2 3 [4] 5 6 7