PDA

Ver la Versión Completa : Buscar en varias tablas


gcaffe
01-08-2005, 16:31:22
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:


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:

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:

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