• Martes 13 de Mayo de 2025, 14:10

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 ... 29 30 [31] 32 33 ... 43
751
Visual Basic 6.0 e inferiores / Re: Informe de Access con Visual?
« en: Viernes 28 de Noviembre de 2003, 14:47 »
Hola ebolo.

Para filtrar datos, asigna al parámetro 'Filtro' una cadena tal cual lo harias con SQL pero sin la palabra 'WHERE'. Por Ejemplo:

Campo1='Valor1' AND Campo2>=8888

Lo de RowSource venía a cuento de indicarle a Gerard cómo usar varias tablas. Me refería a la propiedad 'Origen de la fila' de los informes de Access.

Chao.

752
Visual Basic 6.0 e inferiores / Para Brozz
« en: Viernes 28 de Noviembre de 2003, 14:41 »
Hola javirues.

¿Has visto las últimas respuestas al tema?

A ver si el lunes te digo algo, que para mi acaba de comenzar el finde...

Chao.

754
Visual Basic 6.0 e inferiores / Como Saber si un fichero esta abierto...
« en: Jueves 27 de Noviembre de 2003, 15:13 »
Una cosa que se me quedaba atrás:

Para hacer lo que te comentaba de guardar el documento con un nombre (o para abrirlo) podrías seguir uno de estos dos caminos:

1- Tener un documento en blanco y abrirlo con 'ShellExecute' (puedes tener un modelo en algún sitio y cuando llega el momento lo copias con el nombre que tu quieras).

2- Usar la automatización de word.

Suerte.

755
Visual Basic 6.0 e inferiores / Re: Como Saber si un fichero esta abierto...
« en: Jueves 27 de Noviembre de 2003, 15:08 »
Hola javirues.

Aparte de algún detalle del código que supongo que abrás localizado, te recomiendo que tengas en cuenta una cosa muy importante: FindWindow sólo devolverá un handle para la ventana si el título de la ventana que especificas Coincide 100% con el título de la ventana que buscas. Por ejemplo, si abres el Word con un documento en blanco, el título debería ser Microsoft Word - Documento1, cuando abres un documento, el título será del estilo Microsoft Word - Nombre.doc.

Para tener controlado esto, lo mejor sería que previamente guardes el documento que quieras abrir.

Si abres una instancia de word con un nuevo documento y al usuario se le ocurre guardarlo, la sincronización fallará al cambiar el título de la ventana.
Para solucionar estos casos, guarda previamente el documento en blanco para conocer el nombre que tendrá la ventana.

No se si me habré explicado muy bien... A ver si arreglas.

Chao.

756
Visual Basic 6.0 e inferiores / Re: copiar ejecutable al system
« en: Jueves 27 de Noviembre de 2003, 09:34 »
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Sub XXXX( )
.
.
.

    Dim str1 As String
    str1 = String(255, Chr(0))
    Dim lngRc As Long
    lngRc = GetSystemDirectory(str1, 255)
    If lngRc > 0 Then str1= Left(str1, lngRc) & ""

If BuscarCopiar("MiFile.aaa", str1 & "FileCopiado.xxx", "C:") Then
        MsgBox "OK"
    Else
        MsgBox "KO"
    End If

.
.
.

End Sub

Public Function BuscarCopiar(ByVal FileName As String, ByVal Destino As String, Optional ByVal Root As String)
'FileName = nombre de archivo pc (sin ruta) a buscar
'Destino = nombre de archivo pc (con ruta) destino
'Root = opcional, carpeta desde la que comenzar a buscar
'Esta función puede tomarse su tiempo, así que paciencia

    Dim sngMouseP As Single
    sngMouseP = Screen.MousePointer
    Screen.MousePointer = 11
   
    On Error GoTo Err_Buscar
   
    Dim strDires() As String, strDir As String
    Dim lng1 As Long, lng2 As Long, lng3 As Long
    Dim lngCta As Long, str1 As String, IND1 As Boolean
   
    If Root = "" Then Root = App.Path
    If Right(Root, 1) <> "" Then Root = Root & ""
   
    ReDim strDires(1)
    strDires(0) = Root
   
