แสดงกระทู้

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 ... 5 6 7 [8] 9 10 11 ... 23
113
ห้อง MS Access / : Loop เปลี่ยนสีแถบ Navigation
« เมื่อ: 13 มี.ค. 63 , 08:42:32 »
แบบนี้ไหมครับ



Sub Formstyle(frm As Form)
For Each ctl In frm.Controls
         If ctl.ControlType = acNavigationButton Or acNavigationControl And ctl.Tag = "b1" Then
                      ctl.BackColor = 4210943
         End If
    Next ctl
    'ctl = Nothing
End Sub


114
ห้อง MS Access / : Loop เปลี่ยนสีแถบ Navigation
« เมื่อ: 12 มี.ค. 63 , 14:52:01 »
ส่งไฟล์มาที่ inbox ส่วนตัวหน่อยครับผมดูให้

115
ห้อง MS Access / : Loop เปลี่ยนสีแถบ Navigation
« เมื่อ: 12 มี.ค. 63 , 11:47:36 »
ทำปุ่มพื้นหลัง ให้เป็นสีที่ต้องการใช่ไหมคับ

โค๊ด: [Select]
Sub Formstyle(frm As Form)
Dim ctl     As Control
    For Each ctl In frm.Controls
        If ctl.ControlType = acNavigationButton And ctl.Tag = "b1" Then
                      ctl.BackColor = 11193702
             End If
    Next ctl
End Sub

แต่ถ้าอยากให้เปิดขึ้นมาแล้ว แสดงสี ถ้า tag = B1 ทั้งแบบที่กด Tab อยู่ และ ที่ยังไม่กดก็เพิ่มเป็น
โค๊ด: [Select]
Sub Formstyle(frm As Form)
Dim ctl     As Control
    For Each ctl In frm.Controls
        If ctl.ControlType = acNavigationButton And ctl.Tag = "b1" Then
                      ctl.BackColor = 11193702
                      ctl.PressedColor = 11193702
             End If
    Next ctl
End Sub

116
ครับผมใช่เลยครับ แต่ผมรบกวนอีกนิดนึงครับ
คือไม่ต้องให้เปิดไฟล์ Excel Stock แต่แค่เอา Path มาใส่ที่ Textbox ก็พอครับผม
รบกวนด้วยครับ
ขอบคุณครับ
เหลือแค่นี้ครับ

Dim fd As FileDialog
Dim filePath As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.AllowMultiSelect = False
fd.InitialFileName = "D:\Stock"
If fd.Show = True Then
    If fd.SelectedItems(1) <> vbNullString Then
        filePath = fd.SelectedItems(1)       
        Me.txtFolderPath = filePath
    End If
Else
End If
Set fd = Nothing

117
ผมทำการต่อข้อความ ในฟอร์มที่ออกแบบไว้นะครับ

แต่ยังไม่ได้ทำระบบ ส่งข้อมูลไปที่ Outlook

ให้กรอกข้อมูลแล้วกด นำเข้าข้อมูล ดูครับ

118
ภาพที่ 1


ภาพที่ 2


ตารางแรกชื่อ Note มี
ID_Note, ชื่อผู้บันทึก, วันที่, ID_Event

ตารางสองชื่อ Event มี
ID_Event, ชื่อพนักงาน, ประเภท, จำนวนวัน, เริ่มวันที่, บันทึกเพิ่มเติม

พอจะมีวิธีดึงข้อมูลจากฟอร์ม และ ซัพฟอร์มให้ออกมาได้อย่างภาพที่ 2 ไหมครับ ต้องการให้ข้อมูลเป็น text
ในบอร์ดนี้มีให้อัพโหลดภาพครับ พอท่านอัพภาพจากเว็บนอกมันไม่แสดงครับ

