แสดงกระทู้

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 6 ... 36
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 ตามประเภทไฟล์ครับ

37
เช็ค path จากตัวแปร   sLink  เลยก็ได้คับถ้าเปิดอยู่ก็สั่งปิดแล้ว Copy พอ Copy เสร็จสั่งลบไฟล์เก่าเลย
ตรง Reference เพิ่ม microsoft scripting runtime ด้วยนะครับ

โค๊ด: [Select]
Dim sPath, sfilename, sLink, sCopyInto, myOutput As String
Dim fso As Object
Dim OpenDB As Object
Dim myFileOld As FileSystemObject

    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
   
    Set OpenDB = GetObject(sLink) 'สั่งปิดไฟล์ก่อน
    OpenDB.Application.Quit
    Set OpenDB = Nothing

    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

38
น่าจะประมาณนี้คับ เอาโค้ด Sql นี้ไปวางแล้วรันดูคับ ผมสมมุติชื่อ tableหรือQuery ที่จะนำข้อมูลมาบวกลบ ว่า Table เลยนะครับ ถ้าชื่อ table เป็นชื่ออื่นๆก็กดแก้ก่อนนะครับ

ถ้าข้อมูลเป็น Number นะครับ

โค๊ด: [Select]
SELECT IIf([จำนวนวันลาสะสม]=0,Nz([จำนวนวันลาประจำปี],0)-Nz([จำนวนลาครั้งนี้],0),Nz([จำนวนวันลาสะสม],0)-Nz([จำนวนลาครั้งนี้],0)) AS ผลลัพท์, table.[จำนวนวันลาสะสม], table.[จำนวนวันลาประจำปี], table.รวม, table.[จำนวนลาครั้งนี้], table.[คงเหลือวันลา]
FROM [table];

ถ้าข้อมูลเป็น Text

โค๊ด: [Select]
SELECT IIf([จำนวนวันลาสะสม]="0",Nz([จำนวนวันลาประจำปี],0)-Nz([จำนวนลาครั้งนี้],0),Nz([จำนวนวันลาสะสม],0)-Nz([จำนวนลาครั้งนี้],0)) AS ผลลัพท์, table.[จำนวนวันลาสะสม], table.[จำนวนวันลาประจำปี], table.รวม, table.[จำนวนลาครั้งนี้], table.[คงเหลือวันลา]
FROM [table];

39
ห้อง MS Access / : กำหนดช่วงวันที่
« เมื่อ: 27 พ.ค. 62 , 08:01:14 »
ตัวอย่าง 2 แบบ

40
ห้อง MS Access / : กำหนดช่วงวันที่
« เมื่อ: 24 พ.ค. 62 , 15:20:44 »
เดือน(วันที่ - 10) + 1 น่าจะให้ผลเดียวกันได้
จริงด้วยอาจารย์ง่ายดีคับ

41
ใช้การดักค่าว่างด้วย Nz Fuction ครับถ้าค่ามันว่างให้แทนค่าเป็น 0
รูปแบบ คือ Nz([ชื่อฟิลล์]),0)

โค๊ด: [Select]
SELECT [VATSALE Query1].Vatmonth, [VATSALE Query1].[Sum Of Price] AS SALE, Format(Nz(DLookUp("[Sum Of Price]","[Vatbuy Query1]","Vatmonth = '" & [Vatmonth] & "'"),0),"Standard") AS Buy, Format(Nz([sale])-Nz([buy]),"Standard") AS [Sale-Buy]
FROM [VATSALE Query1];

42
หรือจะใช้ Dlookup แทนการ Join Table ก็น่าจะแสดงผลเร็วดีครับ
โค๊ด: [Select]
SELECT [VATSALE Query1].Vatmonth, [VATSALE Query1].[Sum Of Price] AS SALE, Format(DLookUp("[Sum Of Price]","[Vatbuy Query1]","Vatmonth = '" & [Vatmonth] & "'"),"Standard") AS Buy, Format(Nz([sale])-Nz([buy]),"Standard") AS [Sale-Buy], *
FROM [VATSALE Query1];

43
เรียนอาจารย์ข้อ 1.ผมเข้าใจละครับเรื่อง Funtion If
2.ได้แล้วครับผมสลับ strUserID กับ  strTxItem สลับ Text ครับ
3. ยังติดอยู่ครับว่าทำไมมันไม่ setfocus ให้
โพสโค้ดที่แก้แล้ว ข้อ 1 กับ 2  มาดูหน่อยครับ
เพราะการใช้ IF ข้างบนมันผิดตำแหน่งเล็กน้อย ต้องแก้

44
ลองดูโค้ดนี้ครับ ไม่รู้รันผ่านไหมยังไม่ได้เทสครับ สร้างคิวรี่ใหม่ขึ้นมาเอา SQL นี้ไปวางแล้วรันดู

โค๊ด: [Select]
SELECT [VATBUY QUERY1].VatMonth, [VATSALE QUERY1].[Sum Of Price] AS Sale, [VATBUY QUERY1].[Sum Of Price] AS Buy, Format(Nz([sale])-Nz([buy]),"Standard") AS [Sale-Buy]
FROM [VATBUY QUERY1] INNER JOIN [VATSALE QUERY1] ON [VATBUY QUERY1].VatMonth = [VATSALE QUERY1].VatMonth;

