แสดงกระทู้

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

หน้า: 1 ... 4 5 6 [7]
97
เราสามารถใช้ฟังก์ชั่น Dlookup() ตรวจสอบได้ครับว่าฟิลด์ Attachment มีไฟล์อยู่หรือไม่ เช่น สมมุติตารางชื่อ Table1 ฟิลด์ Attachment ชื่อ Attach ก็เขียนตรวจสอบที่ปุ่มบันทึกก็ได้ครับ ก่อนคำสั่งบันทึก

If Dlookup("Attach","Table1","ID=" & Me.ID) = "" then
    "ยังไม่มีการแนบไฟล์" ...
Else
    "มีการแนบไฟล์แล้ว" ...
End IF

ปล. การใช้ Dlookup() จะ Retrun ชื่อไฟล์ทั้งหมดที่อยู่ในฟิลด์ Attachment หากมีการแนบไฟล์เป็น ชือไฟล์.นามสกุล,ชือไฟล์.นามสกุล,...ไปเรื่อยๆ
ปรับใช้ดูครับ

98
@bookungth หลายคนหลายความคิดดีแล้วครับ

ปล. ไม่เคยรู้ว่ามี FC ด้วย เคยแต่เป็น FC คนอื่นเหมือนกัน ขอบคุณครับ

99
อื่ม! อาการเหมือนเครื่องไม่มีโปรแกรม Excel อะครับ
ลองดูใน References ของ VBE ดูว่ามี Microsoft Excel 15.0 Object Library หรือเปล่า


- ถ้ามีก็ให้ทำเครื่องหมายถูกไว้ แล้วทำอย่างที่ อ. pizza_p แนะนำ เราจะสามารถเขียนคำสั่ง Property ต่างๆได้อย่างถูกต้อง และตรวจสอบ Debug ได้
- แต่ถ้าไม่มี แสดงว่าเครื่องคุณลงโปรแกรม Excel ผิดปกติอะครับ แนะนำลองลง Excel ใหม่ดูครับ

100
สมมุติคุณมีตาราง Transaction ประมาณนี้
-------------------------------------------
ProductName    Quantity    Price
        A                 10         5
        A                 15         5
        A                 20         5
        A                 25         5
-------------------------------------------
- ในคิวรี่ก็ให้สร้างฟิลด์เพิ่มดังนี้
subtotal: สำหรับรวมราคาย่อย
Discount: คำนวณส่วนลดตามเงื่อนไข
Total: รวมราคา
- สมมุติตารางชื่อ Table1
------------------------------------------------------
SELECT ProductName, Quantity, Price,
[Quantity]*[Price] AS subTotal,
IIf([Quantity] Between 16 And 20,([Quantity]*[Price])*0.02,IIf([Quantity] Between 21 And 30,([Quantity]*[Price])*0.03,IIf([Quantity]>30,([Quantity]*[Price])*0.04,0))) AS Discount, [subTotal]-[Discount] AS Total
FROM Table1;
-------------------------------------------------------
ประมาณนี้ครับ ปรับใช้ดู

