Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki

Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Como obtener el usuario actual de mysql
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Como obtener el usuario actual de mysql

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
miguel150
Buen usuario


Registrado: Feb 25, 2009
Mensajes: 6

Asunto: Como obtener el usuario actual de mysql Responder citando

Hola a todos,

Mi consulta es la siguiente como pude obtener el usuario actual de mysql 5 desde delphi para mostrarlo en un statusbar estoy utlizando delphi6 con los componentes zeos 6 y delphi 6


Muchas Gracias por su ayuda!!!
MensajePublicado:
Sab Mar 21, 2009 12:35 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Como obtener el usuario actual de mysql Responder citando



Anuncios



miguel150 escribió:
Hola a todos,

Mi consulta es la siguiente como pude obtener el usuario actual de mysql 5 desde delphi para mostrarlo en un statusbar estoy utlizando delphi6 con los componentes zeos 6 y delphi 6


Muchas Gracias por su ayuda!!!


Puedes utilizar esta consulta SQL que te devolverá el usuario actual con el que estés conectado a MySQL Server:

Código:

select current_user()


Ten en cuenta que te devolverá algo así: root@pcportatil, delante de la arroba el nombre del usuario, detrás el nombre del equipo cliente que se conecta a MySQL Server.

Si sólo quieres obtener el nombre del usuario puedes utilizar la función INSTR y la función LEFT de la siguiente forma:

Código:

SELECT LEFT(CURRENT_USER(), INSTR(CURRENT_USER(), '@') - 1)
MensajePublicado:
Sab Mar 21, 2009 4:13 pm
Top of PageVer perfil de usuario
miguel150
Buen usuario


Registrado: Feb 25, 2009
Mensajes: 6

Asunto: Responder citando

ok pero como lo llamo desde delphi.
MensajePublicado:
Dom Mar 22, 2009 12:44 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Responder citando

miguel150 escribió:
ok pero como lo llamo desde delphi.


Esta consulta SQL puedes ejecutarla en el componente ZQuery de Zeos, en la propiedad "SQL" de este componente pondrás:

Código:

SELECT LEFT(CURRENT_USER(), INSTR(CURRENT_USER(), '@') - 1)


Luego puedes utilizar este código para ejecutar el ZQuery:

Código:

  ZConnection1.Database := 'mysql';
  ZConnection1.Catalog := 'mysql';
  ZConnection1.User := 'root';
  ZConnection1.Password := 'fernando';
  ZConnection1.Port := 3306;
  ZConnection1.Protocol := 'mysql-4.1';
  ZConnection1.Connect;
  ZQuery1.Close;
  ZQuery1.SQL.Clear;
  ZQuery1.SQL.Add('SELECT LEFT(CURRENT_USER(), INSTR(CURRENT_USER(), "@") - 1) usuario');
  ZQuery1.Connection := ZConnection1;
  ZQuery1.Open;
  if ZQuery1.RecordCount = 1 then
  begin
    StatusBar1.Panels[1].Text := ZQuery1.fieldbyname('usuario').AsString;
  end;
  ZQuery1.Close;
  ZConnection1.Disconnect;


Para conectar el ZQuery con MySQL es necesario un componente "ZConnection", en el ejemplo utilizamos el ZConnection1, que luego enlazamos con el ZQuery mediante la propiedad "Connection".
MensajePublicado:
Dom Mar 22, 2009 7:06 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: usuario actual de MySQL con Delphi y Zeos Responder citando



Anuncios



Si no quieres añadir los componentes ZQuery y ZConnection al formulario, puedes utilizar la siguiente función, que los crea en tiempo de ejecución, así te ahorras el tener que ponerlos en una Unit y luego tener que llamarlos:

Código:

function obtenerUsuarioActualMySQL (nombreBD, usuario, contrasena : string;
    puerto : integer; protocolo : string) : string;
var
  conexionMySQL : TZConnection;
  ejecutarSQL : TZQuery;
  componente : TComponent;
begin
  Result := '';
  conexionMySQL := TZConnection.Create(componente);
  ejecutarSQL := TZQuery.Create(componente);
  conexionMySQL.Database := nombreBD;
  conexionMySQL.Catalog := nombreBD;
  conexionMySQL.User := usuario;
  conexionMySQL.Password := contrasena;
  conexionMySQL.Port := puerto;
  conexionMySQL.Protocol := protocolo;
  try
    conexionMySQL.Connect;
    ejecutarSQL.Close;
    ejecutarSQL.SQL.Clear;
    ejecutarSQL.SQL.Add('SELECT LEFT(CURRENT_USER(), ');
    ejecutarSQL.SQL.Add('    INSTR(CURRENT_USER(), "@") - 1) usuario');
    ejecutarSQL.Connection := conexionMySQL;
    try
      ejecutarSQL.Open;
    except
      conexionMySQL.Disconnect;
      raise;
    end;
    if ejecutarSQL.RecordCount = 1 then
    begin
     result := ejecutarSQL.fieldbyname('usuario').AsString;
    end;
  except
    ejecutarSQL.Close;
    conexionMySQL.Disconnect;
    raise;
  end;
