• Domingo 22 de Diciembre de 2024, 14:42

Mostrar Mensajes

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 ... 4 5 [6] 7 8 ... 43
126
Visual Basic 6.0 e inferiores / Re: Porque???
« en: Jueves 13 de Enero de 2005, 09:20 »
Tienes toda la razón tron. Sólo tenía en la cabeza indicarle a kev como compactar una db sin usar referencias a DAO y me olvidara del caso concreto, pero como este tema tiene tanto tiempo y lo que quedó pendiente fué el tema de cómo compactar... pos eso.

Chao.

127
Visual Basic 6.0 e inferiores / Re: Procesos Paralelos
« en: Jueves 13 de Enero de 2005, 09:16 »
Hola José.

Es normal que esto que comentas ocurra. Hay una sola hebra para realizar las acciones del bucle en command1 y el resto de eventos que generes, y mientras se hace una cosa, no se hace la otra.

Crea otro ejecutable que realice las acciones de command1, al usar shell en OpenProcess estarás usando una nueva hebra del procesador. Esto lo he utilizado en varios proyectos (casi siempre con procesos que copian gran cantidad de archivos, importan datos y cosas por el estilo) y funciona sin mayor problema.

Con lo que sí que te puedes encontrar es que te tengas que plantear el diseño de la aplicación de otra forma (así por las buenas no podrías mostrar los resultados de la ejecución del subproceso en un form del programa principal... tendrías que pensar en arreglar la situación mediante paso de parámetros, punteros, etc.).
A lo mejor realizar estos cambios te supone dar la vuelta a media aplicación y no estás dispuesto, pero vb cojea de las dos piernas en lo que se refiere a uso de threads.

Chao.

128
Visual Basic 6.0 e inferiores / Re: Porque???
« en: Miércoles 12 de Enero de 2005, 09:38 »
Lo malo de lo que dices, cpmario, es que...  ¡ ELIMINAS LOS DATOS DE LA BD !
y estoy seguro que poca gente deseará tal cosa.

Chao.

129
Visual Basic 6.0 e inferiores / Re: Respaldos
« en: Miércoles 12 de Enero de 2005, 09:36 »
Hola TasQuin.

Si quieres respaldar toda la base de datos, usa FileCopy para copiar el archivo de base de datos.

Si el respaldo lo quieres hacer de una tabla dentro de la bd, usa una sentencia sql del estilo
Código: Text
  1.  
  2. SELECT TablaDatos.* INTO TablaBackUp FROM TablaDatos
  3.  
  4.  
En la práctica esto te creará la tabla TablaBackUp con los datos que selecciones de TablaDatos.

Suerte.

130
Visual Basic 6.0 e inferiores / Re: Importar De Excel A Access
« en: Miércoles 12 de Enero de 2005, 09:31 »
Hola.

Si quieres realizar la exportación desde access ve al menú 'Archivo' elige 'Obtener datos externos...'>'Importar'. Elige como tipo de archivo xls, abre el archivo y sigue los pasos del asistente. También puedes crear una macro eligiendo como acción 'TransferirHojaCálculo'.

Si la importación la quieres hacer desde vb, puedes crear una instancia de access.application y usar el objeto DoCmd para realizar las mismas acciones que haría el macro mediante el método TransferSpreadSheet.

También podrías hacer esto a pedales creando una conexión a la bd, abriendo mediante automatización la hoja de cálculo y leyendo de un sitio e insertando en el otro.

Suerte.

132
Visual Basic 6.0 e inferiores / Re: Control Ocx
« en: Martes 11 de Enero de 2005, 18:13 »
Hola ebolo.

Disculpas, ahora que lo dices me doy cuenta: Width y Height dan las medidas según el valor de ScaleMode excepto para objetos Form, Printer y Screen, que dan las dimensiones siempre en twips.

En cuanto a lo de access, ten en cuenta que una vez que seleccionas el ocx no te aparece en el cuadro con el resto de los controles es como si ya lo tuvieses seleccionado. Directamente ve a un formulario y pon el control.

Chao.

133
Visual Basic 6.0 e inferiores / Re: Problemas Con Tabla De Datos
« en: Martes 11 de Enero de 2005, 17:53 »
Sin entrar en consideraciones de lo que hace el código que posteas (casi mejor que no) te diría que ordenes tu el recorset mediante la correspondiente cláusula ORDER BY.

