Proteger Base de Datos de Microsoft Access

Me gustaría saber como lograr que la base de datos acceda al Nº de serie del disco duro de forma que si coincide con el dato introducido por mi en la misma, esta se ejecute, de lo contrario, aparezca algún tipo de mensaje de error.

1 Respuesta

Respuesta
1
Te paso el código de un módulo...
Option Compare Database
Option Explicit
Declare Function GetVolumeInformation Lib "Kernel32" _
Alias "GetVolumeInformationA" _
(ByVal lpRootPathName As String, _
ByVal lpVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Long, _
lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long) As Long
Function gblInfoDisc(Optional strUnitat, Optional ValorARetornar As Byte) As String
'Código para el Procedimiento
'Definimos las variables
'ValorARetornar ---> 0 Codi del disc...
' 1 Codi Hexadecimal del disc ...
' 2 Codi Numèric (Long) del disc ...
Dim i As Integer
Dim NumeroDisco As Long, strSerialNumber As String
Dim CadenaResultante As Long
Dim NombreDisco As String
Dim FormatoDisco As String
Dim Unidad As String
Dim LongitudNombreProgramaMasLargo As Long
Dim flags As Long
Dim strAfegirCadena As String
'Inicializamos las variables
If IsMissing(strUnitat) Then
Unidad = "C:\"
Else
Unidad = strUnitat
End If
NombreDisco = String(255, Chr(0))
FormatoDisco = String(255, Chr(0))
CadenaResultante = GetVolumeInformation(Unidad, NombreDisco, Len(NombreDisco), NumeroDisco, LongitudNombreProgramaMasLargo, flags, FormatoDisco, Len(FormatoDisco))
'CadenaResultante = Devuelve cero en caso de error.
strSerialNumber = CStr(Hex(NumeroDisco))
If Len(strSerialNumber) <> 8 Then
strAfegirCadena = "00000000"
strSerialNumber = Left(strAfegirCadena, 8 - Len(strSerialNumber)) & strSerialNumber
End If
strSerialNumber = Mid(strSerialNumber, 1, 4) & ":" & Mid(strSerialNumber, 5)
'mostramos el resultado
i = InStr(NombreDisco, Chr(0))
NombreDisco = Mid(NombreDisco, 1, i - 1)
i = InStr(FormatoDisco, Chr(0))
FormatoDisco = Mid(FormatoDisco, 1, i - 1)
'Debug.Print NombreDisco
'Debug.Print FormatoDisco
'Debug.Print Hex(NumeroDisco)
'Debug.Print strSerialNumber
'Debug.Print LongitudNombreProgramaMasLargo
Select Case ValorARetornar
Case 0
gblInfoDisc = strSerialNumber
Case 1
gblInfoDisc = Hex(NumeroDisco)
Case 2
gblInfoDisc = NumeroDisco
End Select
End Function
Como puedes comprobar la función gblInfoDisc devuelve el código de serie del disco entre otra información...
Ahora únicamente debes verificar que el código devuelto sea igual que el que tu has indicado...
Function VerificarDisco()
Dim dbs as database
Dim rst as Recordset
set dbs=CurrentDb
set rst=dbs.OpenRecordset("SELECT * FROM NombreTablaControl WHERE NombreCampoControl='" & gblInfoDisc("C:",0) & "'")
if rst.RecordCount=0 then
msgbox "Esta aplicación no está debidamente instalada." & vbcrlf & _
"Contacte con su servicio técnico.",vbCritical
Docmd.Quit
Exit Function
end if
End Function
Espero haberte sido de utilidad.
Saludos.
Jordi Pérez i Madern
Mataró (Barcelona)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas