ป้องกันการ copy ไฟล์ .mdb
กระทู้เก่าบอร์ด อ.Yeadram

 3,391   10
URL.หัวข้อ / URL
ป้องกันการ copy ไฟล์ .mdb

ผมอยากป้องกันการ copy ไฟล์ .mdb จากเครื่องหนึ่งไปใช้อีกเครื่องหนึ่ง (เพื่อไม่ให้ละเมิดลิขสิทธิ์) โดยมี 2 table ให้ table1 (มีแค่ 1 ฟิลด์) เก็บค่า ID เครื่องคอมพ์ตอนเปิดไฟล์ครั้งแรกสุด ให้ table2 (มีแค่ 1 ฟิลด์) เก็บค่า ID ทุกครั้งที่เปิดใช้งาน แล้วเปรียบเทียบกัน ถ้าหากค่าไม่เท่ากันแสดงว่า copy ไฟล์ไปใช้ที่เครื่องอื่น
ไม่ทราบว่าต้องเขียน code อย่างไร อาจารย์กรุณาแนะนำด้วยครับ

10 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R01498
ค่า ID ของเครื่องคืออะไร ผมไม่แน่ใจ แต่คิดว่าคุณคงมีวิธีหามาได้ สมมติว่าคุณได้มาแล้ว เก็บไว้ในตัวแปร ComID

แล้วการเอาข้อมูลไปเก็บไว้ 2 ตาราง   ตารางละ 1 ฟิลด์ ก็มันทะแม่งๆ ยังไงๆ อยู่เหมือนกัน แต่เอาเถอะ คงต้องมีวิธีอื่นๆ ที่ต่อเนื่องมั้งเน๊าะ


เขียนแมคโคร autoexec เพื่อให้ถูกเรียกใช้ทุกครั้งที่เปิดโปรแกรม
ในแมคโคร ใช้คำสั่ง Runcode
ใส่อากิวร์เมนต์เป็นชื่อฟังก์ชันของเรา LicenseCheck

ไปเขียนฟังกชั่นไว้ในโมดูลดังนี้
Function LicenseCheck()
dim tb1
tb1=nz(Dlookup("Field1","Table1"),"")      ' ไปตรวจดูข้อมูลในตารางที่ 1
if tb1="" then                                           ' ถ้าเป็นค่าว่าง สันนิษฐานว่า ยังไม่เคยรันโปรแกรมนี้มาก่อน
    docmd.runsql "Insert into tb1 values('" & ComID & "'")   ' ให้บันทึกค่า ComID ลงไป
elseif tb1<>ComID then               ' ถ้าข้อมูลไม่ว่า ให้เช็คว่า ตรงกับค่า ComID ในปัจจุบันหรือเปล่า
     msgbox "Missing License"
     Quit
end if
End Function

เอ๊ะ เขียนไปเขียนมา ไม่เห็นจำเป็นต้องใช้ตารางที่ 2 เลย จ๊าก ผิดไหมเนี่ย เอาไปปรับต่อละกัน
2 @R01500
ขอโทษครับที่ผมถามไม่ละเอียด
คือตอนนี้ผมไม่รู้วิธีที่จะหา ID ดังกล่าวเลย ID นี้น่าจะเป็น SN ของฮาร์ดดิสก์ เพราะเห็นมันตอน dir c: ใน DOS หรือจะเป็นอะไรก็ได้ที่ไม่ซ้ำกันทุกเครื่อง รบกวนอีกครั้งนะครับ
3 @R01503
ใช้ function GetDriveSN ได้ครับ โดย
1. Copy Code นี้ไปวางใน Module

*************Code Start**********************************
Public Function GetDriveSN(Optional ByVal DriveLetter As String) As Long
      
          Dim fso As Object, Drv As Object
          
          'Create a FileSystemObject object
          Set fso = CreateObject("Scripting.FileSystemObject")
          
          'Assign the current drive letter if not specified
          If DriveLetter <> "" Then
              Set Drv = fso.GetDrive(DriveLetter)
          Else
              Set Drv = fso.GetDrive(fso.GetDriveName(App.Path))
          End If
      
          With Drv
              If .IsReady Then
                  DriveSerial = Abs(.SerialNumber)
              Else    '"Drive Not Ready!"
                  DriveSerial = -1
              End If
          End With
          
          'Clean up
          Set Drv = Nothing
          Set fso = Nothing
          
          GetDriveSN = DriveSerial
          
      End Function