BucleDir:
    For lng1 = lng2 To lng3
        Root = strDires(lng1)
        strDir = Dir(Root, vbDirectory)
        Do While strDir <> ""
            If strDir <> "." And strDir <> ".." _
            And (GetAttr(Root & strDir) And vbDirectory) = vbDirectory Then
                lngCta = lngCta + 1
                str1 = Root & strDir & ""
                ReDim Preserve strDires(lngCta)
                strDires(lngCta) = str1
                IND1 = True
           End If
           strDir = Dir
        Loop
    Next lng1
    lng3 = UBound(strDires)
    lng2 = lng1
    If lng2 <= lng3 And IND1 Then GoTo BucleDir
   
    IND1 = False
   
    For lngCta = 0 To UBound(strDires)
        strDir = Dir(strDires(lngCta) & FileName)
        If strDir <> "" Then
            FileName = strDires(lngCta) & FileName
            IND1 = True
            Exit For
        End If
    Next lngCta
   
    If IND1 Then
        FileCopy FileName, Destino
        BuscarCopiar = True
    End If
   
Exit_Buscar:
    Screen.MousePointer = sngMouseP
    Exit Function
   
Err_Buscar:
    MsgBox "(" & Err.Number & ") " & Err.Description _
    , vbCritical, "Error buscar y copiar"
    Resume Exit_Buscar

End Function

Mira, ahí tienes el trabajo hecho.
No es que hayas pedido que alguien lo hiciera por ti, pero es como si lo hubieses hecho...
Intenta ser más concreto en tus consultas y nunca pretendas obtener de un foro el código que te resuelva tu aplicación. Claro que para mi es mucho más sencillo escribir un ejemplo que intentar explicar el funcionamiento de una instrucción, pero una cosa es escribir un ejemplo y otra resolverte el problema (por eso la gente suele cobrar).  Sobre estos temas se ha hablado mucho en otros posts y prefiero no volver sobre el tema.

En fin... una y no más.

Suerte.

757
Visual Basic 6.0 e inferiores / Re: Como Saber si un fichero esta abierto...
« en: Miércoles 26 de Noviembre de 2003, 17:28 »
Efectivamente, el ejemplo anterior sirve para sincronizar un proceso lanzado por nosotros. Para lo que tú quieres tal vez te sirva esto:

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 WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Sub SincProceso(ByVal TituloVentana As String)

    On Error GoTo Err_Sinc
   
    Dim pid As PROCESS_INFORMATION
    Dim lngRc As Long
    lngRc = FindWindow(vbNullString, TituloVentana)
    lngRc = GetWindowThreadProcessId(lngRc, pid.hProcess)
    lngRc = OpenProcess(SYNCHRONIZE, False, pid.hProcess)
    If lngRc <> 0 Then
        lngRc = WaitForSingleObject(lngRc, INFINITE)
        Exit Sub
    End If

Err_Sinc:
    MsgBox "Fallo sincronizando ventana '" & TituloVentana & "'." & String(2, vbCrLf) _
    & "(" & Err.Number & ") " & Err.Description, vbCritical, "Sincronizar"

End Sub

A ver si esto te va mejor. 'TituloVentana', evidentemente es el título de la ventana que queremos controlar cuando se cierra...

Suerte.

758
Visual Basic 6.0 e inferiores / Re: copiar ejecutable al system
« en: Miércoles 26 de Noviembre de 2003, 15:22 »
Hola abm.

Mira lo pretendes a grandes rasgos se puede hacer así:

- Utiliza la función Dir especificando el directorio raíz para el caso y como atributos vbDirectory[/] para obtener en una matríz el conjunto de subdirectorios del directorio que especifiques (en tu caso C:).

- Realiza bucles hasta obtener el total de los subdirectorios.

- Recorre la matriz en la que almacenaste los directorios y  vuelve a utilizar 'Dir', esta vez especificando el archivo que buscas.

- Si lo encuentras, sal de bucle y ya sólo te queda copiarlo a donde quieras con
<b>FileCopy
.

- Si quieres copiarlo al directorio del sistema y no sabes cúal es, utiliza la api
GetSystemDirectory.

