Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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 funcin CONVERT, esta funcin 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 cdigo 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: funcion convert, funcion sql, separador miles sq
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 vdeo esta en esta direccin: http://www.mediafire.com/?6gltk93s9do7c2t podrn encontrar una funcin que utilizo mucho es Entry recibe como parmetros un string una posicin y caracter de separacin y resresa el valor indicado por posicin, luego les muestro un ejemplo de como usar entry. Publicado por Adolfo Chairez en 4:51 p.m. 1 comentario: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: Parametros PowerBuilder, paso parametros entre ventanas, windows parameters
En Mxico 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 direccin pueden descargar tanto la definicin de tablas sus valores como la funcin, este permitir calcular el ISR para nominas de perodos semanal, quincenal y mensual vigentes para el 2012: http://www.mediafire.com/?o38ouw4jg5a34eh
El store procedure recibe 3 parmetros el primero es la base gravable de los ingresos del trabajador en el perodo OJO dije ingresos gravables no total de ingresos si tienen dudas escribnme, el segundo parmetro es el tipo de perodo 1 es semanal, 2 quincenal y 3 es mensual y ltimo parmetro es el ao. 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: calculo isr, calculo nomina, descuento isr, isr nomina, ISR sueldos y salarios
Cuando realizamos el calculo de una nomina necesitamos saber si el da es descanso de ley o no, en Mxico antes los das de descanso eran fijos ahora son variables eso que significa, que para disfrutar del da de descanso por aniversario de la revolucin mexicana debemos calcular cual ser el tercer lunes del mes de noviembre.
La siguiente liga contiene la definicin de una tabla que contendr los das 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 funcin compatible para servidores SQL: http://www.mediafire.com/?nfoc2sbfxsrcvp8 Publicado por Adolfo Chairez en 9:38 a.m. No hay comentarios: Enviar por correo electrnicoEscribe 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
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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: update 2 tablas, update from
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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: procedimientos almacenados, sql store procedure, store procedure
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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: index table
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
Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: primary key, sql key
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 pequeo 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 sera al revs:
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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: temp table, variable table
A veces necesitamos convertir un importe a letras, aqui les traigo la funcin 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Enlaces a esta entrada Etiquetas: convertir numeros, numero a letras
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
Publicado por Adolfo Chairez en 8:44 a.m. No hay comentarios: Enviar por correo electrnicoEscribe 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
Publicado por Adolfo Chairez en 9:50 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: alternar colores en registros, alternate color, background color, powerbuilder band
Public Function Long PlaySound (String lpszName, Long hModule, Long dwFlags) Library "winmm.dll" Alias for "PlaySoundA"
Publicado por Adolfo Chairez en 9:37 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: wav play
--Para lanzar los triggers agregar la opcion -hFIRE_TRIGGERS Publicado por Adolfo Chairez en 9:36 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: bcp sql
//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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: column label, column name, datawindow, datawindow column, datawindow describe, describe
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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
Este vdeo demuestra que si es posible modificar en tiempo de ejecucin la sentencia SQL embebida en un DW. Vean el video desde youtube se ve mejor. Direccin para descargar el proyecto que se ve en el video, incluye la creacin y llenado de las tablas: http://www.mediafire.com/?2n2x51tta17wmnj CODIGO BSICO: //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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
Etiquetas: DW Describe, DW modify, DW SQL, Modifcacin SQL DW tiempo ejecucin, sql embebido
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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
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 electrnicoEscribe 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 Files\gs o su equivalente en espaol 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 Files\gs 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook Etiquetas: exportar a PDF, ghostscrp, PDF, Sybase DataWindows PS
Para el botn Guardar: string ls_pathname, ls_filename, ls_filtro integer li_clave, li_file blob lb_usu_foto, lb_temp ChangeDirectory("C:\Documents and Settings\COR_ACHAIREZ\Mis documentos\Mis imgenes") 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
net send 194.0.1.193 "termin leon" Publicado por Adolfo Chairez en 9:27 a.m. No hay comentarios: Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
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 = "Cancelacin 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
y PB sigue con la ejecucin del script sin esperar a que terminar la aplicacin, aqui una forma de lanzar una aplicacin 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
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 dinmico 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
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:\embarque\eti_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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
Con esto usted puede aprender la manera de enviar datos desde una aplicacin 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 cdigo esta la posibilidad de descomentar las funciones para guardar el archivo, o guardarlo con otro nombre. El cdigo es el siguiente:
long ll_numcols , ll_numrows , ll_c, ll_r OLEObject xlapp , xlsub int li_ret // Coloca el nmero 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 cdigo 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 electrnicoEscribe un blogCompartir con TwitterCompartir con Facebook
Recorrer una DW cuando es pequea 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
FOR li_cnt = 1 to 100 li_data = dwo_empsalary.Primary[li_cnt] .. // Code to process data value NEXT