Citar

RAN = (Text7.Text + 273.15) * 1.8

SearchCriteria = "TEMPERATURA> '" + SearchCriteria + "'"

Es que no pude aguantar...  Este tipo de concatenaciones son la bomba. Te recomiendo usar + como operador y & como carácter para concatenar strings. Otra cosa, ¿el campo TEMPERATURA es un string? Esto me hace pensar otra cosa: ¿no dirás que los registros están desordenados porque te aparecen en una secuencia de este estilo?:
1
10
11
2
3
4
40
5
51
6

Adeus.

134
Visual Basic 6.0 e inferiores / Re: Procesos Paralelos
« en: Martes 11 de Enero de 2005, 17:40 »
Tronco, pero ¿has leido aunque sea por encima lo que necesita José...?

135
Visual Basic 6.0 e inferiores / Re: Control Ocx
« en: Martes 11 de Enero de 2005, 17:36 »
Hola.

Podrías usar ScaleWidth o ScaleHeight o realizar tu mismo las conversiones. With y Height siempre te van a dar las dimensiones en twips, ScaleWidth y ScaleHeight te dan el valor según la escala que utilices.

Con respecto a lo de usar los ocx en access, la cosa si no recuerdo mal iba más o menos así:
Ve al menú 'Herramientas' y selecciona 'Controles ActiveX...' te debe aparecer una menú desplegable con todos los ocx registrados en tu sistema. Selecciona el que te interese y ya puedes ir al formulario y colocar el control. Así de sencillo.

Suerte.

136
Visual Basic 6.0 e inferiores / Re: Porque???
« en: Martes 11 de Enero de 2005, 17:27 »
Hola Kev.

Ha pasado tiempo, pero hoy viendo un antiguo proyecto me acordé del tema este. Aquí tienes código para compactar una base de datos sin usar DAO.

Código: Text
  1.  
  2.     Dim je As Object
  3.     Set je = CreateObject("JRO.JetEngine")
  4.     je.CompactDatabase "Data Source=C:\Ruta\DbOrg.mdb" _
  5.     & ";Data Source=c:\Ruta\DbDest.mdb;"
  6.  
  7.  

Suerte.

137
Visual Basic 6.0 e inferiores / Re: Procesos Paralelos
« en: Martes 11 de Enero de 2005, 16:05 »
Hola.

Crea otro ejecutable distinto, un subprograma, vamos, que realice esa labor que tarda tanto. Llámalo desde la aplicación principal de una forma similar a esta:

Código: Text
  1.  
  2. Option Explicit
  3.  
  4. Private Const STILL_ACTIVE = &H103
  5. Private Const PROCESS_QUERY_INFORMATION = &H400
  6.  
  7. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
  8.  
  9. Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
  10.  
  11. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  12.  
  13. Private Sub ExecProceso(Byval ExeFileName As String)
  14.  
  15.     On Error GoTo Err_Exec
  16.    
  17.     Dim lPId As Long, lRc As Long
  18.     lPId = OpenProcess(PROCESS_QUERY_INFORMATION _
  19.     , False, Shell(ExeFileName, vbNormalFocus))
  20.     Do
  21.         GetExitCodeProcess lPId, lRc
  22.         Sleep 100
  23.         DoEvents
  24.     Loop While lRc = STILL_ACTIVE
  25.    
  26.     MsgBox "Proceso finalizado"
  27.    
  28.     Exit Sub
  29.    
  30. Err_Exec:
  31.     MsgBox "Fallo sometiendo proceso '" & ExeFile & "'." & String(2, vbCrLf) _
  32.     & "(" & Err.Number & ") " & Err.Description, vbCritical, "Ejecutar"
  33.  
  34. End Sub
  35.  
  36.  

Abur.

138
Visual Basic 6.0 e inferiores / Re: Problemas De Instalacion
« en: Martes 11 de Enero de 2005, 15:56 »
Hola Yovana.

No sé como llevarás el tema, pero por si te sirve de algo...

CreateProcess es una función del api de windows que sirve para crear un thread con un nuevo proceso. Por alguna razón este thread no se puede crear.