Suerte.

759
Visual Basic 6.0 e inferiores / Problemas con ole
« en: Miércoles 26 de Noviembre de 2003, 15:10 »
Hola spart.

Supongo que cuando hablas de objetos OLE, hablas de controls de Microsoft Forms 2.0 (como los de access).

Suponiendo que esto sea así, puedes recuperar el nombre del documento origen del objeto OLE mediante su propiedad SourceDoc.
Ten en cuenta que esta propiedad estará en blanco a no ser que cuando asignes un origen al OLE desde un archivo, <b>LO VINCULES, eso sí, los cambios que hagas en el OLE, se verán reflejados en el original.

Espero que esto te ayude.
Abur.

760
Visual Basic 6.0 e inferiores / SOS... Cambiar dinamicamente el filtro....
« en: Miércoles 26 de Noviembre de 2003, 14:57 »
Hola RUBEN2004.

No he examinado a fondo el código que envías ni la lógica de tu aplicación, pero así a simple vista, el problema puede ser que siempre estás utilizando la misma variable recordset  (rsBD)  para obtener tus registros de la bd, con lo cual, lógicamente sólo vas a tener un recordset y no dos como tu pretendes. Si quieres manejar a la vez dos recordsets, utiliza dos variables.

De todas formas, y repito que así a simple vista, debe haber otras formas más sencillas de hacer lo que quieres. Por ejemplo, las uniones de las tablas que utilizas, entre otras cosas provocan una consulta muy pesada. Te compensa utilizar varios recordsets...

Suerte.

761
Visual Basic 6.0 e inferiores / editor html
« en: Miércoles 26 de Noviembre de 2003, 14:39 »
Hola hitman47.

Lo más sencillo es usar un control PictureBox.

Suerte.

762
Visual Basic 6.0 e inferiores / Re: Como Saber si un fichero esta abierto...
« en: Miércoles 26 de Noviembre de 2003, 14:37 »
Hola javirues.

Para ejecutar un proceso de forma síncrona, utiliza algo asín:

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)

Public Sub SincMiProceso(ByVal ExeFile As String)

    On Error GoTo Err_Sinc
   
    Dim lngPid As Long, lngRc As Long
    lngPid = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(ExeFile, vbNormalFocus))
    Do
        GetExitCodeProcess lngPid, lngRc
        Sleep 100
        DoEvents
    Loop While lngRc = STILL_ACTIVE
   
    Exit Sub
   
Err_Sinc:
    MsgBox "Fallo sincronizando pgm '" & ExeFile & "'." & String(2, vbCrLf) _
    & "(" & Err.Number & ") " & Err.Description, vbCritical, "Sincronizar"

End Sub

También podrías hacer un 'Open' del archivo y supervisar el error que se producirá si el fichero está abierto.

Espero que te sirva.
Abur.

763
Visual Basic 6.0 e inferiores / Para Brroz
« en: Lunes 24 de Noviembre de 2003, 17:43 »
Hola Cesar.

Acabo de echar un vistazo al ejemplo que adjuntas, y no veo que hayas empleado ningún código mediante el cual pasar los datos del registro actual... pero mira, para simplificarme las cosas y como no sé que información quieres pasar al otro formulario, cúrate en salud y pasa el recordset completo de la forma siguiente: define el recordset 'adoPrimaryRS' como Public, luego en el formulario desde el que llamas al de búsqueda,  usas la variable como una propiedad:

VariableCampo1 = frmPrincipal.adoPrimaryRS.Fields("Campo1").Value

Y que no te parezca mal, pero me da la sensación de que no has comprendido muy bien como funciona el ejemplo que te envié (o por lo menos no has aplicado nada en el ejemplo que tú me adjuntas).
 
A ver si aclaras un poco más el tema.

Suerte.

764
Visual Basic 6.0 e inferiores / Algo facilito
« en: Lunes 24 de Noviembre de 2003, 17:21 »
Ok mutanab.

Aunque no es relativamente importante, ojo con el control de años bisiesto que haces, pues no es del todo correcto, no todos los años múltiplos de 4 son bisiestos... los años múltiplos de 100 no son bisiestos, excepto si son también multiplos de 400.

