แสดงกระทู้

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 - aek

หน้า: 1 [2] 3
19
ยินดีครับ thai access บอร์ดแห่งการแชร์ประสบการณ์ การแบ่งปันและการเรียนรู้ครับ ผมเริ่มจากไม่เป็นเลยได้เรียนรู้จากบอร์ดนี้แหละครับ จนพอที่จะแนะนำได้บ้าง :meaw:
โพสต์นี้ได้รับคำขอบคุณจาก: aek

20
ลองดูตัวอย่างนี้ดูครับ
โค๊ด: [Select]
Sub GetColor()
Dim lngWhite As Long
Dim lngYellow As Long
lngYellow = RGB(255, 255, 0)
lngWhite = RGB(255, 255, 255)
If Not IsNull(Me.ยอดทั้งหมด) And Not IsNull(Me.ยอดที่ใช้ไป) Then
    If Me.ยอดทั้งหมด > Me.ยอดที่ใช้ไป Or _
    Me.ยอดทั้งหมด < Me.ยอดที่ใช้ไป Then
    Me.ยอดทั้งหมด.BackColor = lngYellow
    Me.ยอดที่ใช้ไป.BackColor = lngYellow
         Else
         Me.ยอดทั้งหมด.BackColor = lngWhite
         Me.ยอดที่ใช้ไป.BackColor = lngWhite
End If
    End If
End Sub
Private Sub ใช้ไป1_AfterUpdate()
Call GetColor
End Sub
Private Sub ใช้ไป2_AfterUpdate()
Call GetColor
End Sub
Private Sub ใช้ไป3_AfterUpdate()
Call GetColor
Me.ใช้ไป1.SetFocus
End Sub

ส่วนอยากกำหนดเป็นสีอะไรก็กำหนด ตัวแปลเป็นสีนั้น
 สีแดง   RGB(255, 0, 0)
สีดำ     RGB(0, 0, 0)
สีเหลือง RGB(255, 255, 0)
สีขาว    RGB(255, 255, 255)
โพสต์นี้ได้รับคำขอบคุณจาก: aek

21
กำหนดให้ Control Source ของหน้ารายงาน Order เป็น
โค๊ด: [Select]
SELECT Order.[Order No], Order.[Reference no], Order.[Order Type], Order.Sale, Order.Company, Order.Customer, Order.[Order date], Order.Approver, Order.[Approval Date]
FROM [Order]
GROUP BY Order.[Order No], Order.[Reference no], Order.[Order Type], Order.Sale, Order.Company, Order.Customer, Order.[Order date], Order.Approver, Order.[Approval Date];

ส่วน Control Source หน้ารายงาน OrderDetail เป็น
โค๊ด: [Select]
SELECT Order.[Order No], Order.[Pre Approval no], Order.[Order date], Order.Description, Order.[Service Detail], Order.Currency, Order.Amount, Order.Approver, Order.[Approval Date]
FROM [Order];

เท่านี้ก็ได้แบบที่คุณต้องการแล้วคับ
โพสต์นี้ได้รับคำขอบคุณจาก: aek

22
ลอง
text3= textbox1 & CStr(textbox2)
โพสต์นี้ได้รับคำขอบคุณจาก: aek

23
ห้อง MS Access / : สอบถามคำสั่ง Docmd.Movesize
« เมื่อ: 10 ม.ค. 62 , 16:00:35 »
ได้แล้วครับ ขอบคุณคุณปิ่นณรงค์ที่แนะนำการปรับฟอร์มให้พอดีกับหน้าจอครับ ถ้าฟอร์มที่ต้องการ move ไม่พอดีกับจอที่จะให้ออก มันจะไม่ move ให้ ส่วนการใส่ค่าฟอร์มของผมใส่ 30000 ตามที่บอก ใช้ได้เลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: aek

24
ห้อง MS Access / : สอบถามคำสั่ง Docmd.Movesize
« เมื่อ: 10 ม.ค. 62 , 14:40:03 »
ที่ คุณสมบัติฟอร์ม FrmDbLine2_Eng1
เป็นแบบนี้หรือยังครับ


ใส่เป็น

  DoCmd.MoveSize 30000, 0, 0, 0

เลยครับ  :cool: :cool:
โพสต์นี้ได้รับคำขอบคุณจาก: aek

