แสดงกระทู้

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 ... 32
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:

49
ผมได้ปรับปรุงโปรแกรมให้มีการจัดเก็บเป็นหมวดหมู่ นะครับ
ตารางมีดังนี้


Tbl_GroupNum ตารางนี้เก็บรหัสประจำกลุ่มของรูปภาพ สมมุติกลุ่ม 1 มีภาพ 1 2 3 4 5 6 ไปเรื่อยๆ ครับ
Tbl_Picture       ตารางนี้เก็บรหัสของกลุ่มไว้ และเก็บตำแหน่ง Path เดิมที่รูปภาพอยู่ และ ตำแหน่งรูปภาพใหม่ ที่เรา Copy ไปเก็บไว้โฟลเดอร์
TempPath        ตารางนี้เก็บตำแหน่ง Floder ที่ใช้ในการเก็บรูปภาพที่เราต้องการ โดยไปสร้าง Floder ไว้ให้เรียบร้อยแล้ว กำหนด Path ใน       
                      Combobox ครับ

การใช้งาน

1.เมื่อเราเปิดโปรแกรมมาโดยยังไม่ได้มีการเพิ่มข้อมูล NO จะเริ่มต้นให้เองที่เลข 1
2.กำหนด ตำแหน่งจัดเก็บไปยัง Floder ปลายทางให้เรียบร้อย
3.กด Import เลือกรูปที่ต้องการจัดเก็บ
4.กด Add เพื่อบันทึกรูปภาพไปยังตาราง และข้อมูลจะแสดงที่ ตารางด้านขวาขึ้นทันที
5.เมื่อเพิ่มรูปภาพใน Group เดิมเสร็จแล้ว ต้องการสร้าง Group ใหม่ สามารถกดที่ New Group ได้เลยครับ
6.ถ้าต้องการค้นหาหรือเรียกดู Group อื่น ก็ใส่รหัส Group ที่ textbox GOTO GROUP แล้วกด OK
7.เมื่อเลือกรูปภาพแล้วอยาก Clear Form เพื่อเอารูปภาพใหม่ กดปุ่ม Clear
8.คลิ๊กที่เลขลำดับด้านขวา จะแสดงรูปตัวอย่างของรูปภาพที่เรา Add ไปแล้ว


[info]อัพเดท ตัวใหม่ล่าสุดใช้การรันลำดับการนำเข้าด้วยครับ สะดวกต่อการตรวจสอบ[/info]

50
อ้างถึง
เพิ่มนามสกุลไฟล์จาก JPG เป็นไฟล์รูปภาพอื่นต้องเพิ่มอย่างไรครับ



ถ้าจะเพิ่มการเก็บไฟล์รูปภาพประเภทอื่นๆ ด้วยลองใส่ตามนี้ครับมี 2 แบบให้เลือก
โค๊ด: [Select]
Private Sub Import_Click()
Dim File As FileDialog
Dim strPath, StrFile, SetPathon As String
If IsNull(Me.SetPath) Then
MsgBox "กรุณากำหนด Path ที่จะจัดเก็บก่อน", vbInformation, "แจ้งเตือนขั้นตอน"
Else
Set File = Application.FileDialog(msoFileDialogFilePicker)
With File
        .Title = "เลือกรูปภาพ"
        .Filters.Clear
        .Filters.Add "JPG", "*.JPG"
        .Filters.Add "BMP", "*.BMP"
        .Filters.Add "JPEG File ", "*.JPEG"
        .Filters.Add "GIF", "*.GIF"
        .Filters.Add "PNG", "*.PNG"
        .Filters.Add "TIFF", "*.TIFF"
        .Filters.Add "ALL Pictures", "*.JPG,*.BMP,*.JPEG,*.GIF,*.PNG,*.TIFF"
 End With
If File.Show Then
Me.PhotoPath = File.SelectedItems.Item(1)
End If
If Not IsNull(PhotoPath) Then
SetPathon = SetPath
strPath = Me.PhotoPath
StrFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
Me.SetPath = SetPathon & "\" & StrFile
End If
End If
End Sub

หรือแบบไม่ต้องกำหนด ประเภทไฟล์คือให้แสดงทุกรูปแบบนามสกุลไฟล์ที่เป็นรูปภาพตามที่เรากำหนดประมาณนี้ครับ

โค๊ด: [Select]
Private Sub Import_Click()
Dim File As FileDialog
Dim strPath, StrFile, SetPathon As String
If IsNull(Me.SetPath) Then
MsgBox "กรุณากำหนด Path ที่จะจัดเก็บก่อน", vbInformation, "แจ้งเตือนขั้นตอน"
Else
Set File = Application.FileDialog(msoFileDialogFilePicker)
With File
        .Title = "เลือกรูปภาพ"
        .Filters.Clear
        .Filters.Add "ALL Pictures", "*.JPG,*.BMP,*.JPEG,*.GIF,*.PNG,*.TIFF"
End With
If File.Show Then
Me.PhotoPath = File.SelectedItems.Item(1)
End If
If Not IsNull(PhotoPath) Then
SetPathon = SetPath
strPath = Me.PhotoPath
StrFile = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
Me.SetPath = SetPathon & "\" & StrFile
End If
End If
End Sub

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

51
เจอเหตุแล้วค่ะ

เป็นอย่างที่คิดไว้จริงๆ สรุป คีย์บอร์ดเสียค่ะ
บางปุ่มกดแล้วมีอาการเบิ้ลอักขระ โล่งอกไปที ดีนะที่มีคีย์บอร์ดเก่ามาลองเปลี่ยนดู

  :startle: :startle: :startle: :XD: :XD:

52
อ้างถึง
Tank จะมีแยก2 คอลัมณ์
Internal 15ปี 1 ครั้ง
External ปีละ 1 ครั้ง

ผมได้ทำตัวอย่างแนบไว้โพสด้านบนนะครับ
Internal 15ปี 1 ครั้ง ได้แนวคิดจากอาจารย์วรพจ มาเลยไปต่อได้ ใช้การเอา (ปีปัจจุบัน - ปีที่ต้องการหา) / 15
แล้ว เลือกข้อมูลที่เป็นจำนวนเต็มครับมาแสดงครับ

53
เพิ่มเติม

Safety valve ปีละ 1 ครั้ง
หม้อแปลง ปีละ 1 ครั้ง
PRESSURE RELIEF VALVE ปีละ 1 ครั้ง
Tank จะมีแยก2 คอลัมณ์
Internal 15ปี 1 ครั้ง
External ปีละ 1 ครั้ง


เหลือ เช็คทุก 6 เดือนไว้ว่างๆ จะทำตัวอย่างให้ดูครับ
Field Fix คือช่วงเดือนละปีที่ถึงวันครบรอบนะครับ
ปล แก้ระบบค้นหาตามเงื่อนไขให้ใหม่แล้วด้วยนะคับ

54
คือผมต้องการใช้ query กำหนด day time และก็ night time เพื่อแบ่งข้อมูลจะทำได้ไหมครับ

ผมสมมุติฟิลล์เก็บ เวลาชื่อ Ontime และกำหนดให้ 8 โมงเช้า ถึง 6 โมงเย็นเป็นเวลากลางวัน

ที่ Query กำหนดฟิลล์ว่า
โค๊ด: [Select]
IIf([Ontime] Between #8:00:00# And #18:00:00#,"day time","night time")

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