101
สมมุติไฟล์เป้าหมายของคุณอยู่ที่ Path C:\Data\Files\
- ที่ Combobox สมมุติให้ชื่อ Combo1 ให้ใส่โค้ดลงใน Event > On Got Focus
โค๊ด: [Select]
    Dim strFile As String, nFiles As String
    strFile = Dir("C:\Data\Files\", vbNormal)
    Do While strFile <> ""
        nFiles = nFiles & ";" & strFile
        strFile = Dir()
    Loop
    Me.Combo1.RowSource = Mid(nFiles, 2)
ประมาณนี้ครับ ปรับใช้ดู

ลืมบอกไปว่าใน Property ของ Combobox ใน Data > Row Source Type ให้กำหนดเป็น Value List

102
1. เราสามารถเขียน หรือ ประกาศ ในโปรแกรมได้หรือไม่ เพื่อคนอื่นที่มาดูแลโปรแกรมต่อจากเรา จะได้ทราบว่า โปรแกรม Load dll ตัวไหนเข้ามา
- อื่ม! กับคำถามนี้ไม่ค่อยเข้าใจความต้องการนะครับ แต่ถ้าหมายถึงการที่ยากแสดงว่าไฟล์เราใช้ไลบารี่ตัวใดบ้างโดยไม่ต้องมาดูที่ VBE เราสามารถเขียนคำสั่งให้แสดง ชื่อ หรือ พาธไฟล์ ไลบารี่ ที่ใช้งานอยู่ได้ครับ

โค๊ด: [Select]
Sub ListLibraryName()
    Dim chkref As Reference
    For Each chkref In Application.References
        MsgBox "Reference: " & chkref.name & Chr(13) & chkref.FullPath
    Next
End Function

<Return>
Reference: VBA
C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA7\VBE7.DLL
 
Reference: Access
C:\Program Files\Microsoft Office\Office14\MSACC.OLB
 
Reference: stdole
C:\Windows\system32\stdole2.tlb

2. ปกติพวก .dll ไม่ได้ถูก compile รวมไปด้วยกับโปรแกรมครับ มันจะไปโหลดที่เครื่องปลายทางตอนเปิดโปรแกรมขึ้นมาครับ .dll บางตัวสามารถใส่ลงไปในที่เดียวกับ .accde ได้ แต่ปกติ Access จะไปหาที่มีอยู่ในระบบก่อน สุดท้ายถึงจะมาหาใน path ที่โปรแกรมอยู่ และไฟล์ .dll บางตัวก็ทำงานไม่ได้ถ้าไม่ได้ register หรือติดตั้งเข้ากับ windows ก่อน
-เราไม่สามารถนำไฟล์ไลบารี่ภายนอกมาก bundle เข้าด้วยกันกับไฟล์ Data ได้ คืออย่าลืมว่าไฟล์ Access เราเป็นแค่ไฟล์ Data นะครับ ไม่ใช่ Execute ไฟล์ (ถึงต่อให้เป็น Execute ก็ไม่ควร bundle เข้าไปเป็นไฟล์เดียว เพราะมันจะพัฒนาต่อได้ยาก และยุ่งยากในการแก้บัค) โปรแกรมส่วนมากจะแยกไฟล์ dll ของตัวเองไว้เป็นอีกไฟล์ภายนอก ส่วนการลงในเครื่องอื่นๆ ก็สามารถใช้โปรแกรมที่สามารถทำเป็นไฟล์ติดตั้งได้ลงในพาธต่างๆตามที่เราต้องการแทน เหมือนการลงโปรแกรมทั้งไปที่จะใช้ไฟล์ตัว Setup.exe อะไรประมาณนี้แทนการแค่ก็อปปี้ใส่ลงในโฟลเดอร์เดียว

103
เคยแนะนำเพื่อนให้ใช้บริการอยู่ที่นึงครับ แต่ไม่ค่อยน่าประทับใจ เลยไม่อยากแนะนำอะครับ รอท่านอื่นๆ ช่วยแนะนำนะครับ

104
ลองใช้คำสั่งการ Ping ไปยังเครื่องเป้าหมายก่อนที่ะใช้คำสั่งดูนะครับ น่าจะช่วยได้ครับ

105
ก็ต้องวางแผนฐานข้อมูลก่อนนะครับ ว่าจะเชื่อมโยงข้อมูลกันหรือไม่ ถ้าแยกร้านกันไม่ต้องเชื่อมโยงข้อมูลกันก็ไม่มีปัญหาใช้ตามความถนัดไปก่อนได้ แต่ถ้าต้องการเชื่อมโยงข้อมูลกันก็ควรใช้เป็นฐานข้อมูล SQL Server หรือ My SQL หรืออื่นๆหลายค่าย (ต้องศึกษาดู ส่วนตัวผมใช้แต่ SQL Server) โดยการใช้งานผ่านทาง Web Browser  น่าจะง่ายที่สุดแล้ว โดยหาคนที่เขียน Web application เป็นก็สามารถทำได้ครับ ส่วนเรื่องข้อมูลเก่าใน MS Access เราสามารถ Export ไปที่ SQL Server (ในกรณีใช้ SQL Server นะครับ ค่ายอื่นๆ ก็ได้ แต่ไม่แน่ใจในวิธีการทำ) ได้ครับ ยกเว้นฟิลด์ที่ไม่ใช้มาตรฐานของฐานข้อมูลจริงๆ อย่าง Attachment ถ้ามีก็ต้องเปลี่ยนรูปแบบการจัดเก็บใหม่
สรุป ลองปรึกษาคนที่รับเขียนเว็บครับ ยิ่งปัจจุบันเค้าสามาถเขียนเป็นแอฟรองรับมือถือได้ด้วยทำให้ใช้งานได้หลาย Device อีกต่างหาก

106
ไม่รู้ว่าเข้าใจคำถามถูกหรือป่าวนะครับ
ถ้าต้องการ Requery ฟอร์มคนละฟอร์มหลังการ Update ตารางแล้ว ก็ให้ใช้คำสั่งอ้างที่ชื่อฟอร์มตัวเป้าหมายครับ เช่น
คำสั่งที่จะใส่ลงในปุ่มบนฟอร์ม supplier
- เมนฟอร์ม
Forms!ชื่อฟอร์มหลัก.Requery
- ชื่อคอนโทรลในฟอร์มหลัก
Forms!ชื่อฟอร์มหลัก.ชื่อคอนโทรล
- ซับฟอร์ม
Forms!ชื่อฟอร์มหลัก!ชื่อซับฟอร์ม.Form.Requery
- ชื่อคอนโทรลในซับฟอร์ม
Forms!ชื่อฟอร์มหลัก!ชื่อซับฟอร์ม.Form.ชื่อคอนโทรล.Requery

โดยเลือกใช้ดูว่าถ้า Requery เฉพาะตัวคอนโทรลเป้าหมายจะได้ผลลัพธ์ที่ต้องการหรือไม่ ถ้าไม่ค่อย Requery ทั้งฟอร์มแทน ทั้งนี้ขึ้นอยู่กับการออกแบบ

อะไรประมาณนี้ครับ

107
สมมุติตารางคุณชื่อ Table1

1. ใส่ฟังก์ชั่นนี้ลงใน Module
โค๊ด: [Select]
Function ConcatRelated(expression$, domain$, criterial$)
    Dim db As DAO.Database
    Dim rs As Recordset
    Dim SQLCmd As String
    Dim ConCat As String
 
    Set db = CurrentDb()
    SQLCmd = "SELECT " & expression$ & " FROM " & domain$ & " WHERE " & criterial$
    Set rs = db.OpenRecordset(SQLCmd)
 
    If Not rs.EOF Then
        rs.MoveFirst
    End If
 
    Do While Not rs.EOF
        ConCat = ConCat & rs(0) & ", "
        rs.MoveNext
    Loop
   
    If ConCat & "" <> "" Then
        ConcatRelated = Left(ConCat, Len(ConCat) - 2)
    End If
    rs.Close: Set rs = Nothing: Set db = Nothing
End Function

2. สร้างคิวรี่ใหม่ เขียน SQL ดังนี้:
โค๊ด: [Select]
SELECT Table1.[รหัสใบสั่งซื้อ], ConcatRelated("รายการ","Table1","รหัสใบสั่งซื้อ=" & [รหัสใบสั่งซื้อ]) AS รวมรายการ
FROM Table1
GROUP BY Table1.[รหัสใบสั่งซื้อ];

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

หน้า: 1 ... 4 5 6 [7]