25
1. สร้างฟอร์มกรอกข้อมูลมา 1 ฟอร์ม โดยฟอร์มนี้ไม่ต้องมี Datasource โดยฟอร์มนี้ไม่ต้องใส่ Invoice ID
2. ใส่ปุ่ม Insert Data เข้าไปในตาราง เอาๆว้ในฟอร์มนี้
3. เมื่อคลิกปุ่ม Insert Data ก็ทำการ Generate Invoice ID โดยอ้างอิงจากข้อมูลที่มีอยู่ในตาราง

วิธีนี้ใครคลิกก่อนก็ได้เบอร์ก่อน ยิ่งถ้าใช้ระบบ LAN ในการทำงาน โอกาสจะเกิด Invoice ID ซ้ำแทบเป็นไปไม่ได้ เพราะมี Token Ring เป็นตัวควบคุม
โพสต์นี้ได้รับคำขอบคุณจาก: aek

26
โทษทีที่ตอบช้านะครับ
ลองดูตัวอย่างนี้ ใช้การแสดงจำนวนแล้ว สอบถามผู้ใช้เลยว่า ต้องการนำเข้าข้อมูลเลยหรือไม่ครับ ถ้าตอบใช่ก็จะทำการนำเข้าให้ทันที พร้อมเปลี่ยนนามสกุล เป็น .xxx เมื่อนำเข้าแล้วครับ  ส่วนที่ผมใส่สีแดงไว้คือส่วนที่ต้องแก้ให้ตรงกับ Floder และ ตาราง ที่มีอยู่นะครับ


Private Sub Command0_Click()
    Dim Msg As Integer
    Dim count As Integer
    Dim strPath As String
    Dim strFile As String
         
        strPath = "D:\textfile\"
        strFile = Dir(strPath & "*.txt")
    If strFile = "" Then
    MsgBox "ไม่เจอไฟล์ที่จะ import !!", vbCritical, "แจ้งเตือน"
    Exit Sub
    Else
    Do While strFile <> ""
       count = count + 1
        strFile = Dir()
    Loop

     Msg = MsgBox("พบ File =  " & count & " อัน" & vbCrLf & " ต้องการนำเข้าไฟล์เลยหรือไม่?", vbYesNo+vbQuestion, "จำนวนไฟล์ทั้งหมด")

    If Msg = vbYes Then
    Call Import
    End If
           End If     
End Sub


Sub Import()
    Dim strPath As String
    Dim strFile As String
    Dim strTable As String
    Dim StrFileName As String
    Dim strextensionNew As String
   
    strTable = "Table1"
    strPath = "D:\textfile\"
   
    strFile = Dir(strPath & "*.txt")
   
    Do While strFile <> ""
    StrFileName = strPath & strFile
    DoCmd.TransferText acImportDelim, "", strTable, StrFileName, False
    strextensionNew = Left(StrFileName, InStrRev(StrFileName, ".") - 1) & ".xxx"
    Name StrFileName As strextensionNew
    strFile = Dir
    Loop
End Sub

โพสต์นี้ได้รับคำขอบคุณจาก: aek

27
คือผมใช้ข้อมูลที่ import มาจาก mapdrive ไว้ บ้างที่ drive เป็น disconnect ผู้ใช้จะไม่ทราบ ทำให้คิดว่าไม่มีข้อมูลใหม้เข้ามา อ.ท่านไหน ที่พอมีแนวทางหรือโค้ดตัวอย่างบ้างไหมครับ

ขอบคุณครับ

 :prettiness: :prettiness: :prettiness:

ปกติคุณจะ Import จาก Mapdrive โดยกำหนดโฟลเดอร์ใน Mapdrive เพื่อที่จะ Import ใช่ไหมครับดูจาก โค้ด import ก่อนหน้านี้ที่เคยสอบถามมา
 ถ้าใช่ เราก็ใช้การ Dir() หาชื่อโฟลเดอร์นั้นเอาก็ได้คับว่าค้นหาเจอไหม
กรณีที่ Mapdrive Disconnect ก็ให้แสดงว่า ไม่สามารถเชื่อมต่อได้
กรณีที่เจอก็ให้แสดงว่า เชื่อมต่อได้ครับ

ผมกำหนดปุ่ม CommandBotton ชื่อ Command0 นะครับ