end;


Un ejemplo de llamada a esta función:

Código:

  StatusBar1.Panels[1].Text :=
      obtenerUsuarioActualMySQL ('mysql', 'root',
          'fernando', 3306, 'mysql-4.1');


Lo único que necesitarás en la Unit donde pongas la función, en el USES es:

ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection;
MensajePublicado:
Dom Mar 22, 2009 7:26 pm
Top of PageVer perfil de usuario
miguel150
Buen usuario


Registrado: Feb 25, 2009
Mensajes: 6

Asunto: Responder citando

Muchas Gracias por su repuesta lo ententare y logo te dejo saber los resultados.
MensajePublicado:
Lun Mar 23, 2009 8:46 pm
Top of PageVer perfil de usuario
miguel150
Buen usuario


Registrado: Feb 25, 2009
Mensajes: 6

Asunto: Responder citando

ok lo entente la función y todo bien pero solo me muestra el usuario root, como ago para mustra el usuario que accesa via un login personalizado utilizado unos variables tipo string de otro formulario.

porque cuando lo llamo con este codigo me da un error Access Violation
Código:

StatusBar1.Panels[1].Text :=
      obtenerUsuarioActualMySQL ('mysql', frmlogin.sUsuario,
         frmLogin.sContra, 3306, 'mysql-4.1');


Gracias!!!!!!
MensajePublicado:
Mar Mar 24, 2009 4:07 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Responder citando

miguel150 escribió:
ok lo entente la función y todo bien pero solo me muestra el usuario root, como ago para mustra el usuario que accesa via un login personalizado utilizado unos variables tipo string de otro formulario.

porque cuando lo llamo con este codigo me da un error Access Violation
Código:

StatusBar1.Panels[1].Text :=
      obtenerUsuarioActualMySQL ('mysql', frmlogin.sUsuario,
         frmLogin.sContra, 3306, 'mysql-4.1');


Gracias!!!!!!


Visto así, es más fácil que lo que te hemos indicado.

Si tienes un formulario de login y en este formulario el usuario introduce su nick (nombre de usuario) y su contraseña y éste es un usuario que debe existir en MySQL, no necesitas la consulta SQL que te hemos indicado, que siempre te devolverá como usuario el que utilices para la consulta. Digamos que es redundante, la función:

obtenerUsuarioActualMySQL ('mysql', 'root',
'fernando', 3306, 'mysql-4.1');


Siempre te devolverá "root" que es el usuario que se utiliza para la conexión de la propia función, con lo cual es "absurdo".

En tu caso, al utilizar un formulario de login, sólo tienes que guardar el valor introducido por el usuario en el campo nick (nombre de usuario de MySQL) en una variable pública para que esté disponible para el resto de los formularios de la aplicación.

Si primero creas y muestras el formulario de login y luego lo cierras y muestras el principal, el que contiene el StatusBar, te dará el error que nos comentas si desde el principal intentas acceder al "frmlogin", pues éste ya no estará en memoria, de ahí lo de "Access violation".

Como te decimos, lo que puedes hacer es tener una unidad (Unit) con las variables públicas, como la del nombre del usuario que inicia sesión en frmlogin. En el Uses del formulario frmlogin y el principal tendrás esta unidad, en el frmlogin, cuando el usuario pulse "Iniciar sesión" habrá algo así:

En el formulario "frmlogin":

Código:

  uses unidadVariablesPublicas, ...

  ....

  procedure TFormPrincipal.botonInicioClick(Sender: TObject);
  begin

    ...

    nombreUsuarioSesion := txtUsuario.text;

    ...

  end;

  ...



En el formulario principal:

Código:

  uses unidadVariablesPublicas, ...

  ...

  procedure TFormPrincipal.FormCreate(Sender: TObject);
  begin
    StatusBar1.Panels[1].Text := nombreUsuarioSesion;
     
    ...

  end;


Y la unidad "unidadVariablesPublicas":

Código:

unit unidadVariablesPublicas;

interface
  uses sysutils, system, inifiles .............;


  function leBoolINI (clave, cadena : string;
      defecto : boolean) : boolean;

................

var
  nombreUsuarioSesion : string;

.................

implementation


// FUNCIONES DISPONIBLES PARA TODOS LOS FORMULARIOS
// DE LA APLICACIÓN

//lee un valor booleano de un fichero INI
function leBoolINI (clave, cadena : string;
    defecto : boolean) : boolean;
begin
  with tinifile.create (changefileext(paramstr(0),'.ini')) do
  try
    result := readbool (clave, cadena, defecto);
  finally
    free;
  end;
end;

....................

end.
MensajePublicado:
Jue Mar 26, 2009 7:27 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz Google+ Síguenos en Google+