*******************Code End****************************
2. ใช้ Call GetDriveSN("C:") 'หาค่า SN ของ Drive C โดยวางไว้ที่ event on open ของ form ก็ได้
3. นำค่า SN ที่ได้ไปเก็บไว้ในตาราง
4. ทุกครั้งที่เปิดโปรแกรมก็ให้ตรวจสอบค่า SN ว่าตรงกับในตารางหรือเปล??า โดยทำตามคำแนะนำ อ.yeadram ประมาณนี้ครับ...ที่เหลือลองคิดต่อแล้วกันครับ
4 @R01504
จะลองนำ code ไปทดสอบดู
??อบคุณคุณ jackychaan มากครับ
5 @R01506
เอ้..แล้วสมมติว่าเครื่องเดิมมันเกิดเสียหรือจะเปลี่ยนเครื่องใหม่ แล้วจะทำไงล่ะ
6 @R01507
วีธีของคุณ jackychaan เวิร์กสุดๆ เลยครับ
แต่ยังไงก็ขอบคุณคุณ yeadram มากครับ
7 @R01519
อ้างอิง ความเห็น R01506 (วัยรุ่นชรา)

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

เพราะเครื่องเสีย hdd เสีย ไม่ใช่ความผิดของ ผู้ขายหรือผู้เขียนโปรแกรมครับ
8 @R08003
ใช้ function GetDriveSN ได้ครับ โดย
1. Copy Code นี้ไปวางใน Module

*************Code Start**********************************
Public Function GetDriveSN(Optional ByVal DriveLetter As String) As Long
       
          Dim fso As Object, Drv As Object
           
          'Create a FileSystemObject object
          Set fso = CreateObject("Scripting.FileSystemObject")
           
          'Assign the current drive letter if not specified
          If DriveLetter <> "" Then
              Set Drv = fso.GetDrive(DriveLetter)
          Else
              Set Drv = fso.GetDrive(fso.GetDriveName(App.Path))
          End If
       
          With Drv
              If .IsReady Then
                  DriveSerial = Abs(.SerialNumber)
              Else    '"Drive Not Ready!"
                  DriveSerial = -1
              End If
          End With
           
          'Clean up
          Set Drv = Nothing
          Set fso = Nothing
           
          GetDriveSN = DriveSerial
           
      End Function
*******************Code End****************************
2. ใช้ Call GetDriveSN("C:") 'หาค่า SN ของ Drive C โดยวางไว้ที่ event on open ของ form ก็ได้
3. นำค่า SN ที่ได้ไปเก็บไว้ในตาราง
4. ทุกครั้งที่เปิดโปรแกรมก็ให้ตรวจสอบค่า SN ว่าตรงกับในตารางหรือเปล??า โดยทำตามคำแนะนำ อ.yeadram ประมาณนี้ครับ...ที่เหลือลองคิดต่อแล้วกันครับ


**********************************************************************

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

1.สงสัยข้อที่ 2 ค่ะที่บอกว่า ใช้ Call GetDriveSN("C:") 'หาค่า SN ของ Drive C โดยวางไว้ที่ event on open ของ form ก็ได้     
   ** มันเป็นโปรแกรมโดยเฉพาะใช่หรือเปล่าค่ะ หรือมีวิธีทำได้อย่างไรค่ะ สามารถใช้ วินโด หาได้หรือเปล่าค่ะ
   ** แล้วเวลาไปวางไว้ที่ฟอร์ม จะต้องสร้างฟอร์มขึ้นมาใหม่ใช่หรือเปล่าค่ะ
2. และให้นำค่า SN (SN มันคือSerial Number Harddis ใช่หรือเปล่าค่ะ)ไปวางไว้ในตาราง จะต้องไปวางไว้ที่ตารางไหนค่ะ หรือต้องสร้างตารางขึ้นมาใหม่

                  ท่านผู้รู้และอาจารย์ช่วยตอบด้วยนะค่ะ ขอบพระคุณมากค่ะ
9 @R08018
ดูตัวอย่างไฟล์ได้ใน Gmail ของบอร์ดครับ ในนั้นมีตัวอย่างของหลายท่านอยู่ครับ

1. Login เข้า Gmail ของบอร์ดครับ
user : accboard
pw : accgmail

2. ในกล่องจดหมาย ลองหาหัวข้อตัวอย่างการกำหนดเวลาในการใช้โปรแกรมครับ ลอง download ไปศึกษาดูครับ

ขอบคุณครับ
10 @R09031
สุดยอดฝีมือครับ
มีประโยชน์จริง
ขอคารวะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2342s