Power builder

Separador de miles en SQL
Mostrar importes con separador de miles es muy útil vean que la columna Costo que es del
tipo Money no tiene formato y la siguiente columna ya se le aplicó el formato, esto lo
logramos aplicando la función CONVERT, esta función es muy utilizada para hacer
conversiones entre tipos de campos pero en este ejemplo la utilizamos para darle formato a
un campo Money.Este es el código que generó la salida anterior:
Esta es la query que generó la salida anterior:
SELECT b.Nombre, a.Costo,CONVERT(VarChar(20),a.Costo,1)
FROM CostoAeropuerto a, Aeropuertos b
WHERE b.ID_Aeropuerto = a.ID_Aeropuerto
Y si pensaban que se requiere forzosamente tener una tabla o campo, pues no el convert
trabaja sobre variables, como ven esta es una sola sentencia SQL
DECLARE @Costo Money = 44252.23;SELECT CONVERT(VarChar(20),@Costo,1)
Publicado por Adolfo Chairez en 9:18 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: funcion convert, funcion sql, separador miles sq
viernes, 9 de marzo de 2012
Paso de parámetros variables entre Windows y uso del Entry
Cuando empecé a programar con PB y necesitaba pasar varios valores entre ventanas en ese
entonces utilizaba estructuras, ahora utilizo una string donde pongo todos los valores que
quiero y en la ventana que la recibe saca esos valores y los convierte al tipo que se necesite
es mas practico pasar 1 solo valor que pasar una estructura. En el proyecto que se ve en el
vídeo esta en esta dirección:
http://www.mediafire.com/?6gltk93s9do7c2t
podrán encontrar una función que utilizo mucho es Entry recibe como parámetros un string
una posición y caracter de separación y resresa el valor indicado por posición, luego les
muestro un ejemplo de como usar entry.
Publicado por Adolfo Chairez en 4:51 p.m.1 comentario:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: Parametros PowerBuilder, paso parametros entre ventanas, windows parameters
Funcion en SQL para calcular el ISR Nomina Mexico
En México todo aquel empleado debe de pagar el Impuesto Sobre la Renta por concepto de
Sueldos y Salarios (luego les explicaré como recuperar algo de este impuesto) entonces es
necesario si estamos haciendo un sistema de nominas saber como calcular el impuesto
sobre la renta, en la siguiente dirección pueden descargar tanto la definición de tablas sus
valores como la función, este permitirá calcular el ISR para nominas de períodos semanal,
quincenal y mensual vigentes para el 2012:
http://www.mediafire.com/?o38ouw4jg5a34eh
Script que generó la salida anterior es:
PRINT "EL descuento del ISR para un ingreso Semanal de 4,500.00 es de " + CAST(dbo.ISR(4500,1,2012)
As VarChar(10))
PRINT "EL descuento del ISR para un ingreso Quincenal de 4,500.00 es de " + CAST(dbo.ISR(4500,2,2012)
As VarChar(10))
PRINT "EL descuento del ISR para un ingreso Mensual de 4,500.00 es de " + CAST(dbo.ISR(4500,3,2012)
As VarChar(10))
El store procedure recibe 3 parámetros el primero es la base gravable de los ingresos del
trabajador en el período OJO dije ingresos gravables no total de ingresos si tienen dudas
escribnme, el segundo parámetro es el tipo de período 1 es semanal, 2 quincenal y 3 es
mensual y último parámetro es el año.
El ISR puede ser rojo entonces se le llama Subsidio al Salario.
Publicado por Adolfo Chairez en 9:58 a.m.1 comentario:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: calculo isr, calculo nomina, descuento isr, isr nomina, ISR sueldos y salarios
Calculo de días de descanso para Nomina en México
Cuando realizamos el calculo de una nomina necesitamos saber si el día es descanso de ley
o no, en México antes los días de descanso eran fijos ahora son variables eso que significa,
que para disfrutar del día de descanso por aniversario de la revolución mexicana debemos
calcular cual será el tercer lunes del mes de noviembre.
La siguiente liga contiene la definición de una tabla que contendrá los días de descanso por
ley un store procedure que al ejecutarse llena dicha tabla de esta forma sabremos si una
fecha es descanso obligatorio por ley, esta tabla contiene un campo llamado Borrar lo
pongo en 0 (cero) porque por ley no se puede evitar pagar esos dias.
Descargar la función compatible para servidores SQL:
http://www.mediafire.com/?nfoc2sbfxsrcvp8
Publicado por Adolfo Chairez en 9:38 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: das descanso obligatorio, dias de descanso mexico, dias descanso por ley, dias
festivo mexico, ley federal del trabajo dias descanso
jueves, 8 de marzo de 2012
Como actualizar una tabla desde otra 2 formas
En ocasiones necesitamos hacer update a una tabla con el resultado del select de otra aqui 2 ejemplos:
UPDATE mig930501r
SET mig930501r.pre_venta = simaplan.tot_eng
FROM mig930501r, simaplan
WHERE mig930501r.usu_clave = 'ADOLFO'
AND simaplan.centraliza = mig930501r.centraliza
AND simaplan.folio = mig930501r.folio
AND simaplan.cve_paq = mig930501r.cve_paq
AND LTRIM(simaplan.cve_plan) = 'CONTA'
AND simaplan.no_descto = '00000'
AND simaplan.cve_det = mig930501r.deter
Otra forma que utilizo mucho:
UPDATE considoc
SET folio = (SELECT MAX(sidoctos.folio) FROM sidoctos WHERE sidoctos.cve_cen =
considoc.centraliza)
Publicado por Adolfo Chairez en 10:46 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: update 2 tablas, update from
Como crear un store procedure que regrese valores
CREATE PROCEDURE PruebaRegreso @Cant Int
AS
BEGIN
SET @Cant = @Cant + 1
RETURN @Cant
END
go
DECLARE @regreso INTEGER
EXEC @regreso = PruebaRegreso 81
PRINT @regreso --debug imprime 82
Publicado por Adolfo Chairez en 10:44 a.m.1 comentario:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: procedimientos almacenados, sql store procedure, store procedure
Como saber los indices de una tabla
Esta funcion puede ser util en diversos casos, yo la utilizo para saber cuales con los campos de una tabla que
sean definido como llaves primarias para generar joins automaticos con otras tablas que mis usuarios
manipulan; este es el primer paso de un generador de reportes
(NOTA: el codigo que hace las relaciones no esta aca):
1. Cree la funcion en SQL:
CREATE FUNCTION f_llave_primaria (@p_nombre_tabla Varchar(100), @p_nombre_campo
Varchar(100))
RETURNS Numeric(9) AS
BEGIN
Declare @v_key Numeric(9);
SELECT @v_key = count(*)
FROM syscolumns
INNER JOIN (SELECT * FROM SysIndexKeys IK WHERE
IK.Id = (select id from sysobjects where name = @p_nombre_tabla)
AND IK.IndId = (select indid from sysindexes where name = (select name from sysobjects where xtype =
'PK' and parent_obj = (select id from sysobjects where name = @p_nombre_tabla)))
) PKColumns ON PKColumns.id = syscolumns.id AND PKColumns.colid = syscolumns.colid and
syscolumns.name = @p_nombre_campo
Return @v_key ;
END
2. Cree un Datawindow con la siguiente sentencia SQL y un argumento llamado nombre_tabla a la cual sele
va a pasar el nombre de la tabla con la cual queremos trabajar.
select syscolumns.name as NombreCampo,
dbo.f_llave_primaria(:nombre_tabla,syscolumns.name) as 'isnullable'
from syscolumns inner join sysobjects on sysobjects.id=syscolumns.id inner join systypes on
systypes.xtype=syscolumns.xtype
where sysobjects.name = :nombre_tabla
order by 1;
Publicado por Adolfo Chairez en 10:44 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: index table
Como obtener la llave primaria de una tabla en SQL
CREATE FUNCTION dbo.llave_primaria(@TABLA VARCHAR(50)) RETURNS VARCHAR(50)
BEGIN
DECLARE @TABLE VARCHAR(50)
SELECT @TABLE = Nombre FROM Nom_Entidades WHERE UPPER(Clave) = UPPER(@TABLA)
SELECT @TABLE = name FROM sys.identity_columns WHERE object_id = object_id(@TABLE)
RETURN LTrim(RTrim(@TABLE))
END
Publicado por Adolfo Chairez en 10:41 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: primary key, sql key
Programando Store Procedures: Variable table VS temp table ¿quien
ganará?
Cuando programamos Store Procedure en SQL a veces necesitamos crear tablas temporales
para ahí depositar datos procesados y luego volverlos a utilizarlos en otra rutina, es aquí
donde nos topamos con la disyuntiva de utilizar variable table ó temp table aquí les dejo un
pequeño script que les ayudará a decidir que es mas eficiente, este script fué probado con
un servidor Microsoft SQL Server 2008:
Tengo la idea de que Oracle sería al revés:
DECLARE @st datetime
DECLARE @VariableTabla TABLE
( ID_Recibo_Det bigint,
ID_Calculo int,
Iva money,
Importe money)
CREATE TABLE #TablaTemporal
( ID_Recibo_Det bigint,
ID_Calculo int,
Iva money,
Importe money)
SET @st = getdate()
INSERT @VariableTabla(ID_Recibo_Det, ID_Calculo, Importe)
SELECT ID_Recibo_Det, ID_Calculo, Importe FROM Nom_Calculos
UPDATE @VariableTabla
SET Importe = Importe * 1.72342
UPDATE @VariableTabla
SET Iva = Importe /1.15
DELETE @VariableTabla
WHERE Importe >= 234.23
PRINT 'Utilizando Variable Tabla la operacion consume: ' +
RTrim(CAST(DateDiff(ms,@st,GetDate()) AS char(10))) + ' msegs'
---Utilizando Tablas temporales
SET @st = getdate()
INSERT #TablaTemporal(ID_Recibo_Det, ID_Calculo, Importe)
SELECT ID_Recibo_Det, ID_Calculo, Importe FROM Nom_Calculos
UPDATE #TablaTemporal
SET Importe = Importe * 1.72342
UPDATE @VariableTabla
SET Iva = Importe /1.15
DELETE #TablaTemporal
WHERE Importe >= 234.23
PRINT 'Utilizando Tabla Temporal la operacion consume: ' +
RTrim(CAST(DateDiff(ms,@st,GetDate()) AS char(10))) + ' msegs'
Publicado por Adolfo Chairez en 9:48 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: temp table, variable table
Como convertir un numero a su expresión en letras
A veces necesitamos convertir un importe a letras, aqui les traigo la función que lo hace.
Al final dice Pesos pero uds. pueden cambiar por la moneda de su pais.
Descargar el codigo aqui, incluyo un archivo .srf para que nada mas importen este archivo
y listo:
http://www.mediafire.com/?ouhdx9l1touuue9
Publicado por Adolfo Chairez en 9:32 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: convertir numeros, numero a letras
11 Formatos de fecha en SQL
Ahora les tengo una función en SQL que recibe un dato tipo DateTime y regresa
una cadena de caracteres correspondiente al valor del paráemtro DateTime y se
puede seleccionar 1 de 11 formatos para expresar dicha fecha con y sin hora, esta
función se puede agregar a una sentencia SQL, ejm. Select
dbo.forfec(campofecha, num_formato, num_hora). Importante no importa el
lenguaje del servidor SQL, de hecho por eso la hice.
Esta es el script que generó la salida de la imagen:
BEGIN
DECLARE @Fecha DateTime = CAST('20120228 15:35:15' As DateTime),
@li_i Int = 1
WHILE 1=1
BEGIN
PRINT "Formato Num: " + CAST(@li_i As VarChar(2)) + " sin hora " +
dbo.forfec(@Fecha,@li_i,0)
PRINT "Formato Num: " + CAST(@li_i As VarChar(2)) + " con hora " +
dbo.forfec(@Fecha,@li_i,1)
SET @li_i = @li_i + 1
IF @li_i = 12
BREAK
END
END
Descargar la funcion Forfec
http://www.mediafire.com/?9v7446agt5b8bhf
Publicado por Adolfo Chairez en 8:44 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Enlaces a esta entrada
Etiquetas: conversion fecha, conversion fecha y hora, convert datetime, date convert, date
format, fecha y hora en sql, formato fecha
miércoles, 7 de marzo de 2012
Como cambiar el color de las lineas de una DW
Este es código que se ve en la imagen en el punto 3
IF(MOD(GETROW(),2)=0,rgb(205,205,205),RGB(219,233,255))
Publicado por Adolfo Chairez en 9:50 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Etiquetas: alternar colores en registros, alternate color, background color, powerbuilder
band
Como tocar un archivo wav
Private Constant Long SND_APPLICATION = 128 // look for application specific association
Private Constant Long SND_ALIAS = 65536 // name is a WIN.INI [sounds] entry
Private Constant Long SND_ALIAS_ID = 1114112 // name is a WIN.INI [sounds] entry identifier
Private Constant Long SND_ASYNC = 1 // play asynchronously
Private Constant Long SND_FILENAME = 131072 // name is a file name
Private Constant Long SND_LOOP = 8 // loop the sound until next sndPlaySound
Private Constant Long SND_MEMORY = 4 // lpszSoundName points to a memory file
Private Constant Long SND_NODEFAULT = 2 // silence not default, if sound not found
Private Constant Long SND_NOSTOP = 16 // don't stop any currently playing sound
Private Constant Long SND_NOWAIT = 8192 // don't wait if the driver is busy
Private Constant Long SND_PURGE = 64 // purge non-static events for task
Private Constant Long SND_RESOURCE = 262148 // name is a resource name or atom
Private Constant Long SND_SYNC = 0 // play synchronously (default)
Public Function Long PlaySound (String lpszName, Long hModule, Long dwFlags) Library "winmm.dll"
Alias for "PlaySoundA"
PlaySound ("Ding.wav", 0, SND_FILENAME + SND_ASYNC)
Publicado por Adolfo Chairez en 9:37 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Etiquetas: wav play
Como usar bcp
--exportar de sql a tabla txt
bcp mig2.dbo.sidetcon_bcp out sidetcon.txt -n -Ssrvmig2000 -Usa -Pcolon55sur --Tabla
nativa
bcp mig2.dbo.sidetcon out sidetconb.txt -c -Ssrvmig2000 -Usa -Pcolon55sur --Esta
opcion exporta a tabla con TAB separator
bcp select * from mig2.dbo.sidetcon where year(fum) in (2009, 2008, 2007, 2006, 2005,
2004, 2003, 2002, 2001, 2000) queryout sidetconb.txt -c -Ssrvmig2000 -Usa -Pcolon55sur
--importar de tabla txt a sql
bcp mig2.dbo.sidetcon_bcp in sidetcon.txt -n -Ssrvmig2000 -Usa -Pcolon55sur
--Para lanzar los triggers agregar la opcion -hFIRE_TRIGGERS
Publicado por Adolfo Chairez en 9:36 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Etiquetas: bcp sql
Como simular un tab con el enter en una dw
Muchos programadores, han encontrado la necesidad de pasar
de un campo a otro del datawindow con Enter. Para esto se
debe hacer un pequeño truco pero efectivo que a
continuacion te lo enseñamos.
En el datawindow se define un evento de usuario con un
nombre cualquiera y que se inicie cuando opriman enter, para
eso seleccione el event ID pbm_dwnprocessenter.
Luego como el evento se dispara cuando oprimen el enter, lo
que se hace es enviar un tab en ese evento. El codigo que
debe tener el evento de usuario que creamos es el siguiente
Send(Handle(this),256,9,Long(0,0))
Con este codigo se pasa de un campo a otro del datawindow
con el enter y con tab.
Para darle una secuencia ordenada debes abrir el DW -
Format- Tab Order y ver que los codigos asignados a cada
campo estan de forma ascendente 10, 20,, 30, etc.
Saludos
Publicado por Adolfo Chairez en 9:36 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como selecciono un archivo
integer li_rtn
string ls_path
li_rtn = GetFileOpenName("Archivo a cargar", sle_archivo.text, ls_path, "txt", "Archivos
Tab (*.txt), *.txt", GetCurrentDirectory())
if li_rtn < 1 then return
Publicado por Adolfo Chairez en 9:35 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Etiquetas: abrir archivo en powerbuilder, fileopen, getfileopen
Como obtengo las columnas de una datawindow
//dw_free es el control datawindows
string ls_tabla, ls_columna
integer li_i, li_j
ls_tabla = dw_free.Describe("DataWindow.table.columns")
li_j = num_entries(ls_tabla,"~t")
for li_i = 1 to li_j
ls_columna = entry(ls_tabla,li_i,'~t')
messagebox("Columnas",ls_columna)
next
//Otra forma:
integer li_i, li_j
string ls_col
li_j = integer(dw_datos.Object.Datawindow.Column.Count)
for li_i = 1 to li_j
ls_col = dw_datos.Describe("#"+string(li_i) + ".name")
messagebox("Columna",ls_col,Information!)
next
//Para recueperar la etiqueta de la columna
ls_col = dw_datos.Describe("#"+string(li_i) + ".name")
dw_datos.Describe(ls_col + "_t.text")
Publicado por Adolfo Chairez en 9:35 a.m.1 comentario:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Etiquetas: column label, column name, datawindow, datawindow column, datawindow
describe, describe
Como posicionar el cursor en una columna
dw_control_name.setcolumn(nom_col)
//nom_col es el nombre de la columna que puede ser tambien
Publicado por Adolfo Chairez en 9:34 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Etiquetas: columnas de una dw, datawindow
Como pasar parametros entre ventanas
Suponemos que la ventana w_pro_lot llama a la ventana w_cap_dat para que esta ultima
captura
unos datos los cuales debera de pasar a la ventana w_pro_lot
en el boton de salir o cerrar de w_cap_dat ponemos:
su_dat_pac is_dat_pac
is_dat_pac.fecha = date(em_fecha.text)
is_dat_pac.carrier = Trim(sle_carrier.text)
is_dat_pac.sellos = trim(sle_sellos.text)
is_dat_pac.tarimas = integer(em_tarimas.text)
is_dat_pac.salida = trim(sle_salida.text)
closewithreturn(w_dat_pac,is_dat_pac)
en w_pro_lot (la que llama) ponemos:
su_dat_pac ls_dat_pac
open(w_cap_dat)
ls_dat_pac = message.PowerObjectParm
donde:
su_dat_pac es una estructura que contiene los campos que se van a pasar como
parametros
puede utilizarse tambien para el objeto message
WordParm tipo de dato long
LongParm tipo de dato long
DoubleParm tipo de dato double (numeric)
StringParm tipo de dato string
PowerObjectParm tipo de dato objecto (incluyendo estructuras)
Publicado por Adolfo Chairez en 9:34 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como obtener el periodo de una fecha via SQL
select centraliza,convert(char(6),fec_elabor,112),count(*)
from sinvocon
where centraliza = '020'
group by centraliza,convert(char(6),fec_elabor,112) order by centraliza
Publicado por Adolfo Chairez en 9:33 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como obtener los fonts instalados
string ls_name,ls_key, ls_subkeylist[]
integer li_rtn
integer li_pic, li_position,lpos
ls_key
= "Hkey_Local_MachineSoftwareMicrosoftWindowsCurrentVersionFonts"
li_rtn = RegistryValues(ls_key, ls_subkeylist)
IF li_rtn = 1 THEN
li_pic = 1
For li_position = 1 To UpperBound(ls_subkeylist)
ls_name = ls_subkeylist[li_position]
li_position = plb_fontname.AddItem(ls_name, li_pic)
Next
END IF
// Asigno a un picturelistbox los nombres de los fonts
// Pero cuidado, en el evento selectionchange del picturelistbox
fontname.text = This.SelectedItem()
st_example.facename = fontname.text
Publicado por Adolfo Chairez en 9:33 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como modificar la sentencia SQL de una DW en tiempo de ejecución
Este vídeo demuestra que si es posible modificar en tiempo de ejecución la sentencia SQL
embebida en un DW. Vean el video desde youtube se ve mejor.
Dirección para descargar el proyecto que se ve en el video, incluye la creación y llenado de
las tablas:
http://www.mediafire.com/?2n2x51tta17wmnj
CODIGO BÁSICO:
//declaramos una variable de instancia tipo caracter llamada is_query
//colocamos este codigo en el open de window
is_query = dw_reporte.Describe("DataWindow.Table.Select")
//Antes de hacer el retrieve de la DW hariamos algo como esto
string ls_query
ls_query = is_query
if ddlb_deptos.text <> 'TODOS' then
ls_query = ls_query + " and dbo.gl_emp.emp_d03 = '" + trim(ddlb_deptos.text) + "'"
end if
ls_query = 'DataWindow.Table.Select = "' + ls_query + '"'
ls_res = dw_reporte.Modify(ls_query)
if ls_res = "" then
dw_reporte.retrieve(gi_cia_ot,ddlb_tip_nom.text,ls_fec_ini,ls_fec_fin,ddlb_deptos.text)
else
MessageBox("Error","Falla al modificar la query de la datawindow ~n" + ls_res)
end if
Publicado por Adolfo Chairez en 9:32 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Etiquetas: DW Describe, DW modify, DW SQL, Modifcación SQL DW tiempo ejecución,
sql embebido
Como leer una web cam (por probar)
Como estas Juan, yo estoy tratando de hacer lo mismo y por lo que he averiguado existe
una funcion api para hacer esto..pero no he logrado que funcione bien.. este es el codigo:
//Local external function
function ulong capCreateCaptureWindowA(string lpszWindowName,ulong dwStyle,long
li_x ,long li_y ,long nWidth ,long nHeight ,ulong ParentWin ,long nId ) LIBRARY
'AVICAP32.DLL'
//Instance Variables
Uint lhand
Constant long GET_FRAME = 1084
Constant long COPY = 1054
Constant long WM_USER = 1024
Constant long WM_CAP_START = WM_USER
Constant long WM_CAP_STOP = WM_CAP_START + 68
Constant long WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10
Constant long WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11
Constant long WM_CAP_SAVEDIB = WM_CAP_START + 25
Constant long WM_CAP_GRAB_FRAME = WM_CAP_START + 60
Constant long WM_CAP_SEQUENCE = WM_CAP_START + 62
Constant long WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20
Constant long WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63
Constant long WM_CAP_SET_OVERLAY =WM_CAP_START+ 51
Constant long WM_CAP_SET_PREVIEW =WM_CAP_START+ 50
Constant long WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6
Constant long WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2
Constant long WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3
Constant long WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5
Constant long WM_CAP_SET_SCALE=WM_CAP_START+ 53
Constant long WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52
Long wm_cap_savedatdib = 1049
Long wm_cap_dlg_videoformat = 1065
Long wm_cap_dlg_videosource = 1066
Long wm_cap_dlg_videodisplay = 1067
Long wm_cap_get_videoformat = 1068
Long wm_cap_set_videoformat = 1069
Long wm_cap_dlg_videocompression = 1070
Long cf_bitmap = 2
Long wm_close = 16
Ulong scrcopy = 32
string gs_pic_path
string gs_cd_path
string gs_path
string gs_ds_pic
string gs_ds_cd
string gs_cd_rq
long gl_pic_sj = 0
//Boton inicia camara
string lpszName
ulong l1
l1=handle(parent)
lpszName='webcam.'
lhand=capCreateCaptureWindowA(lpszName,262144+12582912+1073741824 +
268435456 ,10,10,200,200,l1,0)
if lhand <> 0 then
send(lhand, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0)
send(lhand, WM_CAP_SET_CALLBACK_ERROR, 0, 0)
send(lhand, WM_CAP_SET_CALLBACK_STATUSA, 0, 0)
send(lhand, WM_CAP_DRIVER_CONNECT, 0, 0)
send(lhand, WM_CAP_SET_SCALE, 1, 0)
send(lhand,WM_CAP_GRAB_FRAME, 0, 0)
Send(lhand, WM_CAP_SAVEDIB, 0, 0)
send(lhand, WM_CAP_SET_PREVIEWRATE, 66, 0)
send(lhand, WM_CAP_SET_OVERLAY, 1, 0)
send(lhand, WM_CAP_SET_PREVIEW, 1, 0)
end if
//boton grabar imagen
string s_map
s_map='c:save.bmp'
if FileExists(s_map) then FileDelete(s_map)
if lhand <> 0 then
Send(lhand,WM_CAP_FILE_SET_CAPTURE_FILEA,0,s_map);
p_2.visible = true
st_1.visible = false
p_1.picturename = s_map
SendMessage(lhand, WM_CAP_DRIVER_DISCONNECT, 0, 0)
lhand =0
this.enabled = false
cb_1.enabled = true
end if
//Boton captura video
string s
s='c:save.avi'
if lhand <>0 then
Send(lhand,WM_CAP_FILE_SET_CAPTURE_FILEA,0, s);
Send(lhand,WM_CAP_SEQUENCE, 0, 0)
end if
Ojala te sirva de algo..si tu lo lograste hacer funcionar..te agradeceria que me indcaras
como hacerlo..mi correo es aagomezp@hotmail.com
saludos.
Publicado por Adolfo Chairez en 9:31 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como leer la fecha y hora del servidor de la bd a la que me conecté
datetime ldt_fecha
date ld_fecha
STRING ls_query
if sqlca.sqlcode = -1 then
messagebox("Error",sqlca.sqlerrtext)
return
end if
ls_query = "SELECT getdate()"
DECLARE cur_sup DYNAMIC CURSOR FOR SQLSA;
PREPARE SQLSA FROM :ls_query;
OPEN cur_sup;
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo ejecutar la query busca supervisores "+sqlca.sqlerrtext)
else
FETCH cur_sup INTO :ldt_fecha;
CLOSE cur_sup;
end if
ld_fecha = date(ldt_fecha)
messagebox("dato","La fecha y hora del servidor es " + string(ldt_fecha))
messagebox("dato","La fecha del servidor es " + string(ld_fecha))
Publicado por Adolfo Chairez en 9:31 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como leer el numero de serie de mi disco duro
Dentro de la seccion Declare agregar esta línea en Global External functions
FUNCTION long VolSerialNum (string lpRootPathName, string pVolumeNameBuffer,
long nVolumeNameSize, REF long lpVolumeSerialNumber, long
lpMaximumComponentLength, long lpFileSystemFlags, string lpFileSystemNameBuffer,
long nFileSystemNameSize) LIBRARY "kernel32.dll" ALIAS FOR
"GetVolumeInformationA;Ansi"
Creamos una funcion a nivel proyecto llamada obten_nserie que regrese string y tenga un
solo parámetro pasado por valor del tipo string llamado par_unidad
string cad1, cad2
long numSerie = 0, longitud, flag
VolSerialNum(par_unidad, cad1, 256, numSerie, longitud, flag, cad2, 256)
return string(numSerie)
En el script del componente que necesitemos ponemos esto:
string ls_num_serie
ls_num_serie = obten_nserie("C:")
Publicado por Adolfo Chairez en 9:31 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como mostar archivos PDF en mi window
Se inserta un ole object llamado Adobe PDF reader
y el script para leer es:
ole_manual.object.LoadFile("C:temp2DIRECTOR COMERCIAL 5.PDF")
ole_manual.object.printall()
Publicado por Adolfo Chairez en 9:30 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como dar de alta manual la impresora Sybase DataWinwos para poder
generar PDF's
Descargar el driver para 64 bits del controlador de:
http://sourceforge.net/projects/ghostscript/files/GPL%20Ghostscript/8.70/
Despues de la descargar correr el programa gs870w64.exe asegurandonos que se instale en
C:Program Filesgs o su equivalente en español
Abrimos el panel de control - Impresoras
Agregamos una impresora nueva
Seleccionamos Impresora local
Seleccionamos Usar puerto existente y seleccionar Imprimir en Archivo
Seleccionar usar contolador y seleccionar la carpeta C:Program Filesgs y seleccionar el
archivo ghostpdf.inf
Nombrar a la nueva impresora como "Sybase DataWindow PS" exactamente
Publicado por Adolfo Chairez en 9:30 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Etiquetas: exportar a PDF, ghostscrp, PDF, Sybase DataWindows PS
Como guardar y recuperar una imagen
1.- Debemos modificar c:archivos de programasybasesharedpowerbuilderpbodb105.ini
(o en su caso la version que sea. ejm.
pb0db12.ini) y localizar lo siguiente
PBMaxBlobSize='32767'
PBMaxTextSize='32767'
y cambiarlo por
PBMaxBlobSize='2147483647'
PBMaxTextSize='32767000'
2.- Para este ejemplo debemos de tener la siguiente tabla:
CREATE TABLE dbo.nada
( clave int IDENTITY,
nombre longsysname NULL,
foto image NULL)
En la ventana debemos crear 3 controles un single line edit llamado sle_clave.text un boton
guardar y un boton leer.
Para el botón Guardar:
string ls_pathname, ls_filename, ls_filtro
integer li_clave, li_file
blob lb_usu_foto, lb_temp
ChangeDirectory("C:Documents and SettingsCOR_ACHAIREZMis documentosMis
imágenes")
ls_filtro = "JPEG Files (*.jpg),*.jpg," + "GIFF Files (*.gif),*.gif, BMP (*.bmp)"
if GetFileOpenName("Archivo de Imagen:", ls_pathname, ls_filename , "jpg", ls_filtro) = 0
then return
li_file = FileOpen(ls_pathname, StreamMode!)
if li_file = -1 then
messagebox('Error','Falló la apertura del archivo imagen',stopsign!)
return
else
li_clave = integer(sle_clave.text)
DO WHILE FileRead(li_file,lb_temp) > 0
lb_usu_foto += lb_temp
LOOP
FileClose(li_file)
p_foto.SetPicture(lb_usu_foto)
UPDATEBLOB nada
SET foto = :lb_usu_foto
WHERE clave = :li_clave;
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo ejecutar la query actualiza foto~n~r" + sqlca.sqlerrtext,
stopsign!)
return
end if
end if
Para el boton leer:
integer li_clave
Blob lb_usu_foto
long ll_i
li_clave = integer(sle_clave.text)
SELECTBLOB foto INTO :lb_usu_foto
FROM nada
WHERE clave = :li_clave;
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo recuperar imagen" + sqlca.sqlerrtext, StopSign!)
return
end if
p_foto.setpicture(lb_usu_foto)
Publicado por Adolfo Chairez en 9:27 a.m.6 comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como evitar aplicacion en la barra
¿ Como evitar que mi Aplicación se vea en la barra de tareas de Windows ?
Primero declara la sig. funcion externa:
FUNCTION ulong SetWindowLongA( ulong hWnd, int nIndex, long newValue )
LIBRARY "user32.dll"
Agrega el sig. Script en el evento OPEN de tu ventana.
Long ll_RC
ll_RC = SetWindowLongA(Handle(This), -20, 128)
IF ll_RC = 0 THEN
// function call failed
END IF
Publicado por Adolfo Chairez en 9:27 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como enviar un mensaje a una dirección IP
Si se cambia la dirección IP por u nombre no funciona.
net send 194.0.1.193 "terminó leon"
Publicado por Adolfo Chairez en 9:27 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como enviar un mail 2 formas
La forma facil:
//send e-mail
String ls_Null
SetNull (ls_Null)
ShellExecute (0, ls_Null, "mailto:" + Text +
"&subject=PB%20SysTray%20v%20example" , ls_Null, ls_Null, SW_SHOWNORMAL)
La Forma elaborada:
string docname, named,ls_error
integer value
mailSession sesion_mail
mailReturnCode codigo_retorno
mailMessage mensaje_mail
mailFileDescription mensaje_archivo
sesion_mail = create mailSession
/*Intenta la conexcion mail*/
codigo_retorno = sesion_mail.mailLogon(mailNewSession!)
If codigo_retorno <> mailReturnSuccess! Then
Destroy sesion_mail
//Si existe algun error en la conexion cancelar y salir
Choose Case codigo_retorno
Case mailReturnLoginFailure!
ls_error = "Usuario/Password incorrecto(s)"
Case mailReturnInsufficientMemory!
ls_error = "Memoria insuficiente"
Case mailReturnTooManySessions!
ls_error = "Demasiadas sesiones abiertas"
Case mailReturnUserAbort!
ls_error = "Cancelación por usuario"
End Choose
Messagebox("Error",ls_error,Information!)
Else
mensaje_mail.Subject = 'Saludos'
mensaje_mail.notetext = 'Este mail fue enviado desde una aplicacion PB, si te interesa el
codigo escribeme. Saludos'
//Aqui viene el destino, como podras ver es un arreglo,
//es decir el recipient[2] seria poner otro destino
mensaje_mail.recipient[1].address = 'achairez@lajat.com.mx'
//Aqui viene los archivos adjuntos que tambien son un arreglo,
//Se puede sacar este codigo a un boton de tal forma que se puedrian agregar tantos
archivos
//como fuese necesario, habria que cuidar el contador del array del Attachmentfile
value = GetFileOpenName("Selecciona el archivo a enviar por
mail",docname,named,"All","All Files (*.*),*.*")
If value = 1 Then
mensaje_archivo.filename = docname
mensaje_archivo.pathname = docname
mensaje_mail.AttachmentFile[1] = mensaje_archivo
End if
codigo_retorno = sesion_mail.mailResolveRecipient(mensaje_mail.Recipient[1].Name)
if codigo_retorno <> mailReturnSuccess! Then
messagebox("Error","No se pudo resolver la siguiente direccion "+ls_dir_mail)
else
codigo_retorno = sesion_mail.mailsend(mensaje_mail)
if codigo_retorno <> mailReturnSuccess! then
ls_error = "El mail no pudo ser enviado por: "
Choose Case codigo_retorno
Case mailReturnInsufficientMemory!
ls_error = ls_error + "Memoria insuficiente"
Case mailReturnUserAbort!
ls_error = ls_error + "Cancelado por usuario"
Case mailReturnDiskFull!
ls_error = ls_error + "Disco duro lleno"
Case mailReturnTooManySessions!
ls_error = ls_error + "Demasiadas sesiones abiertas"
Case mailReturnTooManyFiles!
ls_error = ls_error + "Demasiados archivos"
Case mailReturnTooManyRecipients!
ls_error = ls_error + "Demasiados destinatarios"
Case mailReturnUnknownRecipient!
ls_error = ls_error + "Destinatario(s) desconocido(s)"
Case mailReturnAttachmentNotFound!
ls_error = ls_error + "Archivo adjunto no hallado"
End Choose
messagebox("Error",ls_error,Information!)
end if
end if
End If
Publicado por Adolfo Chairez en 9:26 a.m.1 comentario:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como ejecutar una aplicacion y esperar a que termine
Normalmente desde PB tu lanzas una aplicación con el comando Run se lanza la aplicacion
y PB sigue con la ejecución del script sin esperar a que terminar la aplicación, aqui una
forma de lanzar una aplicación y esperar a que termine.
OleObject wsh
integer li_rc
CONSTANT integer MAXIMIZED = 3
CONSTANT integer MINIMIZED = 2
CONSTANT integer NORMAL = 1
CONSTANT boolean WAIT = TRUE
CONSTANT boolean NOWAIT = FALSE
wsh = CREATE OleObject
li_rc = wsh.ConnectToNewObject( "WScript.Shell" )
li_rc = wsh.Run("Notepad" , NORMAL, WAIT)
messagebox("hello", "world")
Publicado por Adolfo Chairez en 9:26 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como ejecutar una query dinamicamente
ls_query = "SELECT a.emp_id,emp_nom from emp_dat_adi a,gl_emp b WHERE
a.emp_cia = "
ls_query = ls_query + string(gi_cia_ot) +" and b.emp_cia = a.emp_cia and Emp_Feb <> ' '
and "
ls_query = ls_query + "niv_descrip = 'SUPERVISOR' and a.emp_id = b.emp_id"
if depto <> 'TODOS' then ls_query = ls_query + " and emp_d03 = '"+depto+"'"
DECLARE cur_sup DYNAMIC CURSOR FOR SQLSA;
PREPARE SQLSA FROM :ls_query;
OPEN cur_sup;
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo ejecutar la query busca supervisores "+sqlca.sqlerrtext)
else
DO
FETCH cur_sup INTO :ls_numero,:ls_nombre;
if sqlca.sqlcode = 0 then
ddlb_supervisor.additem(ls_nombre)
lb_supervisor.additem(ls_numero)
end if
LOOP WHILE sqlca.sqlcode = 0
CLOSE cur_sup;
end if
/* Si lo que queremos es ejecutar una instruccion para modificar tablas no usar las
instrucciones
anteriores sino esta*/
EXECUTE IMMEDIATE :ls_query;
if sqlca.sqlcode = -1 then
messagebox("Error","En el commando EXECUTE IMMEDIATE~n"+sqlca.sqlerrtext)
end if
// Para un segundo canal dinámico
En el declare de la window:
DynamicStagingArea SQLSA2
En el open:
SQLSA2 = CREATE DynamicStagingArea
En el close
DESTROY SQLSA2
// En un servidor sql como un STORE PROCEDURE
CREATE PROCEDURE sp_nada(@ls_columna varchar(15))
AS
BEGIN
DECLARE @ls_query AS varchar(256)
SET @ls_query = "INSERT nada(clave,nombre,"+@ls_columna+") "
SET @ls_query = @ls_query + "SELECT cla_clave, ven_periodo, ven_cantidad FROM
venta WHERE cla_clave = '08' AND ven_periodo = '200910'"
EXECUTE(@ls_query)
END
Publicado por Adolfo Chairez en 9:24 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como ejecuar un Store Procedure
string ls_query
ls_query = "execute sp_saldos '012','02/03/2009'"
EXECUTE IMMEDIATE :ls_query;
if sqlca.sqlcode = -1 then
messagebox("Error","En el commando EXECUTE IMMEDIATE~n~r"+sqlca.sqlerrtext)
return
end if
//En el server corremos:
CREATE PROCEDURE dbo.sp_nada(@ls_cen char(3), @fec_ini datetime, @fec_fin
datetime)
AS
BEGIN
SELECT centraliza, nombre from sicentra
WHERE centraliza = @ls_cen
END
// En la aplicacion creamos:
string ls_centraliza, ls_nombre, ls_cen
ls_cen = '001'
DECLARE sp_prueba PROCEDURE FOR sp_nada(:ls_cen);
EXECUTE sp_prueba;
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo ejecutar el stored procedure prueba~n"+sqlca.sqlerrtext)
else
DO
FETCH sp_prueba INTO :ls_centraliza, :ls_nombre;
if sqlca.sqlcode = 0 then
messagebox("info", ls_centraliza + " " + ls_nombre, Information!)
end if
LOOP WHILE sqlca.sqlcode = 0
end if
CLOSE sp_prueba;
Publicado por Adolfo Chairez en 9:23 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como usar COMMIT y ROLLBACK
Este es un ejemplo de como se utiliza el commit junto con el rollback, este código
va en el botón guardar:
li_cliente = integer(sle_cli_clave.text)
li_factura = integer(sle_fac_numero.text)
ls_query = "BEGIN TRANSACTION"
EXECUTE IMMEDIATE :ls_query;
if sqlca.sqlcode = -1 then
messagebox("Error","En el commando EXECUTE IMMEDIATE para BEGIN
TRAN~n"+sqlca.sqlerrtext)
lb_error = true
goto FIN
end if
INSERT factura VALUES(:li_factura, :li_cliente, :ld_hoy, :ld_importe);
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo ejecutar la query inserta factura~n~r" +
sqlca.sqlerrtext, StopSign!)
lb_error = true
goto FIN
end if
INSERT factura_det VALUES(:li_factura, 1, :sle_articulo.text,
:ld_importe,'sd');
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo ejecutar la query inserta detalle
factura~n~r" + sqlca.sqlerrtext, StopSign!)
lb_error = true
goto FIN
end if
UPDATE clientes
SET cli_saldo = cli_saldo + :ld_importe
WHERE cli_clave = :li_cliente;
if sqlca.sqlcode = -1 then
messagebox("Error","No se pudo ejecutar la query actualiza saldo de
clientes~n~r" + sqlca.sqlerrtext, StopSign!)
lb_error = true
goto FIN
end if
FIN:
if lb_error then
ls_query = "ROLLBACK TRANSACTION"
else
ls_query = "COMMIT TRANSACTION"
messagebox("Informacion","Factura grabada exitosamente", Information!)
end if
EXECUTE IMMEDIATE :ls_query USING SQLCA;
if sqlca.sqlcode = -1 then
messagebox("Error","En el commando EXECUTE IMMEDIATE " + ls_query +
"~n~r" + sqlca.sqlerrtext)
end if
Publicado por Adolfo Chairez en 9:23 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como ejecutar una aplicacion OLE
OLEObject NiceObject
long ll_labelid,ll_status
NiceObject = Create OLEObject
ll_status = NiceObject.ConnectToNewObject("NiceLabel.Application")
if ll_status <> 0 then
messagebox("Error","No se pudo crear el objecto Nice Label",StopSign!)
else
ll_labelid = NiceObject.LabelOpen("c:embarqueeti_sor.lbl")
NiceObject.LabelPrint(ll_labelid,"VARIABLE")
NiceObject.LabelClose(ll_labelid)
NiceObject.Quit
end if
Destroy NiceObject
Publicado por Adolfo Chairez en 9:22 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como crear un segundo canal de comunicacion
//Declarar en varialbe global o de instancia
transaction sqlca2
//Y en el open de la window
sqlca2 = Create transaction
// conectamos a la bd
SQLCA2.DBMS = "ODBC"
SQLCA2.AutoCommit = True
SQLCA2.DBParm =
"ConnectString='DSN=HRMSSYS;UID=ACHAIREZ;PWD=CHAIREZ'"
Connect using sqlca2;
// en close de la ventana o del proyecto
disconnect using sqlca2;
destroy sqlca2
Publicado por Adolfo Chairez en 9:21 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como copiar datos desde un DW a celdas especificas de una Hoja de Excel
El siguiente script copia todas las filas de un datawindow a un archivo de excel existente.
Con esto usted puede aprender la manera de enviar datos desde una aplicación de Power
Builder a celdas especificas de un archivo de excel.
El ejemplo copia la fila 1 columna 1 del datawindow a la fila1 columna1 de una hoja
existente de excel, y asi con todas las celdas. Usted puede modificar este script para enviar
solamente las celdas que usted necesite.
En este ejemplo se abre un archivo localizado en c:ejemplo.xls pero usted debe modificar el
directorio y el nombre del archivo para que abra un archivo existente de excel en su disco
duro. En la parte final del código esta la posibilidad de descomentar las funciones para
guardar el archivo, o guardarlo con otro nombre.
El código es el siguiente:
long ll_numcols , ll_numrows , ll_c, ll_r
OLEObject xlapp , xlsub
int li_ret
// Coloca el número de columnas y filas a copiar
// Este script copia todo el DW pero ud puede solo copiar las celdas que desee
ll_numcols = long(dw_1.Object.DataWindow.Column.Count)
ll_numrows = dw_1.RowCount()
// Crea el oleobject en la variable xlapp
xlApp = Create OLEObject
// Se conecta a Excel y verifica el código de retorno
li_ret = xlApp.ConnectToNewObject( "Excel.Sheet" )
if li_ret < 0 then
MessageBox("Error Conectandose a Excel !",string(li_ret))
return
end if
// Abre un archivo especifico de Excel
xlApp.Application.Workbooks.Open("c:ejemplo.xls") //,false,true
// Hace Excel visible
xlApp.Application.Visible = true
xlsub = xlapp.Application.ActiveWorkbook.Worksheets[1]
// El for/next loop copia todas las filas de cada columna
For ll_c = 1 to ll_numcols
For ll_r = 1 to ll_numrows
xlsub.cells[ll_r,ll_c] = dw_1.object.data[ll_r,ll_c]
Next
Next
// Guarda el archivo abierto
//xlApp.Application.Activeworkbook.Save()
// Guarda el arvhivo con diferente nombre
//xlApp.Application.Activeworkbook.SaveAs("c:ejemplo2.xls")
// se desconecta de excel
xlApp.DisConnectObject()
Destroy xlapp
Publicado por Adolfo Chairez en 9:21 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como "barrer" una DW en función del valor de ciertos campos
En alguna ocasión debía de recorrer una DW en función del contenido de ciertos campos de
otra DW
la dw_mig610301r es la DW maestra la recorremos obteniendo centraliza, nvo_suc y
nvo_contra luego se recorre la DW dw_mig610401r mediante la instrucción find se arma
una cadena de caracters con ls_cad que el criterio de búsqueda
for ll_i = 1 to dw_mig610301r.rowcount()
ls_centraliza = dw_mig610301r.getitemstring(ll_i,"centraliza")
ls_nvo_suc = dw_mig610301r.getitemstring(ll_i,"nvo_suc")
ls_nvo_contra = dw_mig610301r.getitemstring(ll_i,"nvo_contra")
//Barremos la datawindow que contiene los contratos con todos sus status y sus datos
ll_j = 1
DO
ls_cad="centraliza='"+ls_centraliza+"' and nvo_suc='"+ls_nvo_suc+"'and
nvo_contra='"+ls_nvo_contra+"'"
ll_j = dw_mig610401r.find(ls_cad,ll_j,dw_mig610401r.rowcount())
if ll_j <> 0 then
ls_status = dw_mig610401r.getitemstring(ll_j,"status")
if ll_j = dw_mig610401r.rowcount() then
ll_j = 0
else
ll_j++
end if
end if
LOOP WHILE ll_j <> 0
next
Publicado por Adolfo Chairez en 9:18 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como actualizar una tabla desde otra
UPDATE mig930501r
SET mig930501r.pre_venta = simaplan.tot_eng
FROM mig930501r, simaplan
WHERE mig930501r.usu_clave = 'ADOLFO'
AND simaplan.centraliza = mig930501r.centraliza
AND simaplan.folio = mig930501r.folio
AND simaplan.cve_paq = mig930501r.cve_paq
AND LTRIM(simaplan.cve_plan) = 'CONTA'
AND simaplan.no_descto = '00000'
AND simaplan.cve_det = mig930501r.deter
UPDATE considoc
SET folio = (SELECT MAX(sidoctos.folio) FROM sidoctos WHERE sidoctos.cve_cen
= considoc.centraliza)
Publicado por Adolfo Chairez en 9:13 a.m.No hay comentarios:
Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con
Facebook
Como accesar datos de una dw mas eficientemente
Recorrer una DW cuando es pequeña no tien mayor dificultad pero cuando dicha DW es
muy muy grande recorrerla puede ser todo un tema.
Esta es la forma mas traidicional de recorrer una DW
integer li_data
FOR li_cnt = 1 to 100
li_data = dw_1.Object.emp_salary[li_cnt]
.. // Code to process data value
NEXT
Esta es una forma mas optima de recorrer la DW
integer li_data
DWObject dwo_empsalary
dwo_empsalary = dw_1.Object.emp_salary
FOR li_cnt = 1 to 100
li_data = dwo_empsalary.Primary[li_cnt]
.. // Code to process data value
NEXT

Recomendados

manual-power-builder por
manual-power-buildermanual-power-builder
manual-power-builderRafael Silveira
17.2K vistas270 diapositivas
Supervisord 사용법을 간단히 알아보자! por
Supervisord 사용법을 간단히 알아보자!Supervisord 사용법을 간단히 알아보자!
Supervisord 사용법을 간단히 알아보자!Kwangsik Lee
2.1K vistas15 diapositivas
Guia de refuerzo grado digital por
Guia de refuerzo grado digitalGuia de refuerzo grado digital
Guia de refuerzo grado digitalRoberto Lopez
18K vistas39 diapositivas
Reconociendo el Scratch por
Reconociendo el ScratchReconociendo el Scratch
Reconociendo el Scratchpergondagu
149 vistas2 diapositivas
Cours javascript por
Cours javascriptCours javascript
Cours javascriptkrymo
7K vistas71 diapositivas
01 - Introducción al lenguaje de programación Python 3 por
01 - Introducción al lenguaje de programación Python 301 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 3Diego Andrés Alvarez Marín
832 vistas55 diapositivas

Más contenido relacionado

La actualidad más candente

Plan de-area-sistemas-3-4-5 por
Plan de-area-sistemas-3-4-5Plan de-area-sistemas-3-4-5
Plan de-area-sistemas-3-4-5Giovanni Melendez
1.9K vistas18 diapositivas
Ejercicios (1) power point por
Ejercicios (1) power pointEjercicios (1) power point
Ejercicios (1) power pointjabejarano
1.7K vistas10 diapositivas
taller virus y antivirus por
 taller virus y antivirus taller virus y antivirus
taller virus y antivirusdany4tas
2K vistas12 diapositivas
Guía de aprendizaje partes internas de la computadora por
Guía de aprendizaje partes internas de la computadoraGuía de aprendizaje partes internas de la computadora
Guía de aprendizaje partes internas de la computadoraUNICIENCIA
1.7K vistas5 diapositivas
Oracle Form material por
Oracle Form materialOracle Form material
Oracle Form materialRajesh Ch
1.6K vistas88 diapositivas
Tarea de programacion por
Tarea de programacionTarea de programacion
Tarea de programacionMariano Gilberto Croseños Palazin
1.6K vistas2 diapositivas

La actualidad más candente(20)

Ejercicios (1) power point por jabejarano
Ejercicios (1) power pointEjercicios (1) power point
Ejercicios (1) power point
jabejarano1.7K vistas
taller virus y antivirus por dany4tas
 taller virus y antivirus taller virus y antivirus
taller virus y antivirus
dany4tas2K vistas
Guía de aprendizaje partes internas de la computadora por UNICIENCIA
Guía de aprendizaje partes internas de la computadoraGuía de aprendizaje partes internas de la computadora
Guía de aprendizaje partes internas de la computadora
UNICIENCIA1.7K vistas
Oracle Form material por Rajesh Ch
Oracle Form materialOracle Form material
Oracle Form material
Rajesh Ch1.6K vistas
Power Point- Manejo Básico por martakw
Power Point- Manejo BásicoPower Point- Manejo Básico
Power Point- Manejo Básico
martakw2.9K vistas
Actividad partes de una computadora por Zulmiitha
Actividad partes de una computadora Actividad partes de una computadora
Actividad partes de una computadora
Zulmiitha2.2K vistas
Meetup angular http client por Gaurav Madaan
Meetup angular http clientMeetup angular http client
Meetup angular http client
Gaurav Madaan279 vistas
Requerimientos Técnicos e Instalación de un LMS por Lida Barba
Requerimientos Técnicos e Instalación de un LMSRequerimientos Técnicos e Instalación de un LMS
Requerimientos Técnicos e Instalación de un LMS
Lida Barba6.3K vistas
Representacion interna de datos1 2014 por Juan C. Barreto
Representacion interna de datos1 2014Representacion interna de datos1 2014
Representacion interna de datos1 2014
Juan C. Barreto1.7K vistas
Trabajemos con historietas en scratch por Verónica Blanco
Trabajemos con historietas en scratchTrabajemos con historietas en scratch
Trabajemos con historietas en scratch
Verónica Blanco20.5K vistas
Clasificación de los lenguajes de programación por Ronay Garcia
Clasificación de los lenguajes de programaciónClasificación de los lenguajes de programación
Clasificación de los lenguajes de programación
Ronay Garcia5.7K vistas
Actividades power point por yerlipaz
Actividades power pointActividades power point
Actividades power point
yerlipaz5K vistas

Similar a Power builder

Ejemplo bbdd sqlite (android) por
Ejemplo bbdd sqlite (android)Ejemplo bbdd sqlite (android)
Ejemplo bbdd sqlite (android)Héctor García Lorenzana
492 vistas9 diapositivas
Tutorial bd y php por
Tutorial bd y phpTutorial bd y php
Tutorial bd y phpIvan Ramos Laureano
111 vistas16 diapositivas
Trabajo10 por
Trabajo10Trabajo10
Trabajo10Wincler Percy Diaz Vilchez
17 vistas6 diapositivas
Proyecto De Aplicacion A La Bases Datos por
Proyecto De Aplicacion A La Bases DatosProyecto De Aplicacion A La Bases Datos
Proyecto De Aplicacion A La Bases DatosAndreitap de Granda
1.8K vistas83 diapositivas
Ejemplo Base de Datos SQLite (Android) por
Ejemplo Base de Datos SQLite (Android)Ejemplo Base de Datos SQLite (Android)
Ejemplo Base de Datos SQLite (Android)Salvador Fernández Fernández
46.9K vistas9 diapositivas
Conexion Entre Php Y Mysqul por
Conexion Entre Php Y MysqulConexion Entre Php Y Mysqul
Conexion Entre Php Y Mysquljuan_j_condolo
748 vistas11 diapositivas

Similar a Power builder(20)

Conexion Entre Php Y Mysqul por juan_j_condolo
Conexion Entre Php Y MysqulConexion Entre Php Y Mysqul
Conexion Entre Php Y Mysqul
juan_j_condolo748 vistas
Base de-datos-ii por Luis Carmen
Base de-datos-iiBase de-datos-ii
Base de-datos-ii
Luis Carmen109 vistas
vAplicación parte 1 por yanburbano
vAplicación parte 1vAplicación parte 1
vAplicación parte 1
yanburbano758 vistas
Examen ISC por ivan mtz
Examen ISCExamen ISC
Examen ISC
ivan mtz471 vistas
ManualPracticoSQL.pdf por Jenny29068
ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdf
Jenny290683 vistas
Manual practico SQL por Ana Aguirre
Manual practico SQLManual practico SQL
Manual practico SQL
Ana Aguirre340 vistas
Manual practico para sql ingieneria de sistemas por Crhis
Manual practico para sql ingieneria de sistemas  Manual practico para sql ingieneria de sistemas
Manual practico para sql ingieneria de sistemas
Crhis252 vistas

Power builder

  • 1. Separador de miles en SQL Mostrar importes con separador de miles es muy útil vean que la columna Costo que es del tipo Money no tiene formato y la siguiente columna ya se le aplicó el formato, esto lo logramos aplicando la función CONVERT, esta función es muy utilizada para hacer conversiones entre tipos de campos pero en este ejemplo la utilizamos para darle formato a un campo Money.Este es el código que generó la salida anterior: Esta es la query que generó la salida anterior: SELECT b.Nombre, a.Costo,CONVERT(VarChar(20),a.Costo,1) FROM CostoAeropuerto a, Aeropuertos b WHERE b.ID_Aeropuerto = a.ID_Aeropuerto Y si pensaban que se requiere forzosamente tener una tabla o campo, pues no el convert trabaja sobre variables, como ven esta es una sola sentencia SQL DECLARE @Costo Money = 44252.23;SELECT CONVERT(VarChar(20),@Costo,1) Publicado por Adolfo Chairez en 9:18 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: funcion convert, funcion sql, separador miles sq viernes, 9 de marzo de 2012 Paso de parámetros variables entre Windows y uso del Entry
  • 2. Cuando empecé a programar con PB y necesitaba pasar varios valores entre ventanas en ese entonces utilizaba estructuras, ahora utilizo una string donde pongo todos los valores que quiero y en la ventana que la recibe saca esos valores y los convierte al tipo que se necesite es mas practico pasar 1 solo valor que pasar una estructura. En el proyecto que se ve en el vídeo esta en esta dirección: http://www.mediafire.com/?6gltk93s9do7c2t podrán encontrar una función que utilizo mucho es Entry recibe como parámetros un string una posición y caracter de separación y resresa el valor indicado por posición, luego les muestro un ejemplo de como usar entry. Publicado por Adolfo Chairez en 4:51 p.m.1 comentario: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: Parametros PowerBuilder, paso parametros entre ventanas, windows parameters Funcion en SQL para calcular el ISR Nomina Mexico
  • 3. En México todo aquel empleado debe de pagar el Impuesto Sobre la Renta por concepto de Sueldos y Salarios (luego les explicaré como recuperar algo de este impuesto) entonces es necesario si estamos haciendo un sistema de nominas saber como calcular el impuesto sobre la renta, en la siguiente dirección pueden descargar tanto la definición de tablas sus valores como la función, este permitirá calcular el ISR para nominas de períodos semanal, quincenal y mensual vigentes para el 2012: http://www.mediafire.com/?o38ouw4jg5a34eh Script que generó la salida anterior es: PRINT "EL descuento del ISR para un ingreso Semanal de 4,500.00 es de " + CAST(dbo.ISR(4500,1,2012) As VarChar(10)) PRINT "EL descuento del ISR para un ingreso Quincenal de 4,500.00 es de " + CAST(dbo.ISR(4500,2,2012) As VarChar(10)) PRINT "EL descuento del ISR para un ingreso Mensual de 4,500.00 es de " + CAST(dbo.ISR(4500,3,2012) As VarChar(10)) El store procedure recibe 3 parámetros el primero es la base gravable de los ingresos del trabajador en el período OJO dije ingresos gravables no total de ingresos si tienen dudas escribnme, el segundo parámetro es el tipo de período 1 es semanal, 2 quincenal y 3 es mensual y último parámetro es el año. El ISR puede ser rojo entonces se le llama Subsidio al Salario. Publicado por Adolfo Chairez en 9:58 a.m.1 comentario: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: calculo isr, calculo nomina, descuento isr, isr nomina, ISR sueldos y salarios Calculo de días de descanso para Nomina en México
  • 4. Cuando realizamos el calculo de una nomina necesitamos saber si el día es descanso de ley o no, en México antes los días de descanso eran fijos ahora son variables eso que significa, que para disfrutar del día de descanso por aniversario de la revolución mexicana debemos calcular cual será el tercer lunes del mes de noviembre. La siguiente liga contiene la definición de una tabla que contendrá los días de descanso por ley un store procedure que al ejecutarse llena dicha tabla de esta forma sabremos si una fecha es descanso obligatorio por ley, esta tabla contiene un campo llamado Borrar lo pongo en 0 (cero) porque por ley no se puede evitar pagar esos dias. Descargar la función compatible para servidores SQL: http://www.mediafire.com/?nfoc2sbfxsrcvp8 Publicado por Adolfo Chairez en 9:38 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: das descanso obligatorio, dias de descanso mexico, dias descanso por ley, dias festivo mexico, ley federal del trabajo dias descanso jueves, 8 de marzo de 2012 Como actualizar una tabla desde otra 2 formas En ocasiones necesitamos hacer update a una tabla con el resultado del select de otra aqui 2 ejemplos: UPDATE mig930501r SET mig930501r.pre_venta = simaplan.tot_eng FROM mig930501r, simaplan WHERE mig930501r.usu_clave = 'ADOLFO'
  • 5. AND simaplan.centraliza = mig930501r.centraliza AND simaplan.folio = mig930501r.folio AND simaplan.cve_paq = mig930501r.cve_paq AND LTRIM(simaplan.cve_plan) = 'CONTA' AND simaplan.no_descto = '00000' AND simaplan.cve_det = mig930501r.deter Otra forma que utilizo mucho: UPDATE considoc SET folio = (SELECT MAX(sidoctos.folio) FROM sidoctos WHERE sidoctos.cve_cen = considoc.centraliza) Publicado por Adolfo Chairez en 10:46 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: update 2 tablas, update from Como crear un store procedure que regrese valores CREATE PROCEDURE PruebaRegreso @Cant Int AS BEGIN SET @Cant = @Cant + 1 RETURN @Cant END go DECLARE @regreso INTEGER EXEC @regreso = PruebaRegreso 81 PRINT @regreso --debug imprime 82 Publicado por Adolfo Chairez en 10:44 a.m.1 comentario: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: procedimientos almacenados, sql store procedure, store procedure Como saber los indices de una tabla Esta funcion puede ser util en diversos casos, yo la utilizo para saber cuales con los campos de una tabla que sean definido como llaves primarias para generar joins automaticos con otras tablas que mis usuarios manipulan; este es el primer paso de un generador de reportes (NOTA: el codigo que hace las relaciones no esta aca): 1. Cree la funcion en SQL: CREATE FUNCTION f_llave_primaria (@p_nombre_tabla Varchar(100), @p_nombre_campo
  • 6. Varchar(100)) RETURNS Numeric(9) AS BEGIN Declare @v_key Numeric(9); SELECT @v_key = count(*) FROM syscolumns INNER JOIN (SELECT * FROM SysIndexKeys IK WHERE IK.Id = (select id from sysobjects where name = @p_nombre_tabla) AND IK.IndId = (select indid from sysindexes where name = (select name from sysobjects where xtype = 'PK' and parent_obj = (select id from sysobjects where name = @p_nombre_tabla))) ) PKColumns ON PKColumns.id = syscolumns.id AND PKColumns.colid = syscolumns.colid and syscolumns.name = @p_nombre_campo Return @v_key ; END 2. Cree un Datawindow con la siguiente sentencia SQL y un argumento llamado nombre_tabla a la cual sele va a pasar el nombre de la tabla con la cual queremos trabajar. select syscolumns.name as NombreCampo, dbo.f_llave_primaria(:nombre_tabla,syscolumns.name) as 'isnullable' from syscolumns inner join sysobjects on sysobjects.id=syscolumns.id inner join systypes on systypes.xtype=syscolumns.xtype where sysobjects.name = :nombre_tabla order by 1; Publicado por Adolfo Chairez en 10:44 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: index table Como obtener la llave primaria de una tabla en SQL CREATE FUNCTION dbo.llave_primaria(@TABLA VARCHAR(50)) RETURNS VARCHAR(50) BEGIN DECLARE @TABLE VARCHAR(50) SELECT @TABLE = Nombre FROM Nom_Entidades WHERE UPPER(Clave) = UPPER(@TABLA) SELECT @TABLE = name FROM sys.identity_columns WHERE object_id = object_id(@TABLE) RETURN LTrim(RTrim(@TABLE)) END Publicado por Adolfo Chairez en 10:41 a.m.No hay comentarios:
  • 7. Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: primary key, sql key Programando Store Procedures: Variable table VS temp table ¿quien ganará? Cuando programamos Store Procedure en SQL a veces necesitamos crear tablas temporales para ahí depositar datos procesados y luego volverlos a utilizarlos en otra rutina, es aquí donde nos topamos con la disyuntiva de utilizar variable table ó temp table aquí les dejo un pequeño script que les ayudará a decidir que es mas eficiente, este script fué probado con un servidor Microsoft SQL Server 2008: Tengo la idea de que Oracle sería al revés: DECLARE @st datetime
  • 8. DECLARE @VariableTabla TABLE ( ID_Recibo_Det bigint, ID_Calculo int, Iva money, Importe money) CREATE TABLE #TablaTemporal ( ID_Recibo_Det bigint, ID_Calculo int, Iva money, Importe money) SET @st = getdate() INSERT @VariableTabla(ID_Recibo_Det, ID_Calculo, Importe) SELECT ID_Recibo_Det, ID_Calculo, Importe FROM Nom_Calculos UPDATE @VariableTabla SET Importe = Importe * 1.72342 UPDATE @VariableTabla SET Iva = Importe /1.15 DELETE @VariableTabla WHERE Importe >= 234.23 PRINT 'Utilizando Variable Tabla la operacion consume: ' + RTrim(CAST(DateDiff(ms,@st,GetDate()) AS char(10))) + ' msegs' ---Utilizando Tablas temporales SET @st = getdate() INSERT #TablaTemporal(ID_Recibo_Det, ID_Calculo, Importe) SELECT ID_Recibo_Det, ID_Calculo, Importe FROM Nom_Calculos UPDATE #TablaTemporal SET Importe = Importe * 1.72342 UPDATE @VariableTabla SET Iva = Importe /1.15 DELETE #TablaTemporal WHERE Importe >= 234.23 PRINT 'Utilizando Tabla Temporal la operacion consume: ' + RTrim(CAST(DateDiff(ms,@st,GetDate()) AS char(10))) + ' msegs' Publicado por Adolfo Chairez en 9:48 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: temp table, variable table Como convertir un numero a su expresión en letras
  • 9. A veces necesitamos convertir un importe a letras, aqui les traigo la función que lo hace. Al final dice Pesos pero uds. pueden cambiar por la moneda de su pais. Descargar el codigo aqui, incluyo un archivo .srf para que nada mas importen este archivo y listo: http://www.mediafire.com/?ouhdx9l1touuue9 Publicado por Adolfo Chairez en 9:32 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: convertir numeros, numero a letras 11 Formatos de fecha en SQL Ahora les tengo una función en SQL que recibe un dato tipo DateTime y regresa una cadena de caracteres correspondiente al valor del paráemtro DateTime y se puede seleccionar 1 de 11 formatos para expresar dicha fecha con y sin hora, esta función se puede agregar a una sentencia SQL, ejm. Select dbo.forfec(campofecha, num_formato, num_hora). Importante no importa el lenguaje del servidor SQL, de hecho por eso la hice.
  • 10. Esta es el script que generó la salida de la imagen: BEGIN DECLARE @Fecha DateTime = CAST('20120228 15:35:15' As DateTime), @li_i Int = 1 WHILE 1=1 BEGIN PRINT "Formato Num: " + CAST(@li_i As VarChar(2)) + " sin hora " + dbo.forfec(@Fecha,@li_i,0) PRINT "Formato Num: " + CAST(@li_i As VarChar(2)) + " con hora " + dbo.forfec(@Fecha,@li_i,1) SET @li_i = @li_i + 1 IF @li_i = 12 BREAK END END Descargar la funcion Forfec http://www.mediafire.com/?9v7446agt5b8bhf Publicado por Adolfo Chairez en 8:44 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada
  • 11. Etiquetas: conversion fecha, conversion fecha y hora, convert datetime, date convert, date format, fecha y hora en sql, formato fecha miércoles, 7 de marzo de 2012 Como cambiar el color de las lineas de una DW Este es código que se ve en la imagen en el punto 3 IF(MOD(GETROW(),2)=0,rgb(205,205,205),RGB(219,233,255)) Publicado por Adolfo Chairez en 9:50 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: alternar colores en registros, alternate color, background color, powerbuilder band
  • 12. Como tocar un archivo wav Private Constant Long SND_APPLICATION = 128 // look for application specific association Private Constant Long SND_ALIAS = 65536 // name is a WIN.INI [sounds] entry Private Constant Long SND_ALIAS_ID = 1114112 // name is a WIN.INI [sounds] entry identifier Private Constant Long SND_ASYNC = 1 // play asynchronously Private Constant Long SND_FILENAME = 131072 // name is a file name Private Constant Long SND_LOOP = 8 // loop the sound until next sndPlaySound Private Constant Long SND_MEMORY = 4 // lpszSoundName points to a memory file Private Constant Long SND_NODEFAULT = 2 // silence not default, if sound not found Private Constant Long SND_NOSTOP = 16 // don't stop any currently playing sound Private Constant Long SND_NOWAIT = 8192 // don't wait if the driver is busy Private Constant Long SND_PURGE = 64 // purge non-static events for task Private Constant Long SND_RESOURCE = 262148 // name is a resource name or atom Private Constant Long SND_SYNC = 0 // play synchronously (default) Public Function Long PlaySound (String lpszName, Long hModule, Long dwFlags) Library "winmm.dll" Alias for "PlaySoundA" PlaySound ("Ding.wav", 0, SND_FILENAME + SND_ASYNC) Publicado por Adolfo Chairez en 9:37 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: wav play Como usar bcp --exportar de sql a tabla txt bcp mig2.dbo.sidetcon_bcp out sidetcon.txt -n -Ssrvmig2000 -Usa -Pcolon55sur --Tabla nativa bcp mig2.dbo.sidetcon out sidetconb.txt -c -Ssrvmig2000 -Usa -Pcolon55sur --Esta opcion exporta a tabla con TAB separator bcp select * from mig2.dbo.sidetcon where year(fum) in (2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000) queryout sidetconb.txt -c -Ssrvmig2000 -Usa -Pcolon55sur --importar de tabla txt a sql bcp mig2.dbo.sidetcon_bcp in sidetcon.txt -n -Ssrvmig2000 -Usa -Pcolon55sur --Para lanzar los triggers agregar la opcion -hFIRE_TRIGGERS Publicado por Adolfo Chairez en 9:36 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: bcp sql
  • 13. Como simular un tab con el enter en una dw Muchos programadores, han encontrado la necesidad de pasar de un campo a otro del datawindow con Enter. Para esto se debe hacer un pequeño truco pero efectivo que a continuacion te lo enseñamos. En el datawindow se define un evento de usuario con un nombre cualquiera y que se inicie cuando opriman enter, para eso seleccione el event ID pbm_dwnprocessenter. Luego como el evento se dispara cuando oprimen el enter, lo que se hace es enviar un tab en ese evento. El codigo que debe tener el evento de usuario que creamos es el siguiente Send(Handle(this),256,9,Long(0,0)) Con este codigo se pasa de un campo a otro del datawindow con el enter y con tab. Para darle una secuencia ordenada debes abrir el DW - Format- Tab Order y ver que los codigos asignados a cada campo estan de forma ascendente 10, 20,, 30, etc. Saludos Publicado por Adolfo Chairez en 9:36 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como selecciono un archivo integer li_rtn string ls_path li_rtn = GetFileOpenName("Archivo a cargar", sle_archivo.text, ls_path, "txt", "Archivos Tab (*.txt), *.txt", GetCurrentDirectory()) if li_rtn < 1 then return Publicado por Adolfo Chairez en 9:35 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: abrir archivo en powerbuilder, fileopen, getfileopen Como obtengo las columnas de una datawindow
  • 14. //dw_free es el control datawindows string ls_tabla, ls_columna integer li_i, li_j ls_tabla = dw_free.Describe("DataWindow.table.columns") li_j = num_entries(ls_tabla,"~t") for li_i = 1 to li_j ls_columna = entry(ls_tabla,li_i,'~t') messagebox("Columnas",ls_columna) next //Otra forma: integer li_i, li_j string ls_col li_j = integer(dw_datos.Object.Datawindow.Column.Count) for li_i = 1 to li_j ls_col = dw_datos.Describe("#"+string(li_i) + ".name") messagebox("Columna",ls_col,Information!) next //Para recueperar la etiqueta de la columna ls_col = dw_datos.Describe("#"+string(li_i) + ".name") dw_datos.Describe(ls_col + "_t.text") Publicado por Adolfo Chairez en 9:35 a.m.1 comentario: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: column label, column name, datawindow, datawindow column, datawindow describe, describe Como posicionar el cursor en una columna dw_control_name.setcolumn(nom_col) //nom_col es el nombre de la columna que puede ser tambien Publicado por Adolfo Chairez en 9:34 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: columnas de una dw, datawindow Como pasar parametros entre ventanas
  • 15. Suponemos que la ventana w_pro_lot llama a la ventana w_cap_dat para que esta ultima captura unos datos los cuales debera de pasar a la ventana w_pro_lot en el boton de salir o cerrar de w_cap_dat ponemos: su_dat_pac is_dat_pac is_dat_pac.fecha = date(em_fecha.text) is_dat_pac.carrier = Trim(sle_carrier.text) is_dat_pac.sellos = trim(sle_sellos.text) is_dat_pac.tarimas = integer(em_tarimas.text) is_dat_pac.salida = trim(sle_salida.text) closewithreturn(w_dat_pac,is_dat_pac) en w_pro_lot (la que llama) ponemos: su_dat_pac ls_dat_pac open(w_cap_dat) ls_dat_pac = message.PowerObjectParm donde: su_dat_pac es una estructura que contiene los campos que se van a pasar como parametros puede utilizarse tambien para el objeto message WordParm tipo de dato long LongParm tipo de dato long DoubleParm tipo de dato double (numeric) StringParm tipo de dato string PowerObjectParm tipo de dato objecto (incluyendo estructuras) Publicado por Adolfo Chairez en 9:34 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como obtener el periodo de una fecha via SQL select centraliza,convert(char(6),fec_elabor,112),count(*) from sinvocon where centraliza = '020' group by centraliza,convert(char(6),fec_elabor,112) order by centraliza Publicado por Adolfo Chairez en 9:33 a.m.No hay comentarios:
  • 16. Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como obtener los fonts instalados string ls_name,ls_key, ls_subkeylist[] integer li_rtn integer li_pic, li_position,lpos ls_key = "Hkey_Local_MachineSoftwareMicrosoftWindowsCurrentVersionFonts" li_rtn = RegistryValues(ls_key, ls_subkeylist) IF li_rtn = 1 THEN li_pic = 1 For li_position = 1 To UpperBound(ls_subkeylist) ls_name = ls_subkeylist[li_position] li_position = plb_fontname.AddItem(ls_name, li_pic) Next END IF // Asigno a un picturelistbox los nombres de los fonts // Pero cuidado, en el evento selectionchange del picturelistbox fontname.text = This.SelectedItem() st_example.facename = fontname.text Publicado por Adolfo Chairez en 9:33 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como modificar la sentencia SQL de una DW en tiempo de ejecución
  • 17. Este vídeo demuestra que si es posible modificar en tiempo de ejecución la sentencia SQL embebida en un DW. Vean el video desde youtube se ve mejor. Dirección para descargar el proyecto que se ve en el video, incluye la creación y llenado de las tablas: http://www.mediafire.com/?2n2x51tta17wmnj CODIGO BÁSICO: //declaramos una variable de instancia tipo caracter llamada is_query //colocamos este codigo en el open de window is_query = dw_reporte.Describe("DataWindow.Table.Select") //Antes de hacer el retrieve de la DW hariamos algo como esto string ls_query ls_query = is_query if ddlb_deptos.text <> 'TODOS' then ls_query = ls_query + " and dbo.gl_emp.emp_d03 = '" + trim(ddlb_deptos.text) + "'" end if ls_query = 'DataWindow.Table.Select = "' + ls_query + '"' ls_res = dw_reporte.Modify(ls_query) if ls_res = "" then dw_reporte.retrieve(gi_cia_ot,ddlb_tip_nom.text,ls_fec_ini,ls_fec_fin,ddlb_deptos.text) else MessageBox("Error","Falla al modificar la query de la datawindow ~n" + ls_res) end if Publicado por Adolfo Chairez en 9:32 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook
  • 18. Etiquetas: DW Describe, DW modify, DW SQL, Modifcación SQL DW tiempo ejecución, sql embebido Como leer una web cam (por probar) Como estas Juan, yo estoy tratando de hacer lo mismo y por lo que he averiguado existe una funcion api para hacer esto..pero no he logrado que funcione bien.. este es el codigo: //Local external function function ulong capCreateCaptureWindowA(string lpszWindowName,ulong dwStyle,long li_x ,long li_y ,long nWidth ,long nHeight ,ulong ParentWin ,long nId ) LIBRARY 'AVICAP32.DLL' //Instance Variables Uint lhand Constant long GET_FRAME = 1084 Constant long COPY = 1054 Constant long WM_USER = 1024 Constant long WM_CAP_START = WM_USER Constant long WM_CAP_STOP = WM_CAP_START + 68 Constant long WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 Constant long WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 Constant long WM_CAP_SAVEDIB = WM_CAP_START + 25 Constant long WM_CAP_GRAB_FRAME = WM_CAP_START + 60 Constant long WM_CAP_SEQUENCE = WM_CAP_START + 62 Constant long WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20 Constant long WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63 Constant long WM_CAP_SET_OVERLAY =WM_CAP_START+ 51 Constant long WM_CAP_SET_PREVIEW =WM_CAP_START+ 50 Constant long WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6 Constant long WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2 Constant long WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3 Constant long WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5 Constant long WM_CAP_SET_SCALE=WM_CAP_START+ 53 Constant long WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52 Long wm_cap_savedatdib = 1049 Long wm_cap_dlg_videoformat = 1065 Long wm_cap_dlg_videosource = 1066 Long wm_cap_dlg_videodisplay = 1067 Long wm_cap_get_videoformat = 1068 Long wm_cap_set_videoformat = 1069 Long wm_cap_dlg_videocompression = 1070 Long cf_bitmap = 2 Long wm_close = 16
  • 19. Ulong scrcopy = 32 string gs_pic_path string gs_cd_path string gs_path string gs_ds_pic string gs_ds_cd string gs_cd_rq long gl_pic_sj = 0 //Boton inicia camara string lpszName ulong l1 l1=handle(parent) lpszName='webcam.' lhand=capCreateCaptureWindowA(lpszName,262144+12582912+1073741824 + 268435456 ,10,10,200,200,l1,0) if lhand <> 0 then send(lhand, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0) send(lhand, WM_CAP_SET_CALLBACK_ERROR, 0, 0) send(lhand, WM_CAP_SET_CALLBACK_STATUSA, 0, 0) send(lhand, WM_CAP_DRIVER_CONNECT, 0, 0) send(lhand, WM_CAP_SET_SCALE, 1, 0) send(lhand,WM_CAP_GRAB_FRAME, 0, 0) Send(lhand, WM_CAP_SAVEDIB, 0, 0) send(lhand, WM_CAP_SET_PREVIEWRATE, 66, 0) send(lhand, WM_CAP_SET_OVERLAY, 1, 0) send(lhand, WM_CAP_SET_PREVIEW, 1, 0) end if //boton grabar imagen string s_map s_map='c:save.bmp' if FileExists(s_map) then FileDelete(s_map) if lhand <> 0 then Send(lhand,WM_CAP_FILE_SET_CAPTURE_FILEA,0,s_map); p_2.visible = true st_1.visible = false p_1.picturename = s_map SendMessage(lhand, WM_CAP_DRIVER_DISCONNECT, 0, 0) lhand =0 this.enabled = false cb_1.enabled = true end if
  • 20. //Boton captura video string s s='c:save.avi' if lhand <>0 then Send(lhand,WM_CAP_FILE_SET_CAPTURE_FILEA,0, s); Send(lhand,WM_CAP_SEQUENCE, 0, 0) end if Ojala te sirva de algo..si tu lo lograste hacer funcionar..te agradeceria que me indcaras como hacerlo..mi correo es aagomezp@hotmail.com saludos. Publicado por Adolfo Chairez en 9:31 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como leer la fecha y hora del servidor de la bd a la que me conecté datetime ldt_fecha date ld_fecha STRING ls_query if sqlca.sqlcode = -1 then messagebox("Error",sqlca.sqlerrtext) return end if ls_query = "SELECT getdate()" DECLARE cur_sup DYNAMIC CURSOR FOR SQLSA; PREPARE SQLSA FROM :ls_query; OPEN cur_sup; if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query busca supervisores "+sqlca.sqlerrtext) else FETCH cur_sup INTO :ldt_fecha; CLOSE cur_sup; end if ld_fecha = date(ldt_fecha) messagebox("dato","La fecha y hora del servidor es " + string(ldt_fecha)) messagebox("dato","La fecha del servidor es " + string(ld_fecha))
  • 21. Publicado por Adolfo Chairez en 9:31 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como leer el numero de serie de mi disco duro Dentro de la seccion Declare agregar esta línea en Global External functions FUNCTION long VolSerialNum (string lpRootPathName, string pVolumeNameBuffer, long nVolumeNameSize, REF long lpVolumeSerialNumber, long lpMaximumComponentLength, long lpFileSystemFlags, string lpFileSystemNameBuffer, long nFileSystemNameSize) LIBRARY "kernel32.dll" ALIAS FOR "GetVolumeInformationA;Ansi" Creamos una funcion a nivel proyecto llamada obten_nserie que regrese string y tenga un solo parámetro pasado por valor del tipo string llamado par_unidad string cad1, cad2 long numSerie = 0, longitud, flag VolSerialNum(par_unidad, cad1, 256, numSerie, longitud, flag, cad2, 256) return string(numSerie) En el script del componente que necesitemos ponemos esto: string ls_num_serie ls_num_serie = obten_nserie("C:") Publicado por Adolfo Chairez en 9:31 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como mostar archivos PDF en mi window Se inserta un ole object llamado Adobe PDF reader y el script para leer es: ole_manual.object.LoadFile("C:temp2DIRECTOR COMERCIAL 5.PDF") ole_manual.object.printall() Publicado por Adolfo Chairez en 9:30 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook
  • 22. Como dar de alta manual la impresora Sybase DataWinwos para poder generar PDF's Descargar el driver para 64 bits del controlador de: http://sourceforge.net/projects/ghostscript/files/GPL%20Ghostscript/8.70/ Despues de la descargar correr el programa gs870w64.exe asegurandonos que se instale en C:Program Filesgs o su equivalente en español Abrimos el panel de control - Impresoras Agregamos una impresora nueva Seleccionamos Impresora local Seleccionamos Usar puerto existente y seleccionar Imprimir en Archivo Seleccionar usar contolador y seleccionar la carpeta C:Program Filesgs y seleccionar el archivo ghostpdf.inf Nombrar a la nueva impresora como "Sybase DataWindow PS" exactamente Publicado por Adolfo Chairez en 9:30 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: exportar a PDF, ghostscrp, PDF, Sybase DataWindows PS Como guardar y recuperar una imagen 1.- Debemos modificar c:archivos de programasybasesharedpowerbuilderpbodb105.ini (o en su caso la version que sea. ejm. pb0db12.ini) y localizar lo siguiente PBMaxBlobSize='32767' PBMaxTextSize='32767' y cambiarlo por PBMaxBlobSize='2147483647' PBMaxTextSize='32767000' 2.- Para este ejemplo debemos de tener la siguiente tabla: CREATE TABLE dbo.nada ( clave int IDENTITY, nombre longsysname NULL, foto image NULL) En la ventana debemos crear 3 controles un single line edit llamado sle_clave.text un boton guardar y un boton leer.
  • 23. Para el botón Guardar: string ls_pathname, ls_filename, ls_filtro integer li_clave, li_file blob lb_usu_foto, lb_temp ChangeDirectory("C:Documents and SettingsCOR_ACHAIREZMis documentosMis imágenes") ls_filtro = "JPEG Files (*.jpg),*.jpg," + "GIFF Files (*.gif),*.gif, BMP (*.bmp)" if GetFileOpenName("Archivo de Imagen:", ls_pathname, ls_filename , "jpg", ls_filtro) = 0 then return li_file = FileOpen(ls_pathname, StreamMode!) if li_file = -1 then messagebox('Error','Falló la apertura del archivo imagen',stopsign!) return else li_clave = integer(sle_clave.text) DO WHILE FileRead(li_file,lb_temp) > 0 lb_usu_foto += lb_temp LOOP FileClose(li_file) p_foto.SetPicture(lb_usu_foto) UPDATEBLOB nada SET foto = :lb_usu_foto WHERE clave = :li_clave; if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query actualiza foto~n~r" + sqlca.sqlerrtext, stopsign!) return end if end if Para el boton leer: integer li_clave Blob lb_usu_foto long ll_i li_clave = integer(sle_clave.text) SELECTBLOB foto INTO :lb_usu_foto FROM nada WHERE clave = :li_clave; if sqlca.sqlcode = -1 then messagebox("Error","No se pudo recuperar imagen" + sqlca.sqlerrtext, StopSign!) return
  • 24. end if p_foto.setpicture(lb_usu_foto) Publicado por Adolfo Chairez en 9:27 a.m.6 comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como evitar aplicacion en la barra ¿ Como evitar que mi Aplicación se vea en la barra de tareas de Windows ? Primero declara la sig. funcion externa: FUNCTION ulong SetWindowLongA( ulong hWnd, int nIndex, long newValue ) LIBRARY "user32.dll" Agrega el sig. Script en el evento OPEN de tu ventana. Long ll_RC ll_RC = SetWindowLongA(Handle(This), -20, 128) IF ll_RC = 0 THEN // function call failed END IF Publicado por Adolfo Chairez en 9:27 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como enviar un mensaje a una dirección IP Si se cambia la dirección IP por u nombre no funciona. net send 194.0.1.193 "terminó leon" Publicado por Adolfo Chairez en 9:27 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como enviar un mail 2 formas La forma facil: //send e-mail String ls_Null
  • 25. SetNull (ls_Null) ShellExecute (0, ls_Null, "mailto:" + Text + "&subject=PB%20SysTray%20v%20example" , ls_Null, ls_Null, SW_SHOWNORMAL) La Forma elaborada: string docname, named,ls_error integer value mailSession sesion_mail mailReturnCode codigo_retorno mailMessage mensaje_mail mailFileDescription mensaje_archivo sesion_mail = create mailSession /*Intenta la conexcion mail*/ codigo_retorno = sesion_mail.mailLogon(mailNewSession!) If codigo_retorno <> mailReturnSuccess! Then Destroy sesion_mail //Si existe algun error en la conexion cancelar y salir Choose Case codigo_retorno Case mailReturnLoginFailure! ls_error = "Usuario/Password incorrecto(s)" Case mailReturnInsufficientMemory! ls_error = "Memoria insuficiente" Case mailReturnTooManySessions! ls_error = "Demasiadas sesiones abiertas" Case mailReturnUserAbort! ls_error = "Cancelación por usuario" End Choose Messagebox("Error",ls_error,Information!) Else mensaje_mail.Subject = 'Saludos' mensaje_mail.notetext = 'Este mail fue enviado desde una aplicacion PB, si te interesa el codigo escribeme. Saludos' //Aqui viene el destino, como podras ver es un arreglo, //es decir el recipient[2] seria poner otro destino mensaje_mail.recipient[1].address = 'achairez@lajat.com.mx' //Aqui viene los archivos adjuntos que tambien son un arreglo, //Se puede sacar este codigo a un boton de tal forma que se puedrian agregar tantos archivos
  • 26. //como fuese necesario, habria que cuidar el contador del array del Attachmentfile value = GetFileOpenName("Selecciona el archivo a enviar por mail",docname,named,"All","All Files (*.*),*.*") If value = 1 Then mensaje_archivo.filename = docname mensaje_archivo.pathname = docname mensaje_mail.AttachmentFile[1] = mensaje_archivo End if codigo_retorno = sesion_mail.mailResolveRecipient(mensaje_mail.Recipient[1].Name) if codigo_retorno <> mailReturnSuccess! Then messagebox("Error","No se pudo resolver la siguiente direccion "+ls_dir_mail) else codigo_retorno = sesion_mail.mailsend(mensaje_mail) if codigo_retorno <> mailReturnSuccess! then ls_error = "El mail no pudo ser enviado por: " Choose Case codigo_retorno Case mailReturnInsufficientMemory! ls_error = ls_error + "Memoria insuficiente" Case mailReturnUserAbort! ls_error = ls_error + "Cancelado por usuario" Case mailReturnDiskFull! ls_error = ls_error + "Disco duro lleno" Case mailReturnTooManySessions! ls_error = ls_error + "Demasiadas sesiones abiertas" Case mailReturnTooManyFiles! ls_error = ls_error + "Demasiados archivos" Case mailReturnTooManyRecipients! ls_error = ls_error + "Demasiados destinatarios" Case mailReturnUnknownRecipient! ls_error = ls_error + "Destinatario(s) desconocido(s)" Case mailReturnAttachmentNotFound! ls_error = ls_error + "Archivo adjunto no hallado" End Choose messagebox("Error",ls_error,Information!) end if end if End If Publicado por Adolfo Chairez en 9:26 a.m.1 comentario: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como ejecutar una aplicacion y esperar a que termine Normalmente desde PB tu lanzas una aplicación con el comando Run se lanza la aplicacion
  • 27. y PB sigue con la ejecución del script sin esperar a que terminar la aplicación, aqui una forma de lanzar una aplicación y esperar a que termine. OleObject wsh integer li_rc CONSTANT integer MAXIMIZED = 3 CONSTANT integer MINIMIZED = 2 CONSTANT integer NORMAL = 1 CONSTANT boolean WAIT = TRUE CONSTANT boolean NOWAIT = FALSE wsh = CREATE OleObject li_rc = wsh.ConnectToNewObject( "WScript.Shell" ) li_rc = wsh.Run("Notepad" , NORMAL, WAIT) messagebox("hello", "world") Publicado por Adolfo Chairez en 9:26 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como ejecutar una query dinamicamente ls_query = "SELECT a.emp_id,emp_nom from emp_dat_adi a,gl_emp b WHERE a.emp_cia = " ls_query = ls_query + string(gi_cia_ot) +" and b.emp_cia = a.emp_cia and Emp_Feb <> ' ' and " ls_query = ls_query + "niv_descrip = 'SUPERVISOR' and a.emp_id = b.emp_id" if depto <> 'TODOS' then ls_query = ls_query + " and emp_d03 = '"+depto+"'" DECLARE cur_sup DYNAMIC CURSOR FOR SQLSA; PREPARE SQLSA FROM :ls_query; OPEN cur_sup; if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query busca supervisores "+sqlca.sqlerrtext) else DO FETCH cur_sup INTO :ls_numero,:ls_nombre; if sqlca.sqlcode = 0 then ddlb_supervisor.additem(ls_nombre) lb_supervisor.additem(ls_numero) end if LOOP WHILE sqlca.sqlcode = 0
  • 28. CLOSE cur_sup; end if /* Si lo que queremos es ejecutar una instruccion para modificar tablas no usar las instrucciones anteriores sino esta*/ EXECUTE IMMEDIATE :ls_query; if sqlca.sqlcode = -1 then messagebox("Error","En el commando EXECUTE IMMEDIATE~n"+sqlca.sqlerrtext) end if // Para un segundo canal dinámico En el declare de la window: DynamicStagingArea SQLSA2 En el open: SQLSA2 = CREATE DynamicStagingArea En el close DESTROY SQLSA2 // En un servidor sql como un STORE PROCEDURE CREATE PROCEDURE sp_nada(@ls_columna varchar(15)) AS BEGIN DECLARE @ls_query AS varchar(256) SET @ls_query = "INSERT nada(clave,nombre,"+@ls_columna+") " SET @ls_query = @ls_query + "SELECT cla_clave, ven_periodo, ven_cantidad FROM venta WHERE cla_clave = '08' AND ven_periodo = '200910'" EXECUTE(@ls_query) END Publicado por Adolfo Chairez en 9:24 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como ejecuar un Store Procedure string ls_query ls_query = "execute sp_saldos '012','02/03/2009'" EXECUTE IMMEDIATE :ls_query; if sqlca.sqlcode = -1 then messagebox("Error","En el commando EXECUTE IMMEDIATE~n~r"+sqlca.sqlerrtext)
  • 29. return end if //En el server corremos: CREATE PROCEDURE dbo.sp_nada(@ls_cen char(3), @fec_ini datetime, @fec_fin datetime) AS BEGIN SELECT centraliza, nombre from sicentra WHERE centraliza = @ls_cen END // En la aplicacion creamos: string ls_centraliza, ls_nombre, ls_cen ls_cen = '001' DECLARE sp_prueba PROCEDURE FOR sp_nada(:ls_cen); EXECUTE sp_prueba; if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar el stored procedure prueba~n"+sqlca.sqlerrtext) else DO FETCH sp_prueba INTO :ls_centraliza, :ls_nombre; if sqlca.sqlcode = 0 then messagebox("info", ls_centraliza + " " + ls_nombre, Information!) end if LOOP WHILE sqlca.sqlcode = 0 end if CLOSE sp_prueba; Publicado por Adolfo Chairez en 9:23 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como usar COMMIT y ROLLBACK Este es un ejemplo de como se utiliza el commit junto con el rollback, este código va en el botón guardar: li_cliente = integer(sle_cli_clave.text) li_factura = integer(sle_fac_numero.text) ls_query = "BEGIN TRANSACTION" EXECUTE IMMEDIATE :ls_query; if sqlca.sqlcode = -1 then
  • 30. messagebox("Error","En el commando EXECUTE IMMEDIATE para BEGIN TRAN~n"+sqlca.sqlerrtext) lb_error = true goto FIN end if INSERT factura VALUES(:li_factura, :li_cliente, :ld_hoy, :ld_importe); if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query inserta factura~n~r" + sqlca.sqlerrtext, StopSign!) lb_error = true goto FIN end if INSERT factura_det VALUES(:li_factura, 1, :sle_articulo.text, :ld_importe,'sd'); if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query inserta detalle factura~n~r" + sqlca.sqlerrtext, StopSign!) lb_error = true goto FIN end if UPDATE clientes SET cli_saldo = cli_saldo + :ld_importe WHERE cli_clave = :li_cliente; if sqlca.sqlcode = -1 then messagebox("Error","No se pudo ejecutar la query actualiza saldo de clientes~n~r" + sqlca.sqlerrtext, StopSign!) lb_error = true goto FIN end if FIN: if lb_error then ls_query = "ROLLBACK TRANSACTION" else ls_query = "COMMIT TRANSACTION" messagebox("Informacion","Factura grabada exitosamente", Information!) end if EXECUTE IMMEDIATE :ls_query USING SQLCA; if sqlca.sqlcode = -1 then messagebox("Error","En el commando EXECUTE IMMEDIATE " + ls_query + "~n~r" + sqlca.sqlerrtext) end if Publicado por Adolfo Chairez en 9:23 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como ejecutar una aplicacion OLE
  • 31. OLEObject NiceObject long ll_labelid,ll_status NiceObject = Create OLEObject ll_status = NiceObject.ConnectToNewObject("NiceLabel.Application") if ll_status <> 0 then messagebox("Error","No se pudo crear el objecto Nice Label",StopSign!) else ll_labelid = NiceObject.LabelOpen("c:embarqueeti_sor.lbl") NiceObject.LabelPrint(ll_labelid,"VARIABLE") NiceObject.LabelClose(ll_labelid) NiceObject.Quit end if Destroy NiceObject Publicado por Adolfo Chairez en 9:22 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como crear un segundo canal de comunicacion //Declarar en varialbe global o de instancia transaction sqlca2 //Y en el open de la window sqlca2 = Create transaction // conectamos a la bd SQLCA2.DBMS = "ODBC" SQLCA2.AutoCommit = True SQLCA2.DBParm = "ConnectString='DSN=HRMSSYS;UID=ACHAIREZ;PWD=CHAIREZ'" Connect using sqlca2; // en close de la ventana o del proyecto disconnect using sqlca2; destroy sqlca2 Publicado por Adolfo Chairez en 9:21 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como copiar datos desde un DW a celdas especificas de una Hoja de Excel El siguiente script copia todas las filas de un datawindow a un archivo de excel existente.
  • 32. Con esto usted puede aprender la manera de enviar datos desde una aplicación de Power Builder a celdas especificas de un archivo de excel. El ejemplo copia la fila 1 columna 1 del datawindow a la fila1 columna1 de una hoja existente de excel, y asi con todas las celdas. Usted puede modificar este script para enviar solamente las celdas que usted necesite. En este ejemplo se abre un archivo localizado en c:ejemplo.xls pero usted debe modificar el directorio y el nombre del archivo para que abra un archivo existente de excel en su disco duro. En la parte final del código esta la posibilidad de descomentar las funciones para guardar el archivo, o guardarlo con otro nombre. El código es el siguiente: long ll_numcols , ll_numrows , ll_c, ll_r OLEObject xlapp , xlsub int li_ret // Coloca el número de columnas y filas a copiar // Este script copia todo el DW pero ud puede solo copiar las celdas que desee ll_numcols = long(dw_1.Object.DataWindow.Column.Count) ll_numrows = dw_1.RowCount() // Crea el oleobject en la variable xlapp xlApp = Create OLEObject // Se conecta a Excel y verifica el código de retorno li_ret = xlApp.ConnectToNewObject( "Excel.Sheet" ) if li_ret < 0 then MessageBox("Error Conectandose a Excel !",string(li_ret)) return end if // Abre un archivo especifico de Excel xlApp.Application.Workbooks.Open("c:ejemplo.xls") //,false,true // Hace Excel visible xlApp.Application.Visible = true xlsub = xlapp.Application.ActiveWorkbook.Worksheets[1] // El for/next loop copia todas las filas de cada columna For ll_c = 1 to ll_numcols For ll_r = 1 to ll_numrows xlsub.cells[ll_r,ll_c] = dw_1.object.data[ll_r,ll_c] Next Next // Guarda el archivo abierto
  • 33. //xlApp.Application.Activeworkbook.Save() // Guarda el arvhivo con diferente nombre //xlApp.Application.Activeworkbook.SaveAs("c:ejemplo2.xls") // se desconecta de excel xlApp.DisConnectObject() Destroy xlapp Publicado por Adolfo Chairez en 9:21 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como "barrer" una DW en función del valor de ciertos campos En alguna ocasión debía de recorrer una DW en función del contenido de ciertos campos de otra DW la dw_mig610301r es la DW maestra la recorremos obteniendo centraliza, nvo_suc y nvo_contra luego se recorre la DW dw_mig610401r mediante la instrucción find se arma una cadena de caracters con ls_cad que el criterio de búsqueda for ll_i = 1 to dw_mig610301r.rowcount() ls_centraliza = dw_mig610301r.getitemstring(ll_i,"centraliza") ls_nvo_suc = dw_mig610301r.getitemstring(ll_i,"nvo_suc") ls_nvo_contra = dw_mig610301r.getitemstring(ll_i,"nvo_contra") //Barremos la datawindow que contiene los contratos con todos sus status y sus datos ll_j = 1 DO ls_cad="centraliza='"+ls_centraliza+"' and nvo_suc='"+ls_nvo_suc+"'and nvo_contra='"+ls_nvo_contra+"'" ll_j = dw_mig610401r.find(ls_cad,ll_j,dw_mig610401r.rowcount()) if ll_j <> 0 then ls_status = dw_mig610401r.getitemstring(ll_j,"status") if ll_j = dw_mig610401r.rowcount() then ll_j = 0 else ll_j++ end if end if LOOP WHILE ll_j <> 0 next Publicado por Adolfo Chairez en 9:18 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook
  • 34. Como actualizar una tabla desde otra UPDATE mig930501r SET mig930501r.pre_venta = simaplan.tot_eng FROM mig930501r, simaplan WHERE mig930501r.usu_clave = 'ADOLFO' AND simaplan.centraliza = mig930501r.centraliza AND simaplan.folio = mig930501r.folio AND simaplan.cve_paq = mig930501r.cve_paq AND LTRIM(simaplan.cve_plan) = 'CONTA' AND simaplan.no_descto = '00000' AND simaplan.cve_det = mig930501r.deter UPDATE considoc SET folio = (SELECT MAX(sidoctos.folio) FROM sidoctos WHERE sidoctos.cve_cen = considoc.centraliza) Publicado por Adolfo Chairez en 9:13 a.m.No hay comentarios: Enviar por correo electrónicoEscribe un blogCompartir con TwitterCompartir con Facebook Como accesar datos de una dw mas eficientemente Recorrer una DW cuando es pequeña no tien mayor dificultad pero cuando dicha DW es muy muy grande recorrerla puede ser todo un tema. Esta es la forma mas traidicional de recorrer una DW integer li_data FOR li_cnt = 1 to 100 li_data = dw_1.Object.emp_salary[li_cnt] .. // Code to process data value NEXT Esta es una forma mas optima de recorrer la DW integer li_data DWObject dwo_empsalary dwo_empsalary = dw_1.Object.emp_salary
  • 35. FOR li_cnt = 1 to 100 li_data = dwo_empsalary.Primary[li_cnt] .. // Code to process data value NEXT