แสดงกระทู้

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 ... 3 4 5 [6] 7 8 9 ... 32
91
โค๊ด: [Select]
intCount = DCount("*", "[บุคคลากร]", "[ชื่อ-นามสกุล] Like """ & [Forms]![ชื่อฟอร์ม]![TxtFind] & "*""")
การทำงาน ถ้าที่ textbox ถ้าเราคีย์ กก ผลการทำงานคือนับถ้าข้อมูลมี กก* ครับ ถ้าข้อมูลมี กกข กกค กขค ผลนับจะเท่ากับ 2 แต่ถ้าพิมพ์ ค จะไม่เจอเพราะไม่ได้อยู่ด้านหน้าของข้อความครับ

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

92
ผมเปิดไฟล์ที่แนบมา แล้ว ไม่มีการกำหนดอะไร control source report1 อะไรเลยครับ  อจ ลืมพิมพ์อะไรหรือเปล่าครับ
้แกให้ใหม่ละครับโทษที ด้านบนนะครับ

93
ห้อง MS Access / : Ms Access *.accdb มีอะไรดีกว่า *.mdb
« เมื่อ: 25 เม.ย. 62 , 10:33:08 »
เริ่มใช้ foxbase   dbase  access 97 access 2003  ควรจะหันหลัง แล้วไปใช้ access ใหม่ๆดีไหม  ท่านที่มีประสบการณ์ขอคำแนะนำหน่อยครับ

ACCDB มีสิ่งที่เพิ่มเข้ามาเท่าที่รู้คือ

ACCDB
มีชนิดข้อมูล Multi-valued fields
มีชนิดข้อมูล Attachment
มีการนำไปใช้กับ SharePoint and Outlook
มีชนิดข้อมูลแบบ Calculated
เพิ่มความสามารถด้านการเข้ารหัสความปลอดภัย
รองรับการทำงานกับเวอร์ชั่นใหม่ๆ

MDB
ส่วน MDB ดีตรงใช้กับ พวก access version เก่าๆ พวก 2000 2003 2007 ได้ด้วยคับ

95
ตามจริงแล้วไม่ต้องไปกำหนดที่ Query ตัวนั้นตรงๆก็ได้คับ

เราไปกำหนดที่ RecordSource ของ ตัวรายงาน หรือ ฟอร์ม เอาก็ได้คับ ที่ RecordSource ของรายงานหรือฟอร์ม กด เครื่องหมาย ... เพื่อตั้งค่าคิวรี่ หรือ ตารางที่ต้องการเชื่อมต่อแล้วกำหนด Criteria ที่ตัวรายงานนี้เลยคับ

ขั้นตอนที่ 1




ขั้นตอนที่ 2



จากตัวอย่างที่ผม Upload ไปนั้นสังเกตุว่าที่ Query1 ผมไม่ได้กำหนด Criteria ไว้นะครับ
แต่จะกำหนด ที่จะให้เงื่อนไขมาจาก Forms ไหน Control ชื่ออะไร มาที่ตัวรายงานแทน

96
คือเราอยากทำตัวหนังสือใน text box อยู่ข้างล่างบ้าง ตรงกลางบ้าง ค่ะ มันมีแต่ปุ่ม ชิดซ้าย ชิดขวา และกึ่งกลางแต่มันจะอยู่บนสุดตลอด  :cry: :cry: :cry:

กำหนด Topmargin เอาครับ ใส่ค่าตัวเลขยิ่งสูง ข้อความใน textbox ยิ่งลงมาต่ำครับเช่น การกำหนดแบบ เลือกตาม texbox ที่อยากกำหนดว่า แต่ละตัวกำหนดให้ข้อความอยู่ตรงไหน
โค๊ด: [Select]
Private Sub Form_Current()
Me.Textbox1.TopMargin = 100 'กำหนดตัวเลขได้ยิ่งสูงยิ่งต่ำ
End Sub

ถ้าอยากกำหนด textbox ทั้งหมดของฟอร์มกำหนดแบบนี้ครับ
โค๊ด: [Select]
Private Sub Form_Current()
Call SetMarginTextbox
End Sub
Sub SetMarginTextbox()
  Dim ctl As Control
    For Each ctl In Me.Controls
        If ctl.ControlType = acTextBox Then
            ctl.TopMargin = 100
        End If
    Next ctl
End Sub

หมายเหตุตรง
 If ctl.ControlType = acTextBox Then
สามารถกำหนดประเภทตัว control ที่ทำบ่อยๆ ได้ ดังนี้

acComboBox
acCommandButton
acLabel

97
ที่เงื่อนไข คิวรี่ ของเดิมที่ใช้อยู่ดังนี้ครับ  [เลขที่บิล]  ให้ผมเปลี่ยนเป็น FORM![voucher_s]![voucher_id]  ถูกต้องไหมครับ

