แสดงกระทู้

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 - ปิ่นณรงค์

หน้า: 1 [2] 3 4 5 ... 32
19
ใช้การสร้างตัวแปล มาเช็คสถานะของการบันทึกก็ได้ครับ โดยใช้ Events Form_BeforeUpdate ในการตรวจสอบ โค้ดผมยุบเหลือแค่นี้นะครับ
โค๊ด: [Select]
Private Sub cmb_Save_Click()
Dim IsSave As Boolean
If IsNull(txt_CIF) Then
MsgBox "กรุณาระบุ CIF !!", vbOKOnly, "Warning !!"
ElseIf IsNull(txt_TONo) Then
MsgBox "กรุณาระบุ TO No. !!", vbOKOnly, "Warning !!"
ElseIf IsNull(txt_DocCode) Then
MsgBox "กรุณาระบุรหัสเอกสาร !!", vbOKOnly, "Warning !!"
ElseIf IsNull(txt_DocTypeCode) Then
MsgBox "กรุณาระบุรหัสประเภทเอกสาร !!", vbOKOnly, "Warning !!"
ElseIf IsNull(txt_DocName) Then
MsgBox "กรุณาระบุชื่อเอกสาร !!", vbOKOnly, "Warning !!"
ElseIf IsNull(txt_DocDate) Then
MsgBox "กรุณาระบุวันที่เอกสาร !!", vbOKOnly, "Warning !!"
else
DoCmd.RunCommand (acCmdSaveRecord)
IsSave = True
End If
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)  'ก่อนข้อมูลจะถูกบันทึกในตารางต้องผ่านเงื่อนไขนี้ก่อน ครับถ้าตอบ No หรือกดปิดฟอร์มโดยไม่ได้กดบันทึก ข้อมูลจะไม่ถูกบันทึก
Dim msg As Integer
If IsSave = False Then
    msg = MsgBox("คุณต้องการบันทึกข้อมูลนี้หรือไม่?", vbYesNo, "สอบถาม")
    If msg = vbNo Then
       Me.Undo
    End If
End If
End Sub

20
ผมสร้างฟอร์ม ชื่อ frmMain1 มี text box ชื่อ txt_No1 ในฟอร์มนี้มีปุ่มเปิดฟอร์ม ชื่อ frmMain2 ในฟอร์มนี้มี textbox ชื่อ txt_No2
คำถาม ผมต้องการให้ frmMain1 เมื่อกดปุ่มเปิดฟอร์ม frmMain2 ให้ txt_No1= txt_No2 ต้องเขียนโค้ดใน vb ว่าอย่างไรบ้างครับ ขอบคุณมากครับ

ถ้าเป็นแบบ อ้างอิงแบบไม่ได้ Filter ที่ปุ่มก็ใส่แบบนี้ครับ
โค๊ด: [Select]
Private Sub OpenFrmMain2_Click()
DoCmd.OpenForm "frmmain2"
Forms!frmmain2.Form!txt_No2 = Me.txt_No1
End Sub

แต่ถ้าเป็นรูปแบบการ Filter เช่น txt_No2 Bound Field ชื่อ No และอยากให้ ระบุ No ที่ frmmain1 เมื่อเปิดฟอร์ม frmmain2 ก็ให้ Filter No มาแสดงก็ใส่แบบนี้
ถ้า Field No เป็น Number
โค๊ด: [Select]
Private Sub OpenFrmMain2_Click()
DoCmd.OpenForm "frmmain2", WhereCondition:="[No]=" & Me.txt_No1
End Sub

ถ้า Field No เป็น text
โค๊ด: [Select]
DoCmd.OpenForm "frmmain2", WhereCondition:="[No]= '" & Me.txt_No1 & "'"

21
ผมสมมุติ Field เก็บวันที่เริ่มทำงานของพนักงานชื่อ DateOfStartWork ตารางชื่อ Table1
ลองดูตัวอย่างนี้คับ

22
ถ้ามองตามเหตุการณ์จริงเมื่อ AfterUpdate แล้วมี MSGBOX มันจะลงไปที่ text2 อยู่แล้ว เราน่าจะกำหนดแบบนี้คับ

Private Sub Text1_AfterUpdate()
Dim Rs As Recordset
Set Rs = CurrentDb.OpenRecordset("Select * From UserClass Where UserName='" & Text1 & "';")

If Rs.RecordCount = 0 Then
MsgBox "ผู้ใช้ชื่อ" & Me.Text1 & " ไม่ได้รับอนุญาตให้ใช้งาน ", vbCritical, "ระบบตรวจสอบ"
Me.Text1 = null
Me.Text2.SetFocus
Me.Text1.SetFocus
Exit Sub
End If

End Sub

23
ใส่ me.Text1.setFocus ครับ

24
ตัวอย่างคือการกำหนด ประเภทของ Control ครับ ถ้าเป็นประเภทที่เราเลือกเช่นจะสั่งให้ null หรือให้ว่าง ในประเภท textbox หรือ Combobox หรือ ให้เป็น False ใน checkbox ครับ

โค๊ด: [Select]
Sub ResetForm()   
    On Error GoTo Err_Err
    Dim ctl As Control
           
    For Each ctl In Me
        If ctl.ControlType = acComboBox Then
                ctl = Null       
        End If
        If ctl.ControlType = acTextBox Then
                ctl = Null
        End If
        If ctl.ControlType = acCheckBox Then
                ctl = False
        End If

          Next ctl
   
Exit_err:
        Exit Sub
Err_Err:
        MsgBox Error$
        MsgBox ("ผิดพลาดตรง Reset Form")
        Resume Exit_err

End Sub

เวลาจะเรียกใช้งานก็สั่ง Call ResetForm()

ส่วนประเภทของ Control ต่างๆ ที่มีใน access ก็ตามนี้เลยคับ
Constant              Control
acBoundObjectFrame   Bound object frame
acCheckBox              Check box
acComboBox              Combo box
acCommandButton      Command button
acCustomControl      ActiveX (custom) control
acImage                      Image
acLabel                      Label
acLine                      Line
acListBox                      List box
acObjectFrame              Unbound object frame or chart
acOptionButton              Option button
acOptionGroup              Option group
acPage                      Page
acPageBreak              Page break
acRectangle              Rectangle
acSubform       Subform/subreport
acTabCtl                      Tab
acTextBox      Text box
acToggleButton      Toggle button

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

ถ้าท่านติดปัญหาตรงไหน โพสสอบถามไว้ได้เลยครับ มีอาจารย์หลายๆท่านคอยช่วยตอบให้ท่านแน่นอนครับ
ส่วนจากตัวอย่าง เดิมที่ส่งมาผมปรับปรุงใหม่ ให้อ้างอิง ID ของแต่ละตารางแทนแล้วนะครับ โดยผมได้แก้จากการอ้างอิงที่เป็นภาษาไทย เป็นอ้างอิงจาก ID นะครับลองดูครับ

27
ห้อง MS Access / : ไม่ให้ลบข้อมูลใน Subform
« เมื่อ: 11 มิ.ย. 62 , 15:57:13 »
เวลากำหนดตั้งค่า ไม่ใช่เปิดจาก form หลักนะครับ
ให้เปิด SubForm มาแก้ไขโดยตรง ห้ามเปิดจาก MainForm ครับ

ลองเปิดเฉพาะSubForm มาแก้ไขดูครับ

หรือถ้ายังไม่ได้ให้ Zip File แนบมาทางอินบ๊อก เดี่ยวดูให้คับ

28
ห้อง MS Access / : ไม่ให้ลบข้อมูลใน Subform
« เมื่อ: 11 มิ.ย. 62 , 15:48:18 »
เลือก Tab Data แล้วแก้


Allow Deletions: NO
Allow Edits: NO


กดตรงนี้


กำหนดที่ tab data

29
ห้อง MS Access / : ไม่ให้ลบข้อมูลใน Subform
« เมื่อ: 11 มิ.ย. 62 , 15:32:06 »
สวัสดีค่ะ  อ๋อยรบกวนสอบถามเกี่ยวกับ Subform คือ ตอนนี้อ๋อยสร้าง Subform ให้แสดงข้อมูลจาก Form หลัก แล้วอยากจะ Lock Subform เพื่อไม่ให้แก้ไขข้อมูล หรือว่าลบข้อมูลใน Subform พอมีวิธีการไหนบ้างหรือเปล่าคะ  ขอบคุณค่ะ

กำหนดคุณสมบัติใน subform ตามนี้ก็ได้คับ



หรือจะใช้ โค้ดที่ Event Form_Current ของฟอร์มหลักก็ได้คับ  จากตัวอย่างฟอร์มหลักชื่อ Mainform ฟอร์มย่อยชื่อ Subform

Private Sub Form_Current()
Forms!mainform.Form!subform.Form.AllowDeletions = False
Forms!mainform.Form!subform.Form.AllowEdits = False
End Sub

30
อ้างถึง
1. หลักความแตกต่างระหว่าง " และ ' และ & คืออะไรครับ

 " และ '  เราเรียกว่า double quote และ Single quote ครับ สัญลักษณ์พวกนี้เป็นการบอกให้ทราบว่า คุณได้กำหนดช่วงของ ข้อความ หรือ String หรือ ตัวเลข หรือตัว Control จาก ไหน ถึง ไหน ครับ เช่น "..............." เป็นการบอกว่า ภายใน double quote นี้คือเนื้อหาส่วนเดียวกัน

ความแตกต่างของการใช้  " และ ยกตัวอย่างการใช้ Dlookup
เราจะใช้ ' ในการกรณีที่ อ้างถึงเขตข้อมูลที่เป็น string หรือข้อความ เช่น
DLookup("FieldName" , "TableName" , "Criteria= 'String'")

ในกรณีที่เป็น ตัวเลข เราจะใช้ " ในการกำหนดขอบเขตครับเช่น N คือตัวเลข
DLookup("FieldName" , "TableName" , "Criteria = n")

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

msgbox "สวัสดีครับ",vbInformation,"ทักทาย"

& นั้นใช้ในการเชื่อมต่อกับส่วน อื่นๆของคำสั่ง เช่น ตัวแปร เชื่อมกับ Control / ข้อความเชื่อมกับ Control / กำหนด เชื่อมฟิลล์เข้าด้วยกัน เช่น Field1 & "/" & Field2  ก็จะได้ Field1/Field2เป็นต้น

อ้างถึง
2. ในกรณีนี้ทำไมต้องใส่ " " ที่ตอนต้นและตอนท้ายด้วยครับ เพราะดูในที่อื่น ก็ select * from  where ไม่เห็นต้องมี " " ปิดหัวท้ายเลย


คุณอ้างถึงตัวแปร Sql ที่เป็น string ซึ่ง ต้องมี " " ปิดหัวท้ายเพื่่อกำหนดขอบเขตของ String ที่เรากำหนดคับ

อ้างถึง
3. like '" & Nz(Me.tcombo, "*") & "'  --> รบกวนช่วยแปล Code นี้หน่อยครับ ไม่เข้าใจตรงการเขียน '" & XXX & "'
จากตัวอย่างนี้ลองสังเกตุ '" & XXX & "' การใส่ เครื่องหมาย  " และ ' ให้การ Control ที่เป็นข้อความคับ
Nz(Me.tcombo, "*") คือการกำหนดให้ตรวจสอบ Control ที่ชื่อ tcombo ครับโดยการกำหนดให้แสดงผลตามว่า tcombo ว่างหรือไม่ว่าง
ถ้า tcombo ไม่เป็นค่าว่าง สมมุติเราใส่ กรุงเทพ เงื่อนไขของ คำสั่งนี้คือ   like "กรุงเทพ" ซึ่ง ถ้าเขตข้อมูลไหนมีคำว่ากรุงเทพก็จะแสดงรายการออกมาครับ
แต่ถ้า tcombo เป็นค่าว่าง Nz Function ก็จะแทนค่าว่างด้วย * คือถ้าว่างก็ให้เงื่อนไขคือแสดงข้อมูลทั้งหมด

ผมตอบได้เท่าที่ผมนึกออกนะคับ  รออาจารย์ท่านอื่นมาเสริม

