|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - leoandres
51
« en: Lunes 25 de Septiembre de 2006, 19:40 »
Saludos.
Tienes que definir un objeto OLE en la ventana y al presionar el botón que desees programar deberás asignarle el archivo que va aestar asociado a ese objeto. Fíjate e la ayuda de creación de objetos OLE...
52
« en: Martes 19 de Septiembre de 2006, 23:45 »
Saludos... Estas definiendo la función externa? Define la variable que da longitud como long (tu la estas definiendo entero corto sin signo)... Aquí tienes ejemplos de las dos cosas... GetComputerNameA( ) This function returns the computer's name into a string by reference. Be sure to allocate enough space for the string or you'll get a GPF when you exit PowerBuilder. There is no PowerBuilder equivalent. Global External Function: FUNCTION boolean GetComputerNameA(ref string cname,ref long nbuf) LIBRARY "Kernel32.dll" Script: string ls_compname long ll_buf ll_buf = 25 ls_compname = space(ll_buf) GetComputerNameA(ls_compname, ll_buf) MessageBox("Computer name is:", ls_compname) GetUserNameA( ) This function returns the current users logon name. Be sure to allocate enough space for the string or you'll get a GPF when you exit PowerBuilder. There is no PowerBuilder equivalent. Global External Function: FUNCTION boolean GetUserNameA(ref string uname, ref ulong slength) LIBRARY "ADVAPI32.DLL" Script: string ls_username string ls_var ulong lu_val boolean rtn lu_val = 255 ls_username = Space( 255 ) rtn = GetUserNameA(ls_username, lu_val) Messagebox("GetUserNameA", "Username = " + string(ls_username)) Para mas información de funciones del windows que puedes utilizar entra con este link... http://www.ikarhomecenter.ru/index.php?p=p...etComputerNameA
53
« en: Martes 19 de Septiembre de 2006, 23:12 »
Saludos...
Si quieres saber uantos dias hay entre dos fechas debes usar la función: lond ll_dias ll_dias=DaysAfter ( fecha1, fecha2 ) ... Si quieres calcular a partir de una fecha y el numero de dias transcurridos (a futuro o han pasado n dias)... debes usar la función: date dl_fecha dl_fecha=RelativeDate ( fecha1, n_dias )
54
« en: Jueves 14 de Septiembre de 2006, 22:04 »
Saludos...
Si no te sale nada es porque el valor que esta obteniendo es "nulo", prueba esto lvcodban=dw_bancos.GetItemString(1,"id_banco") IF ISNULL(LVCODBAN) THEN messagebox("AVISO","VALOR NULO...") else messagebox("AVISO",lvCodBan) end if
Veras que te sale el primer mensaje... lo otro es que siempre estas tomando el valor del 1er. registro accesado en el datawindow, cambia para que te funcione asi... lvcodban=dw_bancos.GetItemString(dw_bancos.GetRow(),"id_banco")
te tomará el valor del renglón que selecciones en el dw.
55
« en: Jueves 14 de Septiembre de 2006, 16:48 »
Saludos. Cuando fabricas el objeto dw que te servirá de base como dddw, seleccionas el nombre del banco y el codigo del banco, en la parte de edicion (diseño) del dw, eliminas la columna del codigo, cosa que te represente solo el nombre del banco, debes usar un tipo de dw tabular para que funcione bien como dddw. Cuando asignas en las propiedades del dato en la parte de edición (te acuerdas que se te abren tres lineas para ser llenadas cuando defines que es un dddw) en la primera va el nombre del objeto dw, en la segunda el nombre del dato a desplegar (nombre banco) y en la tercera el dato que almacenará para selección (codigo banco).
56
« en: Miércoles 13 de Septiembre de 2006, 21:48 »
Saludos. Primero que nada tienes que saber que: el evento itemchanged se "dispara" cuando hay cambios de datos, para lo que tu quieres debes trabajar con el evento "rowfocuschanged" para que cuando cambies de posicion en la selección te tome el valor de lo que marcaste en el dw.
Lo segundo para poder trabajar que te limpie el dw con las cuentas del banco seleccionado debes trabajar con un datawindowchild, en donde puedes definir un datawindow con un argumento de busqueda (en este caso el banco en cuestión) y pasarlo al dw para que filtre las cuentas de dicho banco cuando hace el retrieve, en este caso tu retrieve sería mas o menos así: dw_cuentas.retrieve(codigo_banco)
Tienes que definir el dw con argumento y poner en el sql: where cuentas.codigo_banco = :a_banco... El argumento definido para el dw sería "a_banco" y del tipo que necesites...
El datawindowchild esta bastante bien explicado en la documentación que trae el powerbuilder.
57
« en: Miércoles 6 de Septiembre de 2006, 17:56 »
Saludos. No realmente, un dddw es un objeto dentro de otro objeto, es decir un datawindow dentro de otro datawindow. Para ponerte un ejemplo: Tienes una tabla de personas y otra de ciudades y debes asignarle la ciudad a la columna de ciudad de residencia de la persona, entonces utilizas el dddw para seleccionar de tu tabla de ciudades y asignarla a la persona en la columna correspondiente a ciudad de residencia. Para eso debes crear un datawindow que contenga el nombre de la ciudad y el codigo de la ciudad. Luego, creas un datawindow de la carga de datos para las personas. En la edición del dw de personas: 1.- Abres con el botón derecho en la columna de ciudad y seleccionas propiedades. 2.- Seleccionas la tableta de edición y seleccionas estilo, se te desplegara un listbox para los tipos de estilo a seleccionar(check box, dddw, listbox, etc.) ahí seleccionas "drop down datawindow". 3.- Se te abren tres opciones: "datawindow", "display column" y "data column", ahí vas a colocar en "datawindow" el nombre del objeto creado (tu datawindow de ciudades que te mencioné) ya que te aparecen todos los datawindow que tengas en tu aplicación seleccionas el que corresponde, en "display column" seleccionas la columna del nombre de ciudad y en "data column" seleccionas la columna que te refiere a codigo de ciudad. 4.- Marcas las opciones de "Always show arrow" y "V scroll bar" para que te aparezca la barra de desplazamiento. 5.- Aplicas los cambios y cierras propiedades. Ya tendrías con esto tu dddw para proceso. Espero que te sirva esta explicación.
58
« en: Viernes 25 de Agosto de 2006, 22:19 »
Saludos. El valor del item seleccionado se almacena en una variable interna del powebuilder que se llama index. En el evento itemchanged del objeto, debes preguntar por el valor de index, ej.: IF INDEX = 1 THEN ... ELSEIF INDEX =2 THEN ... END IF
o pudes definir una variable (integer) y asignarle el valor del INDEX, ej.
integer il_valor il_valor=index
IF il_valor=1 THEN ...
OJO... por defecto los item se ordenan en orden alfabético por el texto (descripción) del item,ver checkbox de sort en las propiedades generales. (yo le quito el sort para que me queden en el orden que los definí... L.T.
59
« en: Miércoles 16 de Agosto de 2006, 17:13 »
Saludos... agrandale la altura, a mi me ha pasado eso y tuve que ponerlos mas altos para que aceptara texto... L.T.
60
« en: Lunes 31 de Julio de 2006, 21:44 »
Saludos. En que base de datos vas a recibir la data? Powerbuilder tiene una solución facil que se llama PIPELINE...
L.T.
61
« en: Sábado 29 de Julio de 2006, 16:58 »
Saludos... otra opcion cuando se esta trascribiendo es:
en el evento itemchanged del datawindow colocar el script:
CHOOSE CASE dwo. name CASE 'nombre_de_columna' variable=data ... si es string variable=integer(data)... si es un entero corto variable=long(data)... si es un entero largo variable=decimal(data) ... si es un decimal variable=date(data) ... si es una fecha
END CHOOSE
EL 'NOMBRE_DE_COLUMNA' ES EL NOMBRE DEL OBJETO PARA LA COLUMNA
62
« en: Sábado 29 de Julio de 2006, 16:52 »
Sobre que tema?... debes instalar el Gestor de la base de datos, copiar la base de datos y configurar los odbc para la nueva direccion de la red (si es por tcpip) en los clientes.
Saludos.
63
« en: Miércoles 26 de Julio de 2006, 16:02 »
Saludos... no debes tener problemas, tengo aplicaciones en ambos ambientes.
64
« en: Viernes 21 de Julio de 2006, 23:34 »
Saludos. Tienes que definir dos (2) variables para guardar temporalmente el usuario y su passswd, y esas dos variables son las que tienes que utilizar para el WHERE del select.
65
« en: Martes 18 de Julio de 2006, 21:29 »
Saludos.
Debes pasarle los item del dw1 al dw2, ej.:
long ll_rows, ll_row=1 ll_rows=dw2.RowCount() DO WHILE ll_row <= ll_rows dw2.SetItem(ll_row,dw_1.Getitemnumber(1,'dw1_campo1'),'dw_2_campo1) dw2.SetItem(ll_row,dw_1.Getitemstring(1,'dw1_campo2'),'dw_2_campo2) ll_row++ LOOP ... etc... eso lo puedes poner en un boton antes del update y el commit, debes tomar el dato number o string dependiendo del tipo... el valor de '1' al lado del parentesis es para el row del dw1.
66
« en: Viernes 30 de Junio de 2006, 23:59 »
Disculpa... utiliza en vez de sl_dato=this.getItemstring(this.getRow(),'marbete') lo siguiente... sl_dato=data
donde "data· es el valor almacenado temporalmente para los procesos internos del datawindow...
67
« en: Viernes 30 de Junio de 2006, 23:56 »
Saludos... Tienes que programar el evento itemchanged para hacer la búsqueda que te sugieren por el select...
//Evento itemchanged // asumo que marbete es un string es el nombre del campo en el datawindow... CHOOSE CASE 'MARBETE' string sl_dato, sl_dato1 sl_dato=this.Getitemstring(this.getRow(),'marbete') SetNull(sl_dato1) select marbete into :sl_dato1 from tabla where marbete = :sl_dato; IF sl_dato=sl_dato1 THEN MessageBox('Error!','Marbete ya existe!') END IF
68
« en: Viernes 30 de Junio de 2006, 23:49 »
Saludos... estas equivocado en los eventos que se disparan, el retrieveend se "dispara" solamente al finalizar de cargar la data cuando hay un retrieve, el itemchanged se "dispara" cuando hay cambios de datos en la fila (tupla) de la data, puedes controlarlo preguntando por el dato que haya sido modificado con las instrucciones choose case... end case, etc. (para tu conocimiento), para que se "dispare" la búsqueda en el segundo datawindow debes programar el evento "ROWFOCUSCHANGED" que se activará cuando te desplaces en la línea para hacer la búsqueda... espero que te sirva...
69
« en: Sábado 24 de Junio de 2006, 16:51 »
Para que veas como funciona esto.... 1. crea dos datawindows 1.1 a uno lo vas a llamar dddw_nombres (cuando lo guardes) , seleccionas la tabla y el orden en que quieras que te aparezcan los datos (por ej. nombre) 1.2 a otro lo vas a llamar dw_datos (cuando lo guardes), seleccionas la tabla de donde quieres extraer para la busqueda...en el sql defines un argumento tipo string y lo llamas a_nombre (menu:design... retrieval arguments) en el where le pones (columna) nombre = :a_nombre; esto te permite que te filtre solo el (los) registro(s) que contengan ese valor... 2. crea una ventana con 2 objetos datawindow dentro de ella... al primero (dw_1), le pones que el objetname=dddw_nombres al segundo (dw_2) le pones que el objetname=dw_datos
en el script del open de la ventana le pones lo siguiente: dw_1.Settransobject(SQLCA) dw_2. Settransobject(SQLCA) dw_1.retrieve()
3. en el evento 'ROWFOCUSCHANGED' del dw_1 le pones dw_2.retrieve(this.getitemstring(this.getRow(),'nombre')
y listo.... en el primer dw (dw_1) te va a extraer todos los registros de donde parte tu búsqueda en el segundo (dw_2) te va a sacar los datos de lo que especificamente busques...
tienes que poner en el retrieve que te puse en el punto 3 el nombre de la columna como te la define el dddw_nombres al crearse donde yo escribi 'nombre' (tiene que ir entre comillas (simple o doble)... ojo el nombre con que trabaja el datawindow (para la columna) no necesariamente es el mismo de la columna... lo cambia si tienes varias tablas cruzadas, etc....
espero que te sirva... no te compliques con crear por sintaxis...dw... ddlb,... etc.
70
« en: Viernes 23 de Junio de 2006, 00:58 »
Hola... ¿es un ddlb o un dddw?, si quieres saber que dato hay en el listbox debes trabajar con el dw de donde generaste el listbox, al seleccionar un item (del listbox) se activa el evento itemchanged de ese objeto, entonces debes preguntar por el valor de la variable "index" (que es propia del objeto ddlb), ese valor te apuntará al registro del dw de donde generaste los item del ddlb, al hacer dw_x.ScrollToRow(index), se posicionara en el renglon del dw que apunta al item del ddlb...o tambien obtener el texto que contiene el item del ddlb...
71
« en: Viernes 23 de Junio de 2006, 00:51 »
No me ha pasado, pero tengo entendido que para migrar a v. 10 desde v. 6 o 7 debes primero migrar a v. 8, creo que ese es el problema, que la v. 10 no migra bien desde esas versiones... Saludos.
72
« en: Sábado 10 de Junio de 2006, 00:11 »
Saludos. Un datawindow es una ventana que se va a llenar de datos al hacer un retrieve (select de SQL), por inserciones a la base de datos (insert SQL), o se van a actualizar (update SQL) o eliminar datos (delete SQL), es decir todos los procesos de búsqueda o actualización de datos se hacen sobre el datawindow, el powerbuilder genera las instrucciones cuando vas a hacer actualizaciones (insert, update, delete) en la base de datos al procesar la función datawindow.Update() y despues el commit a la base de datos.... un datasource es un origen de datos, es decir una conexión a una fuente de datos sea a través de ODBC, OLE DB, etc., el powerbuilder maneja todo tipo de datos origen(archivos planos tales como texto, dbf, excel, etc.) y conexiones a las bases de datos (sybase, oracle, sqlserve, etc. a través de orígenes de datos (datasource). Los ODBC, OLE DB, etc...son intermediarios entre la aplicación y el "pote" de datos.
73
« en: Sábado 10 de Junio de 2006, 00:01 »
Por favor explicate mejor... donde y porque lo quieres usar?, si dentro de algún proceso de la aplicación vas a usar otro origen de datos (conectarte a dos bases de datos al mismo tiempo) debes crear un objeto transacción:
transaction DBTrans DBTrans = CREATE transaction DBTrans.DBMS = 'ODBC' ... por ejemplo que quieras hacer un pipeline, allí lo explica la ayuda...
si lo que quieres es conectarte al iniciar el PowerBuilder a un origen de datos debes crear el ODBC y luego asociar ese ODBC a un perfil (profile)...
74
« en: Viernes 9 de Junio de 2006, 23:53 »
Saludos... No comprendo bien que es lo que deseas hacer... si lo que quieres es que los datos del datastore se copien al datawindow debes usar la función RowsCopy el ejemplo de la ayuda es: dwcontrol.RowsCopy (startrow, endrow, copybuffer, targetdw, beforerow, targetbuffer )
si lo que quieres es llenar el datastore con la data del retrieve:
datastore ds_datastore create ds_datastore ds_datastore.DataObject='nombre del data datawindow a usar' ds_datastore.SetTransObject(SQLCA) ds_datastore.retrieve()
.... Destroy ds_datastore
Espero que te sirva...
75
« en: Martes 9 de Mayo de 2006, 13:32 »
Saludos... En un script puedes programar la tecla F1 definiendo un evento de usuario... e puede quedar activa para toda la aplicación...
|
|
|