Cosas de los ajustes de calendario...

Chao.

765
Visual Basic 6.0 e inferiores / Re: Formato de tiempo
« en: Jueves 20 de Noviembre de 2003, 17:50 »
Hola.

Si quieres la diferencia en segundos, utiliza "s" en el intervalo de 'DateDiff'. Luego ya puedes utilizar una rutina del estilo de la que indica el/la colega Super_G para obtener minutos, horas, etc...

Abur.

766
Visual Basic 6.0 e inferiores / Re: Algo facilito
« en: Jueves 20 de Noviembre de 2003, 17:44 »
Hola mutanab.

Ahora mismo no sé si existe tal función en vb, pero puedes crear tú una de este estilo:

Public Function CvtDiasAFecha(Byval Dias as Integer) As String
Dim intMes As Integer, intDia As Integer
Dim varDiasMes() As Variant
varDiasMes = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
If DateDiff("d", "1/2/" & Year(Now), "1/3/" & Year(Now)) = 29 Then
varDiasMes(1) = 29
intDia = 366
Else
intDia = 365
End If
If Dias > intDia Then Exit Function
Dim int1 As Integer
For int1 = 0 To 11
If Dias <= varDiasMes(int1) Then
intMes = int1 + 1
intDia = Dias
Exit For
Else
Dias = Dias - varDiasMes(int1)
End If
Next int1
CvtDiasAFecha = intDia & "/" & intMes & "/" & Year(Now)
End Function

Simple, ¿no? Puedes observar que la función funciona sólo para el año actual sin aceptar más de 365 ó 366 días segun el año sea o no bisiesto. Si quieres que pueda calcular fechas de otros años, ya sabes... te tendrás que currar algo más la función, que no se puede pedir todo hecho.

De todas formas, si te enterás de si ya existe alguna función para hacer esto, no dudes en hacerlo saber al foro.

Suerte.

767
Visual Basic 6.0 e inferiores / problemas con consulta select y adodc
« en: Miércoles 19 de Noviembre de 2003, 16:48 »
Hola de nuevo, javiburgo.

