แสดงกระทู้

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

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

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

38
ผมมีตัวอย่างให้ลองศึกษาดู 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

39
หมายถึง จะสร้างปุ่มขึ้นมา 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

40
กำหนดให้ คำสั่งใส่ 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

41
เวลาคุณกรอกข้อมูล เป็นการสร้าง textbox1 และใส่ชื่อไฟล์รวมทั้งนามสกุลไปเลยหรือเปล่า
เช่น ใน textbox1 คุณใส่ไปว่า 1234.txt แล้วกด Enter แล้วคำสั่ง Import ก็จะทำงานแบบนี้หรือเปล่า ถ้าใช่

ให้กำหนด Event Afterupdate ของ textbox1 ดังนี้
โค๊ด: [Select]
Private Sub textbox1_AfterUpdate()
Dim StrFileName As string
StrFileName =  "d:\" & Me.textbox1
DoCmd.TransferText acImportDelim, "importdata", "import", StrFileName ,True
End Sub

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

42
เราใช้ฟอนท์ Wingding สำหรับเท็กซ์บ็อกซ์เพื่อแสดงรูปสัญญลักษณ์ได้ สมมุติ P คือชื่อฟิลด์ที่เก็บ path ของรูป ก็กำหนด Control Source ของเท็กซ์บ็อกซ์ที่แสดงสัญญลักษณ์เป็น =IIf(nz([P],"")="","","*") มันก็จะแสดงสัญญักษณ์ จดหมาย (เพราะหาไม่เจอสัญญลักษณ์รูป คลิป)  ถ้าอยากได้สัญญลักษณ์อื่นๆ ก็เปิดโปรแกรม Character Map ที่มากับวินโดว์อยู่แล้ว เลือกฟอนท์ Webding, Wingding(1-3) เอาตัวไหนก็ดับเบิลคลิกรูปแล้วคลิกปุ่ม Copy  กลับมาที่ expression ข้างบน กดคีย์ paste ลงแทนที่ * ได้เลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: aek

43
ผมมีโค้ดตัวนึง ลองเอาโค้ดนี้ไปใช้ดู แต่ไม่ยืนยันนะครับว่าจะถูกต้อง 100% หรือไม่
โค๊ด: [Select]
Public Sub CutLastCRLF(aFullFileNM As String)
    Dim B As String * 1
    Dim S As String
    Dim L As Long

    Open aFullFileNM For Binary Access Read As #1
    Do Until EOF(1)
        Get #1, , B
        S = S & B
    Loop
    Close #1

    If Right(S, 3) <> vbCr & vbLf & vbNullChar Then
        Exit Sub
    End If

    S = Left(S, Len(S) - 3)

    On Error Resume Next
    Kill aFullFileNM

    On Error GoTo 0
    Open aFullFileNM For Binary Access Write As #1
    Put #1, , S
    Close #1
End Sub
จะเรียกใช้ก็สั่ง Call CutLastCRLF("Drive:\Path\File.txt") มันจะเขียนทับไฟล์เดิมครับ
โพสต์นี้ได้รับคำขอบคุณจาก: aek

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

หน้า: 1 2 [3]