PDA

Ver la Versión Completa : Error en Aplicacion


calciojar
12-02-2008, 17:55:21
Buenos Dias, Muchas gracias en lo que me puedan colaborar por adelantado

lo que pasa es que tengo un problema al querer imprimir un listado en un DBGrid, tengo un formulario con 1 DBGrid, 1 Edit, necesito que al digitar una letra en el edit aparescan en el DBGrid un listado de los posibles datos que enpiezan por esa letra pero al hacerlo me aparece:

XSQLDA index out of range.

En el edit tengo el siguiente codigo:

dmReportes.BusFac(Factura.Text);

y en el modulo de reportes "dmReportes" tengo el siguiente procedimiento:

procedure TdmReportes.BusFac(Factura: String);
Begin
with qryBusFac do
begin
Close;
ParamByName('PMBusFac').AsString := '%'+Factura+'%';
Open;
end;
end;

ME PODRIAN COLABORAR??

MUCHAS GRACIAS.

gmontes
12-02-2008, 18:09:37
no te faltara hacer

ParamCheck := True;

calciojar
12-02-2008, 18:11:42
no te faltara hacer

ParamCheck := True;

pero en donde podria esa linea en el modulo?

calciojar
12-02-2008, 18:31:36
pero en donde podria esa linea en el modulo?

Estuve mirando mi codigo y encontre que al querer poner en TRUE la propiedad
ACTIVE del TIBQUERY me aparece el mismo error XSQLDA index out of range

eduarcol
12-02-2008, 18:38:47
Supongo que trabajas con PARADOX, de ser asi debes actualizar los indices de la tabla que es el problema que debes tener. Esto es tratando de adivinar ya que no colocas con que trabajas

calciojar
12-02-2008, 18:42:13
Supongo que trabajas con PARADOX, de ser asi debes actualizar los indices de la tabla que es el problema que debes tener. Esto es tratando de adivinar ya que no colocas con que trabajas

DELPHI, EMS INTERBASE & FIREBIRTH MANAGER

enecumene
12-02-2008, 18:49:19
Hola, miren no se nada de Interbase o Firebird, pero no deberia de ser asi?:

procedure TdmReportes.BusFac(Factura: String);
Begin
with qryBusFac do
begin
Close;
ParamByName('PMBusFac').AsString := '%'+Factura.Text+'%';
Open;
end;
end;

Digo yo, no sé, :confused:

Saludos.

Caral
12-02-2008, 19:09:53
Hola

procedure TdmReportes.BusFac(Factura: String);
Begin
with qryBusFac do
begin
ParamByName('PMBusFac').Value := Factura.Text;
Open;
end;
end;

Saludos

Caral
12-02-2008, 19:37:39
Hola
La verdad entiendo poco.
Por que no colocas el codigo completo del from, ademas del codigo sql de qryBusFac.
Por favor trata de usar las etiquetas delphi, presionas Ir a Avanzado y veras arriba unos botones, hay uno que dice Delphi, entra las etiquetas que coloca en el mensaje pones el codigo.
Si tienes dudas avisa.
Saludos

calciojar
12-02-2008, 19:40:13
Hola Modifique la linea que me diste de codigo pero sigue igualito con el mismo error

Caral
12-02-2008, 19:43:48
Hola
Cual es el codigo de qryBusFac
Saludos

calciojar
12-02-2008, 19:44:26
Este es el codigo del Modulo Reportes (dmReportes)


unit dm_Reportes;

interface

uses
SysUtils, Classes, FR_DSet, FR_DBSet, DB, IBCustomDataSet, IBQuery, Forms,
IBSQL;