Forms![voucher_s]![voucher_id]

ที่ forms ต้องมีตัว s ด้วยนะครับ

98
ผมทำ report invoice โดยเชื่อมโยงจาก quiry และทุกครั้งต้องถามเลขที่บิล มีวิธีใดทางลัด ป้อนข้อมูลในฟอร์มขาย สั่งพิมพ์บิลได้เลย ขอคำแนะนำครับ
report invoice เชื่อมโยงจาก Query อยู่แล้วมี Field เก็บเลขที่บิลอยู่แล้ว
ก็ไปกำหนด Criteria ใน Query Field ที่เก็บเลขที่บิล
=Forms![ชื่อฟอร์ม]!txt_Bill
เท่านี้เวลาเปิดรายงานก็จะแสดงข้อมูลที่มีเลขที่บิลนั้นขึ้นมาคับ

เท่านี้เวลาเปิดรายงานเลขที่บิลจะปรากฎขึ้นมาทันทีครับ

100
ขึ้น compile error; syntax error   บรรทัดที่ 5ตรง if txt_date ……….
หมายความว่าผมต้องเพิ่ม ฟิลด์ txt_date ในฟอร์มด้วย หรือเปล่า หรือว่า txt_date ของอจ.คือ bill_date ที่ผมมีอยู่แล้ว ครับ

โค๊ด: [Select]
Private Sub Command0_Click()
Dim StrBill_Date As String
Dim StrtoDay As String
If Not IsNull(Me.Bill_date) Then
StrBill_Date = Format(Bill_date, "D/M/YYYY")
StrtoDay = Format(Now, "D/M/YYYY")
If StrBill_Date = StrtoDay Then
Call ForIsToday
Else
Call ForIsOtherday
End If
End If
End Sub

Sub ForIsToday()
Dim strDate As String
Dim intNum As Integer, intMax As Integer
Dim strSuffix As String
strDate = "IV" & "" & (Format(Now, "yy-mm-dd"))
    If Me.voucher_s_id = "" Or IsNull(Me.voucher_s_id) Then
        If IsNull(DMax("Val(Mid([voucher_s_id],10))", "voucher_s", "Left([voucher_s_id],10) = '" & strDate & " '")) Then
            Me.voucher_s_id = strDate & "-" & "01"
            Debug.Print "1"
        Else
            intMax = DMax("Val(Mid([voucher_s_Id],12))", "voucher_s", "Left([voucher_s_id],10) = '" & strDate & " '")
            intMax = intMax + 1
            Me.voucher_s_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 = "IV" & "" & (Format(Bill_date, "yy-mm-dd"))
    If Me.voucher_s_id = "" Or IsNull(Me.voucher_s_id) Then
        If IsNull(DMax("Val(Mid([voucher_s_id],10))", "voucher_s", "Left([voucher_s_id],10) = '" & strDate & " '")) Then
            Me.voucher_s_id = strDate & "-" & "01"
            Debug.Print "1"
        Else
            intMax = DMax("Val(Mid([voucher_s_Id],12))", "voucher_s", "Left([voucher_s_id],10) = '" & strDate & " '")
            intMax = intMax + 1
            Me.voucher_s_id = strDate & "-" & Format(intMax, "00")
            Debug.Print "1"
        End If

End If
End Sub


ผมแบ่งเป็น 2 Sub คือ
ForIsToday() ผมใช้การเปรียบเทียบวันที่ปัจจุบัน กับ Bill_date ครับ ถ้าวันที่เดียวกัน ก็จะใช้ Now() มาสร้าง เลขที่บิล

ForIsOtherday() เมื่อเช็คว่าวันที่ไม่ใช่วันปัจจุบัน ก็จะเอาวันที่ของ Bill_date มาสร้างเลขที่บิลครับ
ลองดูตัวอย่างด้านล่างนะครับ

101
ใช่ครับกำหนด runningจาก date  และอย่างที่ถามว่าวันที่ 5 มีการใช้เลขที่ไปแล้ว  ผมก็ต้องการให้ running ต่อจากใบสุดท้ายของวันที่ 5  และใบต่อๆๆไปก็ต่อท้ายแต่อยู่ในกรุ๊ปวันที่ 5 คือ IV62-04-05-xx.... ประมาณนี้ครับ
งันลอง Copy Code ข้างบนไปรันดูครับ ว่าได้ไหม Backup ไว้ก่อนนะคับ
การกำหนดวัน ต้องมีวันที่อ้างอิง ครับ ที่ Form เก็บค่าวันที่ไว้ textbox ตัวไหนบ้างไหม เอา textbox ตัวนั้นละมาอ้างอิง

