| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Jue 12 Feb, 2004 2:31 am Asunto: Agregar usuarios a Firebird |
|
|
El siguiente código implementa la función adduser para agregar un usuario en Firebird. Utiliza el comando gsec que provee Firebird y es el resultado final de la ayuda proporcionada por XyVy en este thread:
https://cppbuilder.es/viewtopic.php?t=7447
También utiliza ShellExecute verificando si hubo algún fallo en la aplicación.
| Código: |
//---------------------------------------------------------------------------
bool __fastcall TUtil::AddUser(AnsiString sUser, AnsiString sPW,
AnsiString sUserAdd, AnsiString sUPW, AnsiString sUName, AnsiString sMName,
AnsiString sLName, AnsiString sUID, AnsiString sGID)
{
const AnsiString KEYNAME = "SOFTWARE\\Firebird Project\\Firebird Server\\Instances";
const AnsiString DATA = "DefaultInstance";
AnsiString sGsec, sParam;
sGsec = sGetRegistryValue(KEYNAME, DATA);
sGsec += "bin\\gsec.exe";
sParam = " -user " + sUser + " -password " + sPW + " -add " + sUserAdd;
sParam += " -pw " + sUPW + " -fname " + sUName + " -mname " +sMName;
sParam += " -lname " + sLName + " -uid " + sUID + " -gid " + sGID;
if (TUtil::Ejecutar(sGsec, sParam))
return true;
return false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//ejecuta una instrucción por la línea de comandos
//devuelve true si la instrucción se corró correctamente
bool __fastcall TUtil::Ejecutar(AnsiString sCmd, AnsiString sParam)
{
HINSTANCE hi = ShellExecute(0, "open", sCmd.c_str(), sParam.c_str(), "", SW_HIDE); //SW_HIDE
int ni = (int) hi;
AnsiString sMsg;
bool bFallo = false;
switch (ni) {
case 0: sMsg = "El sistema operativo posee pocos recursos o poca memoria.";
bFallo=true; break;
case ERROR_FILE_NOT_FOUND: sMsg = "No se encontró el archivo especificado.";
bFallo=true; break;
case ERROR_PATH_NOT_FOUND: sMsg = "No se encontró el path (camino) especificado.";
bFallo=true; break;
case ERROR_BAD_FORMAT: sMsg = "El archivo .EXE es inválido (no es un archivo Win32 .EXE o existe un error dentro del .EXE).";
bFallo=true; break;
case SE_ERR_ACCESSDENIED: sMsg = "El sistema operativo ha negado el acceso al archivo especificado.";
bFallo=true; break;
case SE_ERR_ASSOCINCOMPLETE: sMsg = "La asociación del nombre del archivo está incompleta o bien es inválida.";
bFallo=true; break;
case SE_ERR_DDEBUSY: sMsg = "La transacción DDE no pudo ser completada porque otras transacciones se estuvieron procesando al mismo tiempo.";
bFallo=true; break;
case SE_ERR_DDEFAIL: sMsg = "Falló la transacción DDE.";
bFallo=true; break;
case SE_ERR_DDETIMEOUT: sMsg = "La transacción DDE no pudo ser completada porque se agotó el tiempo de espera.";
bFallo=true; break;
case SE_ERR_DLLNOTFOUND: sMsg = "La librería de enlace-dinámico especificada no pudo ser encontrada.";
bFallo=true; break;
//case SE_ERR_FNF: sMsg = "The specified file was not found.";
// bFallo=true; break;
case SE_ERR_NOASSOC: sMsg = "No hay ninguna aplicación asociada a la extensión dada.";
bFallo=true; break;
case SE_ERR_OOM: sMsg = "No hay suficiente memoria para completar la operación.";
bFallo=true; break;
//case SE_ERR_PNF: sMsg = "The specified path was not found.";
// bFallo=true; break;
case SE_ERR_SHARE: sMsg = "Ha ocurrido una violación de recursos compartidos.";
bFallo=true; break;
}
if (bFallo) {
sMsg = "Error ejecutando " + sCmd + " " + sParam + " " + sMsg;
throw Exception(sMsg);
}
if (!bFallo && ni <= 32)
throw Exception ("Fallo Desconocido ejecutando la instrucción " + sCmd + " " + sParam);
return true;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//devuelve el valor del registro indicado
AnsiString TUtil::sGetRegistryValue(AnsiString KeyName, AnsiString sValue)
{
AnsiString S;
TRegistry *Registry = new TRegistry;
try
{
Registry->RootKey = HKEY_LOCAL_MACHINE;
// false because we do not want to create it if it doesn’t exist
Registry->OpenKey(KeyName, true);
S = Registry->ReadString(sValue);
}
catch(...)
{
delete Registry;
Registry = NULL;
}
if (Registry != NULL)
delete Registry;
return S;
}
//---------------------------------------------------------------------------
|
_________________ Adrián
http://adrian.org.ar
Ultima edición por ikis el Jue 12 Feb, 2004 1:32 pm, editado 1 vez |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Jue 12 Feb, 2004 9:32 am Asunto: |
|
|
Adrián excelente aportación será muy util para todos los Firebianos del foro, lo mio apenas fue nada, lo tuyo y el resultado final es lo importante!
 _________________ OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 14 Ago, 2004 12:18 am Asunto: |
|
|
Ikis, vale un 10... gracias por el aporte.. _________________
 |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Sab 14 Ago, 2004 4:07 am Asunto: |
|
|
Gracias por el 10
El detalle es que esta función debe ser ejecutada en el servidor donde se encuentra la bd.
atte _________________ Adrián
http://adrian.org.ar |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 20 Ago, 2004 8:08 pm Asunto: |
|
|
Ikis, tendras un ejemplo practico dentro de un zip, que puedas enviarme al correo.. solo para ver el funcionamiento..
saludos..
mi correo ccsg259@hotmail.com _________________
 |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Vie 20 Ago, 2004 9:19 pm Asunto: |
|
|
el código es bastante directo, o sea solo te hace falta un firebird instalado.
De todos modos, el finde te envío el ejemplo.
atte _________________ Adrián
http://adrian.org.ar |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 20 Ago, 2004 9:26 pm Asunto: |
|
|
gracias.. IKis _________________
 |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 23 Ago, 2004 4:03 pm Asunto: |
|
|
Gracias, adrian..
te agradesco
Saludos _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Lun 23 Ago, 2004 7:46 pm Asunto: |
|
|
Me faltaron tus componentes, IOB*.*, que me pide para ejecutar el programa, te agradeceria me enviaras la direccion para bajarlos. o la forma de instalarlos.. _________________
 |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Lun 23 Ago, 2004 7:54 pm Asunto: |
|
|
los unicos componentes q uso son Labels y EditBox y un TButton.
Seguro q Builder me incluyó en el bpr cosas q no debía. Ahora lo actualizo.
atte _________________ Adrián
http://adrian.org.ar |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Lun 23 Ago, 2004 9:27 pm Asunto: |
|
|
Hola César, vuelve a probar y por favor dime si te funcionó.
atte _________________ Adrián
http://adrian.org.ar |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 24 Ago, 2004 12:02 am Asunto: |
|
|
Si ya funcion.. elimine la ruta erronea del proyecto y justamente, eso era.. tienes una unidad F: donde esta el builder, creo que eso fue lo que me provoco el fallo,,
ahora ando tratando de intercambiar datos entre una GDB y otra GDB, es decir copiar de una tabla de la 1.GDB a la 2.GDB en tablas casi si milares..
1.gdb <----------> 2.gdb
tbl1 <--datos--> tbl2
algo como un programa puente, si alguien sabe.. que me conteste por favor en el for.. y no aqui en trucos.. gracias.. _________________
 |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 24 Ago, 2004 2:35 am Asunto: |
|
|
esperemos que traiga el codigo fuente, para implantarlo como utilidad de la aplicacion y no como programa externo gracias de nuevo.. _________________
 |
|
| Volver arriba |
|
 |
|