type
TdmReportes = class(TDataModule)
qryMatriNom: TIBQuery;
dsMatricula: TDataSource;
frMatricula: TfrDBDataSet;
qryMatriNomNOMBRE_APELLIDO: TIBStringField;
qryBusFac: TIBQuery;
dsBusFac: TDataSource;
qryBusFacCOD_FACTURA: TIntegerField;
//procedure DataModuleCreate(Sender: TObject);
private
{ Private declarations }
procedure Guardas;
public
{ Public declarations }
Procedure BuscarMatriNom(Nombre: String);
procedure BusFac(Factura: String);
end;

var
dmReportes: TdmReportes;

implementation

uses dm_Conexion, dm_Tablas, frm_CambiarLoginPass, frm_Codificadores,
frm_Facturar, frm_InformesRecaudo, frm_InformesUsuario,
frm_InformesVarios, frm_IngresarPagos, frm_Inicio, frm_Matricula,
frm_Principal, DateUtils;

{$R *.dfm}

procedure TdmReportes.BuscarMatriNom(Nombre: String);
begin
with qryMatriNom do
begin
Close;
ParamByName('parametro').AsString := '%'+Nombre+'%';
Open;
end;
end;

procedure TdmReportes.BusFac(Factura: String);
Begin
with qryBusFac do
begin
//Close;
ParamByName('PMBusFac').AsString := '%'+Factura+'%';
Open;
end;
end;

procedure TdmReportes.Guardas;
begin
dmConexion.SalvarTransaccion;
end;

end.

Delphius
12-02-2008, 19:47:18
Por lo que estoy viendo... es posible que el error provenga de otro lado. Además he notado que el código que muestran tiene una incosistencia: el parámetro es de tipo string, mientras que en el cuerpo del procedimiento, asumen que es un TEdit:

procedure TdmReportes.BusFac(Factura: String);
Begin
with qryBusFac do
begin
ParamByName('PMBusFac').Value := Factura; // aqui hay un error
Open;
end;
end;

Lo que no me está quedando claro que es lo que desea calciojar. ¿Hacer un like? Esto me lo pregunto por el hecho de que pone el comodin %.

El error que menciona de "fuera de rango" viene de otro lado...

Hay algo en otra parte que hace fallar el código. Sería útil que calciojar exponga más código del que expuso y que explique con mayor detalles que desea conseguir.

EDITO: veo que ya expuso más código, pero no es allí el problema. El problema viene del armado de la consulta SQL que está armando y/o de otro lugar. Asi lo estoy comprendiendo yo.

Saludos,

enecumene
12-02-2008, 19:49:54
efectivamente estaba pensando yo amigo Delphius, tal vez el problema puede venir de la sentencia SQLo en el onchange del edit, en fin en otro lado.

Saludos.

calciojar
12-02-2008, 19:52:48
efectivamente estaba pensando yo amigo Delphius, tal vez el problema puede venir de la sentencia SQLo en el onchange del edit, en fin en otro lado.

Saludos.

HOLA. en el OnChange del Edit tengo lo siguientedmReportes.BusFac(Factura.Text);