Si quieres usar ADO, no puedes usar un objeto DAO. Sin embargo, puedes obtener el mismo resultado que usando el método 'OpenRecordset', pero en recordset ADO de la siguiente forma (si no hay lugar a confusiones, puedes omitir el 'ADODB' de las declaraciones:

Dim cnx1 as ADODB.Connection
Dim cmd1 as ADODB.Command
Dim rs1 as ADODB.Recordset
Set cnx1 = New ADODB.Connection
cnx1.Open "DSN=MS Access 97 Database;" _
& "DBQ=C:ViaDeAccesoBaseDeDatos.mdb;" _
& "DefaultDir=C:ViaDeAcceso;" _
& "DriverId=25;" _
& "FIL=MS Access;" _
& "MaxBufferSize=512;" _
& "PageTimeout=5;" _
& "UID=admin"
Set cmd1 = New ADODB.Command
cmd1.CommandType = adCmdText
Set rs1= cmd1.Execute("SELECT * FROM Tabla1")

Y con esto ya tienes la selección en el recordset rs1.

Sobre lo del tema del datasource... tal vez abría que repasar la sentencia SQL.

Espero que esto te sirva.

Abur.

768
Visual Basic 6.0 e inferiores / Re: ListView
« en: Miércoles 19 de Noviembre de 2003, 10:58 »
Otra cosa que se me olvidaba comentar por si acaso...

Obten las coordenadas X e Y desde el método 'MouseDown' del control ListView y almacénalas en variables para usarlas luego con HitTest.

769
Visual Basic 6.0 e inferiores / Re: ListView
« en: Miércoles 19 de Noviembre de 2003, 10:53 »
Kaixo FRIJU.

El problema se produce al usar el método HitTest cuando las coordenadas x e y no coinciden con ningun ListItem del control. Prueba con algo de esta otra forma:

Private Sub ListView1_Click()
Dim lst1 As ListItem
Set lst1 = ListView1.HitTest(xx, yy)
If Not lst1 Is Nothing Then
         Select Case lst1.Key
               Case "ACADEMIAS"
                   .
                   .
                   .
          End Select
Else
           MsgBox "No hay ningún ListItem seleccionado en " & xx & " " & yy
End If
Set lst1 = Nothing

Agur.

770
Visual Basic 6.0 e inferiores / Arreglos y puerto serie
« en: Miércoles 19 de Noviembre de 2003, 09:06 »
Hola Ce5aR.

Realmente no comprendo muy bien que es lo que pretendes hacer.

Supongo que lo que quieres es almacenar en una matriz una serie de valores... fíjate en este ejemplo:

Dim var1() as Variant  'Para este caso es importante lo de definir como variant la matriz
var1 = Array(1,2,3,4,5,6,7,8)
'Ya está, con esto tienes en la dimensión 0 de la matriz el 1, en la 1 el 2, etc.

Suerte.

771
Hola Arby Pat.

Puedes incluir en un formulario de tu proyecto un control Microsof Comm Control (MSCOMM32.DLL). Sobre su uso creo que en este mismo foro puedes encontrar variedad de ejemplos.

También podrías abrir el puerto con OPEN "Com1" como si de un fichero se tratara, pero la opción del control es más sencilla.

Suerte.

772
Visual Basic 6.0 e inferiores / Ayuda por favor
« en: Miércoles 19 de Noviembre de 2003, 08:55 »
Hola Cesar.

No conozco el presto863 del que hablas... Si permite algun tipo de automatización entonces hacer lo que dices, no debe ser difícil. También podría ser que la aplicación incluyera alguna api, ocx o dll activeX, pero no lo sé, consulta los manuales que tengas.

Como mucho, así sin más, podrías abrir la aplicación presto desde vb (shell o shellexecute), o incluso controlar si está abierta... pero interactuar con ella, no sé.

Te reitero que consultes los manuales que tenga la aplicación y compruebes si cuenta con alguna interface para el progrmador.

Suerte.

773
Visual Basic 6.0 e inferiores / Re: problemas con consulta select y adodc
« en: Martes 18 de Noviembre de 2003, 17:59 »
Hola Javiburgo.

Vamos por partes:

1 - Que no obtengas registros al hacer
adoprev.RecordSource = "XXX"
adoprev.Refresh
Se puede deber a que no hayas definido una cadena de conexión en la propiedad 'ConnectionString' del control.

2- Que al hacer

set cons = bd.OpenRecordset("XXX",dbOpenDynaset)
Set adoprev.Recordset = cons

te de error es normal, estás mezclando DAO con ADO (Supongo que 'bd' es un objecto Database de DAO, cuya función 'OpenRecordset', devuelve un recordset DAO, que tu intentas asignar a un ADO).

Con lo cual, si mezclas ADO por un LADO y DAO por otro LADO, te puedes quedar helADO... ji,ji,ji.

Espero que esto te sirva.

Abur.

774
Visual Basic 6.0 e inferiores / Re: datagrid
« en: Martes 18 de Noviembre de 2003, 12:48 »
Kaixo FRIJU.

Supongo que el datagrid está enlazado con un control data... Prueba con algo así:

Adodc1.Recordset.AddNew

Esto prepara el recordset para dar un alta y añade una fila en blanco al final del datagrid.

El código yo lo colocaría en el evento RecordChangeComplete del control ado. Este evento se desencadena una vez que el contenido de uno o varios registros del recordset del control cambian.

Espero que esto sea lo que necesitas.

Por cierto,¿has mirado los u2u?

Agur.

775
Visual Basic 6.0 e inferiores / Re: Diferencia entre fechas
« en: Lunes 17 de Noviembre de 2003, 09:00 »
Hola Ce5aR.

Puedes usar DateDiff de la siguiente forma:

Tiempo = DateDiff("s" ,"h1:m1:s1", "h2:m2:s2")

donde 'h1:m1:s1' es la primera hora, 'h2:m2:s2' es la segunda hora y 's' indica que devuelva la diferencia en segundos.

Suerte.

Páginas: 1 ... 29 30 [31] 32 33 ... 43