|
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
« 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
« 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.
753
« en: Viernes 28 de Noviembre de 2003, 08:58 »
754
« 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
« 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
« 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
« 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
« 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
« 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
« 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
« en: Miércoles 26 de Noviembre de 2003, 14:39 »
Hola hitman47.
Lo más sencillo es usar un control PictureBox.
Suerte.
762
« 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
« 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
« 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
« 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
« 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
« 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
« 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
« 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
« 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
« en: Miércoles 19 de Noviembre de 2003, 09:00 »
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
« 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
« 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
« 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
« 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
|
|
|