สมัครสมาชิก

แสดงกระทู้

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

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


ใส่เป็น

  DoCmd.MoveSize 30000, 0, 0, 0

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

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

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

4
โทษทีที่ตอบช้านะครับ
ลองดูตัวอย่างนี้ ใช้การแสดงจำนวนแล้ว สอบถามผู้ใช้เลยว่า ต้องการนำเข้าข้อมูลเลยหรือไม่ครับ ถ้าตอบใช่ก็จะทำการนำเข้าให้ทันที พร้อมเปลี่ยนนามสกุล เป็น .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

5
คือผมใช้ข้อมูลที่ 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

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

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

7
ห้อง 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

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

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

9
เพิ่มนิดนึงประมาณนี้ครับ เพิ่ม 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

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

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

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

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

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

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

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

15
เวลาคุณกรอกข้อมูล เป็นการสร้าง 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

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

หน้า: [1] 2