|
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 ... 18 19 [20] 21 22 ... 43
476
« en: Miércoles 24 de Marzo de 2004, 17:25 »
Hola Marc.
Prueba estableciendo la conexión del data únicamente de lectura. Si no puedes, no permitas escribir directamente sobre el combo: supervisa el evento KeyPress y ve informando una variable String con el valor de las pulsaciones de las teclas, establece KeyAscii = 0 de cada vez y busca la coincidencia en el combo mediante la variable, no mediante el valor del combo.
No sé si me he explicado muy bien. No probé esta solución que te doy, pero estoy seguro de que tiene que funcionar sin mayores problemas.
Suerte.
477
« en: Miércoles 24 de Marzo de 2004, 17:18 »
Hola pacegar.
No lo conozco, pero tengo oido hablar muy bien de un control llamado TrueDbGrid, lo que pasa es que creo que es de pago...
Yo suelo utilizar FlexGrid y en caso de tener que presentar un número muy alto de registros implemento un buffering o sencillamente los voy cargando poco a poco, habilito un botón para que sea el usuario quien decida si quiere cargar más registros. Me temo que en tu caso esto no sería solución adecuada porque quieres realizar ordenaciones sobre el total de los registros, pero tal vez te de una idea. Por otro lado ¿a que usuario le puede interesar visualizar 10000 registros ordenados así o asá? La respuesta es: ¡a un usuario demente! Probablemente fuera mucho más práctico exportar la selección a una hoja de cálculo.
En fin... Suerte.
478
« en: Miércoles 24 de Marzo de 2004, 17:11 »
Hola DaniDuran.
Prueba a postear en el foro de .NET ... De todas formas, en mi ignorancia y atrevimiento, te sugeriría que utilices Java para tu aplicación cliente...
Suerte.
479
« en: Miércoles 24 de Marzo de 2004, 17:07 »
Hola Fernando P. 1- Comprueba si existe la carpeta. En caso negativo creala. Algo así: Private Sub ChkCrtFlr (Byval Flr As String) On Error Goto FlrNoExiste If (GetAttr(Flr) And 16) = 16 Then exit Sub FlrNoExiste: MkDir Flr End Sub
2- Abre el archivo al comienzo del proceso de entrada de datos del usuario. (OPEN carpeta_y_nombrearchivo FOR OUTPUT AS #numerocanal) 3- Almacena la entrada de datos del usuario en una variable string con el formateo que te interese, cuando el usuario confirme, graba los datos en una nueva línea del archivo (PRINT #numerocanal, variable). 4- Cierra el archivo al final del proceso (CLOSE #numerocanal). Por otro lado, para insertar gráficos puedes hacer lo siguiente: 1- Usa un control MsChart. 2- Cúrratelo tú a base de PictureBox, maña e imaginación. Con esto, creo que puedes arreglar. Suerte.
480
« en: Miércoles 24 de Marzo de 2004, 16:55 »
Hola roxii.
Comprueba las propiedades de escala del contenedor de la grilla, a ver si es algo de eso...
Chao.
481
« en: Lunes 22 de Marzo de 2004, 16:09 »
Hola.
Estoy comenzando con java: no me juzguéis duramente si digo alguna tontería, pero... ¿no se podría utilizar una clase con variables de miembro declaradas static?
Chao.
482
« en: Miércoles 17 de Marzo de 2004, 09:11 »
Hola Gandalf_malaga7.
Si usas DAO, deberás obtener el recordset usando la función OpenRecordset de un objeto DataBase. Si ya estás usando DAO, deberías saberlo, ejecuta la consulta como el resto de tus consultas...
Bueno, fíjate en lo que dice QliX=D!, que tiene más razón que un santo, con todo esto tienes más que suficiente para montar la aplicación... el resto ponlo tú de tu parte, y no te acostumbres a que alguien haga las cosas por ti, porque al final no se aprende nada y puede que acabes pagando muchas facturas...
Suerte.
483
« en: Martes 16 de Marzo de 2004, 17:52 »
Hola Gandalf_malaga7. De la primera función 'BuscarCadenaEnArchivo' olvídate, ya que al final quedamos en que no la íbamos a utilizar para nada. Resumiendo, las funciones/métodos que harán falta serán: 1- ProcesarTxtTomando como parámetro de entrada un archivo de texto, devuelve un valor string que contiene números y letras mayúsculas hayados en ese archivo de texto. 2- ExtraerGrupos4NumerosToma como entrada el string devuelto de la función anterior, y establece una matriz cuyos elementos son los posibles grupos de cuatro números que se encontraron en el string de entrada. Aparte de estos dos métodos, es necesario un cuerpo principal del programa que los llame, efectúe la consulta a la base de datos, etc. En los ejemplos el código para este método considerabamos que se encontraba alojado en el evento Click de un CommandButton. Podría quedar algo así: Private Sub Command1_Click() On Error Resume Next Dim strOCR As String strOCR = ProcesarTxt("C:\Prueba3.txt") Dim int4Numeros() As Integer ExtraerGrupos4Numeros strOCR, int4Numeros 'Aquí presupongo que tienes definidas la correspondiente 'conexión y comandos a la base de datos. Considero para 'el ejemplo que cmd1 es un objeto Command válido... dim rsMatriculas As Recordset, strSQL As String strSQL = "SELECT * FROM TablaMatriculas WHERE Matricula LIKE " dim lng1 as long For lng1 = 1 to ubound(int4Numeros) cmd1.CommandText = strSQL & "'%" & int4Numeros(lng1) & "%'" set rsMatriculas=cmd1.Execute() If rs.RecordCount > 0 Then rs.Matriculas.MoveFirst Do until rsMatriculas.EOF If Instr(1,strOCR,rsMatriculas.Fields("Matricula").value)) > 0 Then Exit Do rsMatriculas.MoveNext Loop If not rsMatriculas.EOF Then MsgBox "La matrícula es " & rsMatriculas.Fields("Matricula").value Exit For End If Next lng1 If not rsMatriculas is Nothing Then If rsMatriculas.EOF Then _ MsgBox "La matrícula no se ha encontrado en la db" Else MsgBox "La matrícula no se ha encontrado en la db" End If . . . End Sub
Bueno, creo que esto es todo, el resto (¡si es que queda resto!) intenta ponerlo tú de tu parte. Si tienes problemas con la conexión y consulta a la bd, en este mismo foro hay multitud de ejemplos que te pueden servir: utiliza la herramienta de búsqueda. Chao.
484
« en: Martes 16 de Marzo de 2004, 15:28 »
Hola Gandalf_malaga7. Lo que dices es posible, pero no necesario. Creo que no me expliqué suficientemente bien: Si la búsqueda en la bd, selecciona dos registros, estás de enhorabuena, busca la matrícula completa que tendrás en cada registro en la cadena con las letras y los números, con toda probabilidad, sólo una coincidirá... Siguiendo con los ejemplos, supon que str1 contiene la cadena de letras y números, rsMatriculas es el recordset con los registros que has seleccionado y el campo "Matricula" es el campo del recordset que contiene las matriculas en tu bd. . . . rs.Matriculas.MoveFirst Do until rsMatriculas.EOF If Instr(1,str1,rsMatriculas.Fields("Matricula").value)) > 0 Then Exit Do rsMatriculas.MoveNext Loop If not rsMatriculas.EOF Then MsgBox "La matrícula es " & rsMatriculas.Fields("Matricula").value Else MsgBox "La matrícula no se ha encontrado en la db" End If
Espero que ahora haya quedado más claro. Abur.
485
« en: Martes 16 de Marzo de 2004, 15:00 »
Hola MindEye.
La función UBound devuelve el índice superior para una dimensión de una matriz. LBound devuelve el índice inferior. Si intentas utilizar cualquiera de estas funciones con una matriz que no está dimensionada, obtendrás un error.
Abur.
487
« en: Martes 16 de Marzo de 2004, 14:53 »
Hola Kev. Nunca he necesitado hacer una cosa así... sé que la idea es factible, el colega javirues así me lo dió a entender: http://foros.solocodigo.com/index.php?showtopic=4549 , pero nunca he probado a poner en práctica esta idea. Si tengo tiempo y puedo, voy a intentar probar algo. De lo que saque en limpio, te cuento. Suerte.
488
« en: Martes 16 de Marzo de 2004, 11:36 »
Hola. Con 'LlamadaAFunciónSoloNumeros' me refiero a una nueva función que realice un nuevo filtro sobre la anterior que te envié. En este ejemplo, el método recibirá como entrada el resultado de la función ProcesarTxt("C:\ruta\archivo.txt") y una matriz por referencia que será modificada para que devuelva los elementos de grupos de 4 dígitos encontrados en la cadena. Fíjate: Private Sub Command1_Click() 'Este es el código que usabamos hasta ahora Dim str1 As String str1 = ProcesarTxt("C:\Prueba3.txt") 'Aquí empieza el 2º filtro Dim int4Numeros() As Integer ExtraerGrupos4Numeros str1, int4Numeros 'Aquí muestro los valores que deberías buscar 'en la db usando like On Error Resume Next Dim int1 As Integer For int1 = 1 To UBound(int4Numeros) MsgBox int4Numeros(int1) Next int1 End Sub Private Sub ExtraerGrupos4Numeros( _ ByVal Txt As String, ByRef Numeros() As Integer) Dim intIdx As Integer Dim int1 As Integer, str1 As String For int1 = 1 To Len(Txt) - 4 str1 = Mid(Txt, int1, 4) If IsNumeric(str1) Then intIdx = intIdx + 1 If intIdx > 1 Then ReDim Preserve Numeros(intIdx) Else ReDim Numeros(1) End If Numeros(intIdx) = str1 End If Next int1 End Sub
Recorre los elementos de la matriz que contiene los números, busca en la tabla de la bd las posibles correspondencias, recorre la selección intentando indentificar el valor del campo con la matricula completa en la cadena resultado de la función 'ProcesarTxt' (en el ejemplo str1). Es decir, algo así: If Instr(1,str1,recordsetMatriculas.Fields("Matricula").value) > 0 Then _ MsgBox "Has encontrado la matrícula, enhorabuena tronco..."
Espero que me haya explicado bien... Suerte.
489
« en: Martes 16 de Marzo de 2004, 11:34 »
Hola. Con 'LlamadaAFunciónSoloNumeros' me refiero a una nueva función que realice un nuevo filtro sobre la anterior que te envié. En este ejemplo, el método recibirá como entrada el resultado de la función ProcesarTxt("C:\ruta\archivo.txt") y una matriz por referencia que será modificada para que devuelva los elementos de grupos de 4 dígitos encontrados en la cadena. Fíjate: Private Sub Command1_Click() 'Este es el código que usabamos hasta ahora Dim str1 As String str1 = ProcesarTxt("C:\Prueba3.txt") 'Aquí empieza el 2º filtro Dim int4Numeros() As Integer ExtraerGrupos4Numeros str1, int4Numeros 'Aquí muestro los valores que deberías buscar 'en la db usando like On Error Resume Next Dim int1 As Integer For int1 = 1 To UBound(int4Numeros) MsgBox int4Numeros(int1) Next int1 End Sub Private Sub ExtraerGrupos4Numeros( _ ByVal Txt As String, ByRef Numeros() As Integer) Dim intIdx As Integer Dim int1 As Integer, str1 As String For int1 = 1 To Len(Txt) - 4 str1 = Mid(Txt, int1, 4) If IsNumeric(str1) Then intIdx = intIdx + 1 If intIdx > 1 Then ReDim Preserve Numeros(intIdx) Else ReDim Numeros(1) End If Numeros(intIdx) = str1 End If Next int1 End Sub
Recorre los elementos de la matriz que contiene los números, busca en la tabla de la bd las posibles correspondencias, recorre la selección intentando indentificar el valor del campo con la matricula completa en la cadena resultado de la función 'ProcesarTxt' (en el ejemplo str1). Es decir, algo así: If Instr(1,str1,recordsetMatriculas.Fields("Matricula").value) > 0 Then _ MsgBox "Has encontrado la matrícula, enhorabuena tronco..."
Espero que me haya explicado bien... Suerte.
490
« en: Martes 16 de Marzo de 2004, 11:09 »
Hola VeRaCrUzAnItO-10- Si quieres almacenar el valor de los cuadros de texto en una matriz, tendrás que hacer esto... memoria(1,1)=text1.text memoria(1,2)=text2.text
... digo yo, ¿no? Chao.
491
« en: Lunes 15 de Marzo de 2004, 18:16 »
Hola emizael. Aparte de la conversión que puedas hacer matemáticamente, la conversión en vb se realiza explícitamente... prueba esto: Observarás que la función te devuelve el número hexadecimal (15) en base 10. Prueba un código tal que así: Private Sub Command1_Click DspValorDecimal "&HFF" end sub Private Sub DspValorDecimal(Byval ValorHexadecimal As String) Dim lng1 As Long lng1 = ValorHexadecimal MsgBox lng1 End Sub
Verás como obtienes directamente 255 (&HFF en base diez). Abur.
492
« en: Lunes 15 de Marzo de 2004, 18:07 »
Hola comsuven. Claramente el error se produce en esta línea: str2 = string(8 - Len(str1)-len(str2),"0") & str2
Si la longitud de str1 sumada a la longitud de str2 es mayor que 8, caso en el que 'String' recibiría un parámetro con valor negativo que no admite. Fíjate que en el planteamiento del problema se decía que el número resultante nunca sería de más de 8 dígitos, de ahí el relleno. Chao.
493
« en: Lunes 15 de Marzo de 2004, 18:03 »
Hola elmango80.
Nunca te acostarás... sin saber 1 cosa +.
Chao.
494
« en: Lunes 15 de Marzo de 2004, 18:00 »
Hola DaVId925.
Sin estar muy seguro de lo que te digo, entiendo que debes utilizar un juego de carácteres de doble byte (DBCS) e imagino que tendrás que tener cargada la página de códigos correspondiente (en autoexec.bat) ... Me da la sensación de que la clave de tu problema está a nivel sistema operativo, y no tiene que ver con vb... aunque ya te aviso de que no estoy seguro de lo que digo, pero tal vez te sirva de pista.
Suerte.
495
« en: Lunes 15 de Marzo de 2004, 17:53 »
Hola Gandalf_malaga7. Tal vez ya hayas resuelto tu problema, pero por si acaso, te cuento: Con la cadena resultante de la función, yo establecería otro filtro, obteniendo una cadena formada sólo por números, luego con el resultado ejecutaría una selección de registros en tu bd con un SQL de este estilo: Dim strSQL as string strSQL = "SELECT * FROM TablaMatriculas WHERE CampoMatricula LIKE '%" & LlamadaAFuncionSoloNumeros(ResultadoFnAnterior) & "%'".
Recorrería el recordset resultante, buscando la mejor coincidencia... Podrías sofisticar más la última función para que por ejemplo buscase una cadena de números con una letra a izquierda y otra a derecha, o con tres letras a la izquierda de los cuatro números... No sé si me habré explicado muy bien, pero tú pregunta, pregunta. Abur.
496
« en: Lunes 15 de Marzo de 2004, 17:44 »
Hola Jorge. Antes de nada, disculpa la tardanza en responder, pero no sé que rayos ha pasado que desde mi anterior respuesta no he sido capaz de entrar en solocodigo hasta ahora mismo. Una vez que tienes una línea del archivo, para obtener la que tu deseas debes trocearla según posiciones y/o ciertos carácteres y montar la cadena que necesitas... La función 'ProcesoLinea' del código anterior debería quedar algo así: Public Function ProcesoLinea(ByVal Linea As String) As String On Error Resume Next ProcesoLinea = "04000000" & Mid(Linea, 53, InStr(54, Linea, "[0]") - 53) ProcesoLinea = ProcesoLinea & "000000000000000" ProcesoLinea = ProcesoLinea & Mid(Linea, 36, InStr(37, Linea, "[0]") - 36) ProcesoLinea = ProcesoLinea & Format(Now, "yyyymmddhhmmss") ProcesoLinea = ProcesoLinea & "00001000" End Function
Realmente no sé si esto es lo que tienes que hacer con la línea original, hoy debo de estar espeso, pero para que te hagas una idea... En principio, si llamas a la función con el parámetro que pones como ejemplo de entrada, obtendrás la salida que dices necesitar. Suerte.
497
« en: Viernes 12 de Marzo de 2004, 09:50 »
Hola
Tan solo hacer una pequeña puntualización...
Para hacer el proceso 'un poco más aleatorio', convendría usar una semilla adecuada para randomize: lo más sencillo sería Randomize Timer.
Chao.
498
« en: Viernes 12 de Marzo de 2004, 09:44 »
Hola Kev.
Para esto, siempre y cuando llames al programa en vb desde el otro programa podrías intentar algo así:
Pasa como parámetros al vb, la dirección del puntero y el tamaño de la variable que desees obtener. Luego utilza la función api CopyMemory para recuperar el valor de la dirección de memoria y el desplazamiento en una variable de vb.
Si al programa vb no lo llamas desde el otro, sino que lo arranca el usuario u otro proceso distinto, tal vez esto te dé alguna idea.
Suerte.
499
« en: Viernes 12 de Marzo de 2004, 09:32 »
Hola Jorge López. Comienza buscando desde tu pc el equipo con el que te quieres conectar seleccionando desde 'Inicio' buscar un pc. Usa su ip o su nombre de dominio. Si encuentras la máquina, no tendrás otra cosa que hacer que al crear la cadena de conexión con la bd referierte a ella de la forma que te comenté en tu anterior post (DataSource=\\99.99.99\Ruta\bd.mdb). Que esto funcione correctamente puede depender de la configuración de la red y de sus equipos, en este tema, la configuración de routers que utilices, túneles definidos, y cosas por el estilo, pueden ser determinantes. Otra opción es que uses RDO. Yo no estoy nada puesto en el tema, pero por ahí supongo que habrá abundante información. Sobre lo que comentas del archivo que deseas procesar, no comprendo cúal tiene que ser el resultado de la función que buscas, pero básicamente lo que haría es leer línea a línea de un archivo, procesar cada línea y guardarlo en otro archivo. Algo así: Private Function Proceso() As Boolean On Error Goto Err_Proceso Dim intCanalI as Integer, intCanalO as integer intCanalI = Freefile Open "C:\Ruta\ArchivoI.txt" For Input As #intCanalI intCanalO = Freefile Open "C:\Ruta2\ArchivoO.txt" For Output As #intCanalI Dim str1 As String Do until EOF(intCanalI) Line Input #intCanalI, str1 print #intCanalO, ProcesoLinea(str1) Loop Proceso = True Exit_Proceso: On Error Resume Next Close #intCanalI Colse #intCanalO Exit Function Err_Proceso: Msgbox "(" & Err.Number & ") " & Err.Description, vbCritical,"Proceso" Resume Exit_Proceso End Function Private Function ProcesoLinea(Byval Linea As String) As String 'Esta función debería procesar una línea. 'ProcesoLinea=xxxxxxx End Function
A la función 'ProcesoLinea' se le pasa como parámetro cada una de las lineas del archivo de entrada, la procesaría según tus necesidades, y devolvería una cadena con el resultado, que a su vez es grabada en el archivo de salida. Si tienes problemas con el código para procesar cada línea, no dudes en preguntar... te diría algo, pero es que no he comprendido lo que necesitas. Suerte.
500
« en: Jueves 11 de Marzo de 2004, 14:57 »
Hola Gandalf_malaga7. Fíjate que la función devuelve un string que debe contener la supuesta matrícula, o lo que queda del fichero después de filtrarlo... Private Sub Command1_Click() Dim str1 As String str1 = ProcesarTxt("C:\Prueba3.txt") MsgBox str1
Después de llamar a la función, 'str1' contendrá el valor devuelto por la misma. Chao.
Páginas: 1 ... 18 19 [20] 21 22 ... 43
|
|
|