Delphius
12-02-2008, 19:58:28
HOLA. en el OnChange del Edit tengo lo siguienteCódigo Delphi [-] (http://www.clubdelphi.com/foros/#)dmReportes.BusFac(Factura.Text);



calciojar, el error que tu tienes viene de más atrás del paso del OnChange. Es muy problable que se trata del armado de la consulta SQL. ¿Por casualidad estás limpiando el TQuery antes de armar la consulta?
No se estoy divagando... pero estoy seguro que el problema no es el OnChange.

Saludos,

enecumene
12-02-2008, 20:00:32
Por qué no intentas esto, no se si funcionará, pero vale ahi va:

procedure TdmReportes.BusFac(Factura: String);
var
Filtro : String;
begin
If (Factura.Text <> '') then
begin
qryFact.Filtered := False;
Filtro := 'Factura Like ''%' +Factura.Text+ '%''';
qryFact.Filter := Filtro;
qryFact.Filtered := True;
end
else qryFact.Filtered := False;

end;

Concuerdo con delphius, por que no posteas la Sentencia SQL del query?

Saludos.

calciojar
12-02-2008, 20:04:53
HOLA. modifique la consulta y ahora me aparece otro error:

SQL Parce error:
Parameter Name Expected

calciojar
12-02-2008, 20:06:25
HOLA. modifique la consulta y ahora me aparece otro error:

SQL Parce error:
Parameter Name Expected

la consulta es:

select
factura.cod_factura
from
factura
where
factura.cod_factura like : PMBusFac
order by factura.cod_factura

enecumene
12-02-2008, 20:06:47
HOLA. modifique la consulta y ahora me aparece otro error:

SQL Parce error:
Parameter Name Expected

calciojar, si no pones la consulta aqui no podemos avanzar en conseguirte la solución.

SAludos.

Delphius
12-02-2008, 20:09:52
HOLA. modifique la consulta y ahora me aparece otro error:

SQL Parce error:
Parameter Name Expected

calciojar, ¿De que modo más amable posible te podemos pedir que por favor expongas tu consulta SQL?

Te estamos diciendo de la mejor manera que tu problema viene de allí, y hasta es posible que más atrás... pero no podemos adivinar. Necesitamos más información de la que nos das. No estamos allí contigo como para saber que es lo que te falla.

Te lo pido, por favor... explicate mejor que deseas hacer, cual es tu consulta, y/o cualquier información relevante. ¿Que cambios haz hecho?

Saludos,

calciojar
12-02-2008, 20:11:02
calciojar, si no pones la consulta aqui no podemos avanzar en conseguirte la solución.

SAludos.

la consulta es:

select
factura.cod_factura
from
factura
where
factura.cod_factura like : PMBusFac
order by factura.cod_factura

Chris
12-02-2008, 20:13:16
Solo tienes que unir los dos puntos ( : ) con el nombre del parámetro
select
factura.cod_factura
from
factura
where
factura.cod_factura like :PMBusFac
order by factura.cod_factura

enecumene
12-02-2008, 20:14:11
Haz esto:

SQL
select
factura.cod_factura
from
factura


y pones esto en el procedure BuscFac:

procedure TdmReportes.BusFac(Factura: String);
var
Filtro : String;
begin
If (Factura.Text <> '') then
begin
qryFact.Filtered := False;
Filtro := 'Factura Like ''%' +Factura+ '%'' order by facturas ASC';
qryFact.Filter := Filtro;
qryFact.Filtered := True;
end
else qryFact.Filtered := False;

end;

y prueba a ver:

Delphius
12-02-2008, 20:15:58
Haz esto:

SQL
Código SQL [-] (http://www.clubdelphi.com/foros/#)select factura.cod_factura from factura



y pones esto en el procedure BuscFac:

Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TdmReportes.BusFac(Factura: String); var Filtro : String;
begin If (Factura.Text <> '') then begin qryFact.Filtered := False; Filtro := 'Factura Like ''%' +Factura.Text+ '%'' order by facturas ASC';
qryFact.Filter := Filtro;
qryFact.Filtered := True;
end else qryFact.Filtered := False;

end;


y prueba a ver:

ADVERTENCIA: tu código espere un string, pero en el cuerpo lo tratas como un TEDIT. Borra el .Text que está demás;)

Saludos,

enecumene
12-02-2008, 20:17:31
ADVERTENCIA: tu código espere un string, pero en el cuerpo lo tratas como un TEDIT. Borra el .Text que está demás;)

Saludos,

Vale es cierto Amigo Delphius, gracias por la advertencia.

Saludos.

Caral
12-02-2008, 20:19:52
Hola
Lo mas seguro es que me equivoco, pero me parece que el codigo lo estas escribiendo directamente en el form del Qreport, es asi?.
Saludos

