Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Agregar usuarios a Firebird
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Agregar usuarios a Firebird Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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!
Cool
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Ikis, vale un 10... gracias por el aporte..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Gracias por el 10 Very Happy

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

gracias.. IKis
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

http://adrian.org.ar/modules.php?name=Downloads&d_op=viewdownload&cid=2

Luego de utilizado el programa, podrás ver los usuarios utilizando el comando gsec del directorio bin del Firebird y luego display, del siguiente modo:





atte
_________________
Adrián

http://adrian.org.ar
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Gracias, adrian..
te agradesco

Saludos
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Hola César, vuelve a probar y por favor dime si te funcionó.


atte
_________________
Adrián

http://adrian.org.ar
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

http://www.clevercomponents.com/products/datapump/dpdownload.asp


De aqui te bajas el DataPump (freeware) que te permite importar datos desde cualquier tabla.


atte
_________________
Adrián

http://adrian.org.ar
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

esperemos que traiga el codigo fuente, para implantarlo como utilidad de la aplicacion y no como programa externo gracias de nuevo..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.