|
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
2
« en: Martes 27 de Febrero de 2007, 20:02 »
Disculpa... el select...
Select descripcion into sl_descripcion from tabla where codigo=:a_codigo
3
« en: Martes 27 de Febrero de 2007, 20:00 »
Saludos desde Maracay, Venezuela...
El "IF" es un condicional de cierto o falso y lo que va a hacer dependiendo del resultado... no puedes mezclar un dddw con un IF... te recomiendo que utilices una función para poder ubicar el nombre que corresponda para colocarlo...
por ejemplo defines la funcion "f_busca_nombre" con el parametro " a_codigo...
que sería mas o menos así...
string sl_descripcion
Select descripcion into sl_descripcion from tabla where codigo=a_codigo
Return (sl_descripcion)
Y tu IF sería así...
if( cod_resultado ="01" or cod_resultado ="10" , f_busca_nombre(cod_espe_ing) , cod_especialidad )
Espero que te sirva...
4
« en: Sábado 10 de Febrero de 2007, 15:01 »
Saludos desde Maracay, Venezuela.
Debes crear el formulario con el manejador de formularios de las impresoras, donde defines el largo y el ancho (en caso de ser necesario) y luego asignas el nombre del formulario como tipo de página usada para impresión, el PB por defecto te pone el tipo carta o A4 que son bastante parecidos en cuanto a longitud y ancho.
Lo malo es que tienes que crear el formulario en cada máquina que lo vayas a usar y también en la máquina de desarrollo para que lo puedas asignar.
Espero que te sirva...
5
« en: Viernes 12 de Enero de 2007, 14:36 »
Saludos...
Todavía no comprendo bien que es lo que hiciste, pero tengo idea de que necesitas trabajar con los datawindowchild, donde la columna que te maneja los dos argumentos la defines como child y le haces un retrieve a ese child... ver el manual de PB referentes a datawindowchild...
6
« en: Jueves 11 de Enero de 2007, 18:26 »
Saludos... No entiendo muy bien tu problema ni que llamas 'dw adjuntado' por lo que asumo es que tienes un primer dw con un parámetro y otro con dos parámetros, al recorrer el primero quieres que dinámicamente haga el retrieve del segundo?... entonces debes trabajar con el evento 'RowFocuschanged!' del primer dw... si ese dw (el primero) te va a dar el segundo parámetro lo tomas para hacer el retrieve sobre el segundo... ej...
dw_1.retrieve(parametro1)
en el evento 'rowfocuschanged!' del dw_1 pones esto...
If dw_1.RowCount() > 0 THEN dw_2.retrieve(parametro1,this.getitemstring(this.getRow(),'columna_x')) end if
En este caso asumimos que la columna_x es de tipo string y cuando avanzas en el row del dw_1 entonces te hace el retrieve con el parametro que le pasaste al dw_1 + el valor de la columna_x de ese dw_1.... si vas a tomar dos(2) columnas del dw_1 para el retrieve entonces... en el evento 'rowfocuschanged!' del dw_1 pones esto...
If dw_1.RowCount() > 0 THEN dw_2.retrieve(this.getitemstring(this.getRow(),'columna_x'),this.getitemstring(this.getRow(),'columna_y')) end if
y así sucesivamente...
7
« en: Sábado 6 de Enero de 2007, 21:02 »
Saludos...
Para que te quede claro...
El PowerScript es un pseudolenguaje derivado de c para poder programar los eventos de cada objeto que tu creas o definas en la aplicación, así mismo puedes crear nuevos objetos directamente con Powerscript, por ejemplo instancias de accesso a la BD, etc... Para que leas un poco desde la misma documentación de PB...
Description
PowerBuilder 6.0 has several new objects that provide information about an object's class definition and its variables and scripts. A class definition object is a PowerBuilder object that provides information about the class definition of another PowerBuilder object. You can examine a class definition in a PowerBuilder library or the class definition associated with an instantiated object.
Uses
Class definition information is important for developers of tools and object frameworks. Developers can inspect objects to produce reports or to define objects with similar characteristics. Class information is not important in typical business applications.
Implementation
These new objects provide class definition information:
Object Description TypeDefinition Provides information about a data type and is the ancestor of several more specific definition objects: ClassDefinition, SimpleTypeDefinition, and EnumerationDefinition ClassDefinition Provides the object's class name, library, ancestor, parent, variables, scripts, and the objects it contains SimpleTypeDefinition Provides information about a simple data type, such as integer, string, blob, and Any EnumerationDefinition Provides information about an enumerated data type VariableDefinition Provides information about a variable or property associated with a class definition, including its access level, scope, and whether it is an array ScriptDefinition Provides information about a function or event script associated with a class definition, including its arguments and return type, whether it is external, and whether it is defined locally or in an ancestor object Other objects and enumerated data types provide values for properties of these objects. Several new properties and functions give you access to definition information for your objects:
· PowerObject has a new property called ClassDefinition, making a ClassDefinition object available for any instantiated object · New global functions called FindTypeDefinition and FindClassDefinition get a type or class definition object for an entry in a PowerBuilder library · New global function FindFunctionDefinition gets script information for a global function
8
« en: Martes 12 de Diciembre de 2006, 14:47 »
Saludos...
Si!, hay que tomar para el ciclo la variable file_name que contiene la ruta y el nombre del archivo, en la variable archivo solo esta el nombre del archivo sin la ruta...
9
« en: Domingo 10 de Diciembre de 2006, 16:19 »
... sobre la respuesta que mandaron mientras yo daba mi solución...
En la versión que yo trabajo (6.5) no existe la función "GETFOLDER", debe haber aparecido en úna versión más reciente...
10
« en: Domingo 10 de Diciembre de 2006, 16:15 »
Saludos...
Hace un tiempo vi un tip que armaba la estructura del arbol de directorios(carpetas) del disco duro en un TreeView, no lo consigo ahora, pero por el momento te doy una solución... que el usuario tome cualquier archivo de esa carpeta y en la variable que recibes el nombre del archivo determinas donde se encuentra ubicado dicho archivo buscando en reversa el backslash (\) y cortas esa variable hasta esa posición... Te doy el ejemplo:
integer value string archivo, carpeta value = GetFileOpenName("Seleccione Archivo",+ file_name, archivo, "DOC", + "Text Files (*.TXT),*.TXT,"+ "Doc Files (*.DOC),*.DOC" )
// Ya tenemos el nombre del archivo seleccionado en la variable archivo... IF len(archivo) > 0 THEN value=len(archivo) DO while mid(archivo,value,1) <> "\" value -- LOOP carpeta=left(archivo,value) ELSE MessageBox('Error!','No seleccionó archivo!') END IF
...
Espero que te sirva... Prueba...
11
« en: Jueves 7 de Diciembre de 2006, 17:56 »
Saludos. Si alguien me aclara.
Puedo escribir triggers que se activen solo cuando se actualiza cierta columna de la tabla (UPDATE OF columna), pongo un ejemplo de T-SQL:
/* AFTER UPDATE TRIGGER "TUA_MTO_ITEM_SOL_CHEQUE" FOR TABLE "SOLICITUD_CHEQUE_DETALLE" */
CREATE TRIGGER TUA_MTO_ITEM_SOL_CHEQUE AFTER UPDATE OF MONTO1_CUENTA_EGRESO, MONTO2_CUENTA_EGRESO ORDER 1 ON SOLICITUD_CHEQUE_DETALLE REFERENCING NEW AS NUEVO OLD AS ANTERIOR FOR EACH ROW BEGIN
UPDATE SOLICITUD_CHEQUE SET MONTO_SOLICITUD_CHEQUE = MONTO_SOLICITUD_CHEQUE + (NUEVO.MONTO1_CUENTA_EGRESO + NUEVO.MONTO2_CUENTA_EGRESO) - (ANTERIOR.MONTO1_CUENTA_EGRESO + ANTERIOR.MONTO2_CUENTA_EGRESO) WHERE FACULTAD=NUEVO.FACULTAD AND DEPENDENCIA=NUEVO.DEPENDENCIA AND NUMERO_SOLICITUD_CHEQUE=NUEVO.NUMERO_SOLICITUD_CHEQUE
END
12
« en: Sábado 2 de Diciembre de 2006, 19:02 »
Saludos. Trato de instalar Postgresql 8.1 en plataforma w'2000 y me aparece esto al finalizar la instalación:
Internal account lokup failure. No se ha efectuado ninguna asignación entre los nombres de cuenta y los identificadores de seguridad. --> el instalador reversa la instalación.
En el log de instalación se graba esto... === Logging stopped: 02/12/2006 13:50:31 === MSI © (E8:70) [13:50:31:539]: Note: 1: 1708 MSI © (E8:70) [13:50:31:539]: Note: 1: 2205 2: 3: Error MSI © (E8:70) [13:50:31:539]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1708 MSI © (E8:70) [13:50:31:539]: Note: 1: 2205 2: 3: Error MSI © (E8:70) [13:50:31:539]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1709 MSI © (E8:70) [13:50:31:539]: Product: PostgreSQL 8.1 -- Installation failed.
MSI © (E8:70) [13:50:31:589]: Grabbed execution mutex. MSI © (E8:70) [13:50:31:589]: Cleaning up uninstalled install packages, if any exist MSI © (E8:70) [13:50:31:589]: MainEngineThread is returning 1603 === Verbose logging stopped: 02/12/2006 13:50:31 ===
Gracias.
13
« en: Viernes 1 de Diciembre de 2006, 19:15 »
Saludos...
Me podrías colocar como estas asignando los parámetros e invocando el procedimiento a ver si te puedo ayudar (como lo tienes programado)...
14
« en: Martes 28 de Noviembre de 2006, 13:41 »
Saludos.
PB es una aplicación que corre solo bajo windows. Si lo que quieres es una aplicación que corra bajo DOS, PB no es la herramienta.
15
« en: Sábado 25 de Noviembre de 2006, 19:05 »
Ver: Manual de SQL Anywhere "Using an Integrated Login"...
The integrated login feature allows you to maintain a single user ID and password for both database connections and operating system and/or network logins. This section describes the integrated login feature.
Operating systems supported
Integrated login capabilities are available for the Windows NT server only. It is possible for Windows 95 clients as well as Windows NT clients to use integrated logins to connect to a network server running on Windows NT.
Benefits of an integrated login
An integrated login is a mapping from one or more Windows NT user profiles to an existing user in a database. A user who has successfully navigated the security for that user profile and logged in to their machine can connect to a database without providing an additional user ID or password. To accomplish this, the database must be enabled to use integrated logins and a mapping must have been granted between the user profile used to log in to the machine and/or network, and a database user.
Using an integrated login is more convenient for the user and permits a single security system for database and network security. Its advantages include:
· When connecting to a database using an integrated login, the user does not need to enter a user ID or password. · If you use an integrated login, the user authentication is done by the operating system, not the database: a single system is used for database security and machine or network security. · Multiple user profiles can be mapped to a single database user ID. · The name and password used to login to the Windows NT machine do not have to match the database user ID and password.
Caution Integrated logins offer the convenience of a single security system but there are important security implications which database administrators should be familiar with.
16
« en: Sábado 25 de Noviembre de 2006, 15:39 »
17
« en: Sábado 25 de Noviembre de 2006, 14:12 »
Saludos...
El mejor manual de PowerBuilder viene en los libros de la Aplicación
El capítulo se llama "GETTING STARTED" está en ingles... en español no creo que alguno (excepto por algún que otro tema) valga la pena, con mis disculpas a los autores (en general evito los libros de computación en español).
Te recomiendo que si lo vas a aprender con este manual te aisles por una semana y hagas todo el entrenamiento completo sin interrupciones y a lo mejor te da tiempo de repetirlo... es la mejor manera ya que si dejas un dia o dos sin continuar el proceso de aprendizaje no vas a saber como continuar el curso y lo vas a tener que empezar de nuevo (a menos que tengas conocimientos de programación orientada a objetos para que puedas ubicarte en el curso), te lo digo porque me pasó a mí.
Este libro te lleva paso a paso desde crear una ventana inicial con un simple texto a desplegar hasta procesos sobre bases de datos, herencia, etc.
18
« en: Viernes 24 de Noviembre de 2006, 23:20 »
Disculpa...
ej:
integer il_numero
il_numero=rand(1000)
Te genera un numero entre 1 y 1000
19
« en: Viernes 24 de Noviembre de 2006, 23:19 »
Saludos..
Documentación de PB.... lee primero...
Description
Obtains a random whole number between 1 and a specified upper limit.
Syntax
Rand ( n ) Argument Description n The upper limit of the range of random numbers you want returned. The lower limit is always 1. The upper limit is 32,767 Return value A numeric data type, the data type of n. Returns a random whole number between 1 and n inclusive. If n is NULL, Rand returns NULL. Usage The sequence of numbers generated by repeated calls to the Rand function is a pseudorandom sequence. You can control whether the sequence is different each time your application runs by calling the Randomize function to initialize the random number generator.
ej:
integer il_numero
il_numero=ran(1000)
Te genera un numero entre 1 y 1000
también...
Description
Initializes the random number generator so that the Rand function begins a new series of pseudorandom numbers.
Syntax
Randomize ( n ) Argument Description n The starting value (seed) for the random number generator. When n is 0, PowerBuilder takes the seed from the system clock and begins a nonrepeatable sequence. A nonzero number generates a different but repeatable sequence for each seed value. n cannot exceed 32,767 Return value Integer. If n is NULL, Randomize returns NULL. The return value is never used. Usage The sequence of numbers generated by repeated calls to the Rand function is a computer-generated pseudorandom sequence. You can use the Randomize function to initialize the random number generator with a value from the system clock, or some other changing value, so that the sequence is always different. For testing purposes, you can select a specific seed value, which you can reuse to make the pseudorandom sequence repeatable each time you run the application.
Include Randomize in the script for the Open event in the application.
20
« en: Viernes 24 de Noviembre de 2006, 23:14 »
Saludos...
Creo que debieras manejar los controles de tiempo en la base de datos,. donde en una tabla esté identificada la máquina y la hora de cierre, y la aplicación cada minuto chequea que se le haya vencido el tiempo a la máquina desde donde corre la aplicación ... si la hora de cierre es menor a la hora de la máquina se abriría una ventana que ocupe toda la pantalla bloqueando al usuario...
Solución facil de implementar...
21
« en: Miércoles 22 de Noviembre de 2006, 22:09 »
Saludos...
Por favor explicate mejor que es lo que quieres hacer... de que ejecutable hablas???? Cual es la función de eso??? En PB se genera el ejecutable al "compilar" (en realidad se hace una conversión a "C" y luego se compila el programa en "C"), y se genera la aplicación y yá...
22
« en: Miércoles 22 de Noviembre de 2006, 21:58 »
Saludos...
No sé en realidad como elaboraste la tabla de las series que me dices que se te duplica, pero si se te duplica es porque tienes otra relación que te duplica a la tabla principal (que supongo que será la de productos) es decir en vez de un registro principal de producto relacionado a la tabla de series habría en este caso dos... revisa las relaciones entre tablas del DW para ver si ese es el problema.
Lo de la tabla temporal lo puedes hacer a través de programación PB o a través de un procedure de BD que manejaría las series con un cursor y un ciclo de proceso para actualizar la tabla "temporal" de la que hablo, no sé que nivel de diseño y programación de BD tienes para hacerlo con un procedure así como la BD que usas... Te recomiendo que revises bien las relaciones que tienes ahora para ver porqué se te duplican las series...
23
« en: Martes 21 de Noviembre de 2006, 20:19 »
Saludos...
Ya comprendo tu idea. El problema es que quieres mezclar un datawindow NUp (columnar) con niveles de grupo, no sé cual es la versión que utilizas en PB pero yo uso la 6.5 y no tiene esa opción de agrupar en un dw NUp.
La única forma que veo es que crearas una tabla temporal con N columnas de series (columnas de producto y por ej. 4 columnas que serían: serie_a, serie_b, serie_c y serie_d) y con las series (que sería el valor de cada columna armar los datos, luego la relacionas con la tabla de productos para que te imprima como encabezado de grupo el producto y como detalle los valores de la tabla temporal que son las series...
24
« en: Lunes 20 de Noviembre de 2006, 20:22 »
Saludos... Disculpa pero entendí realmente muy poco de todo lo que escribiste, creo de lo que entendí, es que cuando haces la busqueda de datos la data que llega al DW es de varias series, y necesitas que solamente llegue la serie que corresponde. ¿es eso lo que planteas?, si ese es el caso lo que tienes que hacer es una búsqueda por la serie que te interesa poniendo un argumento de busqueda para la serie, es decir que el SQL filtre la serie que te interesa... para hacer esto debes definir el argumento en la parte de diseño del DW de esta manera: tocas el botón SQL y entras en el diagrama de las tablas y sus relaciones, entonces en el menú de diseño (Design) seleccionas 'Retrieval Arguments', ahí defines el argumento con un nombre (ej. a_serie) y el tipo (integer, long, string,etc) que le corresponda, luego vas a la tableta 'WHERE? del sql y colocas la columna que te identifica la serie en la columna del medio pones '=' (que es el valor por defecto) y en la columna de la derecha pones el argumento (sería :a_serie para el ejemplo) o tocas con el botón derecho, seleccionas argumentos y seleccionas el que hayas definido y guardas (sales del SQL y salvas)... luego para hacer la búsqueda en el programa le vas a poner al retrieve entre los paréntesis el nombre de una variable que contenga el valor de la serie que va a buscar el DW, ej. long ll_serie ll_serie=... (el valor que corresponda) dw_1.retrieve(ll_serie)
disculpa si no es esto lo que tu deseas, pero es lo que entendí de tu explicación...
25
« en: Martes 14 de Noviembre de 2006, 14:51 »
Saludos...
Yo lo hago así porque instalo la aplicación en el servidor en una carpeta compartida de solo lectura, entonces compilo y coloco los cambios en un solo sitio desde donde accesan las estaciones de trabajo a la aplicación... son metodologías que cada quien tiene... de paso con acceso remoto no tengo que ir al sitio sino que actualizo desde donde estoy o envío los cambios por mail al administrador.
|
|
|