102
Private Sub CmdFind_Click()
Dim strFindName As String
Dim intCount As Integer

If IsNull(Me.TxtFind) Or (Me.TxtFind) = "" Then
MsgBox "ใส่ข้อมูลไม่ครบ โปรดตรวจสอบ"
Me.TxtFind.SetFocus
Else
strFindName = "SELECT * FROM [บุคคลากร] WHERE [ชื่อ-นามสกุล] LIKE '" & TxtFind & "*';"
Me.RecordSource = strFindName

intCount = DCount("*", "บุคคลากร", "[ชื่อ-นามสกุล] = '" & [Forms]![ชื่อฟอร์ม]![TxtFind] & "'")

If intCount > 1 Then
MsgBox "พบ " & intCount & " เรคคอร์ด", vbInformation, "ค้นหาRecord"

ElseIf intCount = 0 Then
MsgBox "ไม่พบข้อมูล", vbCritical, "ค้นหาRecord"
End If

Me.Requery
Me.TxtFind.SetFocus
Me.TxtFind = Null
End If
End Sub

ลองดูครับ ตรงชื่อฟอร์มที่ผมใส่สีแดง ใส่ชื่อฟอร์มเข้าไปด้วยนะครับ

103
ขึ้น compile error:  expected: end of statement ครับ
สมมติฟอร์มชื่อ V1 และ V2 



Private Sub Command278_Click()
    DoCmd.SelectObject acForm, “V1”, True
    DoCmd.PrintOut , , , , 1
    DoCmd.SelectObject acForm, “V2”, True
    DoCmd.PrintOut , , , , 1


ระหว่างเครื่องหมาย " กับชื่อฟอร์ม ต้องติดกันนะคับ แต่ของท่านเหมือนจะมีการเคาะ SpaceBar ด้วยนะครับ มันเลยแจ้ง ERROR
ผมลองเคาะ Space Bar ให้มีช่องว่างระหว่าง ชื่อฟอร์ม Error ก็เกิดครับ ลองแก้ไขดูใหม่นะครับ :grin: :grin:

104
ที่จริงฟอร์ม ต้นฉบับหรือ ฟอร์มสำเนา ไม่ต้องเปิดขึ้นมาเพื่อจะพิมพ์ก็ได้คับ
ผมสมมุติ ฟอร์มต้นฉบับชื่อ Frm_original
           ฟอร์มสำเนาชื่อ Frm_Copy

คำสั่งที่จะนำไปวางที่ Event ที่ต้องการคือ
โค๊ด: [Select]
Private Sub BtnPrint_Click()

    DoCmd.SelectObject acForm, “Frm_original”, True
    DoCmd.PrintOut , , , , 1
    DoCmd.SelectObject acForm, “Frm_Copy”, True
    DoCmd.PrintOut , , , , 1

End Sub
เท่านี้ก็จะทำการปริ้น ทั้ง 2 ฟอร์ม โดยไม่ต้องเปิดฟอร์มขึ้นมาก็ได้คับ
หมายเหตุ ตรง DoCmd.PrintOut , , , , 1  การกำหนดจำนวนว่าจะปริ้นกี่แผ่นนะครับ

105
SELECT Table1.Field1, Table1.Field2, *
FROM Table1
WHERE ((([Field1] & [Field2]) Not In (select [Field1] &[Field2]   from [Table2])));

ถ้า Field 1 และ Field 2 Table 2 มีข้อมูลที่เหมือนกับ Field 1 และ Field 2 ของ Table 1 จะไม่นำมาแสดงครับ

106
การที่นำตาราง2ตารางมาคิวรี่ โดยที่เอาแถวที่ซ้ำกันออก ระหว่าง2ตารางออกไปเลย แล้วแสดงข้อมูลที่ไม่ซ้ำ โดยยึดTable1 เช่น!!

Table1               Table2            ผลลัพธ์Query
--------              --------           ------------
    1                       1                      3
    2                       2
    3                         

กำหนดให้ไม่เอาข้อมูลของ table1 ที่มีเหมือนกับ Table2 โดย Check จากตัวอย่างชื่อ Field1  ของ table1 และ table2

SELECT Table1.Field1, *
FROM Table1
WHERE (((Table1.Field1) Not In (select [Field1] from [Table2])));

107
Event Docmd.Close form ต้องลบออก เพราะ Event ฟอร์มลงรายการมีการอ้างอิง ฟอร์มที่ระบุ ปีและเดือน ครับ
ผมได้แก้ไขและเพิ่มบางส่วนให้ส่งไปทางไลน์แล้วนะคับ

108
แบบนี้ก็ได้ครับ  :love:


หน้า: 1 ... 3 4 5 [6] 7 8 9 ... 32