No sé por qué me da que tus problemas los obtienes instalando en un Xp edición pro... y me huele a problemas de seguridad, pero no sé, no sé, la verdad es que soy un ignorante de la vida del xp. Lo único que conozco son los quebraderos de cabeza que da a más de uno.

Chao.

139
Visual Basic 6.0 e inferiores / Re: Mantener Ventanas Dentro Del Mismo Programa
« en: Martes 11 de Enero de 2005, 15:46 »
Hola Desarrollo.

Para establecer un formulario como 'hijo' de un MDI debes establecer en tiempo de diseño su propiedad MdiChild = True
(para poderlo hacer en tiempo de ejecución habría que intentar usar la función api ChildWindow).

Chao.

140
Visual Basic 6.0 e inferiores / Re: Cancelar Búsqueda Sql
« en: Martes 11 de Enero de 2005, 15:40 »
Hola.

Eliza da en el clavo.

Declara una variable booleana y listo.

Al pulsar el botón la pones = TRUE.

Antes de iniciar el bucle para rellenar el grid la pones = FALSE.
En el medio del bucle pregunta por el valor de la variable, si es TRUE, sal del bucle. Eso sí: para que esto funcione es indispensable que en algun lugar del bucle coloques una instrucción DoEvents que permita que se procesen los eventos en cola (de otra forma tu aplicación no se enteraría de la pulsación del botón hasta que salieras del bucle).

Esquemáticamente:

Código: Text
  1.  
  2. Private bCancel As Boolean
  3.  
  4. Private Sub Command1_Click()
  5.    bCancel = True
  6. End Sub
  7.  
  8. Private Sub Metodo()
  9.    
  10.    bCancel = False
  11.  
  12.    Do While condicion
  13.     .
  14.     .
  15.     .
  16.     DoEvents
  17.     If bCancel Then Exit Do
  18.     .
  19.     .
  20.     .
  21.    loop
  22.  
  23. End Sub
  24.  
  25.  

Debéis de tener en cuenta que introducir en el bucle la instrucción Doevents + una comparación implica penalizar el rendimiento, por lo que puede ser buena idea introducir un contador para realizar la comprobación cada X iteraciones del bucle.

Chao.

141
Visual Basic 6.0 e inferiores / Re: Control Ocx
« en: Martes 11 de Enero de 2005, 15:32 »
Hola ebolo.

Puedes utilizar el objeto extender, pero si no me equivoco, haciéndo esto estás añadiendo propiedades a tu control que probablemente no uses para nada.

Puedes conocer el ancho y alto de un control desde el mismo control de esta forma:
Código: Text
  1.  
  2. UserControl.Width
  3. UserControl.Height
  4.  
  5.  

Y lo mismo con otras propiedades y métodos.

Suerte.

142
Visual Basic 6.0 e inferiores / Re: Cargar Datos En Un Msflexgrid1
« en: Martes 11 de Enero de 2005, 15:28 »
Hola.

Rellenar un flexgrid con los registros de un recordset es algo que debe de hacerse 'a pedal' recorriendo el recordset y rellenando las correspondientes filas/columnas con sus respectivos valores.

Por ejemplo, resumiendo:
Código: Text
  1.  
  2. Public Sub EncherGrid(Byref flx1 as MsFlexGrid, Byref rs1 As Recordset)
  3.  
  4.     If flx1 is nothing or rs1 is nothing then exit sub
  5.  
  6.     flx1.Clear
  7.     flx1.Row = 0
  8.     flx1.Col = 0
  9.  
  10.     rs1.MoveFirst
  11.  
  12.     Dim lRow As Long, lCol As Long
  13.  
  14.     flx1.Cols = rs1.Fields.Count + 1
  15.     flx1.Rows = rs1.RecordCount + 1
  16.  
  17.     For lCol = 1 To flx1.Cols - 1
  18.         flx1.TextMatrix(0, lCol) = rs1.Fields(l1).Name
  19.     Next lng1
  20.    
  21.     Do Until rs1.EOF
  22.         lRow = lRow + 1
  23.         flx1.TextMatrix(lRow, 0) = lRow
  24.         For lCol = 1 To flx1.Cols - 1
  25.             flx1.TextMatrix(lRow, lCol) = rs1.Fields(lCol - 1).Value
  26.         Next lCol
  27.         rs1.MoveNext
  28.     Loop
  29. End Sub
  30.  
  31.  