119
ความคิดผมอยากทำ Form 1 หน้าแล้วมี Textbox หรือ ช่องเลือกวัน 2 ช่องให้ใส่วันที่ต้องการเริ่มต้นหากับวันสุดท้ายที่ต้องการหาแล้วให้ Query ออกมาเป็น DataSheet ข้อมูลที่ต้องการ ไม่ทราบว่า Criteria ใน Query สามารถทำได้ไหมครับ???
สามารถทำได้ครับ  แนวทางที่คิดมาถูกต้องแล้ว

ผมสมมุติ ฟิลล์ ชื่อ OpenJobs นะครับ
มี textbox 2 ตัวชื่อ txtStartDate กับ txtEndDate
บน form ชื่อ form1

ที่ฟิลล์  OpenJobs ใส่ Criteria ว่า
Between Forms!Form1!txtStartDate And Forms!form1!txtEndDate

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

120
แบบนี้หรอเปล่าครับ
ใช้ Reference ตัว Microsoft Office 16.0 Object Library  ด้วยนะครับ

โค๊ด: [Select]
Dim fd As FileDialog
Dim filePath As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.AllowMultiSelect = False
fd.InitialFileName = "D:\Stock"
If fd.Show = True Then
    If fd.SelectedItems(1) <> vbNullString Then
        filePath = fd.SelectedItems(1)
        FollowHyperlink filePath
        Me.txtFolderPath = filePath
    End If
Else
End If
Set fd = Nothing


121
มีฟิลด์ SEQ ชนิด Number Long Integer
ต้องการเขียนโคตให้ Run เลขตั้งแต่ที่กำหนด ไปจนหมดเรคคอด
ต้องเขียนยังงัยครับ ขอบคุณครับ
มี 2 แบบไม่รู้ใช่ที่ต้องการไหมนะครับ

แบบที่1
ผมสมมุติมีฟอร์มแบบ Continuous Forms
มี textbox ระบุเลขที่กำหนดชื่อ txtSeqNum
โดยตารางที่จะดำเนินการชื่อ table1
มีฟิลล์ที่จะ รันตัวเลขชื่อ Seq




Private Sub Command0_Click()
Dim db As Database
Dim rs As DAO.Recordset
   Set db = CurrentDb
   Set rs = db.OpenRecordset("table1")   
 rs.MoveFirst
 Do Until rs.EOF
 If Nz(DMax("seq", "table1"), 0) = 0 Then
         rs.Edit
         rs!Seq = Me.txtSeqNum
         rs.Update
Else
         rs.Edit
         rs!Seq = DMax("seq", "table1") + 1
         rs.Update
End If
         rs.MoveNext
Loop
         Me.Requery
End Sub

แบบที่ 2
ถ้าไม่อยากสร้างฟอร์มขึ้นมาเพิ่ม ใช้การสร้าง ปุ่มขึ้นมา 1 ปุ่มแล้วใส่โค้ดนี้เข้าไปเพื่อทำการแก้ไขตาราง ที่ฟิลล์ Seq
โค๊ด: [Select]
Private Sub Command0_Click()
Dim db As Database
Dim rs As DAO.Recordset
Dim IntSeq As Integer
   Set db = CurrentDb
   Set rs = db.OpenRecordset("table1")
   IntSeq = InputBox("ระบุตัวเลขเริ่มต้น", "ระบบรันSeq")   
 rs.MoveFirst
 Do Until rs.EOF
 If Nz(DMax("seq", "table1"), 0) = 0 Then
         rs.Edit
         rs!Seq = IntSeq
         rs.Update
 Else
         rs.Edit
         rs!Seq = DMax("seq", "table1") + 1
         rs.Update
 End If
         rs.MoveNext
 Loop
    End Sub

122

ใช้ Like มาช่วยก็ได้ครับ เจอประโยคนี้ในข้อความก็เข้าเงื่อนไข เช่น

โค๊ด: [Select]
Private Sub Command2_Click()
If Me.Combo1.Value Like "*กรุงไทย*" Then
DoCmd.OpenForm "frm01"
ElseIf Me.Combo1.Value Like "*ไทยพานิชย์*" Then
DoCmd.OpenForm "frm02"
End If
End Sub

