กระทู้เก่าบอร์ด อ.Yeadram
3,391 10
URL.หัวข้อ /
URL
ป้องกันการ copy ไฟล์ .mdb
ผมอยากป้องกันการ copy ไฟล์ .mdb จากเครื่องหนึ่งไปใช้อีกเครื่องหนึ่ง (เพื่อไม่ให้ละเมิดลิขสิทธิ์) โดยมี 2 table ให้ table1 (มีแค่ 1 ฟิลด์) เก็บค่า ID เครื่องคอมพ์ตอนเปิดไฟล์ครั้งแรกสุด ให้ table2 (มีแค่ 1 ฟิลด์) เก็บค่า ID ทุกครั้งที่เปิดใช้งาน แล้วเปรียบเทียบกัน ถ้าหากค่าไม่เท่ากันแสดงว่า copy ไฟล์ไปใช้ที่เครื่องอื่น
ไม่ทราบว่าต้องเขียน code อย่างไร อาจารย์กรุณาแนะนำด้วยครับ
ไม่ทราบว่าต้องเขียน code อย่างไร อาจารย์กรุณาแนะนำด้วยครับ
10 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R01500
ขอโทษครับที่ผมถามไม่ละเอียด
คือตอนนี้ผมไม่รู้วิธีที่จะหา ID ดังกล่าวเลย ID นี้น่าจะเป็น SN ของฮาร์ดดิสก์ เพราะเห็นมันตอน dir c: ใน DOS หรือจะเป็นอะไรก็ได้ที่ไม่ซ้ำกันทุกเครื่อง รบกวนอีกครั้งนะครับ
คือตอนนี้ผมไม่รู้วิธีที่จะหา 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 ประมาณนี้ครับ...ที่เหลือลองคิดต่อแล้วกันครับ
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 มากครับ
??อบคุณคุณ jackychaan มากครับ
5 @R01506
เอ้..แล้วสมมติว่าเครื่องเดิมมันเกิดเสียหรือจะเปลี่ยนเครื่องใหม่ แล้วจะทำไงล่ะ
6 @R01507
วีธีของคุณ jackychaan เวิร์กสุดๆ เลยครับ
แต่ยังไงก็ขอบคุณคุณ yeadram มากครับ
แต่ยังไงก็ขอบคุณคุณ yeadram มากครับ
7 @R01519
อ้างอิง ความเห็น R01506 (วัยรุ่นชรา)
ความเห็นของผมนะครับ
ผู้เขียนโปรแกรมจะมีวิธีแก้ไขให้ อาจจะมีตัวโปรแกรมอีกตัวเจาะเข้าไปเพื่อลบข้อมูล ID เดิม ออกจากตารางครับ โปรแกรมก็จะใช้ได้ต่อ
โดยจะทำให้ฟรี แค่ 1 ครั้งครับ
ถ้ามีครั้งต่อไป ผู้ใช้ต้องซื้อเป็น License ใหม่ครับ เพราะฉะนั้นผู้ใช้ต้องพึงระวังเอาเองครับ
เพราะเครื่องเสีย hdd เสีย ไม่ใช่ความผิดของ ผู้ขายหรือผู้เขียนโปรแกรมครับ
ความเห็นของผมนะครับ
ผู้เขียนโปรแกรมจะมีวิธีแก้ไขให้ อาจจะมีตัวโปรแกรมอีกตัวเจาะเข้าไปเพื่อลบข้อมูล 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 ใช่หรือเปล่าค่ะ)ไปวางไว้ในตาราง จะต้องไปวางไว้ที่ตารางไหนค่ะ หรือต้องสร้างตารางขึ้นมาใหม่
ท่านผู้รู้และอาจารย์ช่วยตอบด้วยนะค่ะ ขอบพระคุณมากค่ะ
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 ไปศึกษาดูครับ
ขอบคุณครับ
1. Login เข้า Gmail ของบอร์ดครับ
user : accboard
pw : accgmail
2. ในกล่องจดหมาย ลองหาหัวข้อตัวอย่างการกำหนดเวลาในการใช้โปรแกรมครับ ลอง download ไปศึกษาดูครับ
ขอบคุณครับ
10 @R09031
สุดยอดฝีมือครับ
มีประโยชน์จริง
ขอคารวะ
มีประโยชน์จริง
ขอคารวะ
Time: 0.2342s
แล้วการเอาข้อมูลไปเก็บไว้ 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 เลย จ๊าก ผิดไหมเนี่ย เอาไปปรับต่อละกัน