Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con un TADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=18127)

Holderhek 02-02-2005 16:28:24

Problema con un TADOQuery
 
Hola

Lo que pasa es que tengo un programa que hago consultas a cada rato y relleno cosas en tiempo de ejecucion. Entonces no quiero ocupar Componentes que linkeen a componentes del dbGo para que se carguen automaticamente los datos.

Prefiero recorrer los resultados yo y agregarlos como yo quiero.

Bueno, mi problema es el siguiente; como hago consultas a cada rato, si agrego un componente TADOQuery (En diseño) y al ocuparlo surge el problema de tener que hacer otra consulta, y para esto, necesitare otro TADOQuery (Si hago una consulta dentro de otra no puedo ocupar el mismo TADOQuery).

Por ejemplo:

Código:

Query1.Close;
  Query1.SQL.Text:='SELECT * FROM Tabla';
  Query1.Open;
  For i:=0 to Query1.RecordCount-1 do
  begin
    Query2.Close;
    Query2.SQL.Text:='SELECT * FROM Tabla2 WHERE ID='+Query1.Fields[0].AsString;
    Query2.Open;
    For j:=0 to Query2.RecordCount-1 do
    begin
          //
    end;
  end;

Para realizar ese tipo de consultas, necesito dos TADOQuery. Y como hago varias consultas, (El Usuario puede buscar, o ver items con ciertos filtros, etc) puede pasar que se ocupe el mismo TADOQuery y un procedure lo cierre mientras que otro lo esta viendo.

Ahora mi problema no es ete, mi problema es el siguiente:
Puse un TADOConnection seteado para la base de datos (Access)
Y en el codigo puse esto:
Código:

procedure TForm1.Abrir(...);
  var
    Query1: TADOQuery;
  begin
    Query1.Connection: ADOConnection1;
    Query1.Close;
    Query1.SQL.Text:='...';
    Query1.Open;
  end;

y al ejecutarlo me da un error de EAccessViolation
Cita:

Project Project1.exe raised an exception class EAccessException with message 'Access violation at address C38B0000. Read of address C38B0000'.
Entonces, quisiera saber si alguien me puede explicar que paso, y las propiedades que deben tener el TADOConnection y el TADOQuery que yo cree, o si esto definitivamente no se puede y tengo que pensar en otra forma para hacerlo. (Ocupo Delphi 2005).

Bueno, gracias por su tiempo.

Saludos

unoccio 02-02-2005 21:24:06

El problema es que estás definiendo un objeto Query1 y no lo estás creando.
una forma segura de trabajar cuando se crean objetos es así:

var
Query1: TADOQuery;
begin
Query1:= TADOQuery.Create(nil);//ponele el owner que quieras
try
try
Query1.Connection:= ADOConnection1;
Query1.Close;
Query1.SQL.Text:='...';
Query1.Open;
except
...//procesamiento de errores.
end;
finally
Query1.Close;
Query1.Free;//no te olvides de liberar la MEM!!!,
end;
end;

Holderhek 02-02-2005 23:22:13

Hola

Muchas gracias, ahora funciona.

Saludos.


La franja horaria es GMT +2. Ahora son las 15:45:19.

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