แสดงกระทู้

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 - PNR

หน้า: 1 ... 48 49 50 [51] 52
801
จาก Combobox แสดง ID / รายการ

ถ้าต้องการให้ textbox แสดงรายการให้กำหนด สถานะ AfterUpdate เป็นแบบนี้ครับ

Private Sub ComboboxName_AfterUpdate()
Me.TextboxName = Me.ComboboxName.Column(1)
End Sub


รายการก็จะแสดงที่ Textbox แทนที่ ID แล้วครับ

802
ไม่รู้ว่าแบบนี้หรือเปล่านะครับ
ถ้าเป็นการอ้างอิงวันที่ไปใส่ ลองวิธีนี้ดูครับ


ผมสมมุติ textbox ชื่อตามในรูปนะครับ
โค๊ด: [Select]
Private Sub DtDateBorrow1_AfterUpdate()
If Not IsNull(Me.DtDateBorrow1) Then
Me.DtDateBorrowBack = Me.DtDateBorrow1
Me.DtDateBorrowOut = Me.DtDateBorrow1
End If
End Sub

803
Zone มีทั้ง ตัวเลข และ ตัวอักษร ลองใช้วิธีนี้ดูครับ

804
น่าจะแบบนี้ครับ

805
น่าจะเพิ่มผิดตรงไหนสักจุดครับ Inbox มาครับ

ID กำหนด DATA TYPE เป็น text หรือเปล่าครับ
ปกติตรงนี้ผมกำหนดเป็น Number ครับ

ถ้าเป็น Text ใช้ Cint แปลงเป็น ตัวเลขก่อนคับ

ถ้าข้อมูล ID NO เป็น Text ลองใช้การแปลง Text เป็นตัวเลข ก่อน โดยผมสร้าง QryTable1 ขึ้นมาแสดงข้อมูลของ Table1 นะครับ

ตัวอย่างด้านล่าง

806
ใช้การ Running Number Query มาช่วยก็ได้คับ
วิธีทำ 1 สร้างคิวรี่ชื่อ QryID ใส่โค้ดนี้
โค๊ด: [Select]
SELECT (Select count(*) From Table1 as a Where a.ID <= Table1.ID) AS [Running No], Table1.ID AS RID
FROM Table1;
2.ที่ RecordSource ของ Report ใส่โค้ดนี้เข้าไป
โค๊ด: [Select]
SELECT Table1.ID, Table1.[Product Name], Table1.Quantity, QryID.[Running No], *
FROM Table1 INNER JOIN QryID ON Table1.ID = QryID.RID;


3.สร้าง Textbox ขึ้นมาอีกอัน เอา Field RunningNo ใส่เข้าไปแล้วซ่อน textbox นี้ไว้นะครับ


4.ที่ textbox txtID ใส่โค้ดเป็นแบบนี้
โค๊ด: [Select]
=IIf([Running No] Mod 40=0,40,[Running No] Mod 40)
เท่านี้ก็จะรันลำดับอย่างถูกต้องแล้วคับ   :grin:

807
Union all มีแค่ 2 อันครับ
ส่วนเครื่องหมาย ; มีอันเดียวคืออันล่างสุด
การกำหนดชื่อของ Field หรือตารางถ้าชื่อมีช่องว่าง ให้ใส่เครื่องหมาย [ ] ตามที่อาจารย์สันติสุขบอกครับ

โค๊ด: [Select]
select Status,Cname,Surname,Member,Announce from [Buddist Association๗๖-๕๐]
Union all
select Status,Cname,Surname,Member,Announce from [Buddist Association๕๑-๖๐]
Union all
select Status,Cname,Surname,Member,Announce from [Buddist Association๖๑]
Order By Member,Announce;

808
ต้องการสั่ง lock หรือ ปิดการใช้งาน textbox ไหน ก็ลองใส่โค้ดตามนี้ดูครับ

Me.Textbox.Locked = True  หรือ False  'ล๊อกไม่ให้แก้ไขข้อมูลใน textbox แต่ Cursor ยัง Setfocus ได้
Me.Textbox.Enabled = False หรือ True  'ปิดการใช้งาน textbox และ Cursor ไม่สามารถ Setfocus ได้

ปกติผมจะสั่งทั้ง 2 อย่างเลยครับในกรณีต้องการปิด เพราะ textbox จะมี background สีเดิมไม่ใช่สีน้ำตาล ลองไปปรับใช้ดูครับ  :grin: :grin:

809
อ้างถึง
ไปวางที่ before update ฟอร์มหลัก
  ไม่ใช่ครับ ไปวางที่ subform ครับวางฟอร์มหลักมันจะถามกวนใจแน่นอน ความต้องการของเราคือ SubForm ครับ กดมุมมองออกแบบของ Subform เลือก Event Before Update ของSubForm ครับ

หรือถ้าต้องการตรวจสอบว่าถ้าป้อนข้อมูลที่ textbox ลำดับสุดท้ายหรือยัง
ก็เช็ค ได้เหมือนกันเช่น
Private Sub Form_BeforeUpdate(Cancel As Integer)
IF isnull(Me.txtLasttextbox) then
MsgBox "กรุณากรอกข้อมูลให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = true
Else
Cancel = False
End If
End Sub

หรือ ถ้าต้องการเช็คว่าทุก Control ป้อนครบแล้วหรือยัง ถ้า Control ไหนไม่ได้กรอกก็จะแจ้งเตือนให้ไปกรอก Control นั้นๆ ครับ

Private Sub Form_BeforeUpdate(Cancel As Integer)
IF isnull(Me.textbox1) then
MsgBox "กรุณากรอกข้อมูล textbox1 ให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = True
elseif isnull(Me.textbox2) then
MsgBox "กรุณากรอกข้อมูลtextbox2 ให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = True
elseif isnull(Me.textbox3) then
MsgBox "กรุณากรอกข้อมูลtextbox3 ให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = True
elseif isnull(.........ฯลฯ.......) then
MsgBox "กรุณากรอกข้อมูลtextboxฯลฯ ให้ครบถ้วนก่อน!!!", vbInformation, "แจ้งเตือน"
Cancel = True
Else
Cancel = False
End If
End Sub

โค้ดนี้วางใน Subform นะครับท่าน

810
ผมมีฟอร์มบันทึกขาย โดยมีส่วนที่เป็น sub-forms มักจะเผลอบ่อยๆๆ save record ขณะป้อนข้อมูล โดยที่บันทึกรายการสินค้าใน sub-forms ไม่เสร็จ  ป้องกันอย่างไรดีครับ
ใช้ Event BeforeUpdate ก็ได้คับ
โดยสร้าง msgbox สอบถามว่าต้องการบันทึกหรือไม่
ตัวอย่างนะครับ เมื่อกดปุ่มบันทึก
โค๊ด: [Select]
Private Sub Command3_Click() 'ปุ่มบันทึกไว้บนฟอร์มหลัก
On Error Resume Next
DoCmd.RunCommand acCmdSaveRecord
End Sub

ก่อนบันทึกจะผ่าน Event Before ครับ เอาโค้ดนี้วางไว้ที่ Subform

โค๊ด: [Select]
Private Sub Form_BeforeUpdate(Cancel As Integer)
If MsgBox("ต้องการบันทึกหรือไม่", vbYesNo + vbQuestion, "สอบถาม") = vbYes Then
Cancel = False
Else
Cancel = True
End If
End Sub

ถ้าตอบ Yes ก็จะบันทึก
ถ้าตอบ No ก็จะละเว้นการบันทึกไว้ก่อน จนกว่าจะตอบ Yes ครับ

811
สมมุติ Field ที่เก็บคำนำหน้าชื่อว่า TitleName
ใช้ Replace Function
โค๊ด: [Select]
Replace([TitleName],".","")


ทีนี้ในคำนำหน้าชื่อมา . กี่อันมันลบหมดเลยคับ

812
อ้างถึง
ทุกการเปลี่ยนแปลงของเนื้อที่ว่าเปลี่ยนไปเท่าไหร่ เพาะอะไรจะสร้างตารางแบบไหนครับ


สร้าง Field เพิ่ม กำหนดเป็น TimeStamp เพื่อเก็บ วันที่เวลา ที่เราปรับปรุง เพราะสามารถใช้ดูวันที่และเวลาที่เพิ่มเติมแก้ไข ตัวอย่างการกำหนด


ตารางที่เราเก็บ ข้อมูลแปลงนา ตรง  Field ID และ ตรงจำนวนไร่ น่าจะต้องสร้างตารางเพิ่มเชื่อมความสัมพันธ์กับ ตารางใหม่ อย่างน้อยต้องมี Field ID / Area(Rai) / TimeStamp  โดย Field ID สามารถใส่ค่าซ้ำกันได้สาเหตุที่สร้างแยกออกมา เพราะในแปลงนา 1 แปลง หรือ 1 FieldID สามารถบันทึกข้อมูล จำนวนไร่ หลายๆครั้ง ตามจำนวนความเปลี่ยนแปลงของแปลงนาผืนนั้นครับ (ถ้าสร้างแบบนี้อยู่แล้วก็ไม่เป็นไรครับ)

และการแยกรายปี / รายเดือน ผมว่าสามารถดูจาก TimeStamp ได้เลยหรือไม่ เพราะเวลาเพิ่มจำนวนไร่ วันที่เวลาจะแสดงขึ้นมาอัตโนมัติ สามารถนำไปใช้ระบุปีของแปลงนาได้เลยครับ สามารถใช้ Format(TimeStamp,"YYYY") เพื่อให้แสดงเฉพาะปีครับ

ส่วนการสร้างคิวรี่ ก็ไม่ยากครับ ใช้ Group By FarmerID / FieldID / TimeStamp / และแสดงจำนวนไร่ ครับ
 

813
ห้อง MS Access / : สอบถามเรื่อง relationships
« เมื่อ: 24 ก.ค. 62 , 14:37:06 »

การรวม(Join) มีหลายแบบ แล้วแต่การนำไปใช้คับเช่น

การรวมภายใน: เฉพาะข้อมูลที่เกี่ยวข้องจากทั้งสองตารางที่รวม เช่นต้องการให้แสดงเฉพาะรายการ CustomerID ที่ตรงกันระหว่าง 2 ตาราง  ปกติน่าจะใช้แบบนี้อยู่ใช่ไหมคับ

การรวมภายนอก: ข้อมูลที่เกี่ยวข้องทั้งหมดรวมกันอย่างถูกต้อง รวมทั้งระเบียนที่เหลือทั้งหมดจากตารางหนึ่ง  เช่นมีลูกค้าบริษัทใดบ้างใน ตาราง Customer ที่ยังไม่เคยสั่งซื้อสินค้าเลย เราสามารถเปลี่ยนประเภทความสัมพันธ์เป็นประเภทที่ 2 เพื่อดูข้อมูลของอีกตารางซึ่งมี Customer ที่มากกว่าจะนำมาแสดงทั้งหมด

ปกติเราจะกำหนด Criteria = null เพื่อดูว่า Customer รายการไหนยังไม่มีในอีกตารางหนึ่งเป็นต้นคับ


814
ลองแปลง BIGINT เป็น INT ดูครับว่าได้ไหม  แบบที่อาจารย์ pizza_p แนะนำในกระทู้ก่อนหน้านี้


หรืออาจจะเกิดจากการแสดงผล Primary Key ครับ จากโพสนี้
Notoriously bad for PKs are all floating point numeric types. They may be rounded differently on the server and in Access. If Access uses a floating point value to query a single record from the server, there will be no results because the actual value on the server is different. This is usually the cause for the #Deleted displayed in table cells.

Good data types for Primary keys are integer types (max int32) and string/varchar types (max length 255 characters).

Dates and fixed-decimal-point data types may be causing problems as well. That is mainly dependent on the actual backend database system and the used ODBC Driver. - I have no experience in that regard with DB2.

หรือใช้ Query แปลง Cint , Cstr ก่อนจัดเก็บ หรือก่อนแสดงบนฟอร์ม
ถ้าเป็น access version 2016 น่าจะแก้ใขปัญหานี้ให้แล้วครับ