Private Function MapDriveExists(ByVal Path As String) As Boolean
  On Error Resume Next
  MapDriveExists = Dir(Path, vbDirectory) <> ""
End Function


Sub connectedToMapdrive()
  If MapDriveExists("Z:\MyData\FloderName") Then
   MsgBox "พบการเชื่อมต่อ Mapdrive", vbInformation, "Status"
  Else
    MsgBox "ไม่พบการเชื่อมต่อ Mapdrive ของท่าน" & "....", vbInformation, "Status"
  End If
End Sub


Private Sub Command0_Click()
Call connectedToMapdrive
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: aek

28
ใช้คำสั่ง Call ครับ

โพสต์นี้ได้รับคำขอบคุณจาก: aek

29
ห้อง MS Access / : อยากทำ progress meter
« เมื่อ: 10 ธ.ค. 61 , 17:14:08 »
ลองดูคลิปนี้นะครับ แต่การแสดง meter มันทำให้เครื่องต้องเสียเวลาแสดงส่วนนี้เพิ่มด้วยทำให้การทำงานช้าลงอีกนะครับ



ปล. มันจะมีอีกอย่างคือ progress meter ที่ Status bar ไม่แน่ใจว่าตั้งแต่ MS Access เวอร์ชั่น 2007 หรือ 2010 ขึ้นไป ก็สามารถเขียนคำสั่งให้มันแสดงความก้าวหน้าได้ ตัวอย่าง

1. สร้างตัวแปร
Dim ReturnValue As Variant
 
2. กำหนด สเกล ให้ เท่ากับ 100
ReturnValue = SysCmd(acSysCmdInitMeter, "Processing ", 100)
 
3. สมมุติเป็นการนับเรคคอร์ดทั้ง ก็ทำให้ เป็น เปอร์เซนต์
For StartLoop = 0 To (TotalRecord - 1)
      ReturnValue = SysCmd(acSysCmdUpdateMeter, ((StartLoop) / TotalRecord) * 100)
Next StartLoop
 
4. เคลียร์
ReturnValue = SysCmd(acSysCmdRemoveMeter)

อะไรประมาณนี้ครับ ปรับใช้ดู

โพสต์นี้ได้รับคำขอบคุณจาก: aek

30
ไฟล์ที่แนบมาแตกไฟล์ไม่ได้ครับคุณปิ่นณรงค์

ปกติผม แตกไฟล์กับ 7zip ครับลองดูอันใหม่ครับว่าได้ไหม
โพสต์นี้ได้รับคำขอบคุณจาก: aek

31
เพิ่มนิดนึงประมาณนี้ครับ เพิ่ม CODE ให้เมื่อ Dir มาแล้ว Import เข้าไปในตารางแล้วก็ให้แก้นามสกุลไฟล์นั้นเป็น .XXX ก่อนจึงจะไป Dir อันใหม่มา Import ต่อ

Private Sub import_Click()
    Dim strPath As String
    Dim strFile As String
    Dim strTable As String
    Dim StrFileName As String
    Dim strextensionNew As String

    strTable = "Table1"
    strPath = "D:\textfile\"
    strFile = Dir(strPath & "*.txt")
    If strFile = "" Then
    MsgBox "ไม่พบไฟล์ที่จะ Import !!", vbCritical, "แจ้งเตือน"
    Exit Sub
    End If
    Do While strFile <> ""
    StrFileName = strPath & strFile
    DoCmd.TransferText acImportDelim, "", strTable, StrFileName, False
   
    strextensionNew = Left(StrFileName, InStrRev(StrFileName, ".") - 1) & ".xxx"
   
   
   
    Name StrFileName As strextensionNew
    strFile = Dir
    Loop
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: aek

32
ถ้าแบบ Single  อาจจะใช้การดึงข้อมูลมาแสดงโดยใช้ DLOOKUP ก็ได้คับ
หรือท่านอาจจะสร้างฟอร์มอีกฟอร์มเพื่อใช้แสดงข้อมูล Import ทั้งหมดที่มี แบบ continuous form แล้วกดเลือก Record ที่ต้องการมาแสดงที่ฟอร์มหลักที่เป็น Single ก็น่าจะสะดวกดีนะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: aek

