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 16-10-2007
Avatar de CrystalBlood
CrystalBlood CrystalBlood is offline
Miembro
 
Registrado: ene 2006
Ubicación: Paraguay
Posts: 11
Poder: 0
CrystalBlood Va por buen camino
Exclamation JvUIB..! Consulta sobre un problemita..!

JvUIB: Alguien tiene idea de como usar estos componentes? (UIB = Unified Interbase)

Hice una clase (TMetadataManager) compuesta de funciones ke permite crear una tabla.. agregar PK y FK, etc(metadata en general) y todos comparten el mismo query y la misma transaccion.. con eso quiero decir ke el query y la transaccion esta definida en el private del UNIT y cada una de las funciones devuelve TRUE si es ke fue exitosa la operacion.. a su vez.. todas las funciones para poder definir su "exito" dependen de una funcion "EjecutarSQL"

un ejemplo:
Código Delphi [-]
function TMetadataManager.CrearFK(NombreTabla, NombreFK, CampoForaneo, TablaReferencia, 
CampoReferencia: string; OnDelete:string = 'NO ACTION'; OnUpdate: string = 'NO ACTION'):boolean;
begin
qManejador.SQL.Clear;
  qManejador.SQL.Add('ALTER TABLE ' + NombreTabla + ' ADD CONSTRAINT ' + NombreFK + 
' FOREIGN KEY (' + CampoForaneo + ') REFERENCES ' + TablaReferencia + 
'(' + CampoReferencia + ') ON DELETE '+ Ondelete + ' ON UPDATE ' + OnUpdate + ';');
Result := EjecutarSQL;
end;

La funcion EjecutarSQL:
Código Delphi [-]
function TMetadataManager.EjecutarSQL: boolean;
var
  E: EUIBException;
  i:integer;
begin
  Result := True;
  FLastFbError := '';
  FLastFbErrorNo := 0;
try
    qManejador.ExecSQL;          //<--- esta es la parte donde desconosco
    qManejador.Close(etmCommit); //como funciona el componente (estoy acostumbrado al IBX en donde se le hacia un OPEN y luego un COMMIT a la   
except                           //TRANS.. en este componente no tengo ideaaa!)
    on E: EUIBException do
begin
      FTrans.RollBack;
      FLastFbError := e.Message;
      FLastFbErrorNo := e.SQLCode;
      Result := False;
    end
end; //try
end;

A continuacion la implementacion:
Código Delphi [-]
ManejadorDeTabla.CrearFK(NombreTablaFormateada,'FK_HISTORICO_ID' + CodigoDeLaSeccion, 
'HISTORICO_ID', 'HISTORICO', 'CODIGO_HISTORICO');


Esa es justamente la funcion que me esta dando problema.. (crear clave foranea)
bueno.. se crea una TABLA en tiempo de ejecucion (sin problemas) con sus correspondientes campos, luego se fija el PK (sin problemas) pero despues al kerer agregar el FK me da un:

RAISED EXCEPTION Class EUIBerror with message 'unsuccessful metadata update object HISTORICO is in use
This operation is not defined for system tables.
Error code: 31'

y como pueden ver HISTORICO es la tabla de donde se hace la referencia del campo foraneo... intente emular el comportamiento en un proyecto aparte sin ningun otro "obstaculo".. y no me dio ningun error.. a lo ke me da a entender de que existe algun conflicto con otra transaccion PERO ya intente de todoooo no le veo el conflicto en ningun lado.. y de repente funciona como de repente no.. justamente por alguna transaccion que quedo flotando..
inclusive durante la ejecucion entre en la tabla del sistema RDB$TRANSACTIONS para ver si hay transacciones pendientes y nada..

y c
omo siempre no hay NINGUNA DOCUMENTACION y solo ejemplos ambiguos..

concluyo ke es simplemente la mala utilizacion del componente.. por que estoy acostumbrado a otra forma de aplicar las sentensias y no como este componente que acepta parametros en su OPEN y en su CLOSE
del query ..

otra curiosidad es ke navegando entre las clases del componente encontre una clase donde maneja METADATA exclusivamente.. pero el codigo es muy dificil de entender.. alguien conoce esa zona oscura del componente..? porke me parece que estoy reinventando la rueda con mi funcion siendo que ya existe una clase exclusiva para el hecho... alguna idea ?

leyendo en la web pude enterarme de que es uno de los mas rapidos y completos.. en freeware y opensource.. pero bastante complicado de usar..

si alguien usa este componente por favor que den alguna señal de vida..!

__________________


Última edición por CrystalBlood fecha: 16-10-2007 a las 23:17:52.
Responder Con Cita
  #2  
Antiguo 17-10-2007
Avatar de CrystalBlood
CrystalBlood CrystalBlood is offline
Miembro
 
Registrado: ene 2006
Ubicación: Paraguay
Posts: 11
Poder: 0
CrystalBlood Va por buen camino
alguna alma con piedad?
__________________

Responder Con Cita
  #3  
Antiguo 20-10-2007
Avatar de CrystalBlood
CrystalBlood CrystalBlood is offline
Miembro
 
Registrado: ene 2006
Ubicación: Paraguay
Posts: 11
Poder: 0
CrystalBlood Va por buen camino
bueno.. cuando uno desea agregar campos a una tabla o crear una tabla no influye las cantidades de conexiones ke tienen a una base de datos.. pero aparentemente cuando se crea el foreign key solo debe haber una conexion activa.. ese era el problema.. ¬¬
__________________

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
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44
Problemita con RadioGroup Tolón OOP 2 01-02-2007 22:08:01
Problemita en query marceloalegre SQL 21 04-08-2005 14:38:17
Problemita DLL NeWNeO Varios 5 20-07-2004 17:54:10
Problemita Con Interbase csoriano Firebird e Interbase 5 22-10-2003 17:37:53


La franja horaria es GMT +2. Ahora son las 11:27:34.


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