|
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 - Brroz
Páginas: 1 ... 13 14 [15] 16 17 ... 43
351
« en: Jueves 20 de Mayo de 2004, 15:09 »
Dim strSQL as string strSQL = "INSERT INTO tabla (campo1,campo2) " _ & "VALUES( '" & replace(variableTexto,"'","''") & "' , " & variableNum & ")"
Remplazar cada comilla simple ' por dos comillas simples ''. Abur.
352
« en: Jueves 20 de Mayo de 2004, 15:05 »
Hola. Para asociar una determinada extensión con una aplicación determinada, podéis echarle un ojo a http://foros.solocodigo.com/index.php?showtopic=6041. Según el ejemplo, tenéis que tener en cuenta que la aplicación debe estar preparada para recibir como parámetro el nombre de archivo en cuestión. Acerca de lo que jomace pretende, creo que la solución es ingenua: cambiarle la extensión al archivo en cuestión poco puede protejer (tal vez despistar un poco sí) el archivo de un uso indeseado. El ejecutable vb comprobaría la contraseña y a continuación abriría el archivo con la aplicación adecuada. El fallo es evidente, basta con saltarse la llamada al pgm vb cambiando la extensión por la correspondiente y abriédolo con la correspondiente aplicación. La forma más sencilla que veo para hacer lo que pretendes es cambiando la estructura de los archivos en cuestión: Crear un nuevo archivo con, por ejemplo, determinada estructura de encabezamiento en el que se incluya de alguna forma la clave, a partir de un determinado offset grabar el contenido del archivo original y finalizar el archivo con algún otro dato. Cuando quieras reproducir/visualizar el archivo, el programa comprobaría los datos y contraseña del encabezado, grabaría en un archivo temporal los datos del archivo original y reproduciría este último archivo. Esta método también es completamente inseguro, pero por lo menos la cosa se complica un poco más (requiere un mínimo de manipulación del archivo). La solución final de reproducir el original con su correspondiente aplicación es un poco marrullera... desde luego lo ideal sería que la aplicación que reproduzca el contenido fuese la que hiciste en vb, pero eso es mucho nivel (crear tus propios formatos de archivos de imagen u otras historias, compresiones, quebraderos de cabeza varios...) aparte de poco operativo con un lenguaje con las características de vb. En fin... tu mismo. Suerte.
353
« en: Lunes 17 de Mayo de 2004, 10:53 »
¡¡¡¡¡¡¡¡???????!!!!!!!! Private Sub cmd_general_Click() Metodo DataReport1 End Sub Private Sub cmd_OtroBoton_Click() Metodo DataReport2 End Sub Private Sub cmd_yOtro_Click() Metodo DataReport2 End Sub Private Sub Metodo(Byval DtaRpt As DataReport) If DtaRpt is Nothing Then exit Sub Load DataEnvironment1 Load DtaRpt DtaRpt.Show vbModal Unload DtaRpt Unload DataEnvironment1 End Sub
Abur.
354
« en: Lunes 17 de Mayo de 2004, 10:46 »
Hola Fernando P. Supongo que te refieres al manejo y supervisión de errores... Así por encima, ten en cuenta estas cosas: En un método, mediante la instrucción On Error ... indicarás cúal es la opción a tomar en caso de que se produzca un error y con Resume ... estableces el punto donde continuará la ejecución del código. Mediante el objeto Err puedes obtener información del error que se ha producido. La primera de las instrucciones (On Error) seguida de una instrucción GOTO etiqueta indica que en caso de producirse un error la ejecución del código continuará en la etiqueta (o número de línea) indicada. Es en esta etiqueta donde introduces el código necesario según el tratamiento que le quieres dar al error. Mediante las propiedades del objeto Err Number y Description conocerás el número de error producido y el texto del mismo. Cada vez que utilizas On Error, indicas la forma de controlar los errores. Con Resume, una vez que has identificado el error y actuado en consecuencia, puedes que hacer que el flujo del programa se dirija a donde tú quieras: utilizando Resume Next haces que la ejecución continúe en la siguiente instrucción; utilizando Resume Etiqueta, haces que la ejecución continúe en la etiqueta especificada. Normalmente Cada Error necesita un Resume antes de que pueda producirse el siguiente, y no puede haber un Resume sin Error, sin embargo es posible no utilizar Resume si el tratamiento del error está al final del método, es decir antes de End Sub o End Function. Se puede utilizar la instrucción On Error de la forma On Error Resume Next, que en la práctica no detendrá la ejecución del código y continuará con la siguiente instrucción. Deberás ser cuidadoso, pues esto puede producir resultados inesperados en la ejecución del programa, o puede causar que entre en algún bucle del que no puede salir provocando que el programa se cuelgue. Analiza el ejemplo. Private Sub HacerCosas() On Error Resume Next Kill "C:\Ruta\Fichero.ext" 'De esta forma si no exitese 'el archivo el pgm no casca 'y continua. Dim intCanal As Integer On Error Goto Err_1 intCanal = Freefile Open "C:\Ruta\UnArchivo" For Input As intCanal . . . Close intCanal On Error Goto Err_2 intCanal = Freefile Open "C:\Ruta\OtroArchivo" For Input As intCanal . . . Exit_HacerCosas: On Error Resume Next 'Si no pongo esto aquí y el canal 'no estuviese abierto se producirá 'un error que provocará un embu- 'clamiento al volver a esta etiqueta Close intCanal Exit Sub 'Para no entrar en el código de control de 'errores y se produzca un 'Resume sin error. Err_1: MsgBox "Fallo con el archivo 1" Resume Exit_HacerCosas: Err_2: MsgBox "Fallo con el archivo 1" Resume Exit_HacerCosas: End Sub
Espero que esto sea lo que necesitas, porque después de tanta escritura ya tengo peladas las yemas de los dedos. Abur.
355
« en: Lunes 17 de Mayo de 2004, 10:18 »
356
« en: Sábado 15 de Mayo de 2004, 09:07 »
Hola dantrax. Me refiero a que utilices una estrutura de datos y funciones para realizar operaciones con esas estructuras. Fíjate en el código: Option Explicit Public operando1 As Fraccion Public operando2 As Fraccion Public resultado As Fraccion Public Type Fraccion Numerador As Double Denominador As Double End Type Public Sub Simplificar() Dim intPrimos(5) As Integer, int1 As Integer Dim ind1 As Boolean intPrimos(0) = 2 intPrimos(1) = 3 intPrimos(2) = 5 intPrimos(3) = 7 intPrimos(4) = 11 'Se recibe la entrada sin simplificar de operando1 'y se devuelve simplificada en resultado. resultado = operando1 ind1 = True Do While ind1 ind1 = False For int1 = 0 To 4 If resultado.Numerador Mod intPrimos(int1) = 0 _ And resultado.Denominador Mod intPrimos(int1) = 0 Then resultado.Numerador = resultado.Numerador / intPrimos(int1) resultado.Denominador = resultado.Denominador / intPrimos(int1) ind1 = True End If Next int1 Loop End Sub Public Sub Sumar(Optional ByVal Simp As Boolean) Dim den As Double den = operando1.Denominador * operando2.Denominador operando1.Numerador = operando1.Numerador * operando2.Denominador operando2.Numerador = operando2.Numerador * operando1.Denominador operando1.Denominador = den operando2.Denominador = den If Not Simp Then resultado.Numerador = operando1.Numerador + operando2.Numerador resultado.Denominador = den Else operando1.Numerador = operando1.Numerador + operando2.Numerador Simplificar End If End Sub Public Sub Restar(Optional ByVal Simp As Boolean) Dim den As Double den = operando1.Denominador * operando2.Denominador operando1.Numerador = operando1.Numerador * operando2.Denominador operando2.Numerador = operando2.Numerador * operando1.Denominador operando1.Denominador = den operando2.Denominador = den If Not Simp Then resultado.Numerador = operando1.Numerador - operando2.Numerador resultado.Denominador = den Else operando1.Numerador = operando1.Numerador - operando2.Numerador Simplificar End If End Sub Public Sub Multiplicar(Optional ByVal Simp As Boolean) If Not Simp Then resultado.Numerador = operando1.Numerador * operando2.Numerador resultado.Denominador = operando1.Denominador * operando2.Denominador Else operando1.Numerador = operando1.Numerador * operando2.Numerador operando1.Denominador = operando1.Denominador * operando2.Denominador Simplificar End If End Sub Public Sub Dividir(Optional ByVal Simp As Boolean) If Not Simp Then resultado.Numerador = operando1.Numerador * operando2.Denominador resultado.Denominador = operando1.Denominador * operando2.Numerador Else operando1.Numerador = operando1.Numerador * operando2.Denominador operando1.Denominador = operando1.Denominador * operando2.Numerador Simplificar End If End Sub
Suerte.
357
« en: Sábado 15 de Mayo de 2004, 08:35 »
Hola.
Abre la ventana de propiedades del DataGrid y en la pestaña 'General' marca las casillas AllowAddNew y AllowAddUpdate (sobre todo).
Suerte.
358
« en: Sábado 15 de Mayo de 2004, 08:32 »
Hola Fernando_P. Échale un vistazo a este tema http://foros.solocodigo.com/index.php?showtopic=4339 al final del mismo tienes un ejemplo de función para abrir un cuadro de diálogo para guardar un archivo. El ejemplo se puede utilizar para un diálogo para abrir cambiando la fn api GetSaveFileName por [/b]GetOpenFilename[/b]. También podrías usar un control CommonDialog pero a mi no me va mucho... Suerte.
359
« en: Sábado 15 de Mayo de 2004, 08:28 »
Hola carlosm.
No comprendo muy bien a qué te refieres.
Puedes considerar cada uno de los campos de una tabla como una variable con determinado valor para cada uno de los registros...
Abur.
360
« en: Sábado 15 de Mayo de 2004, 08:16 »
Hola Kev.
Round redondea 'hacia abajo', es decir 14,85 lo redondeará como 14,8 y 14,86 como 14,9.
Puedes utilizar la función Format: Format(14.85, "#,##0.0") devolverá 14,9
Imagino que ya lo has tenido en cuenta... el redondeo puede ser causa frecuente de errores en el importe total de por ejemplo una factura: en el caso de los euros, cada línea de factura debe calcularse multiplicando la cantidad por el precio redondeado con 3 decimales (en algunos casos a más) y el importe del total de la factura es la suma del importe de cada una de las líneas redondeada a 2.
Suerte.
361
« en: Miércoles 12 de Mayo de 2004, 15:40 »
Qué pasa malagueño.
Veo que sigues dale que te pego... Échale un ojo al adjunto.
Chao.
362
« en: Miércoles 12 de Mayo de 2004, 14:49 »
Hola mcrex.
Pues no sé a que se puede deber esa diferencia (aunque supongo que la diferencia la marca el funcionamiento del grid con el número de filas que carga). De todas formas 150.000 registros de una tabla a mostrar en un grid es un poco para masocas: a ver quién es el usuario que lo maneja...
Lamento no poder ser de más ayuda. Chao.
363
« en: Miércoles 12 de Mayo de 2004, 14:42 »
Ok. Entonces para futuras ocasiones y para las pasadas hay que tener en cuenta que si abres un tema y lo dejas sin cerrar se debe a que la/s soluciones que la basca te aporta no te funcionan. Uno más en ese grupo.
Abur.
365
« en: Miércoles 12 de Mayo de 2004, 12:47 »
Hola tiquinho. Supongo que te habrás dado cuenta de los gazapos que tiene el código (cosa de hacer las cosas con prisas y al vuelo). Para que quede más claro y no dé lugar a confusión, aquí lo escribo de nuevo. Me alegra que la solución te sea útil. Option Explicit Private miOcx As Object Private Sub Form_Load On Error Goto Err_Form_Load Set miOcx = Me.Controls.Add("Proyecto.ClaseMiOcx", "NombreDeControl") miOcx.Visible = True miOcx.PropiedadX = "algún valor..." ' . ' . ' . Exit Sub Err_Form_Load If Err.Number = 999 Then 'Ahora mismo no sé el nº de error, pero se sabe enseguida provocándolo... Msgbox "No cuentas con la funcionalidad de tal ocx..." Else MsgBox "(" & Err.Number & ") " & Err.Description Unload Me End If End Sub Private Sub Form_Unload(Cancel As Integer) Set miOcx = Nothing End Sub
Chao.
366
« en: Martes 11 de Mayo de 2004, 18:29 »
Hola. Entonces veo dos posibles soluciones, aunque ninguna de las dos acaba de gustarme mucho: 1- Crea dos formularios 'principales' uno con el ocx y otro sin él. Aplica el código de antes pero desde una sub 'Main' que debe ser el inicio de la aplicación. Esta solución es redundante pero efectiva 100%. 2- Puedes intentar añadir dinámicamente el control ocx, pero con unas consideraciones... Fíjate en este código para un formulario: añade un CommandButton en tiempo de ejecución. Option Explicit Private WithEvents cmd1 As CommandButton Private Sub Form_Load Set cmd1 = Me.Controls.Add("VB.CommandButton", "cmd1") cmd1.Visible = True cmd1.Caption = "púlsame" End Sub Private Sub Form_Unload(Cancel As Integer) Set cmd1 = Nothing End Sub Private Sub cmd1_Click() MsgBox "Me pulsaste" End Sub
Podrías hacer lo mismo sustituyendo el tipo CommandButton por el de tu ocx, pero si el ocx no existe, el programa casca en la declaración de la variable cmd1, con lo que estás en la misma de antes: sólo puedes interceptar este error desde un método que llame al formulario. Una posible solución a esto podría ser declarar la variable como 'Object' e interceptar el posible error en el evento Load del form. Esta solución sería ideal si no fuera porque no podrás interceptar los eventos del control (una variable 'Object' no se puede declarar 'WithEvents'), sin embargo, si sólo utilizas ciertos métodos del control y no te importan los eventos que puede generar el ocx, estás de suerte, este es la forma que mejor se adapta a tus necesidades... El código quedaría algo asi: Option Explicit Private miOcx As ClaseMiOcx Private Sub Form_Load On Error Goto Err_Form_Load Set miOcx = Me.Controls.Add("Proyecto.ClaseMiOcx", "NombreDeControl") miOcx.Visible = True miOcx.PropiedadX = "algún valor..." Err_Form_Load If Err.Number = 999 Then 'Ahora mismo no sé el nº de error, pero se sabe enseguida provocándolo... Msgbox "No cuentas con la funcionalidad de tal ocx..." Else MsgBox "(" & Err.Number & ") " & Err.Description Unload Me End If End Sub Private Sub Form_Unload(Cancel As Integer) Set miOcx = Nothing End Sub
Luego claro está, en el código deberías habilitar o no ciertas opciones, controlar si la variable miOcx = Nothing y cosas por el estilo A ver si esto te ayuda algo más. Suerte.
367
« en: Martes 11 de Mayo de 2004, 15:24 »
Hola tiquinho. Si es posible que no exista un ocx que usas en un formulario determinado, y no deseas instalar tu ese ocx, debes supervisar el error que se producirá en el momento en que intentes abrir ese formulario (si no me equivoco un error 339). Algo así: Supongamos que este es el formulario principal desde el que intentas abrir el formulario con el ocx en cuestión (llamémosle Form2, por ejemplo). Supongamos pues que Form2 se abre al pulsar un botón de Form1. Imaginemos también que para el caso de que no exista el ocx, en vez de un formulario Form2, abriremos un formulario Form3 con otra historia... Private Sub Command1_Click() On Error Goto Err_Command1_Click Dim frmX As Form, ind1 As Boolean Set frmX = New Form2 frmX.Show Goto Exit_Command1_Click Open_Form3: Set frmX = New Form3 FormX.Show Exit_Command1_Click: Set frmX = Nothing Exit Sub Err_Command1_Click: If Err.Number = 339 And Not ind1 Then ind1 = True Resume Open_Form3 Else MsgBox "(" & Err.Number & ") " & Err.Description, vbCritical, "Command1" Resume Exit_Command1_Click End If End Sub
Cuando decía eso de "Cuando instales la aplicación..." se me estaba yendo un poco la olla y estaba en la situación de que tú instalabas la aplicación mediante un programilla de factura propia .Realmente es algo muy sencillo, no sé porque a veces hay tantas historias con los instaladores... obtener el archivo de dependencias con el empaquetador de vb e identificar los archivos que realmente hacen falta (y esto si es que ya no lo sabemos de antemano) y hacer un pequeño programa que cree directorios, copie archivos, registre componentes, etc. Espero que el ejemplo de ahora sí te sea de ayuda. Suerte.
368
« en: Lunes 10 de Mayo de 2004, 18:14 »
Hola dantrax.
Podrías crear una estructura de datos para esas fracciones, de forma que almacenes por un lado el numerador y por otro el denominador. Crea una cuantas funciones para realizar las operaciones básicas con este tipo de datos y otra más para simplificar. El único problema lo encontrarás probablemente si intentas usar como un parámetro una variable de este tipo, pero eso lo puedes solucionar creando un componente o usando un par de variables públicas a nivel de módulo.
Suerte.
369
« en: Lunes 10 de Mayo de 2004, 18:01 »
Hola.
El tema de las distintas plataformas no debe preocuparte (¿o acaso cuando envias un email conoces siempre el equipo del destinatario? y sin embargo los mensajes llegan, que para eso están los protocolos).
Empieza por enviar los correos sin más... luego ya comprobarás que los mensajes llegan.
Podrías utilizar controles MAPI (MapiSession y MapiMessage), las funciones del api MAPI32, si dispones de Outlook objetos de sus librerías, o incluso si no quieres adjuntar archivos, el poco ortodoxo 'Mailto: ... ' mediante ShellExecute. En este mismo foro podrás encontrar ejemplos de como enviar correos.
Suerte.
370
« en: Lunes 10 de Mayo de 2004, 17:56 »
Hola.
Si tienes instanciado un objeto Excel.Application, utiliza su método Quit y listo.
Suerte.
371
« en: Lunes 10 de Mayo de 2004, 17:52 »
Hola tiquinho. Puedes hacer algo como lo que te cuento: Cuando instales la aplicación, comprueba si existen previamente en el path donde vas a instalar los ocx que necesitas. Si están presentes, desregístralos y renombralos si los quieres conservar. Copia tu versión de ocx con la aplicación. Registra los ocx y listo. Para registrar/desregistrar los componentes usa algo así: Registrar Shell "Regsvr32 /S C:\Ruta\Archivo.ocx"
Desregistrar Shell "Regsvr32 /U /S C:\Ruta\Archivo.ocx"
El modificador /S sirve para registrar de forma silenciosa, es decir, sin que salga el típico mensaje de aviso. Suerte.
372
« en: Lunes 10 de Mayo de 2004, 17:46 »
Hola juez.
No comprendo muy bien lo que pretendes, pero haz lo siguiente:
Graba una nueva macro con las acciones que pretendes realizar. Ve al editor de Vb y busca en un módulo el código que corresponde a la macro que acabas de grabar, y ahí tienes el código que necesitas.
Suerte.
373
« en: Lunes 10 de Mayo de 2004, 17:43 »
Hola ebolo.
No conozco la causa del error, pero sí me sorprende el texto que muestra. Veo que usas DAO... tal vez te convendría (si no te supone mucho curro, claro) usar ADO con un proveedor OleDb Microsoft jet 4.0 para utilizar bases de datos access 2000.
Suerte.
374
« en: Lunes 10 de Mayo de 2004, 17:34 »
Hola erikmiguel. Básicamente podrías necesitar un control DriveListBox otro DirListBox y otro FileListBox para gestionar el sistema de archivos (Tal vez podrías optar por usar un diálogo 'Abrir archivo' con un control CommonDialog o con la api GetOpenFileName). Para abrir un archivo con la aplicación cuya extensión tenga asociada, debes usar la función api ShellExecute. Por ejemplo: Option Explicit Private Const SW_SHOW = 5 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub Ejecutar() ShellExecute 0&, "Open", "C:\Ruta\Archivo.doc", "", "", SW_SHOW End Sub
En cuanto a lo de buscar archivos, puedes usar la instrucción de VB Dir o usar las apis FindFirstFile, FindNextFile y FindClose que al fin y al cabo, usadas conjuntamente realizan la misma función que Dir. Para copiar archivos: FileCopy. Para borrarlos: Kill. Suerte.
375
« en: Lunes 10 de Mayo de 2004, 17:24 »
Hola mcrex.
Cuando dices que tarda mucho... ¿cuánto es para ti mucho?, sobre todo considerando estas supuestas cosas:
- Nº de registros de la/s tabla/s que intervienen.
- Campos indexados (enlazando con un reciente tema...).
- Ubicación de la base de datos (local, en un equipo servidor...).
- Sentencia SQL utilizada (si el origen de datos es una SQL, claro).
Chao.
Páginas: 1 ... 13 14 [15] 16 17 ... 43
|
|
|