Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Buscar en varias tablas (https://www.clubdelphi.com/foros/showthread.php?t=23880)

gcaffe 01-08-2005 16:31:22

Buscar en varias tablas
 
Hola a todos:
Cuando en una aplicación tengo que buscar registros en tablas suelo hacerlo a través de una ventana con un solo Grid, cambiando en tiempo de ejecución el procedimento involucrado y las propiedades del Grid. Pero me esta ocurriendo un problema. El entorno es el siguiente:
1) Una ventana modal con un gridBusca que tiene una columna genérica
2) un componente TADOStoredProc con name = SProc
3) Cuatro Procedimientos almacenados uno por cada tabla y son similares a:

Código SQL [-]
CREATE PROCEDURE ClientesBUSCAR
@Busca nVarChar(10)
AS
IF @Busca = '' 
SELECT * FROM Clientes
ELSE
SELECT * FROM Clientes WHERE NombreCliente LIKE + '%'+@Busca+'%'
GO

Lo que cambio en los otros es el nombre de la tabla y el nombre de procedimeinto.

AL ejecutar sucede los siguiente:
1) Al abrir la ventana buscador:
Código Delphi [-]
procedure TfrmBuscador.FormPaint(Sender: TObject);
begin
GridBusca.Columns.Delete(0);
GridBusca.DataSource := nil;
GridBusca.DataSource := DSProc;
GridBusca.Columns.Add;
GridBusca.Columns[0].FieldName := '';
if TipoBusqueda = 0 then begin
GridBusca.Columns[0].FieldName := 'NombreCliente';
GridBusca.Columns[0].Title.Caption := 'Nombre del Cliente';
end
else if TipoBusqueda = 1 then begin
GridBusca.Columns[0].FieldName := 'Nombre';
GridBusca.Columns[0].Title.Caption := 'Nombre del Procurador';
end....
etc
2) Cuando se da al boton de Buscar:
Código Delphi [-]
procedure TfrmBuscador.btnBuscarClick(Sender: TObject);
var
Reg: integer;
begin
with DM do begin
SProc.Active := False;
if TipoBusqueda = 0 then SProc.ProcedureName := 'ClientesBUSCAR;1'
else if TipoBusqueda = 1 then SProc.ProcedureName := 'ProcuradoresBUSCAR;1'
else if TipoBusqueda = 2 then SProc.ProcedureName := 'JuzgadosBUSCAR;1'
else if TipoBusqueda = 3 then SProc.ProcedureName := 'JurisdiccionBUSCAR;1'
else if TipoBusqueda = 4 then SProc.ProcedureName := 'ProcedimientosBUSCAR;1';
SProc.Parameters.Refresh;
SProc.Parameters.FindParam('@Busca').Value := SeBusca.Text;
SProc.Prepared := True;
SProc.Active := True;
Reg := SProc.RecordCount;
if Reg > 0 then begin
btnAceptar.Enabled := True;
btnAceptar.SetFocus;
end
else begin
btnAceptar.Enabled := False;
SeBusca.SetFocus;
end;
end;
end;

TipoBusqueda es una variable global de el Data Modulo

3) en la primera busqueda todo correcto, se selecciona y cierra ventana, etc.
4) en la segunda y sucesivas me dá el siguiente error:
Access violation at address 4FF8334 in module 'sqloledb.dll' Read of address 00000018
Justo cuando va ha ejecutar la instruccion Sproc.Active := true;

No se he recisado las rutinas que de por sí son sencillas y no encuentro el fallo, ¿me pueden ayudar a verlo con otros ojos?

Muchas gracias.

Neftali [Germán.Estévez] 01-08-2005 16:46:49

Por favor, utiliza TAG´s en los mensajes. En éste te los coloco yo (ya que llevas poco escribiendo en el foro -en cuanto a número de mensajes-), pero sería conveniente que los utilizes para mejorar la lectura.

http://www.clubdelphi.com/foros/misc.php?do=bbcode


La franja horaria es GMT +2. Ahora son las 09:35:49.

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