Espero que os sirva.

Chao.

143
Visual Basic 6.0 e inferiores / Re: [peticion] Asignar Valores A Propiedades
« en: Martes 11 de Enero de 2005, 15:13 »
Hola wakowarner.

Así por las buenas se me ocurre que puedes definir en tu control VSG la propiedad WELDER como si de una matriz se tratase. Suponiendo, por ejemplo que el tipo de WELDER fuese long, en el control:

Código: Text
  1.  
  2. Private lWelder(20)  As Long
  3.  
  4. Public Property Let Welder(Byval Index As Integer, Byval Valor As Long)
  5.    If Index >= 0 and Index < 20 Then lWelder(Index) = Valor
  6. End Property
  7.  
  8. Public Property Get Welder(Byval Index As Integer) As Long
  9.    If Index >= 0 and Index < 20 Then Welder = lWelder(Index)
  10. End Property
  11.  
  12.  

Y ya luego, algo así:
Código: Text
  1.  
  2.    if Left(TAG, 6) = "Welder" Then  _
  3.    VSG(j).Welder(Val(Mid(TAG, 7))) = itemValue
  4.  
  5.  

Espero que te sirva.

Chao.

144
Visual Basic 6.0 e inferiores / Re: Agregar Datos Desde Una Tabla A Otra
« en: Miércoles 5 de Enero de 2005, 12:17 »
Hola Fernando.

Con una sentencia de ese estilo crearás en la bd especificada (C:\Ruta\OtraBd.mdb) una tabla llamada TablaDestino que tendrá la estructura y los datos correspondientes a lo seleccionado en la TablaOrigen de la bd en la que ejecutas la sentencia.
En caso de existir la tabla destino, también podrías usar INSERT INTO con sintaxis similar.

Con lo de abrir dos conexiones quiero decir precisamente eso: una conexión a una base de datos y otra conexión a la otra. A partir de ahí seleccionas en una lo que te hace falta y 'grabas' en la otra. Así de simple.

Suerte.

145
Visual Basic 6.0 e inferiores / Re: Formato De Columna En Un Datagrid
« en: Miércoles 5 de Enero de 2005, 12:09 »
Pos no sé a qué se debe... es una pena, pero a mi me funciona mu bien.

Suerte.

146
Sobre los Foros de SoloCodigo / Re: Bandera Al Costado Del Nombre Del Usuario
« en: Miércoles 5 de Enero de 2005, 12:07 »
Para mi, LAS BANDERAS SON TRAPOS DE COLORES.

Si te digo que mi pais es Galicia, tú me dirás: ahh... que eres español. Y yo te diré que eso pone mi dni, pero que mi pais es Galicia y que españa es un estado no un país. Aún así quede claro que no soy ningún patriota nacionalista.

Por eso opino que es mejor dejar estos temas de lado, para no entrar en polémicas patrioto-penosas y dedicarse a la temática propia del foro.

Suerte.

147
Visual Basic 6.0 e inferiores / Re: Agregar Datos Desde Una Tabla A Otra
« en: Martes 4 de Enero de 2005, 15:34 »
Hola Fernando_P.

No me leí con mucho detalle tu problema, pero por lo que he visto, básicamente podrías usar una sentencia para crear la tabla de este estilo:

Código: Text
  1.  
  2. SELECT TablaOrigen.* INTO TablaDestino IN 'C:\Ruta\OtraBd.mdb' FROM TablaOrigen WHERE TablaOrigen.Tal = 'Lo que sea'
  3.  
  4.  

Otra opción es abrir la otra bd mediante otra conexión y leer de un lado y escribir en otro.

A ver si las sugerencias te valen.

Chao.

148
Visual Basic 6.0 e inferiores / Re: Consultas
« en: Martes 4 de Enero de 2005, 15:25 »
Hola Radical.

Yo creo que...

