|
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 - Shiquilla
Páginas: 1 2 [3] 4 5 ... 9
51
« en: Viernes 10 de Febrero de 2006, 13:23 »
Muy buenas, yo hago aplicaciones en red y para ello, también hago un sistema de bloqueos. Por si te vale te lo explico:
Tengo una tabla Bloqueos donde guardo: - Key del registro que está bloqueado - Código de usuario
Cuando el usuario entra en la aplicación, hago un DELETE de la tabla filtrando por el código de usuario por si el usuario tenía algun registro bloqueado (por ejemplo estaba editando un articulo y se va la luz).
Después, imaginemos que tenemos una tabla que tiene 3 campos, de los cuales id1 e id2 son clave primaria. Entonces mi key sería: clsNombreTabla#CamposClave
clsNombreTabla#id1#id2
Cuando un usuario intenta editar un artículo, miro si está bloqueado ese registro y si no lo está lo bloqueo, en el caso contrario se lo muestro en sólo lectura. Al terminar de editar un artículo desbloqueo el registro.
Espero haberte ayudado.
52
« en: Miércoles 21 de Diciembre de 2005, 11:40 »
Te falta la instrucción para guardar el fichero, el commondialog lo único que hace es devolverte la ruta. Quedaría algo así: Dim lsFichero As String Dim lsTexto As String lsTexto = Text3.Text CommonDialog1.CancelError = False CommonDialog1.DialogTitle = "guardar archivo como" CommonDialog1.Filter = "Archivos de texto (*.txt) |*.txt|" CommonDialog1.InitDir = lsTexto CommonDialog1.FileName = "" CommonDialog1.ShowSave lsFichero = CommonDialog1.FileName If Trim(lsFichero) <> "" Then Open lsFichero For Output As #1 Print #1, lsTexto Close #1 MsgBox "Fichero guardado" End If
Saludos,
53
« en: Lunes 19 de Diciembre de 2005, 10:52 »
Dim lnI As Long Dim lsTexto As String Dim lnPos As Long For lnI = 1 To Len(lsCadenaDeTexto) If lnI + 8 > Len(lsCadenaDeTexto) Then lnPos = Len(lsCadenaDeTexto) - lnI + 1 Else lnPos = 8 End If lsTexto = Mid(lsCadenaDeTexto, lnI, lnPos) 'Hacer lo que sea con esa cadena lnI = lnI + 7 Next lnI
Saludos,
54
« en: Martes 13 de Diciembre de 2005, 11:29 »
Supongo que tendrás un tope de columnas y filas, sólo tienes que recorrerlas y crear el usuario. Por ejemplo: Dim lnI As Long Dim lnTotalFilas As Long Dim lnC As Long Dim lnTotalColumnas As Long Dim lsValor As String lnTotalColumnas = 87 'Ascii de Columna W lnTotalFilas = 88 For lnC = 66 To lnTotalColumnas 'Desde la columna A hasta la columna W For lnI = 1 To lnTotalFilas 'Desde la fila 1 hasta la fila 88 Range(Chr(lnC) & CStr(lnI) & ":" & Chr(lnC) & CStr(lnI)).Select lsValor = ActiveCell.FormulaR1C1 If Trim(lsValor) <> "" Then 'Llamar a una funcion que te cree el usuario y demás pasandole el valor que has recogigo End If Next Next
PD: Este ejemplo está para sólo una celda, adaptalo para leer nombre y apellidos. Saludos,
55
« en: Miércoles 7 de Diciembre de 2005, 16:18 »
Pon la propiedad Style del combo a Dropdown List.
Saludos,
56
« en: Miércoles 7 de Diciembre de 2005, 11:40 »
Función que le pasas una longitud y te devuelve un string (en este caso le pasarías longitud 8). Public Function mfbCadenaAleatoria(lnLongitud As Long) As String Dim lnNumSimbolos As Long Dim laSimbolos laSimbolos = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", _ "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", _ "U", "V", "W", "X", "Y", "Z", _ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", _ "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", _ "u", "v", "w", "x", "y", "z") lnNumSimbolos = UBound(laSimbolos) + 1 Randomize Do While Len(mfbCadenaAleatoria) < lnLongitud mfbCadenaAleatoria = mfbCadenaAleatoria & laSimbolos(Int(lnNumSimbolos * Rnd())) Loop End Function
PD: Podrías poner el código para crear los usuarios? Gracias. Saludos
57
« en: Lunes 5 de Diciembre de 2005, 16:34 »
Si quieres que al dar el intro en cualquier caja de texto pase algo, lo más rápido es esto: - La propiedad KeyPreview del formulario ponla a TRUE. - El evento Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 MsgBox "Aquí la acción que quieras" End If End Sub
Si quieres que al dar el intro en una caja en concreto pase algo, lo más rápido es: Private Sub text1_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 MsgBox "Aquí la acción que quieras" End If End Sub
Saludos,
58
« en: Viernes 25 de Noviembre de 2005, 12:03 »
Se me olvió comentar que si alguien necesita hacer esto que postee que le mando un documento con todo lo que hay que hacer.
Saludos,
59
« en: Viernes 25 de Noviembre de 2005, 09:17 »
Otra posibilidad: Private Property Get mpbObligatorios() As Boolean mpbObligatorios = Trim(txtTexto(0).Text) <> "" And Trim(txtTexto(1).Text) <> "" ' and... y asi cn todas las cajas de texto obligatorias End Property Private Sub txtTexto_Change(Index As Integer) ' En la propiedad Change (o Lostfocus, da igual), de la/s caja/s de texto cmdAceptar.Enabled = mpbObligatorios 'cmdAceptar sería el boton que graba End Sub
Saludos,
60
« en: Viernes 25 de Noviembre de 2005, 09:03 »
Buenas Widark, gracias por contestar. Al final creé una librería estilo DLL de windows modificando el linkeador de VB y así consigo que si se referencia la DLL en el proyecto no se vean los métodos y da error al ejecutar el proyecto. En definitiva, hacer una DLL no ActiveX. Gracias de todas formas
61
« en: Jueves 24 de Noviembre de 2005, 12:04 »
Buenos días, quiero hacer que una dll sólo pueda ser referenciada en mi proyecto. Es decir, hay algunas dll que si les haces referencia en otros proyectos que no sean el suyo dan error al crear el objeto. Yo quiero hacer algo asi, pero no sé cómo se hace.
¿Alquien tiene alguna idea?
Gracias.
62
« en: Viernes 21 de Octubre de 2005, 10:47 »
Private Sub msNombreTablas() Dim loRS As Recordset Dim lnTotal As Long Dim lsTipoTabla As String On Error GoTo Interrupcion lnTotal = 0 Set loRS = goBD.OpenSchema(adSchemaTables) If Not loRS.EOF Then Do While Not loRS.EOF lsTipoTabla = IIf(Not IsNull(loRS!TABLE_TYPE), loRS!TABLE_TYPE, "") If UCase(lsTipoTabla) = "TABLE" Then 'Si no es de sistema MsgBox IIf(Not IsNull(loRS!TABLE_NAME), loRS!TABLE_NAME, "") lnTotal = lnTotal + 1 End If loRS.MoveNext Loop End If If loRS.State = 1 Then loRS.Close Set loRS = Nothing MsgBox "Total tablas: " & CStr(lnTotal) Exit Sub Interrupcion: On Error Resume Next If loRS.State = 1 Then loRS.Close Set loRS = Nothing On Error GoTo 0 MsgBox Err.Description, vbCritical, "Error" End Sub
* goBD sería la conexión a la base de datosSaludos,
63
« en: Miércoles 19 de Octubre de 2005, 22:10 »
Private Sub msNombreTablas() Dim loRS As Recordset Dim lnTotal As Long lnTotal = 0 Set loRS = goBD.OpenSchema(adSchemaTable) If Not loRS.EOF Then Do While Not loRS.EOF MsgBox IIf(Not IsNull(loRS!TABLE_NAME), loRS!TABLE_NAME, "") lnTotal=lnTotal+1 loRS.MoveNext Loop End If If loRS.State = 1 Then loRS.Close Set loRS = Nothing MsgBox "Total tablas: " & CStr(lnTotal) Exit Sub Interrupcion: On Error Resume Next If loRS.State = 1 Then loRS.Close Set loRS = Nothing On Error GoTo 0 MsgBox Err.Description, vbCritical, "Error" End Sub
Saludos,
64
« en: Miércoles 19 de Octubre de 2005, 09:10 »
Para meter los datos en el Combo sería (siguiendo con tu código): ComboBox.Clear While Not rs.OEF ComboBox.AddItem IIf(Not IsNull(rs!NombreCampo), rs!NombreCampo, "") rs.MoveNext Wend rs.Close Set rs = Nothing
Saludos,
65
« en: Miércoles 19 de Octubre de 2005, 09:02 »
Private Sub msNombreCampos() Dim loRS As Recordset Set loRS = goBD.OpenSchema(adSchemaColumns) loRS.Find "TABLE_NAME='NombreTabla'" If Not loRS.EOF Then Do While Not loRS.EOF If Trim(loRS!TABLE_NAME) = "NombreTabla" Then MsgBox IIf(Not IsNull(loRS!COLUMN_NAME), loRS!COLUMN_NAME, "") Else Exit Do End If loRS.MoveNext Loop Else MsgBox "No existe" End If If loRS.State = 1 Then loRS.Close Set loRS = Nothing Exit Sub Interrupcion: On Error Resume Next If loRS.State = 1 Then loRS.Close Set loRS = Nothing On Error GoTo 0 MsgBox Err.Description, vbCritical, "Error" End Sub
* GoBD sería la conexión a la base de datosSaludos,
66
« en: Martes 13 de Septiembre de 2005, 21:20 »
67
« en: Viernes 9 de Septiembre de 2005, 09:28 »
Hola sndr82, podrías limitar la introducción de ciertos caracteres desde el evento KeyPress del txt y después formatear ese número en el LostFocus. Ejemplo: 'Función que devuelve si ya ha metido una coma en el text Private Function mfbYaHayUnaComa() As Boolean mfbYaHayUnaComa = IIf(InStr(1, Text1.Text, ",") = 0, False, True) End Function 'Evento que controla todo lo que se mete en el texto Private Sub Text1_KeyPress(KeyAscii As Integer) If Chr(KeyAscii) = "." Then KeyAscii = Asc(",") If KeyAscii <> vbKeyBack Then If Len(Text1.Text) > 0 Then If KeyAscii <> Asc(",") Then If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 Beep End If ElseIf mfbYaHayUnaComa Then KeyAscii = 0 Beep End If Else If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0 Beep End If End If End If End Sub 'Cuando pierdo el foco formateo el número introducido Private Sub Text1_LostFocus() Text1.Text = Format(Text1.Text, "#,###,###,###,###,##0.00") End Sub
Y ya si quieres que al pulsar el INTRO se pierda el foco del control, o bien lo controlas en el objeto txt o bien en las propiedades del formulario le pones la propiedad KeyPreview a TRUE y pones esto: Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 SendKeys "{tab}" End If End Sub
Espero que te sirva. PD: He posteado porque veo que el control Masked Edit no te gusta Saludos,
68
« en: Viernes 9 de Septiembre de 2005, 09:00 »
Buenas, si es posible, luego le agregas la referencia a esa dll a tu proyecto y ya está.
Para crear una dll, creas un proyecto tipo "dll ActiveX" y ya tienes tu dll.
Yo utilizo dll principalmente para acceso a datos, y lo que hago es crear un grupo de proyectos en vb, es decir, en el grupo tengo el proyecto "dll ActiveX" y el proyecto EXE normal con referencias a la dll y listo.
Saludos,
69
« en: Domingo 28 de Agosto de 2005, 19:06 »
Buenas Magraciel, me he leido 3 veces tu mensaje y no sé si lo entendí bien. Lo que yo he entendido: Tienes una tabla con 3 campos y tienes un formulario para ingresar registros en ella. Tienes un combo donde eliges un campo descriptivo pero que en la INSERT debe ir el código de éste (el campo descriptivo seleccionado) Deducción a lo que yo he entendido: En vez de cargar el combo con el campo descripción y después buscar su código en BD, carga el combo guardándote el campo código junto con la descripción (en este caso el campo que se va a mostrar, sin que vea el usuario el campo código claro está) Ejemplo: 'Para cargar el combo Private Sub msCargarCombo() Dim lsSQL As String Dim loRS As Recordset Combo1.Clear lsSQL = "Select * from Tabla " Set loRS = goBD.Execute(lsSQL) While Not loRS.EOF Combo1.AddItem IIf(Not IsNull(loRS!Descripcion), loRS!Descripcion, "") Combo1.ItemData(Combo1.NewIndex) = IIf(Not IsNull(loRS!Codigo), loRS!Codigo, 0) loRS.MoveNext Wend loRS.Close Set loRS = Nothing End Sub 'Para saber el código del elemento seleccionado Private Sub Combo1_Click() Dim Codigo As Long If Combo1.ListIndex <> -1 Then Codigo = Combo1.ItemData(Combo1.ListIndex) MsgBox "El codigo del campo " & Combo1.Text & " es el " & Codigo End If End Sub
Espero no haberme equivocado y que esto de sirva de algo. PD: Este código sólo sirve si el campo clave y/o código del elemento a cargar es de tipo numérico. O bien se solucionaría utilizando tu código pero formateando los strings para evitar la comparación de minúsculas y mayúsculas: Sql = "Select Código_especificación,nombre_prueba From Especificar_calendario_plazos " Sql = Sql & " Where Código_especificación = " & Cod rs.Open Sql, cnn1, adOpenStatic If CLng(rs!Código_especificación) = CLng(Cod) Then MsgBox " coinciden las codigos", vbInformation MsgBox Combo1.List(Combo1.ListIndex) If UCase(Trim(rs!nombre_prueba)) = UCase(Trim(Combo1.Text)) Then MsgBox " coinciden las pruebas", vbInformation cnn1.Execute " update Especificar_calendario_plazos set nombre_caso_prueba='" & in_caso_prueba & "' where codigo_especificacion='" & Cod & "'" Else MsgBox " No coinciden las pruebas", vbInformation End If End If
Saludos,
70
« en: Sábado 20 de Agosto de 2005, 12:33 »
Hola Kev, disculpa pero no me he pasado por aquí desde hace mucho. Mi MSN es : erikapg_18@hotmail.comY el significado de mi avatar... te lo diré por el MSN si tanta intriga te da . Saludos,
71
« en: Viernes 19 de Agosto de 2005, 08:40 »
El problema está en que tienes como campo clave el codigo_prueba (el código de usuario) y al intentar hacer INSERT con el mismo codigo_prueba pues se actualiza (ya que ese es el código que identifica ese registro). Para evitarlo yo pondría los siguientes campos: CodRegistro -> Campo clave de la tabla Codigo_Prueba Nombre_Prueba
Saludos,
72
« en: Miércoles 17 de Agosto de 2005, 08:32 »
Ya te envié eso al correo.
Saludos,
73
« en: Martes 16 de Agosto de 2005, 10:21 »
Hola jodido5, en vez de ejecutar un script... ¿por qué no haces un backup de la BD vacía y en tu instalador, la restauras por código? Yo lo hago así y no tengo ningún problema.
Si necesitas el código para restaurar una base de datos por VB te lo doy sin problemas. Espero que este consejo te sirva de algo.
Saludos,
74
« en: Martes 16 de Agosto de 2005, 10:16 »
Si, no he conseguido sacar el nombre del grupo de trabajo, y como no encuentro documentación en Internet para sacarlo me conformo con que si existe un dominio que me ponga el nombre del dominio ya que casi todos los usuarios que utilizarán la aplicación pertenecerán a un dominio. Si encuentro algo para que me saque el grupo de trabajo te lo haré saber (y viceversa ) Saludos,
75
« en: Miércoles 10 de Agosto de 2005, 14:58 »
Pon la propiedad Style del combo a Dropdown List y él ya se encarga de cuando metas una letra ir al primero que encuentre que empieze por ella, además con esa propiedad el combo no es "editable" por el usuario.
Saludos,
Páginas: 1 2 [3] 4 5 ... 9
|
|
|