calciojar
12-02-2008, 20:26:50
MUCHACHOS GRACIAS A USTEDES YA ME FUNCIONO SOLO HACIA FALTA UNIR LOS :AL PARAMETRO COMO DECIA NUESTRO COMPAÑERO(A) D&W.

select
factura.cod_factura
from
factura
where
factura.cod_factura like :PMBusFac
order by factura.cod_factura

DE TODAS MANERAS ME GUSTA MUCHO QUE TODAS LAS PERSONAS ME AYUDARAN
LES AGRADESCO, PUESTO QUE ESTOY HACIENDO UNA APLICACION QUE TENGO
QUE ENTREGARLA A MEDIADOS DE MARZO. ESPERO QUE SI TENGO ALGUNA
DUDA MAS ME PUEDAN COLABORAR. GRACIASSSSS

calciojar
12-02-2008, 20:28:25
HAAAA Y UNA PREGUNTA ME PODRIAN EXPLICAR EL CODIGO DEL FILTRO QUE ME DIERON???

procedure TdmReportes.BusFac(Factura: String);
var
Filtro : String;
begin
If (Factura.Text <> '') then
begin
qryFact.Filtered := False;
Filtro := 'Factura Like ''%' +Factura+ '%'' order by facturas ASC';
qryFact.Filter := Filtro;
qryFact.Filtered := True;
end
else qryFact.Filtered := False;

end;

egostar
12-02-2008, 20:38:46
DE TODAS MANERAS ME GUSTA MUCHO QUE TODAS LAS PERSONAS ME AYUDARAN
LES AGRADESCO, PUESTO QUE ESTOY HACIENDO UNA APLICACION QUE TENGO
QUE ENTREGARLA A MEDIADOS DE MARZO. ESPERO QUE SI TENGO ALGUNA
DUDA MAS ME PUEDAN COLABORAR. GRACIASSSSS


Hola calciojar
Por mera curiosidad, que porcentaje de tu proyecto llevas hecho :confused::rolleyes::eek:

Salud OS

PD. No escribas con mayúsculas, no se ve bien, ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)? :)

calciojar
12-02-2008, 20:44:55
Hola calciojar
Por mera curiosidad, que porcentaje de tu proyecto llevas hecho :confused::rolleyes::eek:

Salud OS

PD. No escribas con mayúsculas, no se ve bien, ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)? :)


Hola, que pena lo de las mayusculas ya lo habia leido pero de verdad me olvide por completo.

en cuanto al porcentaje solo me falta hacer unas 10 consultas mas o menos y otra cosita sencilla creo que llevo un 90 a 95.

gracias por tu interes y que pena de nuevo por las mayusculas

egostar
12-02-2008, 20:49:19
en cuanto al porcentaje solo me falta hacer unas 10 consultas mas o menos y otra cosita sencilla creo que llevo un 90 a 95.


Vaya, ya te queda algo así como un mes, ojala y te de tiempo de probar tu sistema antes de entregarlo, no estaría nada bien que fallara, digo, podría quedar en entredicho el Club :D:D:D

Salud OS

PD. Tomalo como un consejo de amigos.....

Delphius
12-02-2008, 20:55:08
calciojar,
Espero que no me tomes el malo de la película pero espero que este hilo te haya demostrado que si uno quiere encontrar la solución debe mirar más adentro de lo que se imagina. Por lo que es fundamental que expongas, para la próxima, mejor tus casos, tus dudas y/o inconvenientes.

Ha requerido de la intervención de muchos para convencerte de que el error venía de más atrás.

Y disculpa que lo diga, pero tu comentario ha sonado un poco descortés. Si bien nos agradeciste, el cierre del telón te ha quedado corto... Recuerda que te podremos ser de ayuda siempre que tu pongas ganas, podemos ayudarte... si... no estamos obligados a ello pero haremos nuestro esfuerzo, pero eso no quiere decir que siempre estaremos para salvarte.

Me pareció correcto que Egostar te haya invitado a leer la guia de estilo.

Saludos,