|
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
« 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
« 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
« 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
« 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 SELECT TablaDatos.* INTO TablaBackUp FROM TablaDatos
En la práctica esto te creará la tabla TablaBackUp con los datos que selecciones de TablaDatos. Suerte.
130
« 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.
131
« en: Miércoles 12 de Enero de 2005, 09:24 »
132
« 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
« 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. 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
« en: Martes 11 de Enero de 2005, 17:40 »
Tronco, pero ¿has leido aunque sea por encima lo que necesita José...?
135
« 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
« 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. Dim je As Object Set je = CreateObject("JRO.JetEngine") je.CompactDatabase "Data Source=C:\Ruta\DbOrg.mdb" _ & ";Data Source=c:\Ruta\DbDest.mdb;"
Suerte.
137
« 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: Option Explicit Private Const STILL_ACTIVE = &H103 Private Const PROCESS_QUERY_INFORMATION = &H400 Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Sub ExecProceso(Byval ExeFileName As String) On Error GoTo Err_Exec Dim lPId As Long, lRc As Long lPId = OpenProcess(PROCESS_QUERY_INFORMATION _ , False, Shell(ExeFileName, vbNormalFocus)) Do GetExitCodeProcess lPId, lRc Sleep 100 DoEvents Loop While lRc = STILL_ACTIVE MsgBox "Proceso finalizado" Exit Sub Err_Exec: MsgBox "Fallo sometiendo proceso '" & ExeFile & "'." & String(2, vbCrLf) _ & "(" & Err.Number & ") " & Err.Description, vbCritical, "Ejecutar" End Sub
Abur.
138
« 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
« 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
« 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: Private bCancel As Boolean Private Sub Command1_Click() bCancel = True End Sub Private Sub Metodo() bCancel = False Do While condicion . . . DoEvents If bCancel Then Exit Do . . . loop End Sub
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
« 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: UserControl.Width UserControl.Height
Y lo mismo con otras propiedades y métodos. Suerte.
142
« 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: Public Sub EncherGrid(Byref flx1 as MsFlexGrid, Byref rs1 As Recordset) If flx1 is nothing or rs1 is nothing then exit sub flx1.Clear flx1.Row = 0 flx1.Col = 0 rs1.MoveFirst Dim lRow As Long, lCol As Long flx1.Cols = rs1.Fields.Count + 1 flx1.Rows = rs1.RecordCount + 1 For lCol = 1 To flx1.Cols - 1 flx1.TextMatrix(0, lCol) = rs1.Fields(l1).Name Next lng1 Do Until rs1.EOF lRow = lRow + 1 flx1.TextMatrix(lRow, 0) = lRow For lCol = 1 To flx1.Cols - 1 flx1.TextMatrix(lRow, lCol) = rs1.Fields(lCol - 1).Value Next lCol rs1.MoveNext Loop End Sub
Espero que os sirva. Chao.
143
« 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: Private lWelder(20) As Long Public Property Let Welder(Byval Index As Integer, Byval Valor As Long) If Index >= 0 and Index < 20 Then lWelder(Index) = Valor End Property Public Property Get Welder(Byval Index As Integer) As Long If Index >= 0 and Index < 20 Then Welder = lWelder(Index) End Property
Y ya luego, algo así: if Left(TAG, 6) = "Welder" Then _ VSG(j).Welder(Val(Mid(TAG, 7))) = itemValue
Espero que te sirva. Chao.
144
« 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
« 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
« 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
« 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: SELECT TablaOrigen.* INTO TablaDestino IN 'C:\Ruta\OtraBd.mdb' FROM TablaOrigen WHERE TablaOrigen.Tal = 'Lo que sea'
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
« 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: 'Esto no tiene mucho sentido... Private Sub A () Dim i as integer i = 100 Sumar10 i MsgBox i End Sub Private Sub Sumar10(Byval Numero As integer) Numero = Numero + 10 End Sub
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: Private Sub A () Dim i as integer i = 100 Sumar10 i MsgBox i End Sub Private Sub Sumar10(ByRef Numero As integer) Numero = Numero + 10 End Sub
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
« 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
« en: Martes 4 de Enero de 2005, 08:12 »
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
|
|
|