Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-04-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
¿Cómo usar TIBStoredProc?

Sé que puede parecer una pregunta de 1º de Borland, pero se me resiste y no sé por qué. Creo un procedimiento por código para dar privilegios a los usuarios de una base de datos así (el código lo he cogido de un blog):
Código:
CREATE PROCEDURE
  Grant_BBDD(iUsuario VARCHAR(15)) 
  AS 
  DECLARE VARIABLE pObjeto VARCHAR(35);
BEGIN
    -- Se otorga derechos sobre las tablas y sobre las vistas

    FOR SELECT RDB$RELATION_NAME
    FROM RDB$RELATIONS
    WHERE RDB$SYSTEM_FLAG = 0
    INTO :pObjeto
    DO
      EXECUTE STATEMENT 'GRANT ALL ON ' || pObjeto ||
      ' TO ' || iUsuario;

    -- Se otorga derechos sobre los stored procedures

    FOR SELECT RDB$PROCEDURE_NAME
    FROM RDB$PROCEDURES
    WHERE RDB$SYSTEM_FLAG = 0
    INTO :pObjeto
    DO
      EXECUTE STATEMENT 'GRANT EXECUTE ON PROCEDURE ' || pObjeto ||
      ' TO ' || iUsuario;
END
Con IBManager compruebo que efectivamente se crea


y en el formulario donde está definido están indicadas las propiedades


A partir de una tabla Paradox creo los usuarios en la nueva base de datos en Firebird (tTabla es un TTable y el resto de elementos están definidos y enlazados; QuitaAcento es una función definida para eso):
Código:
tTabla->Close();
tTabla->TableName = AnsiString(cTablasAnt) + "\\Users.db";
tTabla->Filter    = "";
tTabla->Filtered  = false;
tTabla->Open();

StoredProc->Close();     // Asignamos el procedimiento
StoredProc->StoredProcName = "Grant_BBDD";
     
slIniFile->Clear();
for (; !tTabla->Eof; tTabla->Next())
{
     Query->Close();     // Creamos el ususario en la BB.DD. de la aplicación
     Query->SQL->Text = "INSERT INTO Usuarios (Nombre, Administrador, Fondo, Papel, Tinta) VALUES (:Nombre, :Administrador, :Fondo, :Papel, :Tinta)";
     Query->ParamByName("Nombre")->AsString         = QuitaAcento(UpperCase(tTabla->FieldByName("Nombre")->AsString));
     Query->ParamByName("Administrador")->AsInteger = tTabla->FieldByName("Admin")->AsString == "S" ? 1 : 0;
     Query->ParamByName("Fondo")->AsInteger         = tTabla->FieldByName("Fondo")->AsInteger;
     Query->ParamByName("Papel")->AsInteger         = tTabla->FieldByName("Papel")->AsInteger;
     Query->ParamByName("Tinta")->AsInteger         = tTabla->FieldByName("Tinta")->AsInteger;
     try
     {
          Query->ExecSQL();
          Query->Transaction->Commit();
          slIniFile->Add(QuitaAcento(UpperCase(tTabla->FieldByName("Nombre")->AsString)));
     }
     catch(...)
     {
          Screen->Cursor = crArrow;
          Query->Transaction->Rollback();
          return false;
     }

     Query->Close();     // Grabamos el valor de la clave en la tabla de claves
     Query->SQL->Text = "INSERT INTO Claves (Nombre, Clave, Fecha, Caduca) VALUES (:Nombre, :Clave, :Fecha, :Caduca)";
     Query->ParamByName("Nombre")->AsString   = QuitaAcento(UpperCase(tTabla->FieldByName("Nombre")->AsString));
     Query->ParamByName("Clave")->AsString    = tTabla->FieldByName("Clave")->AsString;
     Query->ParamByName("Fecha")->AsDateTime  = Date();
     Query->ParamByName("Caduca")->AsDateTime = IncMonth(Date(), 2);
     try
     {
          Query->ExecSQL();
          Query->Transaction->Commit();
     }
     catch(...)
     {
          Screen->Cursor = crArrow;
          Query->Transaction->Rollback();
          return false;
     }

     Query->Close();     // Creamos el usuario en la BB.DD. Firebird
     Query->SQL->Text = "CREATE USER " + QuitaAcento(UpperCase(tTabla->FieldByName("Nombre")->AsString)) + " PASSWORD '" +
                                  QuitaAcento(tTabla->FieldByName("Clave")->AsString) + "'";
     try
     {
          Query->ExecSQL();
          Query->Transaction->Commit();
     }
     catch(...)
     {
          Screen->Cursor = crArrow;
          Query->Transaction->Rollback();
          for (nItem = 0; nItem < slIniFile->Count; nItem ++)
          {
               Query->Close();
               Query->SQL->Text = "DROP USER " + slIniFile->Strings[nItem];
               try
               {
                    Query->ExecSQL();
                    Query->Transaction->Commit();
               }
               catch(...)
               {
               }
          }
          return false;
     }

     StoredProc->Close();     // Concedemos privilegios de uso
     StoredProc->ParamByName("iUsuario")->AsString = QuitaAcento(UpperCase(tTabla->FieldByName("Nombre")->AsString));
     StoredProc->ExecProc();
}
Se ejecuta toto el código bien pero al llegar a esas tres últimas líneas me da un error:
Cita:
Dynamic SQL Error
SQL error code = -204
Procedur unknow
Grant_BBDD
lo cual me tiene muy perplejo porque ¡lo estoy viendo con IBManager!
Responder Con Cita
  #2  
Antiguo 11-04-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Angel.

Código PHP:
  ...
  
StoredProc->StoredProcName "GRANT_BBDD"// Case sensitive !!
  
... 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 12-04-2017
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias. No me había dado cuenta de las mayúsculas.
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
Como usar otras Forms como ancestros Naldo Lazarus, FreePascal, Kylix, etc. 8 27-04-2015 16:54:22
como usar una imagen como boton? negrokau Varios 5 20-05-2011 16:54:26
Como usar ADOQuery? CottonMouth Conexión con bases de datos 2 11-07-2007 13:55:08
Cómo usar una dll masetru Varios 1 20-12-2003 14:15:50
Recuperar datos de un TIBStoredProc Osorio Conexión con bases de datos 2 09-06-2003 16:21:22


La franja horaria es GMT +2. Ahora son las 00:47:58.


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