FoxPress,FoxPluss

FoxPress,FoxPluss

domingo, 17 de abril de 2011

ZIP en VFP

 
 De esta manera podremos comprimir / descomprimir en formato ZIP desde nuestras aplicaciones.
oZip = createobject("MoleZip.ZipFile")
oZip.Create("MoleZip.oZip")
oZip.PackInplace( "Actudat.exe", ; && Nombre del fichero 
                  "Actudat.exe", ; && Nombre del registro en el Zip
                    9 ) && Nivel de compresión (de 0 a 9)

oZip.Close

oZip.Open("MoleZip.oZip")
oLista = oZip.Enumerate()
do while oLista.Next()
oZip.Extract( oLista.value, ; && Nombre del registro en el oZip
                      "_" + oLista.value ) && Nombre del fichero a grabar
enddo
oZip.Close
release oZip

MoleZip es un componente COM/ActiveX freeware y se lo puede descargar de la página:http://molestudio.com/tools/molezip
Nota: Fuente: Revista FoxPress, Octubre de 2003, http://www.fpress.com

Visual FoxPro con ADO contra PostreSQL utilizando procedimientos

Ejemplo de gestión de clientes, que muestra como utilizar una base de datos en PostgreSQL con ADO y ejecutando prodecimientos almacenados.
Desarrollado en Visual FoxPro 9.


Descargar

viernes, 15 de abril de 2011

Visual FoxPro como filosofía de programación

Enviado por Moises Palanca 
Vayamos al fondo de la cuestión, Visual FoxPro no es ni más ni menos que un Framework desarrollado en C y orientado al tratamiento de datos, son miles de líneas de código depuradas trás años de experiencia obtenida desde el própio corazon de las empresas, buscando dar soluciones especificas a toda la problemática asociada a la creación de aplicaciones cuya principal misión es darle forma a determinados volúmenes de información.

Por lo tanto no es más ni menos que una filosofía de trabajo, ello lo demuestrán funciones como STREXTRACT o CHRTRAN, creadas para tratar el texto de una forma en la que pocos, por no decir ningún lenguaje, permiten en su própio código.

Las simples funciones incorporadas en la VFP TOOLKIT para .NET son suficientes para ser programadores de C# o Visual Basic .NET más eficientes que cualquier otro.

Sólo tenemos que seguir alimentando cualquier otro lenguaje con la filosofía de Visual FoxPro y este nunca morirá.

Convirtamos a Visual FoxPro en una metodolgía de programación e utilicemos sus comandos y funciones, métodos y propiedades gráficas como seudocódigo o métodos en otros lenguajes para poder aplicar en el papel esta forma de trabajo.

En mi caso estoy aprendiendo C#, utilizando el Sharp Develop (querido Microsoft; ni contigo ni sin ti, tienen mis males remedio. Contigo porque me matas, sin ti porque me muero... de hambre).

Me he creado una clase con las funciones más útiles de las VFP Toolkit, así como aquellas que son vitales si programamos para tener un Framework llamado Visual FoxPro.

También estoy desarrollando clases de base de Visual FoxPro relacionadas con los objetos gráficos (grids, combos, listbox, etc.) en C#.

Hermanos foxeros podemos ser mejores programadores (en cualquier lenguaje) que otros simplemente por aplicar la FILOSOFÍA DE VISUAL FOXPRO.

Si alguno de vosotros está interesado en participar en este proyecto de tener un framework en C# basado en Visual FoxPro y quiere colaborar con sus aportaciones de código, etc., puede ponerse en contacto conmigo en
moisespalanca@gmail.com

jueves, 14 de abril de 2011

Usando el CTL32 ProgressBar de FoxyPreviewer

Traducción de una entrada del Blog de Cesar Chalom, donde nos muestra como utilizar la clase CTL32 ProgressBar de Carlos Alloatti, desde su FoxyPreviewer.

Usando el CTL32 ProgressBar de FoxyPreviewer

Artículo original: Using the CTL32 ProgressBar from FoxyPreviewer (http://weblogs.foxite.com/vfpimaging/archive/2011/01/21/13664.aspx)
Autor: Cesar Chalom (http://weblogs.foxite.com/vfpimaging)
Traducido por: Luis Maria Guayán (http://www.luismariaguayan.com.ar/articulos.htm)
Para: PortalFox (http://www.portalfox.com/)

FoxyPreviewer.App es una colección de clases. En su interior hay varias clases, que se pueden acceder directamente usando VFP.
Recientemente he recibido el requerimiento de mostrar como podria utilizar el CTL32 ProgressBar directamente.
!Eso es realmente simple! El comando es NEWOBJECT(), que nos permite acceder a las clases desde un archivo EXE o APP externo.
En primer lugar el autor de esta joya, el CTL32 ProgressBar es Carlos Alloatti. Para obtener la información completa sobre cómo usarlo, por favor vaya directamente al sitio web de CTL32: http://www.ctl32.com.ar/
Uso:
=Dotherm(90, "Caption", "TitleBar") && Muestra la barra de progreso normal con el 90%
=DoTherm(-1, "Caption", "TitleBar") && El valor -1 en el primer parámetro muestra el efecto de marquesina
=DoTherm() && Desactiva la barra de progreso
Guardar el código de abajo como DOTHERM.PRG
* DOTHERM.PRG
* =DoTherm(90, "Texto label", "Titulo")
* =DoTherm(-1, "Teste2", "Titulo") && Continuo
* =DoTherm() && Desactiva

LPARAMETERS tnPercent, tcLabelText, tcTitleText
IF NOT PEMSTATUS(_SCREEN , "oThermForm", 5)
  _SCREEN.ADDPROPERTY("oThermForm", "")
ENDIF
IF EMPTY(tnPercent)
  TRY
    _SCREEN.oThermForm.RELEASE()
  CATCH
  ENDTRY
  _SCREEN.oThermForm = NULL
  RETURN
ENDIF


IF TYPE("_Screen.oThermForm.Therm") <> "O"
  DO CreateTherm
ENDIF
LOCAL loThermForm AS FORM
loThermForm = _SCREEN.oThermForm
IF NOT EMPTY(tcLabelText)
  loThermForm.ThermLabel.CAPTION = tcLabelText
ENDIF
IF NOT EMPTY(tcTitleText)
  loThermForm.CAPTION = tcTitleText
ENDIF
IF tnPercent = -1
  loThermForm.Therm.Marquee = .T.
ELSE
  IF loThermForm.Therm.Marquee = .T.
    loThermForm.Therm.Marquee = .F.
  ENDIF
  loThermForm.Therm.VALUE = tnPercent
ENDIF
loThermForm.VISIBLE = .T.

RETURN


PROCEDURE CreateTherm
  LOCAL loForm AS FORM
  loForm = CREATEOBJECT("FORM")
  _SCREEN.oThermForm = loForm
  LOCAL lnBorder, liThermHeight, liThermWidth, liThermTop, liThermLeft
  lnBorder = 7
  WITH loForm AS FORM
    .SCALEMODE = 3 && Pixels
    .HEIGHT = 48
    .HALFHEIGHTCAPTION = .T.
    .WIDTH = 300
    .AUTOCENTER = .T.
    .BORDERSTYLE = 3 && Fixed dialog
    .CONTROLBOX = .F.
    .CLOSABLE = .F.
    .MAXBUTTON = .F.
    .MINBUTTON = .F.
    .MOVABLE = .F.
    .ALWAYSONTOP = .T.
    .ALLOWOUTPUT = .F.

    .NEWOBJECT("Therm","ctl32_progressbar", "PR_ctl32_progressbar.vcx", LOCFILE("FoxyPreviewer.app"))
    .NEWOBJECT("ThermLabel", "Label")

    .ThermLabel.VISIBLE = .T.
    .ThermLabel.FONTBOLD = .T.
    .ThermLabel.TOP = 4
    .ThermLabel.WIDTH = .WIDTH - (lnBorder * 2)
    .ThermLabel.ALIGNMENT = 2 && Center
    liThermHeight = .HEIGHT - (lnBorder * 2) - .ThermLabel.HEIGHT
    liThermWidth = .WIDTH - (lnBorder * 2)
    .VISIBLE = .T.
  ENDWITH
  liThermTop = lnBorder + 20
  liThermLeft = lnBorder
  WITH loForm.Therm
    .TOP = liThermTop
    .LEFT = liThermLeft
    .HEIGHT = liThermHeight
    .WIDTH = liThermWidth
    .MarqueeSpeed = 30
    .MarqueeAnimationSpeed = 30
    .VISIBLE = .T.
    .CAPTION = ""
  ENDWITH
ENDPROC

martes, 12 de abril de 2011

Comprimir en un archivo autoextraible desde VFP

Cordial saludo, para todas aquellas personas que como yo buscamos la forma de comprimir archivos directamente desde VFP y que adicionalmente desea que el archivo empaquetado sea un autoextraibel y si adicionalmente deseas ir actualizando este autoextrible, esta herramienta es una solucion conveniente y que recoge todas tus necesidades.
1. Crea desde el Winrar un archivo autoextraible, configurando lo que desea que haga tu archivo al momento de desempaquetar (ej. nombre de la pantalla, preguntas de aceptacion, forma de escritura o sobreescritura, pantallas de licencia, ruta donde deseas que desempaquete, icono para el archivo, programas antes y despues de la ejecucion, etc.)
Luego de configurar en Winrar el autoextraible presiona el boton "hacer esta configuracion por defecto".
2. Listo ya tienes tu plantilla de archivo autoextraible configurado. Ahora ya puedes utilizar el comando desde el VFP.
3. Copia de la carpeta de Winrar que se encuentra en la carpeta "Archivos de programa" de tu Windows, los archivos rar.exe y default.sfx. Ojo estos dos archivos deben estar en el directorio que por defecto se va a empaquetar.
4. Utiliza desde VFP este comando.
* con este comando actualiza los archivos que fueron enviados de 
* tu plantilla hasta la ultima fecha de la compresion.
run /n7 rar f mipaquete.exe 

* crea un nuevo archivo autoextraible(sfx). con los parametros 
* establecido en la plantilla.
run /n7 rar a -sfx mypaquete  
Estos comandos tienen muchos mas parametros (ej. excluir o adicionar carpetas o archivos, al archivo empaquetado); estos parametros los encuentras en la misma carpeta de Winrar en el archivo rar.txt.
Espero que le des buen uso a esta potentisima herramienta.
William Zuluaga

lunes, 11 de abril de 2011

Nuevo FoxCharts 1.30

Publicado a la‎(s)‎ 14/03/2011 16:03 por Luis Maria Guayan   [ actualizado el 14/03/2011]


Nueva versión de la excelente herramienta gráfica FoxCharts, compartida por Cesar Chalom para toda la comunidad de Visual FoxPro.

Esta nueva versión tiene soporte para gráficos XY con la posibilidad de un segundo eje Y, que se suman a los tipos de gráficos ya soportados (líneas, puntos, barras, tortas, áreas, XY; de 2 y 3 dimensiones).

Pueden descargar la última versión de FoxCharts haciendo clic aquí

domingo, 10 de abril de 2011

Agregar una imagen a Word desde VFP

Artículo de la base de conocimientos de Microsoft de como poder añadir una imagen a un documento Microsoft Word 2003 ó 2007 utilizando Visual FoxPro.
El enlace al artículo original en la Base de Conocimientos de Microsoft es el siguiente:
-- Using Microsoft Visual FoxPro to add images to a Microsoft Word 2003 or 2007 InLineShapes collection --


El siguiente código es el que alli se encuentra publicado, y evita el posible mensaje de error: "OLE Idispatch exception code 0 from Microsoft Word: This is not a valid file name."
PUBLIC oW AS WORD.APPLICATION, ;
  lcBMP AS STRING, liVFPWinState AS INTEGER

*-- Almacena la propiedad _SCREEN.WindowState y minimiza
liVFPWinState = _SCREEN.WINDOWSTATE
_SCREEN.WINDOWSTATE= 1
oW = CREATEOBJECT( 'Word.Application' )

*-- Cambie la ruta del archivo BMP si es necesario
lcBMP = _SAMPLES + '\TASTRADE\BITMAPS\BEVERAGE.BMP'
WITH oW AS WORD.APPLICATION
  .WINDOWSTATE = 1 && wdWindowStateMaximize
  .VISIBLE = 1
  .Documents.ADD
  .APPLICATION.ACTIVATE
  WITH .ActiveDocument.PageSetup AS WORD.PageSetup
    .TopMargin = 12.25
    .BottomMargin = 12.25
    .LeftMargin = 12.25
    .RightMargin = 12.25
  ENDWITH
  .SELECTION.InlineShapes.AddPicture( lcBMP, .F., .T. )
  .SELECTION.EndKey( 6 )
  .SELECTION.MoveLeft( 1, 1, 1 )
  .SELECTION.InlineShapes( 1 ).WIDTH = 190
  .SELECTION.InlineShapes( 1 ).HEIGHT = 210
  .SELECTION.EndKey( 6 )
  .SELECTION.HomeKey( 6 ) && Va al inicio del documento
  =INKEY( 5 ) && Espera 5 segundos
  .QUIT( 0 ) && Sale sin guardar. Parámetro = -1 guarda documento
ENDWITH

*-- Restaura _SCREEN
_SCREEN.WINDOWSTATE = liVFPWinState

viernes, 8 de abril de 2011

FormVista

Descripción: El archivo es un formulario con aspecto Windows Vista, realizado con puro código VFP. Lo considero sencillo de implementar en cualquier aplicación y susceptible de cualquier cambio o mejora.

Versión: 1 | Tamaño del archivo: 108,21 Kb

jueves, 7 de abril de 2011

¿Qué es Visual Foxpro Developer Studio?

Por Jesus Caro V, Hermosillo, Mexico

El tema desde hace unos años es el fututo de FoxPro, desde el anuncio de Microsoft de suspender las futuras versiones, sin una razón técnica o económica, y la consecuente negativa a agregarle herramientas para elaborar sitios Web, del cual suponíamos era el paso más lógico, ya que, entre otras cosas, Visual FoxPro es un muy poderoso ambiente para el manejo de cadenas largas donde se requiere un alto desempeño, esto hace a Visual FoxPro un primer candidato para el desarrollo de aplicaciones Web en las que las cadenas son el mecanismo principal de transporte y mensajería.
Intentos serios existen para hacerlo seguir adelante, al siguiente paso, el primero de ellos, del propio Fox mediante el proyecto Sedna con la librería NET4COM y MY para VFP
La librería NET4COM es una colección de clases COM que envuelven un subconjunto del Framework 2.0 de .NET, utilizado para ambientes de desarrollo como Visual Studio y varios programas de Microsoft que requieren la previa instalación de este para que funcionen además de su más reciente software liberado, correo, mensajería, etc. Este Framework es una rica colección de NameSpaces (un organizador, catalogador o agrupador de funciones que son invocadas mediante un menú al momento de estar desarrollando) y API que proveen funcionalidad a los programadores que las usan para construir aplicaciones que se ejecutan en la plataforma .NET. Mientras VFP tiene una abundante librería de API, hay algunas características que o no existen en sus propias librerías o son más difíciles de utilizar que en el Framework. Las librerías NET4COM y MY le brindan a VFP la funcionalidad que nativamente no tiene.
Otro esfuerzo, al parecer, más enfocado y hasta cierto punto (sin ánimo de sonar grosero, al contrario) descarado, es el de compilar directamente código de VFP a .NET sin dejar de utilizar la herramienta favorita. Un comentario en el foro de Foxsite dice:
"VFP.Net...Puedes enseñarle a un viejo zorro nuevos trucos. La nueva encarnación de Fox, un animal indestructible como tu suegra. Una sesión en el compilador VFP.Net por eTecnologia, una compañía PEQUEÑA que está creando lo que la compañía GRANDE, Microsoft dijo que era imposible." (traducido del ingles)
¿Qué es el VFP Developer Studio?
NET Extender para VFP una herramienta creada por la empresa eTecnologia la cual en términos generales te permite importar todas las funciones del Framework de .NET a VFP y utilizarlas para tus sistemas.
VFPCompiler para .NET es un compilador creado por la misma empresa que exporta el contenido codificado en VFP a ASPX.
Originalmente se integra al VFP agregando un archivo al Startup Program en Options del menú Tools o ejecutando una aplicación que viene con la descarga. Al iniciar VFP se agregan unos menús que nos sirven para agregar la funcionalidad del Framework o compilar para .NET
Por otra parte existe una herramienta llamada SharpDevelop que es un entorno de desarrollo integrado libre para los lenguajes de programación C#, Visual Basic .NET y Boo. Es usado típicamente por aquellos programadores de los citados lenguajes, que no desean o no pueden usar el entorno de desarrollo de Microsoft, el Microsoft Visual Studio.
Esta empresa integra el funcionamiento de VFP a este software que se encuentra en etapa Beta y para poder utilizar Fox en este es necesario comprar la licencia para el uso de NET Extender para VFP y VFPCompiler para .NET. eTecnologia provee un archivo con SharpDevelop habilitado para VFP.
A esta combinación se le llama Visual FoxPro Developer Studio, de esta forma se aprovecha las facilidades del ambiente de desarrollo con la potencia del lenguaje VFP. Estos siguen en desarrollo, hasta marzo del 2009 mas del 90% de comandos y funciones se han integrado, se agregó una ventana de comandos y autocompletar para comandos, funciones y variables.
Puedes accesar a más información y descargas en la página de eTecnologia, si tienes problemas con el idioma puedes traducirla mediante una liga por cortesía de Google en la misma página.
¿Qué no es el VFP Developer Studio?
Acostumbrados a formularios y objetos en visual, aquí se trabaja, por ahora, solo código, no se ha integrado todavía un diseñador de formularios y reportes. Para eso utilizamos la mecánica de desarrollar en VFP y posteriormente cargarlo en VFP Developer Studio para compilarlo.
La codificación no es exactamente igual a como hemos venido practicándola, necesario un cambio de paradigma para muchos de nosotros, hablamos de terminologías propias de Visual Studio y otros lenguajes como namespace, protected, void...
Para conocerlo habrá que descargarlo y probarlo.
Metáfora de Fox y el zorro.
Hablando en el ámbito natural el zorro es considerado por muchos el mamífero más abundante en el planeta, actualmente está representado por unas 27 especies que se encuentran en casi todos los continentes, esto nos habla de la tremenda capacidad de esta especie para adaptarse a los diferentes ambientes y cambios naturales y no naturales, como las campañas de cacería que a sufrido en varios países, de cuales a salido avante. Nos encontramos zorros en lugares calurosos, en fríos extremos, montañas, valles y en los lugares menos imaginables como son las ciudades. Si no hay comida en el lugar en el que se encuentra, se muda, busca y se adapta. Esta capacidad de adaptación es lo que le ha dado su diversidad y preservación. Es considerado un animal muy astuto y es empleado como símbolo de astucia en muchos relatos.
Dentro de esa astucia ha conseguido sobrevivir cambiando sus tácticas y costumbres. Por lo anterior, recordemos que Visual FoxPro no nació siendo Visual, quienes trabajamos con esta herramienta desde que era FoxBase+, hemos podido notar los cambios y adaptaciones que ha tenido que pasar para seguir siendo lo que es. Inició siendo una copia mejorada de dBase, con desempeño superior lo que le valió superarlo y seguir adelante.
A titulo personal.
VFP Developer Studio es un enorme y plausible esfuerzo por integrar la tecnología .NET a VFP y seguramente logrará su cometido. Por ahora recomiendaría descargarlo y probarlo, acostumbrarnos al cambio que nos impone, aunque yo no liberaría ninguna aplicación en este, no todavía, falta resolver algunas cosas, está en etapa beta y una de las cosas bastante sensibles que le falta es una introducción, curso o tutorial simple y llano que explique como incursionar. Corresponde a nosotros aportar notas y observaciones para mejorarlo.
Saludos.

miércoles, 6 de abril de 2011

¿Es el Usuario un Administrador?

Rutina para determinar si el Usuario actual de Windows es Administrador.

#DEFINE NO_ERROR 0
 
DECLARE INTEGER IsUserAnAdmin IN shell32
 
DECLARE INTEGER WNetGetUser IN mpr;
    INTEGER lpName, STRING @lpUserName, INTEGER @lpnLength
 
LOCAL lcUser, lnBufsize
lnBufsize = 250
lcUser = Repli(Chr(0), lnBufsize)
 
IF WNetGetUser(0, @lcUser, @lnBufsize) = NO_ERROR
    ? "Nombre de Usuario:", SUBSTR(lcUser, 1, AT(Chr(0),lcUser)-1)
    ? "Es Administrador:", Iif(IsUserAnAdmin()=0, "No", "Si")
ENDIF

Un reemplazo para FULLPATH()

¿Está tan molesto como yo de que FULLPATH() devuelve la ruta completa de un archivo en mayúsculas? Esto hace un poco difícil, respetar las mayúsculas y minúsculas en un nombre de archivo introducido por el usuario. Afortunadamente, la función GetFullPathName de la API de Windows no cambia las mayúsculas y minúsculas. Aquí hay una pequeña función que recibe un nombre de archivo y devuelve la ruta completa usando la función de la API:
LPARAMETERS tcName
LOCAL lcBuffer1, ;
  lcBuffer2, ;
  lnLen

#DEFINE MAX_PATH 260

DECLARE LONG GetFullPathName IN Win32API ;
  STRING lpFileName, LONG nBufferLength, STRING @lpBuffer, ;
  STRING @lpFilePart

STORE SPACE(MAX_PATH) TO lcBuffer1, lcBuffer2
lnLen = GetFullPathName(tcName, MAX_PATH, @lcBuffer1, @lcBuffer2)
RETURN LEFT(lcBuffer1, lnLen)

Extraer Apellidos Compuestos al 99%

 Extraer apellidos compuestos, si alguien lo mejora me avisa y si le sirve puedo ayudarlos en muchas cosas mas, saludos, si les falla en algo me avisan al correo alcideszuasnabar@hotmail.com

CLEAR
lcnom='' && Nombre
lccom='' && Apellidos Compuestos 
lc = "DE LA CRUZ DE LOS SANTOS PEREZ LUZ EVA"
*lc = "DEL SOLAR VILLANEVA POL MANUEL"
*lc = "LA TORRE VILLANEVA VICTOR MANUEL"
FOR ln=1 TO ALINES(la, lc,1," ")
  IF LEN(ALLTRIM(la(ln))) <= IIF(GetWordCount(ALLTRIM(lc))=ln OR ;
    GetWordCount(ALLTRIM(lc))-1=ln,1,IIF(LEN(ALLTRIM(la(ln)))=2,2,3)) 
    IF LEN(ALLTRIM(la(ln+IIF(ln>2,-1,0))))>=4
      lcnom=''
    ENDIF     
    lcnom=lcnom+' '+la(ln)
    lccom=lcnom
  ELSE
    lcnom= lccom+' '+la(ln)
    lccom=''
    ? lcnom
  ENDIF
ENDFOR

Función GoDay()

Una función definida por el usuario para sumar o restar días a una variable Fecha o Fecha-Hora. Similar a GoMonth(), que sirve para meses.
? GoDay(DATETIME(),365)
? GoDay(DATE(),28)
? GoDay(DATETIME(),-31)

FUNCTION GoDay(tuDate,tnDays)
  LOCAL luRet
  IF VARTYPE(tnDays) # "N"
    tnDays = 0
  ENDIF
  DO CASE
    CASE VARTYPE(tuDate) = "D"
      luRet = tuDate + tnDays
    CASE VARTYPE(tuDate) = "T"
      luRet = tuDate + tnDays * 60 * 60 * 24
    CASE NOT VARTYPE(tuDate) $ "TD"
      *-- Error
      luRet = NULL
  ENDCASE
  RETURN luRet
ENDFUNC

martes, 5 de abril de 2011

El fenómeno de internet en América Latina es un “adolescente

Las nuevas formas de comunicación en la era digital en Latinoamérica han pasado de la infancia a la adolescencia.
LIMA, PERÚ (19/MAR/2011).- El fenómeno de la Internet en América Latina y el cambio del modo de comunicación que conlleva ha dejado atrás la infancia para convertirse en un "pequeño adolescente", aseguró hoy en una entrevista el especialista en las nuevas redes Alberto Arébalos

De este modo, Arébalos defendió que a pesar de los desequilibrios de acceso que aún persisten en la región, el cambio de la comunicación vertical a la horizontal que permite la red de redes ya está instaurado en la región y a la espera de, en los próximos años, "acelerar y profundizar" su impacto.

"Sí hay un desequilibrio (de acceso) entre las capitales de los países y las periferias, pero el fenómeno como tal es muy similar al resto del mundo", aseguró Arébalos, de visita en Lima para la presentación del libro "La revolución horizontal", escrito a cuatro manos junto a Gonzalo Alonso y donde se analizan los cambios provocado por Internet.

La tesis que defiende Arébalos, quien es además Director de Comunicaciones y Asuntos Públicos de Google en la región, se basa en el paso de un mundo donde la información viaja en una sola dirección a otro multidireccional donde las personas no sólo tienen acceso, sino que además generan su propia información a partir de sus opiniones y que también comparten con los demás.

"Eso genera que la comunicación vertical tradicional, que emanaba de un punto, una empresa, una marca o un Gobierno se transforme ahora en un contacto más horizontal", lo que para el experto significa que los actores tradicionalmente acostumbrados a hablar ahora deben aprender a escuchar y ser parte de una conversación.

A pesar del gran cambio, Arébalos no duda de que, ante esta nueva audiencia activa, las empresas y Gobiernos van a lograr adaptarse, tal y como ya lo hicieron antes con, por ejemplo, el paso de la radio a la televisión.

"El final del siglo XX fue la época de la televisión, el siglo XXI es la época de Internet", un nuevo mundo que debe ser visto como una oportunidad para entablar una relación más cercana y personalizada con los clientes, con los usuarios y hasta con los votantes.

Precisamente, el uso de la Red en los procesos electorales (con el paradigma de la elección del presidente norteamericano Barack Obama) ya ha tenido también sus grandes ejemplos latinoamericanos, como el caso del colombiano Antanas Mockus, que en 60 días pasó de una intención de voto del 3% al 24%, lo que le dio el paso a segunda vuelta.

Aunque Arébalos reconoce la importancia que el uso y aprovechamiento de la red tuvo en el crecimiento del exalcalde de Bogotá, también señala este caso como el ejemplo de que el empleo de la Internet en unas elecciones es "condición necesaria pero no suficiente, no va a hacer ganar a nadie una elección".

Los propios Gobiernos de la región han apelado a la Internet como un método para transmitir sus noticias a la población de una forma más directa, como muestra el uso que el Ejecutivo peruano da a su cuenta de Twitter, prime lugar para anunciar desde renuncias de primeros ministros a nombramientos ministeriales.

Arébalos defiende la importancia que el periodismo debe asumir ante esta nueva situación del flujo informativo, convirtiéndose en el encargado de ordenar, discriminar la gran cantidad de noticias que fluyen en la red y dar contexto.

Sin embargo, el experto no cree que esta sobreabundancia informativa lleve a la saturación del receptor, como han señalado algunos estudios.

"Lo que permite internet es dejar a la gente elegir qué es lo que quiere y, si hay mucha información dando vueltas, son los periodistas quienes tienen que hacer su trabajo", opinó.

Internet ya hace tiempo que dejó de ser el futuro para convertirse en el día a día, algo que, según Arébalos, todos en América Latina (desde empresas a Gobiernos) han reconocido.

"Me parece que en general hay una conciencia bastante extendida de la importancia de la Internet para la población", finalizó.

Microsoft denuncia a Google

Microsoft ha presentado una denuncia formal contra Google ante la Comisión Europea. Por primer vez Microsoft ha presentado dicha queja ante autoridades reguladoras sobre las cuestiones de competencia. En la denuncia, Microsoft afirma que el buscador Google practica un "patrón de medidas" que impiden la competencia leal, dando numerosos ejemplos de lo que cree que son actos contrarios a la competencia.

Según los informes existentes, Google lidera más del 90% del mercado de búsquedas en Internet en Europa, muy por delante de rivales como Bing de Microsoft, que está luchando por abrirse camino en la cuota de mercado de Google.

Google todavía no ha respondido a una solicitud enviada por mail para responder u opinar acerca de dicha denuncia.

lunes, 4 de abril de 2011

Manipular Mails de Outlook en Visual FoxPro

Hola, mando este tip, es muy util si quieremos manipular mails de Office Outlook desde Visual FoxPro, ya sea mandarlos o consultarlos; hasta consultar las diferentes badejas.

Primero empezaremos creando nuestro objeto de Outlook:
*--Para crear y mostrar un nuevo mail--
lOutlook = CREATEOBJECT("Outlook.Application") && creamos nuestro objeto de Outlook
lMail = lOutlook.CreateItem(0) && Creamos un nuevo mail
lMail.Display && Mostramos nuestro mail creado.
*-- Para mostrar la bandeja de entrda de outlook desde fox con create object
lOutlook = CREATEOBJECT("Outlook.Application")  && creamos nuestro objeto de Outlook
lNameSpace = loutlook.GetNamespace('MAPI') && instanciamos el namespace de outlook
lNameSpace.GetDefaultFolder(6).Display && Mostramos la bandeja de entrada de outlook
Valores de GetDefaultFolder()
  • 3 - Elementos eliminados
  • 4 - Bandeja de salida
  • 5 - Elementos enviados
  • 6 - Bandeja de Entrada
Podemos enviar a pantalla cualquiera de estas bandejas de outlook solo con cambiar el valor de GetDefaultFolder().
También podemos ver los mensaje de cada una de las bandejas arriba mencionadas.
*-- Ver mensajes de las bandejas de outlook
En este ejemplo mandaremos a pantalla un mail de elementos enviados.
lOutlook = CREATEOBJECT("Outlook.Application")  && creamos nuestro objeto de Outlook
lNameSpace = lOutlook.GetNamespace('MAPI') && instanciamos el namespace de outlook
lMail=lNameSpace.GetDefaultFolder(5).Items.item(1) && Instanciamos nuestro Mail
Var = lMail.Subject && Debemos de manejar dos propiedades del mail
Var2 = lMail.SenderName &&  Antes de mostrarlo para que no muestre un error
lMail.Display && Y lo mostramos sin problema
*-- Comprobar si el mail tiene archivos adjuntos
Tambien se puede manipular los elementos adjuntos del mensaje. Tomando las variables del ejemplo anterior.
TotalAdd = lMail.Attachments.Count && Ponemos en una variable el total de archivos adjuntos
if TotalAdd > 0
  FOR j = 1 TO TotalAdd && Creamos un ciclo para recorrer los elementos adjuntos
    Archivo = lMail.Attachments(j).FileName && Guardamos el nombre del Archivo
    lMail.Attachments(j).SaveAsFile("C:\" + Archivo) && En este ejemplo lo guardamos en C:\
  ENDFOR
ENDIF
*-- Otras opciones para archivos adjuntos
lMail.Attachments(1).Size  && Muestra cuanto pesa el archivo
lMail.Attachments(1).Delete && Para elimiar el archivo
lMensaje.Attachments(1).PathName && Muestra la ruta de donde se jala el archivo

domingo, 3 de abril de 2011

Saber la versión de un Libro de Excel

Con esta función podemos saber la versión con que fue guardado un libro de Excel.

lc = GETFILE("xls*")
? VersionLibroExcel(lc)

FUNCTION VersionLibroExcel(tcFile)
  LOCAL ln, lcFormat, lo
  IF NOT EMPTY(tcFile)
    lo = CREATEOBJECT("Excel.Application")
    lo.Workbooks.OPEN(tcFile)
    ln = lo.ActiveWorkbook.FileFormat
    DO CASE
      CASE ln = 16
        lcFormat = "Excel 2"
      CASE ln = 29
        lcFormat = "Excel 3"
      CASE ln = 33
        lcFormat = "Excel 4"
      CASE ln = 39
        lcFormat = "Excel 5 y 95"
      CASE ln = 43
        lcFormat = "Excel 97-2003 (Guardado desde 2003)"
      CASE ln = 51
        lcFormat = "Excel 2007-2010"
      CASE ln = 56
        lcFormat = "Excel 97-2003 (Guardado desde 2007-2010)"
      CASE ln = -4143
        lcFormat = "Excel 97, 2000, 2002 y 2003"
      OTHERWISE
        lcFormat = "Otro Formato # " + TRANSFORM(ln)
    ENDCASE
    lo.ActiveWorkbook.Close(.F.)
    lo.Quit
    lo = Null
  ELSE
    lcFormat = "No se especifico archivo"
  ENDIF
  RETURN lcFormat
ENDFUNC

lunes, 17 de enero de 2011

Formas de conectarse a un Servidor SQL


                                                      Enviado por caremi66 - Portal FOX

La primera, segun mi experiencia, es la forma mas rapida de conectarse, tambien depende como esten planteando el sistema. Ésta al ser la "mas rapida", puede usarse para que cada vez haga una consulta.
La segunda puede plantearse al iniciar el programa, y las consultas se hacen sobre esa conexion pero no se vuelve a crear por cada consulta
La tercera, igual que la segunda, la ventaja de esta es que no es necesario declarla en ODBC
La primera
***************************
oConn  = createobject('ADODB.Connection')
cConnString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID="+ALLTRIM(lc_usuario_)+";Pwd="+ALLTRIM(lc_password)+";Initial Catalog="+ALLTRIM(lc_nombre)+";Data Source="+ALLTRIM(lc_sname)
oConn.Open(cConnString)
oRS = CREATEOBJECT("ADODB.Recordset")
oRS.ActiveConnection = oConn
oCA=CREATEOBJECT("CursorAdapter")
oCA.DataSourceType = "ADO"
oCA.DataSource = oRS
oCA.MapBinary = .T.
oCA.MapVarchar = .T.
oCA.SelectCmd = "select * from empleados"  && ejemplo
IF !oCA.CursorFill()
  LOCAL laError
  DIMENSION laError[1]
  AERROR(laError)
  MESSAGEBOX(laError[2])
ELSE
  ********** lo "capturo" en un cursor para manipularlo en modo local
  loAlias=ALIAS()
  cMacro1="SELECT * FROM "+loAlias+" INTO CURSOR "+ loCursor +" readwrite"
  &cMacro1
  WAIT windows "Procesado "+loCursor NOWAIT
ENDIF 
*****************************************************************
La segunda, Atravez de ODBC
lc_sql=SQLCONNECT("localdb","simio","fantasiA") && localdb tiene que estar creado en odbc solapa usuarios
if m.lc_con < 0
  nopc=MESSAGEBOX("No se pudo conectar , talvez ODBC no este configurado",0+48,"Error")
  RETURN .f.
endif 
****************************************
La tercera, conectar usando los drivers de ODBC (no es necesario crear una conexion en ODBC)
lcStringConn="Driver={SQL Server}"+";Server="+lc_IPSQL+";Database="+lc_nombre+";Uid="+lc_usuario_+";Pwd="+lc_password
***Evitar que aparezca  la ventana de login 
SQLSETPROP(0,"DispLogin",3)
SQLSETPROP(0,"IdleTimeout",0)
lc_con=SQLSTRINGCONNECT(lcStringConn)
if m.lc_con < 0  &&  nose pudo conectar
  wait windows "no conecta"
endif 
****************************************