|
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 ... 30 31 [32] 33 34 ... 43
776
« en: Sábado 15 de Noviembre de 2003, 09:54 »
Hola Cesar.
Si ya has encontrado el registro, actualiza los campos en el formulario con los datos del ¿recordset? Es que como no seas más concreto...
A ver, supongo que la búsqueda y la obtención de datos la haces sobre un recordset, y también supongo que el alcance de ese recordset abarca sólo hasta el formulario de búsqueda (es que si fuera de otra forma, seguro que ya no tenías ningún problema), es decir, en el formulario de búsqueda, una vez que aceptas, buscas directamente en un recordset que tienes definido en el formulario. Para este caso deberías hacer algo del estilo:
FormPrincipal.Text1.Text = Recordset1.Fields(0).Value FormPrincipal.Text2.Text = Recordset1.Fields(1).Value . . .
Desde luego, yo declararía el recordset en el formulario principal (o en alguna clase) y utilizaría el formulario de búsqueda únicamente para devolver el valor por el que buscar. Esto lo puedes hacer de varias formas. Te adjunto un ejemplo en el que puedes ver dos de esas formas. Sirve también de ejemplo de uso de un evento y de una propiedad.
Espero que esto te sirva, sino, repito intenta ser algo más concreto, pues tuve que responder por suposiciones mías.
Abur.
777
« en: Viernes 14 de Noviembre de 2003, 13:10 »
Hola gabperez.
La siguiente lista muestra los archivos necesarios para DAO 3.6. Échale un vistazo al archivo SETUP.LST que genera el instalador de vb a la sección [Setup1 Files].
Archivo___________________Destino MSCMCES.DLL -----------------> WindowsSystem VB5DB.DLL ------------------> " MSJTES40.DLL ---------------> " MSREPL40.DLL ----------------> " MSRD3X40.DLL ----------------> " MSRD2X40.DLL ----------------> " MSWDAT10.DLL ---------------> " MSWSTR10.DLL ----------------> " EXPSVR.DLL ----------------> " VBAJET32.DLL ----------------> " MSJINT40.DLL ----------------> " MSJTER40.DLL ----------------> " MSJET40.DLL ----------------> " DAO360.DLL -------------> Path de Ms DAO
Es muy posible que alguno(s) de estos archivos no sean necesarios... pero no lo sé.
De todas formas a nivel registro será necesario crear alguna clave. En concreto el 'Path de MsDAO' tendrá que especificarse en alguna parte del registro (no sé donde, pero puedes buscarlo en tu equipo con RegEdit).
También te prevengo de que manipular el registro puede traer funestas consecuencias para el funcionamiento de windows, así que piénsatelo dos veces.
Tal vez tu mejor opción sea usar otro instalador. En este foro se ha recomendado mucho (aunque yo no lo conozco) SetUp Factory.
Suerte.
778
« en: Viernes 14 de Noviembre de 2003, 09:21 »
Hola krlos02.
Estudia el código y fíjate en las partes en que se usa objRng con esto se obtiene un rango de celdas que forman una matriz bidimensional (FilaDeRango, ColumnaDeRango). Otra forma que en tu caso podría ser más efectiva es usar la propiedad Cells del objecto WorkSheet (objSh), funciona como un rango pero comprendiendo todas las celdas de la hoja. Por ejemplo:
ObjSh.Cells(10,3)
hace referencia a la celda C10.
Espero que con esto soluciones tu problema.
Abur.
779
« en: Viernes 14 de Noviembre de 2003, 09:13 »
Hola Ce5aR.
Para que el diálogo se abra con una ruta de acceso por defecto, debes asignar previamente la ruta deseada a la propiedad InitDir del cuadro de diálogo. Ya vi que en el ejemplo que me enviaste lo haces... Si la ruta de acceso no fuera válida, el cuadro de diálogo debería abrir de todas formas (y si te da un error, supervísalo). Lo que si observo en tu ejemplo es que el filtro del cuadro, no comprende archivos *.csv, por lo que es lógico que no aparezca ninguno. Yo añadiría algún filtro más: *.csv, *.txt y por supuesto *.*. Usa la propiedad DefaultExt para elegir la extensión de los archivos por defecto.
De todas formas el asunto del control CommonDialog no lo tengo muy fresco, ya que normalmente utilizo apis para seleccionar archivos y vías de acceso.
Otra cosa: en tú ejemplo utilizas dos controles CommonDialog... con uno te llega.
Suerte.
780
« en: Jueves 13 de Noviembre de 2003, 17:21 »
Hola César...
A ver hombre, ¿qué es lo que no sabes hacer?
- ¿Que se abra un formulario pulsando un botón?
- ¿Cómo buscar un registro determinado?
- ¿Cómo pasar el valor del textbox al primer formulario?
- ¿Nada de lo anterior?
Dices que no sabes hacerlo, mi pregunta es ¿lo has intentado? y si es afirmativo ¿cómo?
A ver si puedes ser un poco más concreto porque no creo que nadie te vaya a proporcionar una 'solución integral' que la acoples a tu proyecto y funcione.
Chao.
781
« en: Jueves 13 de Noviembre de 2003, 17:13 »
Hola Krlos02.
Perdona, pero el ejemplo al que supongo que te refieres guarda y carga datos en un archivo de texto. El último ejemplo que puse hace lo mismo pero el archivo de texto es delimitado, se podría abrir con excel (*.csv).
De todas formas, para lo que tú quieres hacer, puedes manejar los datos del datagrid de manera similar: Row Establece la fila Col Estable la columna Text Da el valor de la celda
Y como parece que hay mucho interés en conseguir código para insertar datos en una hoja de cálculo, y pocas ganas de buscar, pues me voy a tirar el rollito con un ejemplo sencillo de cómo cargar los datos de un recordset en una hoja de excel.
Private Function SaveRsXls(Byval rs1 as Recordset) As Boolean
On Error Goto Err_SaveRs
Dim objApp As Object Dim objWb AsObject Dim objSh As Object Dim objRng As Object Dim var1() As Variant, lngNFld as Long Dim lngNRcd as long
Set objApp = CreateObject(Excel.Application") Set objWb = objApp.WorkBooks.Add Set objSh = objWb.ActiveSheet
ReDim var1(1, rs1.Fields.Count) For lngNFld = 0 To rs1.Fields.Count - 1 var1(0, lngNFld) = rs1.Fields(lngNFld).Name Next lngNFld Set objRng = objSh.Range("A1").Resize(1, rs1.Fields.Count) objRng.Value = var1 rs1.MoveFirst Do Until rs1.EOF For lngNFld = 0 To rs1.Fields.Count - 1 var1(0, lngNFld) = rs1.Fields(lngNFld).Value Next lngNFld lngNRcd = lngNRcd + 1 Set objRng = objSh.Range("A" & lngNRcd + 1).Resize(1, rs1.Fields.Count) objRng.Value = var1 rs.MoveNext Loop
objSh.Name = "Nueva hoja" objWb.SaveCopyAs "NombreDeLibro.XlsobjWb.Saved = True
SaveRsXls = True
Exit_SaveRs: On Error Resume Next objApp.Close objApp.Quit Set objApp = Nothing Set objWb = Nothing Set objSh = Nothing Set objRg = Nothing Exit Function
Err_SaveRs: MsgBox Err.Description Resume Exit_SaveRs
End Function
Ahí está, ojo que está escrito al vuelo y lo mismo va algún gazapo... pero es para que sirva de ejemplo y para que lo intentéis comprender, no para copiar tal cual y que funcione. Además de haber otras formas para hacerlo.
Suerte. Chao.
P.D. Acabo de hacer la prueba buscando en google por VB Excel y aparecen cantidad de sitios desde los que obtener ejemplos... sólo hay que tomarse la molestia y ya está.
782
« en: Jueves 13 de Noviembre de 2003, 11:57 »
Hola morolo.
Imagino que lo que necesitas es algo de este estilo:
Primero debes registrar los componentes en el cliente. Para ello debes usar CliReg32.Exe. Este ejecutable normalmente se puede encontrar en ..Microsoft Visual StudioCommonToolsCliReg.
Una vez registrado el componente remoto, deberías poder utilizarlo sin más (siempre y cuando el trabajo servidor esté activo claro).
783
« en: Jueves 13 de Noviembre de 2003, 09:40 »
Hola Ce5aR.
Te envío un par de ejemplos de cómo cargar el flexgrid a partir de un archivo de texto delimitado (csv), ya que veo que exportas los datos del flexgrid de esa forma.
Ignoro el botón 'Guardar', ya que utilizando el archivo que exportas como csv ya es suficiente.
Ahí va:
' ********* Ejemplo1 ********* Dim intCanal As Integer intCanal = FreeFile Open "C:windowsEscritorioBorrar.csv" For Input As #intCanal Dim lngRow As Long, lngCol As Long Dim strRow() As String, str1 As String ReDim strRow(Flex1.Cols) Flex1.Clear Do Flex1.Row = lngRow lngRow = lngRow + 1 Line Input #intCanal, str1 strRow() = Split(str1, ",", Flex1.Cols) For lngCol = 0 To Flex1.Cols - 1 Flex1.Col = lngCol Flex1.Text = Replace(strRow(lngCol), Chr(34), "") Next lngCol Loop While Not EOF(intCanal) Close #intCanal ' ***************************************
' ********* Ejemplo2 ********* Dim intCanal As Integer intCanal = FreeFile Open "C:windowsEscritorioBorrar.csv" For Input As #intCanal Dim lngRow As Long, lngCol As Long Dim varRow() As Variant ReDim varRow(Flex1.Cols) Flex1.Clear Do Flex1.Row = lngRow lngRow = lngRow + 1 Input #intCanal, varRow(0), varRow(1), varRow(2), varRow(3), varRow(4) For lngCol = 0 To Flex1.Cols - 1 Flex1.Col = lngCol Flex1.Text = varRow(lngCol) Next lngCol Loop While Not EOF(intCanal) Close #intCanal ' ***************************************
'El ejemplo2 es algo más rápido que el anterior, pero tiene como inconveniente que hay que conocer el número de columnas del Flex a la hora de escribir el código.
Espero que esto te sirva.
Chao.
784
« en: Miércoles 12 de Noviembre de 2003, 18:12 »
Hola Jorge.
¿Has comprobado que el valor para el campo en el registro que da el error no sea nulo?
Mira a ver... Abur.
785
« en: Miércoles 12 de Noviembre de 2003, 18:06 »
Hola HugoI_007.
Me temo que algún programa se ha metido en un bucle sin fin...
Si el error es durante la instalación, poco te puedo decir, excepto que pruebes con otro instalador.
Si el error se produce al ejecutar el programa recién instalado, como supongo que así será, debes intentar identificar el origen del error (¿empleas algún tipo de control de errores?) para comprobar en ese código cual es el lugar en que se embucla y así poder corregirlo.
Suerte. Abur.
786
« en: Miércoles 12 de Noviembre de 2003, 16:18 »
Hola Taursoft.
Si no me equivoco, a los paneles de la barra de estado se le puede poner una imagen. Usa una imagen del color que quieras y ya está... La única pega es el texto que pueda tener el panel, ya que no sé como se podrá cambiar (si es que se puede) el color de fondo. Si el texto del panel no cambia o cambia en pocas ocasiones, podrías incluir el texto en la imagen y asunto solucionado.
Abur.
787
« en: Miércoles 12 de Noviembre de 2003, 09:49 »
Hola.
Desde 0 ó 1, dependiendo de como se haya definido o de si se ha usado la instrucción Option Base.
Por ejemplo:
- Sin especificar Option Base o con Option Base 0
Dim matriz(5) --> 5 elementos, 0 es el límite inferior Dim matriz(1 To 5) --> 5 elementos, 1 es límite inferior
- Con Option Base 1
Dim matriz(5) --> 5 elementos, 1 es límite inferior Dim matriz(0 To 4) --> 5 elementos, 0 es límite inferior
En todo caso, si la matriz ha sido dimensionada, siempre puedes usar LBound y UBound para conocer los límites inferior y superior respectivamente.
Chao.
788
« en: Miércoles 12 de Noviembre de 2003, 09:20 »
Hola Ce5aR.
En un post anterior decías que recibes datos del puerto serie y los guardas en el FlexGrid... no entiendo eso que dices de que crear el código sería tedioso porque tienes muchas filas: en el ejemplo que te adjunté yo suponía un flexgrid de siempre 10 filas. Tú lo que tendrías que hacer es utilizar la propiedad Rows del flexgrid para conocer el número de filas (ten en cuenta que la primera fila es la 0, luego el bucle debería ser de 0 a MsFlexGrid1.Rows - 1).
Lo que dices del excel es posible, pero no veo la necesidad...
Chao.
789
« en: Martes 11 de Noviembre de 2003, 18:25 »
Hola Omarrpat.
MaskEdBox1.Text = Ucase(MaskEdBox1.Text)
Evidente, ¿no?
Supongo que lo que te interesa saber es cómo crear una máscara para sólo introducir letras mayúsculas en el control... Bien, pues no sé cómo. Yo lo solucionaría o en el evento validate del control, o en el evento change, o en el evento KeyPress. Por ejemplo:
Private Sub MaskEdBox1_Validate(Cancel as Boolean) MaskEdBox1.Text = Ucase(MaskEdBox1.Text) End Sub
Private Sub MaskEdBox1_Change MaskEdBox1.Text = Ucase(MaskEdBox1.Text) End Sub
Private Sub MaskEdBox1_KeyPress(KeyAscii As integer) If KeyAscii < 97 Or KeyAscii > 122 Then Exit Sub KeyAscii = Asc(Ucase(Chr(KeyAscii))) End Sub
Chao.
790
« en: Martes 11 de Noviembre de 2003, 16:16 »
Hola Taursoft.
Mira,usa la búsqueda. Accede a ella desde la barra amarillenta que está algo más abajo del banner (iniciar sesión - regístrate - buscar - ayuda).
Si buscas en este mismo foro creo que puedes encontrar algunos ejemplos.
Suerte.
791
« en: Martes 11 de Noviembre de 2003, 16:05 »
Hola SpeedCad.
El siguiente código controla cuando una aplicación NO lanzada desde vb termina. No es exactamente lo que pides, pero tal vez te sirva...
Private Const SYNCHRONIZE = &H100000 Private Const INFINITE = -1&
Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessID As Long dwThreadID As Long End Type
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Sub Sincronizar() Dim pid As PROCESS_INFORMATION Dim lngRc As Long lngRc = FindWindow(vbNullString, "Pon aquí el título de la ventana de la aplicación") lngRc = GetWindowThreadProcessId(lngRc, pid.hProcess) lngRc = OpenProcess(SYNCHRONIZE, False, pid.hProcess) If lngRc <> 0 Then lngRc = WaitForSingleObject(lngRc, INFINITE) MsgBox "Fin del proceso" Else MsgBox "Fallo sincronizando" End If
End Sub
Espero que te sirva. Chao.
792
« en: Martes 11 de Noviembre de 2003, 10:24 »
Hola taursoft.
Yo escaparía de hacer lo que quieres mediante un control.
Tienes varias formas de hacerlo por código:
- Con DAO utilizarías algo de este estilo
Dim db1 as Database Set db1.OpenDatabase("MiBd.mdb" Dim tbl1= New TableDef tbl1.Name = "MiTabla" tbl1.Fields.Append tbl1.CreateField("CampoChar", 10, 10) 'Carácter 10 de longitud tbl1.Fields.Append tbl.CreateField("CampoLong", 4) tbl1.Fields.Append tbl.CreateField("CampoShort", 3) db1.TableDefs.Append tbl1
- Podrías en cualquier caso usar una sentencia SQL de tipo CREATE TABLE
CREATE TABLE MiTabla ([CampoChar] VarChar (10), [CampoLong] Long, [CampoShort] int);
En fin...creo que usar SQL podría ser la mejor opción para lo que pretendes.
Suerte.
793
« en: Martes 11 de Noviembre de 2003, 09:54 »
Hola agfed.
El error 52, si no me equivoco, indica un nombre o número (canal) de archivo incorrecto.
Repasa tu código para comprobar que no intentas abrir con Open algún archivo que no existe o que ya está abierto, ni que intentas leer (Get, Input, Line Input) un archivo que no está abierto. También puede ocurrir que estés intentando escribir (Put, Print, Write) en algún archivo que está cerrado.
Cuando utilices alguno de los métodos anteriores (Put, Print, Get, ...) asegúrate de usar una variable para almacenar el canal (el número de archivo). Informa esta variable previamente con la función FreeFile para obtener un número de canal disponible.
A ver...
Suerte.
794
« en: Martes 11 de Noviembre de 2003, 09:44 »
Hola de nuevo.
Como lo prometido es deuda... ahí va el ejemplo.
Abur.
795
« en: Lunes 10 de Noviembre de 2003, 18:21 »
Hola Ce5aR.
Ahora mismo no tengo tiempo para hacerlo, pero te prometo que mañana responderé a este mismo post con un ejemplo.
Chao.
796
« en: Lunes 10 de Noviembre de 2003, 18:21 »
Hola Ce5aR.
Ahora mismo no tengo tiempo para hacerlo, pero te prometo que mañana responderé a este mismo post con un ejemplo.
Chao.
797
« en: Lunes 10 de Noviembre de 2003, 16:25 »
Lo siento, no tengo ni idea.
Puedes probar posteando en el foro de visual basic .net, a ver si alguien te da información, sobre este tema y sobre el original de tu pregunta.
Chao.
798
« en: Lunes 10 de Noviembre de 2003, 16:22 »
Hola Elisa.
Creo que deberías utilizar la función Val.
Resultado = Val(Text1.Text) + Val(Text2.Text) + Val(Text3.Text)
Para asegurar que el resultado sea correcto, ten en cuenta que para el vb el signo decimal siempre es el punto, si emplearas como separador decimal la coma, deberías hacer algo del estilo
Resultado = Val(Replace(Text1.Text,",",".")) + Val(Replace(Text2.Text,",",".")) + Val(Replace(Text3.Text,",","."))
Suerte.
799
« en: Lunes 10 de Noviembre de 2003, 16:02 »
Hombre... visual basic 6.0 profesional al menos si tiene examinador de objetos y no recuerdo que éste fuera un componente opcional de la instalación. Écha un vistazo en el menú 'Ver'. Pulsando la tecla F2 normalmente también se abre.
Si realmente al final tu vb no tiene examinador de objetos... lo siento por ti, porque es una utilidad que para estos casos viene que ni pintada.
Suerte.
800
« en: Lunes 10 de Noviembre de 2003, 15:55 »
Hola Krlos02.
Viendo este post y otro que tienes anterior sobre este mismo tema, me pregunto si no te estarás liando un poco buscando una solución muy complicada.
Si no he comprendido mal, dices tener un formulario hecho con el vba del excel y que necesitas actualizarlo con datos contenidos en una base de datos mediante otro formulario, hecho con vb, que contiene un control sheet.
Ante esto, yo en mi atrevimiento, te sugeriría alguna de estas opciones:
- Desde vb puedes obtener una instancia de excel y manejar los datos de una hoja de cálculo ('externamente' como tú dices). De esta forma ya no necesitarías para nada esos formularios. Sobre cómo hacer esto hay bastantes ejemplos por ahí circulando... Si buscas en este mismo foro seguro que encuentras unos cuantos. Si te apetece investigar por tu cuenta, empieza añadiendo a tu proyecto una referencia a 'Microsoft Excel x.x Object Library'. Utiliza el examinador de objetos (Pulsa F2) para conocer los miembros de excel.
- Puedes actualizar los datos con vba desde la propia hoja de cálculo con el editor de visual basic (Herramientas > Macro > Editor de visual basic) ¿lo has probado? si no lo has hecho animáte y verás que descubres muchas cosas, entre ellas seguramente la solución a tu problema.
Lo que no me parece muy acertado (es sólo mi opinión, tampoco conozco los detalles de tu caso) es crear un programa en vb para actualizar los datos de un formulario vba-excel desde otro formulario usando un control Sheet.
Suerte.
Páginas: 1 ... 30 31 [32] 33 34 ... 43
|
|
|