PDA

Ver la Versión Completa : Vistas


Edu Rod
07-04-2004, 19:22:32
Hola a todos y de antemano mil gracias por sus repuestas....

Estoy utilizando delphi 7 con Interbase y componentes Bde.

Tengo un query conectado a una vista, yo le mando 2 parametros de datos que si existen en dicha vista, pero me da un error de que no encuentra el registro siendo que yo lo revise y si esta ahi.

Hay algun problema por ser una vista? como lo puedo solucionar, ya que ocupo poner el criterio en la consulta para poder imprimir el reporte correspondiente a un cliente con un auto en particular(que son los parametros que yo le mando).

De nuevo mil gracias que esten muy bien

Edu Rod

guillotmarc
07-04-2004, 19:55:56
Hola.

No, no hay ningún problema para usar consultas con parámetros sobre vistas en Interbase. ¿ Porqué no pones aquí la consulta que te da problemas ?, también podrias poner el código con el que asignas valor a los parámetros y abres la vista.

Saludos.

Edu Rod
07-04-2004, 20:17:27
Primero se graba la factura y en el after post va lo siguiente.

procedure TfrmContado.qryContadoAfterPost(DataSet: TDataSet);
begin
inherited;
DM.DB.ApplyUpdates([qryContado]);
z := qryContadoIDCLIENTE.AsInteger;
y := qryContadoIDAUTO.AsInteger;
end;

Despues al momento de imprimir hago lo siguiente

procedure TfrmContado.btnImprimirClick(Sender: TObject);
begin
inherited;
if (Application.MessageBox('Desea Imprimir el Contrato?', 'Confirmar', MB_YESNO) = IDYES) then
begin
frmreportes := Tfrmreportes.Create(self);
qryContado.Close; // este query se conecta a la tabla ventas//
qryContado.Open;

***este es otro query (aunque llamado igualque esta en la forma de reportes) el cual se conecta a la vista******

frmReportes.qryContado.ParamByName('idcliente').AsInteger := z;
frmReportes.qryContado.ParamByName('idauto').AsInteger := y;
frmReportes.qryContado.Open;
frmreportes.repContado1.Print;
frmreportes.repContado2.Print;
frmreportes.repContado3.Print;
end;
end;

el query de la vista en la sentencia sql tiene:
select * from VW_Contado where idcliente =:z and idauto =:y

el query de la tabla en la sentencia sql tiene:
select * from ventas


Gracias por la ayuda

guillotmarc
07-04-2004, 20:26:43
Hola.

Prieba a poner un frmReportes.qryContado.Close, antes de la asignación de los parámetros, no sea que ya estuviese abierto.

Aunque no debería haber problemas, no me gusta demasiado utilizar variables globales, a menos que sean estrictamente necesarias. En lugar de usarl las variables z e y ¿ no puedes asignar directamente qryContadoIDCLIENTE.AsInteger al parámetro ?, o es que ¿ qryContado va a apuntar a un registro distinto ?. En cualquier caso, asegúrate de poner un punto de interrupción en el momento de asignar los parámetros, y comprueba que z e y contienen los valores que esperas.

Saludos.

Edu Rod
07-04-2004, 20:38:40
Hola y gracias por tu ayuda guillotmarc, de hecho a mi tampoco me gustan las variables y ya tenia el proyecto asignando los valores del query pero en la busqueda de una solucion improvise lo de las variables ahora son locales y con las modificaciones q me diste lo deje de la siguiente manera:

frmreportes := Tfrmreportes.Create(self);
qryContado.Close;
qryContado.Open;
frmReportes.qryContado.Close;
z:=qryContadoIDCLIENTE.AsInteger;
y:=qryContadoIDAUTO.AsInteger;
frmReportes.qryContado.ParamByName('idcliente').AsInteger := z;
frmReportes.qryContado.ParamByName('idauto').AsInteger := y;
frmReportes.qryContado.Open;
frmreportes.repContado1.Print;

Si viene con los valores que espero, y dichos valores estan registrados el error que me da es el siguiente 'qrycontado :parameter 'idcliente' not found

guillotmarc
07-04-2004, 20:58:36
Que curioso que antes no te diera este error.

Entra en la colección Parameters en las propiedades del qryContado en frmReportes, y verifica que tengas idcliente y idauto, y que ambas sean de tipo integer.

Saludos.

Edu Rod
07-04-2004, 21:05:17
Este error lo he tenido siempre, es por eso que no puedo avanzar...el tipo de dato si esta entero en los dos parametros, lo que no tengo es el param type, ahi no se si se ponga algo o no....

Gracias

guillotmarc
07-04-2004, 21:31:21
Hola.

Este error lo he tenido siempre, es por eso que no puedo avanzar...

Este no es el error que indicaste en el primer mensaje

pero me da un error de que no encuentra el registro siendo que yo lo revise y si esta ahi.
Aqui pareces indicar que el Query se abre correctamente, pero sin devolver el registro esperado (es decir que no lo encuentra).

En cambio el error Parameter 'idcliente' not found lo que está indicando, es que no encuentra el parámetro idcliente en la colección de Parámetros de ese Query.

Prueba poniendo ptInput en la propiedad ParamType. O también un 0 en la propiedad Value. (Cuando asignas una propiedad del parámetro lo fuerzas a ser persistente, con lo que después se encuentra correctamente en tiempo de ejecución).

Saludos.

Edu Rod
07-04-2004, 22:03:04
Mil disculpas no supe entender el error con lo que yo pensaba que podia ser, trate de hacer lo que me dijiste, force los valores y si me trae datos, pero quitando los valores solo le puse el tipo de datos input pero sigue dando el mismo error que te comente.

Gracias por tu ayuda y apoyo

jachguate
14-04-2004, 06:08:59
....
el query de la vista en la sentencia sql tiene:
select * from VW_Contado where idcliente =:z and idauto =:y

....
frmReportes.qryContado.ParamByName('idcliente').AsInteger := z;
frmReportes.qryContado.ParamByName('idauto').AsInteger := y;
....


He cambiado el orden para que tenga sentido... pero es que los parámetros no se llaman "idcliente" e "idauto"... se llaman z e y!!!!

de tal manera que debieras hacer:

frmReportes.qryContado.ParamByName('z').AsInteger := z;
frmReportes.qryContado.ParamByName('y').AsInteger := y;

Además, te recomiendo que aprendas a utilizar la etiqueta code para indentar trozos de código, que son mucho mas legibles de esta forma.

Hasta luego.

;)

Edu Rod
14-04-2004, 17:55:51
alert("select * from vw_credito where idcliente =:z and idauto =:y");
alert("Espero asi se utilice esta etiqueta");


Si me funciono era cosa de los parametros como tu me decias, me salvaste de una y espero publicar bien la etiqueta, Gracias Amigo..