31
โค๊ด: [Select]
Option Compare Database

Private Sub SearchCombo()
Dim sql As String

sql = "SELECT * FROM tbldata WHERE [Province] like '" & Nz(Me.Combo1, "*") & "' and [District] like '" & Nz(Me.Combo2, "*") & "'"
    Forms!frmsearch!frmdata.Form.RecordSource = sql
    Forms!frmsearch!frmdata.Form.Requery
   
If Not IsNull(Me.Combo1) Then
Me.Combo2.RowSource = "SELECT DISTINCT tbldata.District, tbldata.Province FROM tbldata WHERE (((tbldata.Province)=[forms]![frmsearch]![Combo1]));"
Else
Me.Combo2.RowSource = "SELECT DISTINCT tbldata.District FROM tbldata GROUP BY tbldata.District;"
End If
End Sub
Private Sub Combo1_AfterUpdate()
    Me.Combo2 = Null
    SearchCombo
End Sub
Private Sub Combo2_AfterUpdate()
    SearchCombo
End Sub
Private Sub Combo2_GotFocus()
  SearchCombo
End Sub


สร้างเงื่อนไขในการกำหนด RowSource ครับลองดูครับ

32
ถ้าจะเก็บข้อมูลลงในตารางเป็น ID ของ ตารางนั้นก็คงจะเหมาะครับ เพราะใช้ทรัพยากรน้อยลง
ถ้าคุณกำหนดข้อมูลแถวของ Combobox เป็น คอลัมน์1 ID คอลัมน์2 ชื่อจังหวัดหรือตำบลหรืออำเภอ
ตรง column width(ความกว้างของคอลัมน์) กำหนดซัก 0ซม.;5ซม. หรือตัวเลขอื่นๆ เพื่อให้แสดงรายการได้ครบ


column width กำหนดซัก 0ซม.;5ซม. คือ Combobox คอลัมน์ไหน กำหนดเป็น 0 จะไม่แสดงคอลัมน์นั้น จากการกำหนดนี้ข้อมูลจะถูกเก็บข้อมูล ID แต่จะแสดง รายการของคอมโบบ๊อกนั้นแทน
ส่วน BoundColumn(คอลัมน์ที่ถูกผูกไว้)ถ้าอยากจะเก็บข้อมูลเป็น ID กำหนดเป็น 1 ถ้าจะเก็บเป็นตัวหนังสือหรือรายการกำหนดเป็น 2 หรือดูจากการกำหนดชนิดแหล่งข้อมูลแถวว่าต้องการผูกคอลัมน์ไหนไว้ครับ


33
งานคุณเหมือนมีการกำหนดคิวรี่ให้แสดงข้อมูลในฟอร์มย่อย ในรูปแบบ datasheet ถูกไหมครับ

ถ้าแบบง่ายๆเลยคือ ใช้การเปลี่ยน SourceObject เอาก็ได้ครับ
เช่นปกติ ข้อมูลในฟอร์มย่อย เป็น QryData มีการกำหนดให้แสดง Field Address อยู่ด้วย

เราก็มาสร้างคิวรี่อีกอัน ชื่อ QryDataUser กำหนดให้แสดงฟิลล์อื่นๆทั้งหมดแต่เอา Field Address ออก

ที่ฟอร์ม
ตรงช่องแหล่งระเบียนไม่ต้องกำหนดเว้นว่างไว้
ต่อไปใช้การเช็คเงื่อนไข แอดมิน ตอนล๊อกอินเข้ามาถ้าเป็น Admin ก็กำหนดให้

IF ............................... เช็คว่าเป็น Admin หรือไม่ ถ้าใช่
Me.SubForm.SourceObject = "Query.QryData"
else
Me.SubForm.SourceObject = "Query.QryDataUser"
end if


ตรงสีแดงคือ ชื่อของ Subform
ผมคงช่วยออกแนวคิดได้เท่านี้ครับ เพราะ ผมไม่ทราบว่า การล๊อกอิน เข้าใช้งานฟอร์มเป็นแบบไหน เห็นแค่รูปภาพอันเดียวตีโจทย์ยากมาก  :dizzy:

34
ไม่รู้แบบนี้หรือเปล่านะครับ
เป็นการเช็คว่า ในแต่ละวันมีใครขาดเรียนบ้าง


โดย Query ที่ผมสร้างขึ้นมามี
GroupName คือ เป็นการจัดกลุ่มชื่อเด็กทั้งหมดไว้ (อันนี้เอามาจากฐานชื่อนามสกุลนักเรียนได้ครับ)
NameByDate คือ การหารายชื่อเด็กที่มาในแต่ละวัน เพื่อค้นหาชื่อเด็กที่หายไป(ขาดเรียน)
Result คือแสดงผลลัพท์ว่า ถ้าชื่อเด็กคนนั้นหายไปให้แสดงว่าขาดเรียน ถ้าไม่หายไปแสดงว่ามาเรียน

ตัวอย่างด้านล่างคับ
ถ้าไม่ใช้แบบนี้ ก็ต้องขออภัยด้วยนะครับ รออาจารย์ท่านอื่นมาแนะนำต่อ

35
ถ้าเป็นไฟล์พวก excel word access มันทำง่ายคับ ในการสั่งปิด แต่พอเป็นพวกไฟล์ PDF หรือ ไฟล์รูปภาพ คงยังหาวิธีไม่เจอเลยคับ
คือถ้าอยากจะปิดไฟล์พวกนี้จริงๆ คงต้องสั่งปิด Process ที่ทำงานอยู่กับโปรแกรมที่ใช้เปิดไฟล์รูปภาพ และโปรแกรม adobe reader ครับ

ส่วนปิดไฟล์ Word ก็ประมาณนี้ครับ

Dim sPath, sfilename, sLink, sCopyInto, myOutput As String
Dim fso As Object
Dim OpenDB As Object
Dim myFileOld As FileSystemObject
Dim appExtension As String
Dim ObjName As String

    Set fso = CreateObject("Scripting.FileSystemObject")
    sfilename = GetFileName
    myOutput = Right(sfilename, Len(sfilename) - InStrRev(sfilename, "."))
    sPath = GetFilePath
    sLink = sPath & sfilename
   
    sCopyInto = [Forms]![manHisInsu]![folderInsu] & "\" & [Forms]![manHisInsu]![Even2] & "." & myOutput  'แล้ว Copy File
    fso.CopyFile sLink, sCopyInto
    Set fso = Nothing
   
   appExtension = Right$(slink, Len(slink) - InStrRev(slink, ".") + 1) 'ดึงนามสกุลมา
   ObjName = Right(slink, Len(slink) - InStrRev(slink, "\")) 'ดึงชื่อไฟล์และนามสกุลมา

   If appExtension = ".doc" Or appExtension = ".docx" Then

   Set objWord = GetObject(, "word.application")
   Set objDocs = objWord.Documents

   For Each doc In objDocs
       If StrComp(doc.Name, ObjName, 1) = 0 Then
           doc.Close
           objWord.Application.Quit
           Exit For
       End If
   Next
   Set objDocs = Nothing
   Set objWord = Nothing
   End If


    Set myFileOld = New FileSystemObject 'สั่งลบไฟล์เดิม
    myFileOld.DeleteFile sLink
    Set myFileOld = Nothing
   
    MsgBox ("บันทึกเรียบร้อยแล้ว"), vbInformation, "ผลการทำงาน"

   
Exit_Command33_Click:
    Exit Sub

Err_Command33_Click:
    MsgBox " ไฟลนี้อาจเปิดอยู่ ให้ปิดไฟล์นี้เสียก่อน"
    Resume Exit_Command33_Click

36
ไฟล์ที่จะปิด คัดลอก และ ลบ ไม่ใช้ไฟล์ access แต่เป็นไฟล์ pdf หรืออื่น ๆ ได้ไหมครับ

สรุปมาให้ผมหน่อยครับ เป็นไฟล์ประเภทอะไรบ้าง
คงต้องทำเป็น Select Case ตามประเภทไฟล์ครับ

หน้า: 1 [2] 3 4 5 ... 32