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 22-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
Gracias todos por vuestras respuestas :

Queda claro que el método para evitar copias se basa en obtener algún número único, llámese MAC de las tarjetas de red o cualquier otro número único del equipo.

Eso es precisamente lo que intentaba aclarar en mi post inicial .... que eso ya lo tengo hecho.

Mi pregunta se refería en concreto si FIREBIRD es capaz de devolver alguno de esos datos en sí mismo. Por todas las contestaciones anteriores, lo que entiendo es que la única manera es a través de una UDF, no ?

Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 22-04-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por gluglu Ver Mensaje
Por todas las contestaciones anteriores, lo que entiendo es que la única manera es a través de una UDF, no ?
En esencia, sí. Tiene que ser mediante una UDF, a no ser que tengas una versión de Firebird que:

a) Posea funciones integradas para obtener este tipo de información.
b) Admita llamadas directas a funciones del sistema operativo.

Crear una UDF no tiene demasiada ciencia, encontrarás bastante material sobre ello en estos foros. Saludos.
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
Hace algún tiempo intenté algo así y creo recordar que el número de serie del disco duro del servidor se puede leer desde cualquier equipo. Solo hay que solicitarlo indicando una carpeta compartida del mismo. Esto hace que todos los puestos obtengan el mismo serial. A lo mejor te puede servir...
__________________
http://www.gestionportable.com
Responder Con Cita
  #4  
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
  #5  
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
  #6  
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 21:09:38.


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