แสดงกระทู้

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 ... 47 48 49 [50]
785
ต้องการสั่ง lock หรือ ปิดการใช้งาน textbox ไหน ก็ลองใส่โค้ดตามนี้ดูครับ

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

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

786
อ้างถึง
ไปวางที่ 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 นะครับท่าน

787
ผมมีฟอร์มบันทึกขาย โดยมีส่วนที่เป็น 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 ครับ

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


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

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


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


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

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

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

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

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

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

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

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


791
ลองแปลง 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:

792
ห้อง 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.[ชื่อสินค้า];

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

     ต้องการสร้าง 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

794
แบบที่ 1
ถ้าท่านกำหนด txtGroup1A0 1 2 3 4 5 6 ....  / txtGroup1B 1 2 3 4 5 6 ...... / txtGroup2A 1 2 3 4 5 6 ... ไปแบบนี้ ใช้การกำหนดเงื่อนไขจากชื่อของตัว Control เอาก็ได้คับเช่น

โค๊ด: [Select]
Private Sub Command1_Click() 'เลือก Event ที่ต้องการครับ
    Dim ctl As Control
    For Each ctl In Me
        If ctl.ControlType = acTextBox Then
            If Left$(ctl.Name, 10) = "txtGroup1A" Then 'Left 10 เพราะต้องการเช็คตัวอักษรทางซ้าย 10 ตัวซึ่งเป็นชื่อที่เหมือนกันของกลุ่ม
                ctl.Visible = False 'หรือ ctl.Visible = true หรือจะสร้างเงื่อนไขให้กลุ่มอื่นๆด้วยก็ได้เช่นกัน
            End If
        End If
    Next ctl
End Sub

แบบที่ 2
อีกวิธีอาจจะง่ายกว่าคือการกำหนดชื่อของกลุ่มที่ Tag ของกล่องข้อความแล้วกำหนดเงือนไขการซ่อนและแสดง
ผมสมมุติ textbox 6 ตัวชื่อกลุ่ม Group1


โค๊ด: [Select]
Private Sub Command1_Click()
    Dim ctl As Control
    For Each ctl In Me
        If ctl.Tag = "Group1" Then
                ctl.Visible = False
        End If
    Next ctl

End Sub

795
ลองสร้างคิวรี่แล้ว Run SQL นี้ดูคับ
โค๊ด: [Select]
SELECT Format([วันที่],"mmm") AS เดือน
FROM Table1
ORDER BY Month([วันที่]);

796
ฟอร์มค่าใช้จ่าย(Vat) เลขอินวอย์ซ running ตามปกติ   แต่อีกฟอร์ม ค่าใช้จ่ายรวมบิล(Vat) ไม่ running ได้ใบเดียว รบกวนท่านที่เคารพ ช่วยดูหน่อยครับผิดตรงไหน

PA 2 ตัวอักษร Mid 12 Left 10
ถ้า 4 ตัวอักษร แบบ PANV Mid ต้อง 14 Left 12
แก้ไขใหม่เป็นแบบนี้ึครับ

โค๊ด: [Select]
Sub ForIsToday()
Dim strDate As String
Dim intNum As Integer, intMax As Integer
Dim strSuffix As String
strDate = "TA" & "" & (Format(Now, "yy-mm-dd"))
   If Me.voucher_e_id = "" Or IsNull(Me.voucher_e_id) Then
        If IsNull(DMax("Val(Mid([voucher_e_id],12))", "voucher_e", "Left([voucher_e_id],10) = '" & strDate & " '")) Then
            Me.voucher_e_id = strDate & "-" & "01"
            Debug.Print "1"
        Else
            intMax = DMax("Val(Mid([voucher_e_id],12))", "voucher_e", "Left([voucher_e_id],10) = '" & strDate & " '")
            intMax = intMax + 1
            Me.voucher_e_id = strDate & "-" & Format(intMax, "00")
            Debug.Print "1"
        End If
End If
End Sub

Sub ForIsOtherday()
Dim strDate As String
Dim intNum As Integer, intMax As Integer
Dim strSuffix As String
strDate = "TA" & "" & (Format(date_exp, "yy-mm-dd"))
    If Me.voucher_e_id = "" Or IsNull(Me.voucher_e_id) Then
        If IsNull(DMax("Val(Mid([voucher_e_id],12))", "voucher_e", "Left([voucher_e_id],10) = '" & strDate & " '")) Then
            Me.voucher_e_id = strDate & "-" & "01"
            Debug.Print "1"
        Else
            intMax = DMax("Val(Mid([voucher_e_id],12))", "voucher_e", "Left([voucher_e_id],10) = '" & strDate & " '")
            intMax = intMax + 1
            Me.voucher_e_id = strDate & "-" & Format(intMax, "00")
            Debug.Print "1"
        End If
End If
End Sub

797
อธิบาย ที่มาของ Field 2 3 4 ว่าคืออะไร แล้ว Field 1 คืออะไรก่อนครับ

ผมสมมุติเป็น ตารางเก็บข้อมูลการขายสินค้า
Field1 ของคุณคือ รหัสสินค้า

เมื่อกรอกรหัสสินค้าก็จะแสดง ชื่อสินค้า  / จำนวนชิ้นต่อแพ็ค / ราคา  เป็นต้น

ถ้าเป็นแบบของคุณข้อมูล ที่คุณกรอกใน Field 1 คือรหัส ครับ แล้วสร้างตาราง เก็บรายละเอียดของรหัสนี้ครับ

ผมมีตัวอย่าง การสร้างตารางเก็บรหัสและรายละเอียด ตั้งชื่อว่า Table2
และมีฟอร์มที่สามารถนำรหัสนั้นมาระบุที่ Field1 ของฟอร์ม โดยใช้ Dlookup
ส่วน Field ที่ 3 กับ 4 ไม่แน่ใจว่าเป็นการ แยกส่วนออกมาหรือเปล่าจากตัวอย่าง MOU-SOU
แยกเป็น MOU SOU ลองดูตัวอย่างนะครับ




798
เมื่อเราใส่ข้อมูลที่ Field 1 คือ BB111 แล้ว Field 2 3 4 อ้างอิงมาจากไหนครับ พวก MOU-SOU

ที่ต้องการคือเมื่อเพิ่มข้อมูลที่ Field1 ในแถวถัดไป ให้แสดง Field 2 3 4 จากข้อมูลที่ระบุใน Record ก่อนหน้าหรือเปล่า

799
กำหนด Relation Ship ID ของ สองตารางนี้ครับ
แล้วทำการกำหนด RecordSource  โดย ดึงฟิลล์ Fuel On จาก Table2 มาด้วยคับ

800
ตัวอย่างครับ ดูที่การ BoundControl และ การกำหนดโค้ด

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