33
ทำได้แล้วครับ อ. แต่ขออนุญาติถามเพิ่มนะครับ ถ้าตาราง maindata มีฟอร์มสำหรับที่กรอกข้อมูลเข้ามาที่ตารางอยู่แล้ว ถ้าเราต้องการให้ import ข้อมูลจาก data1เข้าในฟอร์มก่อนที่จะเข้าตาราง maindata (กด save ถึงเข้า)(data1-->ฟอร์กรอกข้อมูล-->maindata) พอจะมีวิธีหรือหลักการอย่างไรบ้างไหมครับ ขอบคุณครับ

สอบถามเพิ่มเติม
1.ฟอร์มเป็นแบบ continuous form ใช่ไหมครับ
2.ต้องการ Import มาทีละรายการ หรือทั้งหมดในคราวเดียวครับ

วิธีการสามารถทำได้คับ โดยปกติแล้วเวลาผมทำโดยให้ฟอร์มดึงข้อมูลจาก Data1 มาก่อน (สามารถใช้ฟอร์มกรอกข้อมูลได้เลย ใช้การเปลี่ยน  record source เอา) พอจะ save ข้อมูลของ data1 ไปยัง maindata ก็ใช้คิวรี่ Append ไปอีกทีคับ วิธีนี้ดีตรงไม่ได้ทำบนตาราง maindata โดยตรงข้อมูลจะถูกจัดเก็บเมื่อกด save เท่านั้น
โพสต์นี้ได้รับคำขอบคุณจาก: aek

34
ผมมีตัวอย่างให้ลองศึกษาดู 2 แบบด้วยกันนะครับ

แบบแรกคือใช้การเขียนคำสั่งโดยไม่ต้องไปสร้างคิวรี่
โดยใช้คำสั่งประมาณนี้


โค๊ด: [Select]
Private Sub Command1_Click()
Dim StrSQL As String
Dim Confirm As String
        StrSQL = "INSERT INTO maindata ( AA, CC, EE, FF )" & _
        "SELECT data1.AA, data1.CC, data1.EE, data1.FF " & _
        "FROM data1"
     Confirm = MsgBox("คุณต้องการนำเข้าข้อมูลไปยังตารางหลักหรือไม่ ?", vbYesNo + vbInformation, "แจ้งเตือน!!")
     If Confirm = vbYes Then
DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
Else
Exit Sub
End If
End Sub

แบบสองคือใช้คิวรี่ในการทำงาน แล้วสร้างปุ่มขึ้นมาเพื่อเรียกใช้งานคิวรี่ที่เราสร้างขึ้น


ลองโหลดตัวอย่างไปทดลองดูนะครับ ติดตรงไหนสอบถามได้
โพสต์นี้ได้รับคำขอบคุณจาก: aek

35
หมายถึง จะสร้างปุ่มขึ้นมา 1 ปุ่ม แล้วกดครั้งเดียวให้ File ทั้งหมดที่เป็น .txt Import เข้าตารางทั้งหมดใช่ไหมครับ


Private Sub Command1_Click()
    Dim strPath As String
    Dim strFile As String
    Dim strTable As String
    Dim StrFileName As string

    strTable = "ชื่อตารางเป้าหมาย"     
    strPath = "d:\โฟลเดอร์ที่เก็บไฟล์ .txt"
    strFile = Dir(strPath & "*.txt")

    Do While strFile <> ""
    StrFileName = strPath & strFile       
    DoCmd.TransferText acImportDelim, "importdata", strTable, StrFileName ,False
           
    strFile = Dir
    Loop
End Sub

ลองเทสดูก่อนนะครับ พอดีไม่ได้ทดสอบคำสั่งก่อนถ้ามีผิดพลาดบอกได้นะ
โพสต์นี้ได้รับคำขอบคุณจาก: aek

36
กำหนดให้ คำสั่งใส่ 0 รอไว้ให้เราเลยครับ
พอได้รหัสจากบาร์โคด เช่น 1234 ข้อมูลจากคำสั่งนี้จะได้เป็น 01234.txt และทำการ Import ให้ทันทีครับ
Private Sub textbox1_AfterUpdate()
Dim StrFileName As string
StrFileName =  "d:\0" & Me.textbox1 & ".txt"
DoCmd.TransferText acImportDelim, "importdata", "import", StrFileName ,True
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: aek

หน้า: 1 [2] 3