Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2013
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Crear la DLL en Delphi :

Código Delphi [-]
library MyUDF;

uses
  System.SysUtils,
  System.Classes,
  Windows, SysUtils;

{$R *.res}

function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';
function FindVolumeSerial(const p: PAnsiChar): PAnsiChar; cdecl;

implementation

function FindVolumeSerial(const p: PAnsiChar): PAnsiChar; cdecl;
var
  VSN : DWORD;
  MCL : DWORD;
  FSF : DWORD;
  SN  : string;
begin
  GetVolumeInformation('C:\', nil, 0, @VSN, MCL, FSF, nil, 0);
  SN := IntToHex(HiWord(VSN), 4) + ' - ' + IntToHex(LoWord(VSN), 4);
  Result := ib_util_malloc(Length(SN) + 6);
  StrPCopy(Result, SN);
end;

exports
  FindVolumeSerial;

begin
end.

... y después en Firebird :

Código SQL [-]
declare external function Find_VolumeSerial
  CSTRING(20)
returns
  CSTRING(20) FREE_IT
entry_point 'FindVolumeSerial' module_name 'MyUDF';

Por último, para pedir los datos del número de serie mediante la consulta SQL :

Código SQL [-]
Select Find_VolumeSerial('C') from RDB$Database

Saludos a todos y de nuevo gracias por vuestra ayuda !
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 23-04-2013
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Añado un comentario adicional para responder a los otros compañeros que gratamente han expuesto su solución y punto de vista.

La cuestión principal de todo el planteamiento de este hilo es que debe de ser Firebird el que me devuelva el número de serie del disco duro del ordenador en el que se encuentra instalado. No necesito indicar ninguna otra carpeta o solicitar la información respecto del ordenador en el cual estoy ejecutando la aplicación Delphi directamente.

Lo que se trata es que pueda implementar un sistema de claves, que no sólo me valide la instalación para un único ordenador (el servidor Firebird), sino que además después y de manera adicional, ya a partir de esa clave, pueda gestionar el número máximo de puestos, de registros, etc.

Hasta ahora lo tenía implementado por cada puesto, y se hacía desde Delphi, pero lo que han pedido algunos clientes que tienen muchos puestos de trabajo, y que además cambian o sustituyen a menudo esos ordenadores de puesto de trabajo, que el control de validación y número de puestos conectados se pudiera hacer directamente en el servidor, y no dependiera de cada disco duro de cada puesto que se conecta, y por eso necesitaba que esa función me la realizara directamente el servidor que ejecuta Firebird.

Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 23-04-2013
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Me parece una estupenda solución la que aportas. Mi idea, y sobre la que puse el post anterior es basándome en que yo no instalo nada en el cliente, comparto una carpeta en el servidor y allí está el ejecutable y las dll necesarias. Los puestos solo tienen un acceso directo al ejecutable. La primera ejecución de un cliente es la que registra el servidor guardando su valor encriptado en la base de datos. Todos los demás puestos que se conectan contrastan la clave generada con la almacenada y listo. Pero si no hay carpeta compartida en el servidor, lógicamente no sirve.
__________________
http://www.gestionportable.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Generar clave única vivamotos C++ Builder 1 06-06-2008 12:42:41
enviar mensajes de error en campos obligatorios y clave unica Goyo Conexión con bases de datos 0 15-05-2007 23:11:07
Obtener la clave de una base de datos de FireBird vzar42 Firebird e Interbase 5 19-01-2007 22:43:35
Problemas al generar una clave unica Huer OOP 6 09-06-2004 02:58:57
Validar clave unica en Paradox dchaparro Tablas planas 6 20-04-2004 01:34:58


La franja horaria es GMT +2. Ahora son las 18:28:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi