|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - Juanolo
176
« en: Lunes 10 de Mayo de 2004, 22:14 »
Para eliminar el problema de la media noche:
Antes de verificar si se cumple la diferencia de 7 segundos:
if Diferencia > 24h then Diferencia = Diferencia - 24h end if
El valor de 24h dependerá de si estás usando minutos, segundos, milisegundos...
177
« en: Lunes 10 de Mayo de 2004, 17:32 »
Gracias Brroz. No sabes cuánto!
Ahora me tiro más confiado.
178
« en: Lunes 10 de Mayo de 2004, 16:29 »
Gracias Elmango80. La verdad es que este fin de semana he estado practicando duro con Ado, ayudado por la información que he bajado de este foro más que por la de Visual. Como decía, he estado dándole duro y ya no me suena tan extraño eso de las Esecueles (je,je). Sólo me parece molesto que habiendo tanto método refresh y requery tengamos que hacer chapucerías para que un datagrid se actualice como corresponde; al menos esa es la impresión que me llevo revisndo el foro. Aún me queda la inquietud, por cierto, y lo planteo como tema, de saber cuál es el método más eficiente. He estado leyendo al respecto y me parece entender que las consultas SQL Sí utilizan los índices que he creado en Acces. Me gustaría tener la seguridad. Gracias otra vez.
179
« en: Viernes 7 de Mayo de 2004, 23:25 »
En principio, se me viene a la mente la función Isnumeric(). If Isnumeric(text1.text) then 'Es Numero else 'Es Texto end if
Independientemente, claro está, de que primero valides que haya algo en el cuadro de texto.
Debes considerar, además, la posibilidad de usar un control Maskedbox en lugar de un cuadro de texto. Así te asegurarías de que el usuario sólo pueda ingresar números (entre otras condiciones que le puedes dar)
Espero sirva.
180
« en: Jueves 6 de Mayo de 2004, 22:25 »
Gallagher: Creo que fuimos un poco simultáneos. Al momento que aclarabas tu problema yo estaba colocando un nuevo post. Cuéntame por favor si pudiste solucionar el problema. (El mío está justo arriba, a las 6:32. Tu aclaración a las 6:33) Sl2.
181
« en: Jueves 6 de Mayo de 2004, 19:32 »
Perdón: A causa de tu otra consulta, estoy sospechando que le quieres dar formato a las celdas desde Visual. En ese caso sería:
ExL.Worksheets("Hoja1").Range("B3:B11").NumberFormat = "@"
Este ejemplo deja en formato de texto las celdas desde la B3 a la B11.
(ExL es un objeto Excel, se entiende)
182
« en: Jueves 6 de Mayo de 2004, 19:07 »
Si estás en Excel (creo que es el caso): En el menú 'Formato' - 'Celdas', elije la pestaña 'Número' y selecciona 'Texto'.
Salu2.
183
« en: Jueves 6 de Mayo de 2004, 19:02 »
Más abajo en esta misma página: Tema "Excel y Visual"
Hay un código de ejemplo que me funcionó de maravillas.
184
« en: Jueves 6 de Mayo de 2004, 16:06 »
Amigos del Foro. Hace muy poco tengo Visual 6.0 y me estoy cambiando de Dao a Ado (estoy readecuando las neuronas), y hay inquietudes que por más que intento solucionar con la ayuda de Visual... En fin!
Pregunta sencilla: Con Dao, la forma más eficiente y rápida de buscar un registro y leer su contenido era utilizar un índice de la tabla (uso Acces) y el método .Seek. ¿Podría alguien decirme, por favor, el equivalente de este comando en Ado?
Estoy maravillado con el DataEnvironment, pero no me convenzo que para buscar un registro (Un cliente de acuerdo a su ID, por ejemplo) deba utilizar una Sql y el Where. ¿Hay alguna forma de dirigirse a un registro determinado utilizando un índice o su equivalente?
Estoy desesperado por un empujoncito, pues tengo muchas ganas de aprender y me freno en dudas como esta.
Salu2, y gracias de antemano.
185
« en: Jueves 6 de Mayo de 2004, 15:53 »
Otro Voto para el Inno SetUp.
Cuando uno ya se familiariza un poco, descubre características tales como: - Puedes modificar las imágenes. - Traducir el texto para que se presente en Español. - Agregar una clave a la Instalación. - Si no sabes bien qué archivos debes Instalar, trae en la ayuda una guía para traducir los archivos de dependencias creados con el empaquetador de Visual. Así como también la información de cuáles archivos pueden crear problemas en otras máquinas y por lo tanto no deberían ser incluídos en el paquete. - Por último, es muy fácil crear parches para tus aplicaciones. Si lees el tutorial, verás que basta con desactivar las líneas donde están aquellos archivos que no necesitas modificar.
Realmente muy bueno.
186
« en: Lunes 3 de Mayo de 2004, 18:01 »
La instrucción va al abrir la base de datos, así:
Set BaseGen = OpenDatabase(BaseDeDatos, False, 0, PwdBase)
donde: BaseGen es una variable de tipo Database BaseDeDatos contiene la cadena con la ruta de la base a Abrir y PwdBase contiene la cadena con la Password de la base de datos.
Salu2.
187
« en: Lunes 3 de Mayo de 2004, 17:15 »
ACLARACION: QUICE DECIR DAO A ADO.
Amigos del Foro: Primero agradecer, ya que he revisado las discusiones acerca del DataEnvironment y me he alumbrado bastante. Destaco la exposición de Chiaravel al respecto, aunque las imágenes no se me mostraban y eso retarda mi entendimiento. Agradezco de corazón pues las ayudas de Visual 6 no están muy amigables. Segundo aclarar que me cambié hace poco a VB6, y antes hacía todo con DAO... Ni siquiera ODBC. Me quedan algunas dudas: (bastantes en realidad) - Me costó mucho aprender (en DAO) a utilizar los índices, lo que mejoró increíblemente la velocidad de mis aplicaciones (imaginen que antes usaba findfirst). ¿Cómo uso eso en Dataenvironment? ¿Están obsoletos los índices? - Ya no existe Edit? - Estuve probando con el .AddNew (al menos una palabra conocida), pero noté que tardaba un poco en actualizarce el registro. Tenía un antiguo control Data conectado a una tabla; luego de agregar un registro a la tabla, utilizaba un botón que hacía un Refresh al control data. Pero esta orden sólo mostraba el nuevo registro si clickaba el botón después de un par de segundos.
En fin. Eso por ahora me ayudaría bastante. Mi idea es seguir investigando y estas pequeñas guías me harán más fácil el camino.
Gracias de nuevo.
188
« en: Sábado 1 de Mayo de 2004, 01:43 »
Creo entender que lo que necesitas es lograr una apariencia similar a los formularios de ayuda, en los que una lista se va desplazando a medida y de acuerdo a lo que escribes. Si es así, revisa esta dirección en la página del Guille: http://www.mundoprogramacion.com/vb/VB_TIP1.HTM#vb008En ella hay un ejemplo muy interesante. Además, en la página principal, sección VB6..Trucos, encontrarás el código para que un ComboBox adquiera un comportamiento similar. Espero que te sirva al menos de guía. Salu2.
189
« en: Jueves 29 de Abril de 2004, 02:25 »
Hola amigos del foro. Soy un entusiasta aficionado de la programación y hasta ahora nada ma había hecho dejar el fiel VB5. He decidido que ha llegado la hora de cambiar a VB6. Me ha entusiasmado la idea del Dataenvironment y la posibilidad de generar reportes en forma más sencilla, además de otras mejoras que me imagino iré descubriendo. Temor: Después de mucho ensayar, había logrado configurar un empaquetador (InnoSetup) para distribuir mis aplicaciones de VB5 -por algún motivo el que viene con Visual siempre me dio problemas-. Quienes tengan experiencia con este tipo de empaquetadores, podrían por favor anexar tips a esta discusión, con aquellos secretillos que no están muy bien documentados y que yo debería saber? Por ejemplo:
- Con dolor descubrí (con VB5) que al distribuir la librería COMCAT con la aplicación (cosa que el empaquetador de Visual hacía por defecto), los equipos con Windows 95 quedaban sin la posibilidad de utilizar Acces.
Sobretodo me interesa las diferencias que deberé asumir ahora que utilizaré VB6, con su ADO, Dataenvironment, Datareport, etc... Espero haber sido claro y no estar dando la lata. Gracias de antemano.
Salu2.
190
« en: Miércoles 28 de Abril de 2004, 01:50 »
Siendo tan sólo un aficionado entusiasta, siento un poco de vergüenza al opinar en este tema, pues la mayoría de lo que se ha discutido no lo entiendo. De hecho, no conozco Windows NT. Sin embargo, hace un tiempo me ocurrió algo que podría servir: Necesitaba copiar desde la red un lote de archivos DBF, algunos de los cuales estaban siendo utilizados por un antiguo programa en Clipper. Pues bien, cuando hacía la operación desde el viejo MS-DOS no tenía problemas. Al intentar hacerlo con la instrucción FileCopy de Visual, se caía el sistema cuando se topaba con un archivo en uso. Podía manejar el error pasando a la instrucción siguiente, pero el archivo quedaba sin ser copiado. (Perdón por la lata... Pero ya voy) Descubrí la función api: Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
La llamé así: CopyFile oRiginal, nUevo, 0
Y los problemas se acabaron. Espero sirva. Salu2.
191
« en: Miércoles 28 de Abril de 2004, 01:31 »
Brroz sabe la respuesta a tu pregunta. La dió un par de mensajes más arriba y me pareció muy interesante. Salu2.
192
« en: Martes 27 de Abril de 2004, 17:00 »
Está casi todo dicho, pero me permito darte un pequeño consejo: En lugar de declarar: SET Mibasedatos = Workspaces(0).Opendatabase ("C:\Mis Documentos\pedidos.mdb") reemplaza la cadena por una variable. Por ejemplo, podrías declarar la variable global MiBase. Luego, al iniciar la aplicación cargas la variable: MiBase="C:\Mis Documentos\pedidos.mdb" Luego la instrucción sería: SET Mibasedatos = Workspaces(0).Opendatabase (MiBase) Así cuando cambies la ubicación, basta con que cambies la cadena que cargas en la variable, no debiendo tocar el resto del código. Una posibilidad un tanto más avanzada, es que des al usuario la posibilidad de indicar la dirección y guardar esta información en un archivo INI (por ejemplo), y cargarla desde ahí cuando sea necesario. Espero te sirva. Salu2.
193
« en: Viernes 9 de Enero de 2004, 20:54 »
Hola Sonia: La verdad es que no tengo tiempo de resumir el código que enviaste, pero te puedo ayudar un poco en lo que me parece es el problema principal. Específicamente, veo que has creado muchos controles text, por lo que debes manejar toneladas de código. Lo ideal es que tengas una matriz. Esto consiste en una serie de controles con el mismo nombre, pero con una propiedad INDEX distinta para cada uno. La forma más fácil de hacerlo es crear el primero, luego eliges copiar y pegar; automáticamente Visual te preguntará si quieres crear una matriz de controles... le dices que sí, y ya está. Por ejemplo, si tienes un control text, te creará text(0) (el original), text(1), text(2)... etc. Luego, debes acostumbrarte a que cambia un poco el código, pues ya no basta dirigir el código al nombre del control, sino que además deberás indicarle el índice. Ejemplo:
Antes: text.setfocus Ahora: text(2).setfocus
La ventaja, te puedes ahorrar toneladas de código. Usando tu ejemplo:
Private Sub text_lostfocus(Index as integer) if index>=17 and index <=30 then Text(Index).Text = FormatNumber(Val(Text(Index).Text), 2, 0, 0, 0) endif End Sub
Estas lineas de código cambian el formato para todos los cuadros de texto cuyos indices estén entre 17 y 30.
Salu2.
194
« en: Viernes 9 de Enero de 2004, 20:34 »
Pues bien: Trataré de interpretar la pregunta (validar fecha) de la siguiente forma. Supongamos que lo que quieres es VALIDAR que el contenido de text1 sea efectivamente una fecha. Si es así, desglosará la fecha en día, mes y año, enviando cada valor a distintos cuadros de texto. Si no es fecha, enviar mensaje de error. Vamos:
if isdate(text1) then text2=day(text1) text3=month(text1) text4=year(text1) else msgbox "El valor introducido no es una fecha válida endif
Espero te sirva. Salu2.
195
« en: Jueves 8 de Enero de 2004, 23:44 »
Básicamente es lo que te respondieron en La Web del Programador. Tienes que poner la base en un pc que esté accesible a todos los pc que ocuparán la aplicación (generalmente es un servidor). Luego le indicas a tu aplicación la dirección del archivo mdb. - En general el funcionamiento es igual a cómo lo haría una aplicación monousuario, pero debes informarte un poco en las ayudas respecto al bloqueo de registros. Por ejemplo, deberás prever los casos en que dos usuarios quieran modificar un registro al mismo tiempo. - Otro aspecto que no se trata en las ayudas pero que puede dar problemas, es cuando utilizas tablas de paso para preparar un informe o para una selección temporal de registros. Si usas tablas de paso, necesitarás que cada usuario tenga la suya independiente del resto para evitar conflictos. Yo lo hago instalando una base de datos local que maneja todas estas selecciones temporales, de forma que los usuarios no se atropellen. - Por último, hay procedimientos que requieren que no haya más usuarios conectados (comprimir la base de datos, por ejemplo), y que te darán un error interceptable si intentas ejecutarlos en una base mientras otro usuario la tiene abierta. Espero te sirvan los consejos. Por lo pronto, comienza por poner la base en un servidor e indicar la dirección a tu aplicación. Lo demás irá saliendo solo. Salu2.
196
« en: Lunes 5 de Enero de 2004, 13:31 »
Gracias!, lo probaré. Aunque ya pude configurar la impresora, sigue el tema de la velocidad. Y creo que esa forma de imprimir es la más rápida. Gracias otra vez. Salu2.
197
« en: Viernes 2 de Enero de 2004, 20:34 »
Debería funcionar algo así:
Dim X As Printer For Each X In Printers combo1.additem X.DeviceName Next
Salu2.
198
« en: Miércoles 31 de Diciembre de 2003, 22:04 »
dim BaseDeDatos as string BaseDeDatos= "Base.mdb"
'COMPACTAR
DBEngine.CompactDatabase BaseDeDatos, App.Path & "\Nueva.mdb", dbLangSpanish 'Compacto en otra base de datos (base de paso)
DoEvents Kill BaseDeDatos 'Elimino base original
FileCopy App.Path & "\Nueva.mdb", BaseDeDatos 'Copio base de paso con nombre anterior Kill App.Path & "\Nueva.mdb" 'Elimino base de paso
'REPARAR
DBEngine.RepairDatabase BaseDeDatos
Salu2 y felices fiestas!
199
« en: Miércoles 31 de Diciembre de 2003, 20:06 »
Pues lo espero. Gracias! Y felices Fiestas!
200
« en: Martes 30 de Diciembre de 2003, 22:53 »
He bajado algunos ejemplos de código de la red, pero en algunos de ellos, al ejecutarlos, me aparece un mensaje indicando que el proyecto contiene una 'clave retained no válida'. Selecciono continuar, pero el proyecto no realiza la función que se supone cumpliría. ¿Alguien me puede orientar? Salu2
|
|
|