|
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 - pierpiter
26
« en: Martes 13 de Junio de 2006, 16:04 »
Sinceramente no se que es eso del "type ... from ... within". Fijate si no quedó obsoleta la sentencia en la nueva version. Otra que te podés fijar es, si no quedó obsoleta, como se define en power 10 esa sentencia... la verdad que no encuentro nada de eso. Saludos.
27
« en: Martes 13 de Junio de 2006, 15:47 »
Hola, no entiendo bien a donde apuntas. Las PFC son librerías con extensiones del lenguaje (agregan funciones y objetos ya predefinidos para hacer más cosas). ClassDefinition (el objeto) es un objeto que te permite obtener información acerca de la definición de clases en power. Este objeto tiene propiedades y funciones (fijate en la ayuda de power)... The ClassDefinition object lets you check: The name of the class The library the class was loaded from The class definition of its ancestor, if any The class definition of its parent or container object, if any Whether the class is autoinstantiated
Esas entre otras. Lo mismo para VariableDefinition... The VariableDefinition object has information about: · The variable's name and type · Whether the variable is a scalar or an array and information about the array · The variable's initial value, whether the value overrides an ancestor's value, and whether the variable is a constant · The read and write access levels for the variable · The scope of the variable (global, shared, instance, local, argument), including whether the variable is an argument and how the argument is passed
En cuanto a ejemplos, no tengo ninguno, pero fijate si es necesario usar esto para leer la estructura del menú (si es a lo que te referís...) cualquier cosa pregunta, trataremos de buscarle la vuelta, saludos.
28
« en: Martes 13 de Junio de 2006, 15:32 »
Muy bien explicado, sólo agregar a la definición del datawindow, para que sea más simple, decir que es un objeto de powerbuilder que permite interactuar con una bases de datos. Saludos.
29
« en: Viernes 9 de Junio de 2006, 15:25 »
Hola, nunca me toco hacer algo así, pero el powerbuilder trae una herramienta de migración. Al menos, en la versión 9, te vas a file->new... y te abre una ventanita donde seleccionas que es lo nuevo que querés. La última solapa (la que dice "tool") tiene el "Migration Assistant". Probá de hacerlo con eso, igual chequeate todo el funcionamiento del sistema (al menos las operaciones más usadas). Que tengas suerte, saludos.
30
« en: Lunes 5 de Junio de 2006, 15:56 »
Hola, me alegro que haya funcionado, aunque sea con dos veces enter... raro. En cuanto al sql, depende de que tablas tengas y como levantar los datos. El select lo ponés directamente en el código (como esta en el ejemplo de arriba), dentro del select le asignas las variables que van a contener el dato devuelto y asignas esas variables a los campos del datawindow. // Hago el select para recuperar el dato. select nombre, apellido, cuit into :ls_nombre, :ls_apellido, :ls_cuit from tblpersonas where id = :ll_id;
En ese select lo que hago es seleccionar el nombre, apellido y cuit de la tabla tblpersonas, donde el id de la persona sea igual al id que levante anteriormente del datawindow. El resultado de cada campo de ese select se va a guardar en :ls_nombre, :ls_apellido, :ls_cuit (la clausula "INTO" le indica que meta el resultado en esas variables). El resultado tiene que ser único, porque sino, te va a dar un error porque el select retorna más de una fila. Después tendras que hacer validaciones sobre las variables, como por ejemplo el dato que devuelve, que no sea vacio... etc. Cualquier cosita, ya sabés, pregunta que no hay drama, saludos.
31
« en: Lunes 5 de Junio de 2006, 15:47 »
Hola, hay una función del control que es "SetAlignment" donde podés setear la alineación, no se si se setea para todo el control o se puede para un texto seleccionado solamente, eso te lo dejo para que pruebes. Igualmente fijate en la ayuda, busca "RichTextEdit Control" que vas a tener todas las propiedades y funciones que tiene este control. Te pongo el ejemplo que esta en la ayuda: integer li_success li_success = rte_1.SetAlignment(Right!)
El parámetro para la función puede ser cualquiera de las alineaciones (Right!, Left!, Center!, Justify!) Saludos.
32
« en: Lunes 5 de Junio de 2006, 15:39 »
Buenas, como que solo te permite conexiones odbc??
No use el powerbuilder 10, pero busca en el menu "database profile" (debería estar dentro del menú "tools"). Al acceder te abre una ventana con todas las conexiones posibles que podés establecer, entre ellas oledb. Dentro de la misma ventana seleccionas el tipo de conexión que querés y lo configuras para tener acceso a tu base de datos.
Espero te sirva, saludos.
33
« en: Viernes 2 de Junio de 2006, 15:04 »
Hola, el control tiene una propiedad que es "WordWrap", la cual ajusta el texto al tamaño del control. No se que version de powerbuilder estas usando, pero fijate en las propiedades que la vas a encontrar. Igual, tené en cuenta que lo que hace es ajustar el texto al tamaño del control, no hace un retorno de carro. Si te fijas en el ejemplo que pusistes, copia el texto y pegalo en un editor de texto y vas a ver que te queda todo en una misma línea (siempre que el editor de texto no tenga habilitada una opción de ajuste de línea jeje). Espero haberte ayudado, saludos.
34
« en: Miércoles 31 de Mayo de 2006, 19:12 »
Bueno, vamos a ver si entendí bien: Podés usar el código que te pase para llenar los campos que vos querés del datawindow. Primero llenarías los del cliente con todos sus datos personales y luego, cuando ingresas el id del producto llenas los demás campos. Para la primera parte: // Extraígo el número de columna en la que estoy posicionado. li_numcol = this.getcolumn() //messagebox('Nro. Columna',string(li_numcol)) if li_numcol = 1 then ...
Al estar definido el evento cuando presionas 'enter', siempre que se presione enter se ejecuta este código, por eso es que extraígo el número de columna en la que estoy parado (la actual en la que se presiono enter) y pregunto si esa es la 1, porque solo quiero ejecutar el código cuando estoy en la columna 1. No me interesa que se ejecute cuando estoy en las demás columnas. La columna depende de cual quieras que sea donde ingresas el id del cliente por ejemplo. Si el id del cliente lo ingresas en la columna 4 del datawindow entonces en el if tendrías que preguntar por li_numcol = 4 y ahí adentro ejecutar todo el código para traer los datos de la base (el select) e insertar los datos en el datawindow (this.setitem = ....) Los parámetros que recibe la función 'setitem' son: setitem(numfila, columna, dato) -- numfila --> es el número de fila en la que quiero ingresar el dato (como queremos que sea en la misma, primero extraígo en que línea estoy parado y lo guardo en un variable para poder pasarle a la función este dato). -- columna --> es el número de columna en la que quiero ingresar el dato, esto depende de en que número de columna tengas cada dato a ingresar. -- dato --> es el dato que queremos ingresar. Hay que tener cuidado con el tipo de datos, porque te va a dar error si queres meter un dato string en un campo que esta definido como integer en el datawindow. Bueno, para la segunda parte tendrías que usar la misma lógica pero para llenar los campos que querés con la descripción del producto. Tendrías que agregar un if para preguntar por la columna en la que esta el id del producto, hacer el select con los datos que necesitas y luego insertar los datos en el datawindow. O sea que tendrías dos códigos como el que te pase dentro del mismo evento. Cualquier cosita preguntame, no hay problema. Saludos.
35
« en: Martes 30 de Mayo de 2006, 15:32 »
Acá te dejo unos enlaces a ejemplos en código fuente para que mires también (son de la web del programador): http://lawebdelprogramador.com/codigo/enlace.php?idp=434&id=73&texto=Power+Builder
http://lawebdelprogramador.com/codigo/enlace.php?idp=425&id=73&texto=Power+Builder
Saludos.
36
« en: Martes 30 de Mayo de 2006, 15:24 »
En mi opinión, la opción del tree view es la más adecuada, ya que podés manejar los menu y submenu con carpetas y subcarpetas todas las que quieras y podés armarlo dinámicamente. Podés tener en la base de datos una tabla con todas las cabeceras de menú, otra tabla para los submenu (asociados por un campo con el menu) y otra tabla con los permisos asociando un menu a un perfil (en la tabla de usuarios le darías el perfil a ese usuario, el cual vería solamente lo que tiene asociado con su perfil, armas el menú en base al perfil asociado). Si bien es un cambio estructural muy grande, conviene plantearlo porque puede llegar a resultar más facil en un futuro, además podés cambiar la estructura del menu con solo asociar en la tabla (y crear más menu agregandolos a la base de datos). La otra opción es la más rápida (la de un menú principal fijo) no se si se puede llegar a armar dinámicamente, pero calculo que sí, en cuanto a la seguridad podés poner los item en invisible si no tiene permisos para el menú. Igualmente este tipo de decisiones van en base al tiempo que se tenga para programar la modificación y el impacto que pueda llegar a tener en el sistema y en los usuarios ya que los usuarios no estan acostumbrados a los menu en forma de árbol. Bueno, espero te sirva mi opinion, saludos.
37
« en: Lunes 29 de Mayo de 2006, 19:52 »
Buenas, si pudieras dar un poco más de información de lo que querés hacer, que versión de powerbuilder vas a usar. Un menú de que tipo?? como cuál de xp? Cuando creas un menú, le podés asignar imágenes, esas imágenes después podés hacer que te aparezcan en una barra de herramientas y ahí las podés poner más grande, fijate las opciones que tenés en el painter de menú. Saludos.
38
« en: Lunes 29 de Mayo de 2006, 16:11 »
Buenas, en la línea: dw_reporte.saveas(file,HTMLTable!,true)//guardas datos del datawindows
cambiá donde dice "HTMLTable!" por "XLS!" o "CSV!". Te quedaría así la línea: dw_reporte.saveas(file,XLS!,true)//guardas datos del datawindows
No se si resperta el formato del reporte, pero creo que sí, espero tu respuesta para ver si te funcionó, saludos.
39
« en: Viernes 26 de Mayo de 2006, 15:51 »
Buenas, acá te prepare un ejemplo, esta hecho en power 9 (no se que versión estarás usando). Lo primero que tenés que hacer es crear la datawindows y agregarle un nuevo evento. En ese nuevo evento le vas a tener que pegar el código que te pongo abajo. El nuevo evento tiene que ser pbm_dwnprocessenter. Esto define un evento para cuando se presiona enter en alguno de los campos de la datawindows. Código para pegar en ese nuevo evento: // Definición de variables // ambito|tipo_nombre // ejemplo: local|integer_numcolumna quedaría definida como: // li_numcolumna string ls_nombre string ls_apellido string ls_cuit integer li_numcol long ll_id long ll_numfila // Extraígo el número de columna en la que estoy posicionado. li_numcol = this.getcolumn() //messagebox('Nro. Columna',string(li_numcol)) if li_numcol = 1 then // Averiguo la línea en la que estoy parado. ll_numfila = this.getrow() // Extraígo el código ingresado. ll_id = this.getitemdecimal(ll_numfila,1) // Hago el select para recuperar el dato. select nombre, apellido, cuit into :ls_nombre, :ls_apellido, :ls_cuit from tblpersonas where id = :ll_id; // Inserto en el dw los datos. this.setitem(ll_numfila, 2, ls_nombre) this.setitem(ll_numfila, 3, ls_apellido) this.setitem(ll_numfila, 4, ls_cuit) end if
El código se puede optimizar muchísimo, lo hice rápido por que estoy en el trabajo jejeje. Cualquier consulta o algo que no entiendas preguntame, no hay problema. Obviamente el select lo vas a tener que cambiar y lo mismo para las líneas que insertan dentro de la datawindow "this.setitem(ll_numfila, 2, ls_nombre)" el número corresponde al número de columna donde querés ingresar el dato, "ll_numfila" es el número de fila donde se va a insertar el dato, "ls_nombre" es la variable que contiene el dato. Otra cosa a tener en cuenta es el tipo de datos que vas a usar (los que tenes en la base de datos). Bueno, cualquier cosita avisa, saludos.
40
« en: Viernes 12 de Mayo de 2006, 16:22 »
Cuando pones un campo como dddw como Style Edit, te aparece para asignar una datawindow para ese campo. Cuando seleccionas la dw te habilita dos campos, el Display Column y el Data Column. Chequeate esos valores, que el valor Data Column coincida con el tipo de dato del campo (el Display Column es el valor que vas a mostrar cuando se despliega la dw).
Saludos.
41
« en: Lunes 8 de Mayo de 2006, 21:05 »
No entiendo bien a que te referís, si querés hacer archivos de ayuda o programar la ayuda para que aparezca cuando presionas F1 (u otra cosa jeje). Si querés hacer archivos de ayuda, hay programas para eso, como por ejemplo el robohelp. En cuanto a la ayuda presionando F1, lo que podés hacer es asignarle esa tecla a una entrada de menú. En power 9 cuando creas un menú, esta propiedad se llama "Shortcut key" y ahí es donde le asignas el atajo de teclado. Cuando el usuario presione F1 se va a ejecutar el código que corresponde a ese item de menú (como si fueras a través del menú). Si no es esto a lo que te referias, explicame un poco mejor que era a ver si te puedo dar una mano, saludos.
42
« en: Miércoles 3 de Mayo de 2006, 15:24 »
Que version de power estas usando?? En la version 7 tenés en la power bar un icono que es la "Library List", donde se ponen todas las pbl que estas usando. En la version 9 se definen mediante targets (creo, todavía no estoy muy familiarizado con la 9). Saludos.
43
« en: Miércoles 19 de Abril de 2006, 16:40 »
Acá habla un poco de la impresión de una DW composite: http://www.powerbuilder.org/modules.php?name=News&file=article&sid=187
Fijate si te sirve. Sino, buscar la forma de hacer un salto de página cada 2 registros, no tengo ninguna DW composite como para probar.
44
« en: Miércoles 12 de Abril de 2006, 18:49 »
hace como hacen algunas aplicaciones en linux. cuando ejecutas la aplicacion crea un archivo vacio que se llame por ejemplo miAplicacion.lock en la carpeta de la aplicacion o en temp. cuando se abre la aplicacion se fija si ese archivo existe, si existe no se ejecuta. cuando se cierra el programa que se esta ejecutando borra el archivo. No es mala idea, pero el problema se puede dar cuando tu aplicación se cierre mal (ya sea por un fallo o por un corte de luz). Al no cerrar normalmente, no se ejecutaría el script para borrar el archivo y te quedaría y ya no podrías ejecutar de nuevo la aplicación.
45
« en: Miércoles 12 de Abril de 2006, 15:54 »
Mirá, encontre esto. Usa las api de windows, lo que hace es chequear si una aplicación esta ejecutandose, si es así, la detiene. Quizás esto se pueda adapatar a lo que vos querés, poniendo esto en el script inicial, si detecta que la aplicación esta ejecutandose que no la ejecute, sino, que arranque normalmente. Por Sameer N Phatak -- sameerp@meghdoot.mastek.com este truco chequea si una aplicación esta en ejecución, y si lo está la detiene. Primero se chequea si la aplicación está en ejecución usando la llmada API FindWindowA(). Entonces, si la ventana está en ejeución y el usuario quiere detenerla se usa la llamada API PostMessageA() que muestra la ventana de mensaje WM_QUIT para detener la aplicación. - Declaraciones de funciones externas: FUNCTION ULong FindWindowA(ULong classname, String windowname) LIBRARY "user32.dll" FUNCTION boolean PostMessageA(ulong hwndle,UINT wmsg,ulong wParam,ulong lParam) Library "User32.dll" - Power Script Ulong lul_handle, lul_class String ls_name // El valor hexadecimal de wm_quit es 0x0012. Convertido a valor decimal es 18. UInt lui_quit = 18 // Pone la Clase a NULL. Esto no es obligatorio, puedes pasarle 0 también a la función FindWindowA(). SetNull(lul_class) // Este es el código de la ventana. Por ejemplo la calculadora de Windows ls_name = "Calculator" // Usa la llamada API para obtener el puntero de la ventana si la aplicación está en ejecución. lul_handle = FindWindowA(lul_class, ls_name) IF lul_handle > 0 THEN // Si se encuentra el puntero de la ventana se muestra el mensaje wm_quit PostMessageA(lul_handle, lui_quit, 0, 0); return Else MessageBox("Aviso", "La aplicación no está en ejecución. !") END IF
Espero te sirva, no lo probé.
46
« en: Lunes 3 de Abril de 2006, 14:58 »
mmmm... de eso debería encargarse el sistema operativo, es el que gestiona los procesos, la verdad que no se, voy a ver si encuentro algo y te digo. Comproba si pasa lo mismo en otras pc´s, quizás tenga algún problema esa pc o el mismo programa.
47
« en: Jueves 30 de Marzo de 2006, 20:35 »
No es necesario que este seteado el dbparm, yo no lo tengo seteado y me conecto. Yo creo que el problema esta en la conexión al motor. Fijate de setear de forma fija el login al motor, además que ese usuario este creado en el motor.
48
« en: Lunes 27 de Marzo de 2006, 20:10 »
De nada, me alegro que lo hayas solucionado, tenés razón con el sql, pasa que yo siempre los usaba embebidos en el código de power en los eventos, acá en el laburo los usa de las dos formas, no estoy muy familiarizado con el sql en las dw (el problema es que me tengo que familiarizar porque los tengo que hacer jejeje), además le pasan parámetros y no entiendo mucho. Bueno, cualquier duda preguntame, quizás te moleste yo cuando necesite algo con las dw.
Saludos.
49
« en: Jueves 23 de Marzo de 2006, 13:43 »
Buenas, columna1 no puede ser unsigned bigint porque guarda valores con signo (-1)
Si podés poner un poco más sobre el error, o algo como para ver porque se produce el problema ese, además no lo estas asignando a ninguna variable así que no debería dar error por el tipo de dato...
50
« en: Jueves 9 de Marzo de 2006, 17:41 »
Para poner imágenes a los botones usa el PictureButton, en las propiedades podés setearle cualquier imagen que vos tengas. Tenés dos propiedades para poner imágenes, una para cuando el botón esta habilitado (PictureName) y otra para cuando esta deshabilitado (DisabledName). Chequeate en la ayuda que tenés más info, cualqueir cosa pregunta. En cuanto a lo de las imágenes en el menú después me fijo porque ahora no me acuerdo. Saludos.
|
|
|