รออาจารย์ท่านอื่นมาช่วยเสริมคับ  :cool: :cool:

815
ห้อง MS Access / : สอบถามเรื่องคิวรี่
« เมื่อ: 23 ก.ค. 62 , 10:06:17 »
ลองดูนะครับ ไม่รู้แบบที่ต้องการไหม

ขั้นตอนที่ 1 สร้าง Union Query ใส่
โค๊ด: [Select]
select วันที่,รหัสสินค้า,ชื่อสินค้า,จำนวน, 'ขาย' as ประเภท from ตารางขาย
Union
select วันที่,รหัสสินค้า,ชื่อสินค้า,จำนวน, 'ปรับปรุง' from ตารางปรับปรุง
Union
select วันที่,รหัสสินค้า,ชื่อสินค้า,จำนวน, 'รับเข้า' from ตารางรับเข้า;

คิวรี่แรกผมตั้งชื่อ Query ว่า Query1 นะครับ

ขั้นตอนที่ 2 สร้างคิวรี่เพิ่มอีก 1 อันใส่โค้ดนี้เข้าไปคับ แล้วรันดู
โค๊ด: [Select]
SELECT Query1.[วันที่], Query1.[รหัสสินค้า], Query1.[ชื่อสินค้า], Sum(IIf([ประเภท]="ขาย",[จำนวน])) AS [จำนวน(ขาย)], Sum(IIf([ประเภท]="รับเข้า",[จำนวน])) AS [จำนวน(รับเข้า)], Sum(IIf([ประเภท]="ปรับปรุง",[จำนวน])) AS [จำนวน(ปรับปรุง)]
FROM Query1
GROUP BY Query1.[วันที่], Query1.[รหัสสินค้า], Query1.[ชื่อสินค้า];

816
รบกวนสอบถามอาจารย์ทุกท่านคะ

     ต้องการสร้าง ComboBox ไว้สำหรับเลือกดูข้อมูล

เช่น ข้อมูลมีปี 2018 และ 2019  เราก็สร้าง  ComboBox ที่มีรายการ 2018 2019 ตามลำดับ เพื่อเลือกดูข้อมูลเฉพาะปีนั้นๆ

แต่... ที่นี้ ต้องการเพิ่ม List ใน ComboBox ว่า ทั้งหมด เพื่อทำการแสดงข้อมูลทั้งหมดทุกปีในหน้านั้นๆ

สามารถทำตามเงื่อนไขดังกล่าวนี้ได้หรือไม่คะ

รบกวนด้วยนะคะ

ขอบคุณคะ

น่าจะทำได้นะครับ เราใช้ UNION QUERY เข้ามาช่วยในการ เพิ่ม LIST "ทั้งหมด" รวมเข้ากับ LIST ปีที่เรากำหนด

ผมสมมุติตารางดังนี้
ตารางชื่อ Table1
ฟิลล์วันที่ชื่อ Dates

มีฟอร์มที่ค้นหาชื่อ frmSearch กำหนดแบบ continuous form
มีคอมโบบ๊อก ชื่อ Combo0


ขั้นตอนที่ 1 กำหนด RowSource ของ Combo0 ดังนี้
โค๊ด: [Select]
SELECT "ทั้งหมด" AS SelectYears FROM table1 AS T1   UNION SELECT format([Dates],"YYYY")  AS SelectYears FROM Table1 AS T1
ORDER BY SelectYears;

กำหนด คอลัมน์ที่ผูกไว้ = 1
จำนวนคอลัมน์ = 1


ขั้นตอนที่ 2 กำหนด Events AfterUpdate ของ Combo0
ใส่โค้ดนี้เข้าไป
โค๊ด: [Select]
Private Sub Combo0_AfterUpdate()
If Me.Combo0 = "ทั้งหมด" Then
Me.Filter = "[Dates] Like '*" & "*" & "*'"
Me.FilterOn = True
Else
Me.Filter = "[Dates] Like '*" & [Forms]![frmsearch]![Combo0] & "*'"
Me.FilterOn = True
End If
End Sub

หน้า: 1 ... 48 49 50 [51] 52