123
ผมมี combobox ที่เลือกธนาคารต่างๆ เมื่อเลือกแล้ว ผมจะคลิกที่ปุ่มนึงแล้ว
ให้มันดูว่า เป็นธนาคารไหน แล้วเปิดฟอร์มที่กำหนดไว้

Text ใน combo ไม่ได้มีชื่อธนาคารอย่างเดียว เช่น
ธนาคารกรุงไทย สาขา......
ธนาคารไทยพานิชย์ สาขา.....

ถามว่าจะเขียนโคตยังงัยครับ

ใช้การตัดข้อความก็ได้ครับ โดยกำหนดให้ ถ้าเจอคำว่า "สาขา" แล้ว ให้ตัดข้อความทางขวาทิ้งทั้งหมด เอาเฉพาะทางซ้าย คือชื่อธนาคารนั้นเอง
เช่น ผมสมมุติ combobox รายชื่อธนาคารและสาขาธนาคาร ชื่อ Combo1
โค๊ด: [Select]
Private Sub Command2_Click()
Dim strBankName As String
strBankName = Me.Combo1
strBankName = Left(strBankName, InStr(strBankName, "สาขา") - 1)
strBankName = Replace(strBankName, " ", "") 'ใช้ Function นี้ป้องกันกรณีมีช่องว่างระหว่างข้อความ
DoCmd.OpenForm strBankName
End Sub

หรือถ้าชื่อ Form ไม่ได้ชื่อธนาคารแต่เป็นชื่ออื่นก็ใช้ If มาเช็คเช่น
โค๊ด: [Select]
Private Sub Command2_Click()
Dim strBankName As String
strBankName = Me.Combo1
strBankName = Left(strBankName, InStr(strBankName, "สาขา") - 1)
strBankName = Replace(strBankName, " ", "") 'ใช้ Function นี้ป้องกันกรณีมีช่องว่างระหว่างข้อความ
If strBankName = "ธนาคารกรุงไทย" Then
DoCmd.OpenForm "Frm01"
ElseIf strBankName = "ธนาคารไทยพานิชย์" Then
DoCmd.OpenForm "Frm02"
End If
End Sub


124
ห้อง MS Access / : ทำไม textbox ขึ้น #Name?
« เมื่อ: 04 มี.ค. 63 , 21:01:04 »
ต้องเอา  function หรือ expression ใน Control Source ของ textbox มาดูครับ ว่ากำหนดไว้แบบไหนถึงได้ขึ้นแบบนั้น
เช่น ชื่อ textbox ชื่ออะไรบ้าง (การตั้งชื่อก็มีผลครับ)

แล้วกำหนดไว้อย่างไร สร้างสูตรคำนวนไว้หรือไม่ ต้องดูหลายๆอย่าง
เพราะบางทีเราสร้างสูตรคำนวนโดยอ้างอิงวันที่ แต่ Format วันที่แต่ละเครื่องไม่เหมือนกันก็จะเกิดอาการแบบนั้นได้
หรือเมื่อบ้ายเครืองอาจจะอ้างอิงผิดตำแหน่ง หรืออ้างอิงช่วงผิด

ปกติเวลาตั้งชื่อ textbox นั้น ถ้าตั้ง = PriceA , PriceB ควรตั้ง ว่า txtPriceA , txtPriceB แบบนี้เพื่อไม่ใช่ชื่อซ้ำซ้อนกันกับชื่อ Field

125
ของผม เชื่อม ODBC driver Link Table ต่างๆ เข้ามากำหนด column ได้ปกติ