1- Con el sufijo $ (o #, !, &, ..) concretas el tipo de datos devuelto por la función o incluso el tipo de dato de un valor constante, por ejemplo: x = 132& asigna a x 4 bytes (tipo long en vb) con el valor 123. Y en la práctica dirás tú, ¿cuál es la diferencia?. Pos no sé, pero tu prueba a a hacer esto: If Command = "" y luego me cuentas (Lo correcto sería If Command$ = ""). Desde luego en vb no hay muchos problemas de casts de los que ocuparse, pero si usas funciones de otros lenguajes de más bajo nivel (el api de windows, por ejemplo) el tema puede ser importante.

2- Pos no te sé que dicir... yo lo veo con un ejemplo: en windows el GDI es la parte del sistema operativo que se ocupa de operaciones gráficas. Creo que se podría decir que el gdi es un api por si mismo, en el sentido de que proporciona funciones, tipos y demás (una interface) para realizar un conjunto de funciones especificas. A su vez, windows proporciona otro conjunto de apis para ocuparse de temas como la impresión, mensajería, comunicaciones, etc. Todas estas son apis dentro del api de windows. Supongo que los tiros van por ahí: una forma de organizar las distintas apis.

3- En vb el uso que se hace de punteros a alto nivel es inexistente (excepto en el caso de argumentos ByRef, pero eso va luego) De hecho las funciones vb que devuelven direcciones de variables o funciones (varptr, AddressOf, lngPtr, etc) parece que están escondidas a propósito. Sin embargo te vuelvo a decir lo del punto 1. En llamadas funciones externas, en el caso de la subclasificación, incluso usando funciones de winapi como timer, es indispensable el uso de punteros, tanto a variables como a funciones.
Para aprender cosas sobre punteros creo que lo mejor es que te olvides de vb y le eches un vistazo a algunos manuales de C, donde el uso de punteros es un plato fuerte.

4- ByVal y ByRef sirven para indicar la forma en la que se pasa un parámetro a un método o función.
Byval pasa el argumento 'por valor' es decir, es como si el método al que llamas creara una copia de la variable que le estás pasando. Los cambios que se hagan en el método al valor de la variable no se verán reflejados en variable pasada a la función.
Por ejemplo para este código:
Código: Text
  1.  
  2. 'Esto no tiene mucho sentido...
  3. Private Sub A ()
  4.     Dim i as integer
  5.     i = 100
  6.     Sumar10 i
  7.     MsgBox i
  8. End Sub
  9.  
  10. Private Sub Sumar10(Byval Numero As integer)
  11.    Numero = Numero + 10
  12. End Sub
  13.  
  14.  
El valor de i al final seguiría siendo 100

ByRef pasa el argumento por referencia, es decir, se pasa a la función o método llamado la dirección de la variable (el puntero) que se le pasa. Los cambios que se hagan el la función afectarán al valor de la variable original (ya que realmente se trabaja de verdad con ella).
Fíjate ahora en esto:
Código: Text
  1.  
  2. Private Sub A ()
  3.     Dim i as integer
  4.     i = 100
  5.     Sumar10 i
  6.     MsgBox i
  7. End Sub
  8.  
  9. Private Sub Sumar10(ByRef Numero As integer)
  10.    Numero = Numero + 10
  11. End Sub
  12.  
  13.  
El valor de i sería 110.

Aparte de la posible afección del valor de la variable original, en vb, este paso de argumentos por valor o por referencia es transparente para el usuario.

Güeno, espero haberme explicado más o menos.

Abur.

149
Visual Basic 6.0 e inferiores / Re: Formato De Columna En Un Datagrid
« en: Martes 4 de Enero de 2005, 08:22 »
Hola.

Ve a las propiedades del datagrid pinchando sobre él con el botón derecho. Selecciona la pestaña Formato. Elige la columna correspondiente al campo booleano en cuestión. Selecciona como formato Booleano. Ahora asigna el texto que quieres que aparezca según el valor Verdadero/Falso/Nulo.

Suerte.

150
Visual Basic 6.0 e inferiores / Re: Objeto En Tiempo De Ejecucion
« en: Martes 4 de Enero de 2005, 08:12 »
Citar
En tiempo de diseño añade un solo CommandButton. Establece su propiedad Index = 0

El error lo obtienes porque el CommandButton no forma parte de una matriz de controles. Establece la propiedad Index del control a 0 y verás.

Chao.

Páginas: 1 ... 4 5 [6] 7 8 ... 43