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 17-08-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
[Más alla de que el hilo sea algo antiguo, me parece importante que en un repositorio de conocimiento como lo es ClubDelphi, se sigan dsicutiendo y desarrollando los temas porque esta misma informacion podria ser consultada en un futuro]

No entiendo porque complicar el diseño de esa manera. Es mucho mas practico y mantenible ser explicito en lo que necesitas y no "andar buscando y revolviendo" para encontrarlo. Ademas, estas creando el query dentro del procedimiento, actuando sobre un parametro pasado por valor (y no por referencia o salida) por lo que el invocador no obtiene la referencia a dicho query. El FreeAndNil no te arroja un EAccessViolation simplemente de casualidad porque la variable del query primero la setea a nil, y es seguro llamar al metodo Free sobre una referencia que es nil

Esto es un poco mejor:


Código Delphi [-]
uses
  Data.Win.ADODB;

// Crea un TADOQuery ejecuta la sentencia SQL indicada
function Query(const Connection: TADOConnection; const SqlQuery: string): TADOQuery;

// Esto sigue mas la filosofia del codigo original, que pretende crear una unica vez el TADOQuery
// y reutilizar siempre el mismo para las distintas consultas 
function SingletonQuery(const Connection: TADOConnection; const SqlQuery: string): TADOQuery;

implementation

var
  FSingletonQuery: TADOQuery = nil;

function Query(const Connection: TADOConnection; const SqlQuery: string): TADOQuery;
begin
  Result := TADOQuery.Create(nil);
  Result.Connection := Connection;
  Result.SQL.Text := SqlQuery;
  Result.Open;
end;

function SingletonQuery(const Connection: TADOConnection; const SqlQuery: string): TADOQuery;
begin
  if not System.Assigned(FSingletonQuery) then
    FSingletonQuery := TADOQuery.Create(Connection);

  FSingletonQuery.Close;
  FSingletonQuery.SQL.Text := SqlQuery;
  FSingletonQuery.Open;
  Result := FSingletonQuery;
end;

No me gusta tanto la alternativa del "Singleton" y prefiero crear querys para cada consulta que requiero hacer. Ya que por ejemplo si necesito cargar dos grids, la funcion original del post o la "SingletonQuery" no me sirve de nada
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
Problema al crear DSN en tiempo de ejecución, pero sólo al ejecutar, no desde Delphi aquiestamos Conexión con bases de datos 1 08-07-2013 10:20:12
Problema con borrado de componentes creados en tiempo de ejecución harpo OOP 5 22-12-2007 16:54:55
Problema con DBGRiD y campos en Tiempo de ejecución EITB OOP 0 14-10-2004 17:59:17
Problema con un Timer en tiempo de Ejecucion santiellupin OOP 4 15-05-2004 16:21:37
Usar datos originados por TADOQuery Draco Conexión con bases de datos 4 30-04-2004 06:35:56


La franja horaria es GMT +2. Ahora son las 02:38:44.


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