126
โดย combobox มัน สามารถกำหนด Column ที่จะผูกค่าไว้เช่น กำหนดให้มี ServiceID และ  ServiceType
โดยกำหนดให้ BoundColumn 1 (ServiceID)
กำหนดให้แสดง 2 คอลัมน์
และกำหนด ความกว้างColumn = 0;5
มันจะแสดงเฉพาะ ServiceType แต่ค่าที่เรากำหนดให้เก็บในตารางคือ ServiceID ซึ่งเป็น Number นั้นเองครับ

ซึ่งการ lookup ในตารางก็มีการทำแบบนี้เหมือนกัน คือการให้แสดง column ServiceType  แต่จริงๆแล้วถ้าไม่ lookup นั้นมันเป็น ServiceID ตามปกติครับ

127
ตัว Control เป็น Unbound หรือ Bound ครับ

อ้างถึง
แบบที่พอจบงานแล้วเคลียคอนโทรลทั้งหมด
เคลียทีเดียวหมด ใช้แบบนี้ดูครับ
ใช้กับ Control ที่ Unbound

โค๊ด: [Select]
Sub ResetForm()   
    On Error GoTo Err_Err
    Dim ctl As Control           
    For Each ctl In Me
        If ctl.ControlType = acComboBox Then  'ถ้าเป็นCombobox ทำให้ว่าง
                ctl = Null       
        End If
        If ctl.ControlType = acTextBox Then   'ถ้าเป็น textbox ทำให้ว่าง
                ctl = Null
        End If
        If ctl.ControlType = acCheckBox Then  'ถ้าเป็น Checkbox ทำให้แสดงเป็น False คือไม่ได้ติ๊กเลือก
                ctl = False
        End If
          Next ctl
Exit_err:
        Exit Sub
Err_Err:
        MsgBox Error$
        MsgBox ("ผิดพลาดตรง Reset Form")
        Resume Exit_err
End Sub

เวลาจะเรียกใช้ ที่ปุ่มเซฟ เมื่อเซฟเสร็จแล้ว
ก็ต่อคำสั่งด้วย
Call ResetForm

อ้างถึง
มีวธีทำให้คิวรีแบบอัปเดททำงานพร้อมกันหมดไหมครับ แบบ ไม่ต้องมากดอัทเดททีล่ะกัน แต่ให้กดทีเดียว ทำงานทุกอันอะครับ
พอจะมีวิธีใหมครับ
สั่งทำงานทีเดียวได้เลยเช่น
DoCmd.SetWarnings False  'ปิดระบบสอบถาม
DoCmd.OpenQuery "Query1"
DoCmd.OpenQuery "Query2"
DoCmd.OpenQuery "Query3"
DoCmd.SetWarnings True  'เมื่อเรียกใช้คิวรี่ทั้ง 3 เสร็จ ก็ให้เปิดระบบสอบถามปกติ

อ้างถึง
แบบที่พอจบงานแล้วเคลียเรคคอททั้งหมด
เคลียเรคคอร์ดทั้งหมด ในตารางใช่หรือไม่ถ้าใช่สามารถใช้คำสั่ง Sql ลบได้เช่น

Dim db As Database
Set db = CurrentDb
db.Execute "DELETE ชื่อตาราง.* FROM ชื่อตาราง;"

อ้างถึง
แบบเลือกให้ลบข้อมูลในเรคคอทที่ต้องการได้

เราสามารถใช้คำสั่งแบบข้างบน โดยกำหนดลบจาก ID เช่น

    Dim strSQL as string
    DoCmd.SetWarnings False
    strSQL = "Delete * From [student] WHERE [Student ID]='007'"
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True

คำสั่งนี้ก็จะลบเรคคอร์ดจากตาราง Student โดยจะลบเรคคอร์ดที่ Student ID = 007 ออกไป

128
ของคุณไม่มีคับ มีแต่ access ของ Office ไม่มี สังเกตุดีๆ ของคุณ 4 ของผม 6
ต้องเพิ่ม Microsoft Office 16 Object Library เข้ามาด้วย
แล้วก็ตัว Runtime

หน้า: 1 ... 5 6 7 [8] 9 10 11 ... 23