45
ผมมีตัวอย่างการทำงานแบบที่คุณบอกไว้ โดยใช้ปุ่ม Run แทน Event Enter ของ เครื่อง Barcode นะครับ

แบบที่ 1
1.ระบุรหัส Barcode แล้วกด Run ข้อมูลจะสร้าง รหัส Barcode แบบเดียวกันจำนวน 5 แถว สวนรายละเอียด ของ Combobox คุณไปกำหนดเอาเองนะครับ
2.ข้อมูลที่ได้ในฟอร์มจะจัดเก็บไว้ในตารางชั่วคราว ชื่อ LNBTemp
3.เมื่อต้องการบันทึก ผมสร้างปุ่มบันทึกไว้ ถ้าตอบ Yes ข้อมูลในฟอร์มจะนำเข้าไปยังตารางหลักทันที และลบข้อมูลในตารางชั่วคราวทันที เพื่อรับข้อมูลใหม่

แบบที่ 2
1.ระบุรหัส Barcode แล้วกด Run ข้อมูลจะสร้าง รหัส Barcode มา 1 อันและพร้อมรับรหัส Barcode อันต่อไป 
2.ข้อมูลที่ได้ในฟอร์มจะจัดเก็บไว้ในตารางชั่วคราว ชื่อ LNBTemp
3.เมื่อต้องการบันทึก ผมสร้างปุ่มบันทึกไว้ ถ้าตอบ Yes ข้อมูลในฟอร์มจะนำเข้าไปยังตารางหลักทันที และลบข้อมูลในตารางชั่วคราวทันที เพื่อรับข้อมูลใหม่
ลองดูตัวอย่างด้านล่างครับ ทั้ง 2 แบบ

46
ฟอร์มน่าจะต้องสร้างเป็นแบบ continuous Form นะครับ และ Control ทุกตัวจะ สร้างแบบ unbound  ก็ได้ หรือ bound กับตารางชั่วคราว แล้วค่อย Append ไปยังตารางหลัก

1.เวลาแสกนได้ แถวแรกมาแล้ว ก็สั่งให้ docmd.GoToRecord,,acNewRec และสั่งให้ Curser Setfocus ที่ LNB ของเรคคอร์ดอันใหม่นั้นเพื่อรับการแสกนครั้งต่อไป
2.พอใส่ข้อมูลตามหมายเลข 2 3 4 เสร็จแล้ว ก็ใช้ Append Query ข้อมูลทั้งหมดนี้้ไปไว้ในตารางหลักครับ และ เคลียข้อมูลในตารางชั่วคราวเพื่อรับข้อมูลใหม่

47
ห้อง MS Access / : กำหนดช่วงวันที่
« เมื่อ: 22 พ.ค. 62 , 16:04:28 »

ลองดูนะครับ ไม่รู้ใช่ที่ต้องการหรือเปล่า
แนวคิดคือ
1.ถ้าเกินวันที่ 10 ก็ให้ เดือน +1
2.ถ้าเป็น เดือน 12 และ วันที่ >10 ให้ เดือนเท่ากับ 1 และ ปี+1


แบบที่ 1 แบบแสดงเดือนเป็นตัวเลข และเดือนแบบตัวอักษร
โค๊ด: [Select]
Private Sub txtDate_AfterUpdate()
Dim sMonth As String
Dim sDate As String
Dim result As String

sMonth = Month(Me.txtDate)
sDate = Day(Me.txtDate)
sYear = Format(txtDate, "yyyy")

If sDate <= 10 Then
result = Me.txtDate
Else
result = sDate & "/" & sMonth + 1 & "/" & sYear
If (Mid(result, 4, 2)) = "13" Then

result = sDate & "/" & "1" & "/" & (Format(txtDate, "yyyy") + 1)
Else
result = result
End If
End If
result = result
Me.txtMonth = "เดือน" & Month(result) & " " & MonthName(Month(result))
End Sub

แบบที่ 2 แสดงเดือนและปีแบบเต็ม
โค๊ด: [Select]
Private Sub txtDate_AfterUpdate()
Dim sMonth As String
Dim sDate As String
Dim result As String

sMonth = Month(Me.txtDate)
sDate = Day(Me.txtDate)
sYear = Format(txtDate, "yyyy")

If sDate <= 10 Then
result = Me.txtDate
Else
result = sDate & "/" & sMonth + 1 & "/" & sYear
If (Mid(result, 4, 2)) = "13" Then 'ดักเงื่อนไข กรณี เดือน 12 +1 จะเท่ากับ 13

result = sDate & "/" & "1" & "/" & (Format(txtDate, "yyyy") + 1) 'ก็ให้แปลงกลับเป็นเดือน 1 และ +ปี ไปอีก 1
Else
result = result
End If
End If
Me.txtMonth = result

End Sub

48
ยินดีครับ ที่จริงมันสามารถ Convert File รูป เป็นรูปแบบที่ต้องการได้ด้วยนะครับ เช่น ต้นฉบับเป็น .BMP จะแปลงเป็น .JPEG หรือ อื่นๆได้ โดยใช้ WIA
แต่จากความต้องการเจ้าของกระทู้ ไม่น่าจะใช้ในส่วนนี้ครับ  :cool: :cool:

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