Aprendí a recuperar filas de un dw, según el argumento de un DropDownDw, y anduvo bien. Pero ahora quiero recuperar filas según dos argumentos. Al segundo lo saco de otro DW. O sea especifico "2 retrieval arguments". Pero ahora me sale un mensaje: "Epecting 2 retrieval arg but got 1" ¿Cómo soluciono esto? ¿Cómo puedo recuperar filas con 2 o más argumentos?
3 Respuestas
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
El error que comentas es clásico, esto significa que estas intentando recuperar 2 argumentos por medio de tu datawindow control, pero sin embargo estas enviando uno solo por medio del retrieve() Por ejemplo. si tu datawindow object permite recibir fecha y hora, Para hacer una selección de los registros que cumplan con estas condiciones, en el retrieve() del datawindow control deberás integrar esos 2 valores uno tipo fecha y el otro tipo hora.
¿Este retrieve como lo hago? ¿Tengo qué escribir algo en el código del retrieve? ¿En es caso me podrías escribir un ejemplito? Desde ya gracias. Marce
Para recuperar datos por medio de un datawindow control simplemente ejecutas el retrieve(), si dentro del datawindow object has declarado argumentos de recepción entonces el retrieve deberá de acompañar tantos datos como argumentos se encuentren declarados en el datawindow object, y del mismo tipo por ejm. En el evento CONSTRUCTOR El siguiente ejemplo no recibe ningún argumento por no tener solicitud de ninguno de estos. THIS.SetTransObject(SQLCA) THIS.Retrieve() el caso en que solicita argumentos. THIS.SetTransObject(SQLCA) THIS.Retrieve(DATE('01/01/2003'), TIME('10:25:30')) Si vemos esto desde el datawindow object, en el tendrás que ir primero a la parte de SQL o script, luego design luego seleccionar la opción de retrieval arguments, y aquí integrar los diferentes argumentos que necesitaras para condicionar la selección de tus datos. Seguro que por lo que me cuentas esto ya lo has hecho. Pienso que el problema esta centrado en que tienes una columna de un datawindow en donde se encuentra tipo dropdowndatawindow, luego este detrás tiene un datawindow que tiene 2, argumentos para seleccionar los datos, esto funciona exactamente que en el ejemplo anterior sin embargo hay que hacer una pequeña modificación. Primero: Tienes que desmarcar la opción de autoretrieval, en la columna que tiene el tipo dropdowndatawindow. Luego: Extraer por medio de una instancia el datawindow que esta siendo manejado por el dropdowndatawindow, de la siguiente manera. DATAWINDOWCHILD ldwc_local IF (THIS.GetChild('<columna>', ldwc_local) = 1) THEN ldwc_local.SetTransObject(SQLCA) ldwc_local.retrieve(<arg1>, <arg2>, ...) END IF Este script generalmente lo pongo en el evento CONSTRUCTOR, del datawindow control, por eso contiene el pronombre THIS Explicación: Al apagar la propiedad AUTORETRIEVAL, el propio control ya no efectúa automáticamente cuando la ventana es creada, la recuperación de los datos del datawindow que tiene atado, sino que espera que el programa lo haga por él, esto por supuesto lo hace el programa en el momento de la creación del datawindowcontrol, así cuando la pantalla es presentada, esta ya contiene los datos necesarios. Futurista: Puede que digas, que necesitas tener un acorde con lo que contiene las tablas y lo que se presenta en el dropdowndatawindow, o sea que si añado un registro también se refleje en el control, y no tenga que volver a cargar la ventana para integrar el nuevo dato, bueno pues eso lo puedes conseguir creando un evento del usuario en el control datawindow, y en el evento click de este hacer una llamada al nuevo evento utilizando la función POSTEVENT, ej. Creas el control ue_dropdata Dentó de este DATAWINDOWCHILD ldwc_local IF (THIS.GetChild('<columna>', ldwc_local) = 1) THEN ldwc_local.SetTransObject(SQLCA) ldwc_local.retrieve(<arg1>, <arg2>, ...) END IF luego en el evento constructor del datawindow control THIS.PostEvent('ue_dropdata') y en el evento click del mismo control THIS.PostEvent('ue_dropdata') Ten en cuenta que la tardanza de la carga depende del tamaño de la tabla, es posible que si es muy grande, cuando hagas click en la columna, el tiempo de espera confunda un poco al usuario.
- Anónimoahora mismo
Respuesta de aldob
1
1
aldob, Ingeniero en Sistemas con amplia experiencia en desarrollo de...
Ese error te sale cuando en el retrieve estas pasando un solo valor y como en tu caso tienes 2 definidos. Te recomiendo que revises el código a ver que es lo que estas mandando y cuando, tal vez te quedo algún retrieve con un solo valor. Lo que tienes que hacer es conseguir los dos valores (creo que de ddowns en tu caso) y después hacer el retrieve.
Si sale ese mensaje de error es porque al momento de recuperar las filas de la base de datos solo estas especificando un argumento, el código debería ser así: dw_1. Retrieve(argumento1, argumento2)