|
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
26
« en: Miércoles 24 de Junio de 2009, 16:27 »
La instrucción EXISTS devuelve un TRUE ó FALSE. Para que esa select te funcione, debes igualar algo de la select anterior a la subselect que está dentro del exists. Es decir, suponiendo que tengas la tabla Empresas con primary key (idEmpresa) y la tabla Trabajadores con primary key (idempresa, idtrabajador), si queremos sacar las empresas que no tengan trabajadores utilizando EXISTS la Select sería la siguiente: SELECT E.* FROM Empresas E WHERE NOT EXISTS (SELECT 1 FROM Trabajadores T WHERE E.idEmpresa = T.idEmpresa)
En tu caso deberías igualar algo (las keys) de la tabla exterior a la que está dentro del EXISTS para que devuelva TRUE o FALSE. PD: No recomiento usar ni IN ni EXISTS ya que son instrucciones lentas cuando tenemos muchos registros. Saludos,
27
« en: Sábado 6 de Junio de 2009, 18:27 »
He puesto todos tus campos a INT, igual por ahi viene el fallo. ¿Cual es el error que te da? Si eso pasame el script de creación de tu tabla y lo pruebo exactamente como la tienes.
Saludos,
28
« en: Sábado 6 de Junio de 2009, 17:58 »
SELECT Cotizacion.Numero FROM Cotizacion LEFT JOIN Pedidos ON Cotizacion.Numero = Pedidos.NumeroCotizacion WHERE ISNULL(Pedidos.NumeroCotizacion, -999) = -999
Saludos,
29
« en: Sábado 6 de Junio de 2009, 17:44 »
He modificado la SQL y la he probado con tu hoja excel y me funciona correctamente. Prueba otra vez porque la que he puesto (esta modificada en el anterior post) la he probado. SELECT Municipio, LEFT(LTRIM(Municipio), 3), LEFT(LTRIM(Municipio), 2), CASE WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 0 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 0 THEN 'Linea' WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 0 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 1 THEN 'Total agrupacion LEFT(3)' WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 1 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 1 THEN 'Total agrupacion LEFT(2)' ELSE 'Total' END, SUM(Total) AS Total, SUM(residente) AS Residente, SUM(reside) AS Reside, SUM(residetrabaja) AS ResideTrabaja, SUM(resideestudia) AS ResideEstudia FROM Tabla GROUP BY LEFT(LTRIM(Municipio), 2), LEFT(LTRIM(Municipio), 3), Municipio WITH ROLLUP
Saludos,
30
« en: Sábado 6 de Junio de 2009, 12:40 »
Podrías mirar el LOG de la base de datos. Este Script regenera los índices de la base de datos y después de regenerarlos reduce el tamaño de los ficheros. BEGIN SET NOCOUNT ON DECLARE @sLogicoMDF VARCHAR(250) DECLARE @sLogicoLDF VARCHAR(250) DECLARE @rs CURSOR DECLARE @sTabla VARCHAR(200) DECLARE @sSQL VARCHAR(2000) SET @rs = CURSOR FOR SELECT NAME FROM BASEDATOS..SysObjects WHERE xType = 'U' AND NAME <> 'dtproperties' ORDER BY Name OPEN @rs FETCH NEXT FROM @rs INTO @sTabla WHILE @@FETCH_STATUS = 0 BEGIN SET @sSQL = 'DBCC DBREINDEX (''BASEDATOS.dbo.' + LTRIM(@sTabla) + ''') WITH NO_INFOMSGS' EXEC (@sSQL) FETCH NEXT FROM @rs INTO @sTabla END CLOSE @rs DEALLOCATE @rs -- Una vez regenerados los índices, compactamos ficheros SELECT @sLogicoMDF = RTRIM(LTRIM(ISNULL(NAME, ''))) FROM BASEDATOS..SYSFILES WHERE CAST(GroupID AS BIT) = 1 SELECT @sLogicoLDF = RTRIM(LTRIM(ISNULL(NAME, ''))) FROM BASEDATOS..SYSFILES WHERE CAST(GroupID AS BIT) = 0 USE BASEDATOS IF LEN(@sLogicoMDF) > 0 BEGIN CHECKPOINT DBCC SHRINKFILE (@sLogicoMDF, 7) CHECKPOINT END IF LEN(@sLogicoLDF) > 0 BEGIN CHECKPOINT DBCC SHRINKFILE (@sLogicoLDF, 7) CHECKPOINT END SET NOCOUNT OFF END
Espero que te sirva. Saludos,
31
« en: Sábado 6 de Junio de 2009, 12:36 »
Hola, podrías también ver la opción de utilizar GROUPING. SELECT Municipio, LEFT(LTRIM(Municipio), 3), LEFT(LTRIM(Municipio), 2), CASE WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 0 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 0 THEN 'Linea' WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 0 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 1 THEN 'Total agrupacion LEFT(3)' WHEN GROUPING(LEFT(LTRIM(Municipio), 3)) = 1 AND GROUPING(LEFT(LTRIM(Municipio), 2)) = 0 AND GROUPING(Municipio) = 1 THEN 'Total agrupacion LEFT(2)' ELSE 'Total' END, SUM(Total) AS Total, SUM(residente) AS Residente, SUM(reside) AS Reside, SUM(residetrabaja) AS ResideTrabaja, SUM(resideestudia) AS ResideEstudia FROM Tabla GROUP BY LEFT(LTRIM(Municipio), 2), LEFT(LTRIM(Municipio), 3), Municipio WITH ROLLUP
Aquí tienes la consulta que necesitabas, ahora ya sólo queda que la ordenes como quieras. Saludos,
32
« en: Domingo 30 de Septiembre de 2007, 20:14 »
Puede ser que exista más de una copia de seguridad en el mismo fichero?
33
« en: Sábado 1 de Julio de 2006, 18:54 »
Gracias por la aclaración. Lo he preguntado porque sé que por latinoamérica llamar Gallego a alguien signifca: 5. adj. C. Rica. tonto (falto de entendimiento o razón). Ya que signifca que es de España (como yo) entonces no me tomaré a mal ese comentario.. Ale, muchas gracias
34
« en: Sábado 1 de Julio de 2006, 10:56 »
Out of TopicX.Cyclop, ¿a qué te refieres con ser Gallego? ¿Significa algo esa palabra por tu tierra? Espero respuesta (ala, seguid con vuestras peleas que últimamente yo no sé qué ha hecho el mundial que estais todos insoportables) [este comentario va sin maldad]
35
« en: Domingo 11 de Junio de 2006, 02:09 »
Yo, por no seguir a todo el mundo, que Brasil ya aburre, digo que.. o España o República Checa, aupa los equipos pequeños y también Costa de Marfil (yo veo el vaso tan medio lleno que hasta el agua se cae por los laos, fijate). be different
36
« en: Miércoles 7 de Junio de 2006, 23:51 »
Falta España en esa lista...
37
« en: Viernes 2 de Junio de 2006, 11:15 »
Sumisa y obediente como mi PC. je je je je je je je parece muy obvio es que ellas prefieren mantenerse en el anonimato dado que ellas no son muy dadas a revelar su identidad A mi también me parece obvio leyendo ciertas líneas por este foro...
38
« en: Jueves 1 de Junio de 2006, 21:13 »
Buenas, estoy haciendo mi primer OCX. Se trata de un calendario parecido al que tiene Outlook. Mi duda es la siguiente: Ya hize los eventos del control, ahora le estoy metiendo todo el tema de propiedades para que pueda cambiar el BackColor, BackStyle, etc etc. Al ser un calendario, me interesa poder cambiar la fuente a distintas zonas del OCX, por ejemplo, al título de los meses. Al ejecutar me da error en esta linea: Set titMes1.Font = PropBag.ReadProperty("Font", Extender.Font)
Pongo aquí parte del código que tengo para que me digan qué tengo mal. Private mnTituloDiaSemanaFont As Font Private Sub UserControl_InitProperties() Set mnTituloDiaSemanaFont = Extender.Font End Sub '//Cargar valores de propiedades desde el almacenamiento Private Sub UserControl_ReadProperties(PropBag As PropertyBag) Set titMes1.Font = PropBag.ReadProperty("Font", Extender.Font) End Sub '// Escribir valores de propiedades en el almacenamiento Private Sub UserControl_WriteProperties(PropBag As PropertyBag) PropBag.WriteProperty "Font", titMes1.Font, Extender.Font End Sub '============= PROPIEDAD FONT DE LOS DIAS DE LA SEMANA === Public Property Get Font() As Font Set Font = mnTituloDiaSemanaFont End Property Public Property Set Font(lFont As Font) With mnTituloDiaSemanaFont .Bold = lFont.Bold .Charset = lFont.Charset .Italic = lFont.Italic .Name = lFont.Name .Size = lFont.Size .Strikethrough = lFont.Strikethrough .Underline = lFont.Underline .Weight = lFont.Weight End With PropertyChanged "Font" End Property '========================================
Pongo una foto para que lo entendais mejor. Gracias.
39
« en: Sábado 27 de Mayo de 2006, 18:42 »
¿no quieres ser mi novia virtual? Si fuera heterosexual te diría que no te conozco o te daría cualquier escusa con tal de esquivar la pregunta... . De todas formas, tal y como está este foro, no estaría mal que alguien se animase a hacer una agencia matrimonial, sería un negocio muy próspero visto lo visto.
40
« en: Viernes 26 de Mayo de 2006, 08:53 »
Yo voto a mi niña.
PD: ¿Los chicos de SoloCodigo estais con las hormonas un pelín revolucionadas no?
41
« en: Jueves 25 de Mayo de 2006, 20:10 »
Entonces juez te debo una disculpa. A veces tengo días raros. Gracias entonces... lo sientooooo
42
« en: Miércoles 24 de Mayo de 2006, 20:43 »
Tambien esta Shiquilla, que muy poco la vemos pero la que la hemos podido ver en la foto ........................................ Esto no lo he entendido... ¿me estás llamando tonta? Últimamente no entro muxo, cosas del trabajo.. bueno, espero respuesta.. que aunque esté ausente sigo leyendo el foro.... Waiting...
43
« en: Viernes 21 de Abril de 2006, 16:26 »
Para mostrar una pantalla como la indicada: Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _ "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias _ "SHGetPathFromIDListA" (ByVal pidl As Long, _ ByVal pszPath As String) As Long Const BIF_RETURNONLYFSDIRS = &H1 Type BROWSEINFO hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type Public Function gfsSeleccionaDirectorioACopiar(Owner As Form, lsTitulo As String) As String Dim bi As BROWSEINFO Dim IDL As ITEMIDLIST Dim r As Long Dim pidl As Long Dim tmpPath As String Dim pos As Integer bi.hOwner = Owner.hwnd bi.pidlRoot = 0& bi.lpszTitle = lsTitulo bi.ulFlags = BIF_RETURNONLYFSDIRS pidl = SHBrowseForFolder(bi) tmpPath = Space$(512) r = SHGetPathFromIDList(ByVal pidl, ByVal tmpPath) If r Then pos = InStr(tmpPath, Chr$(0)) tmpPath = Left(tmpPath, pos - 1) If Right(tmpPath, 1) <> "\" Then tmpPath = tmpPath & "\" gfsSeleccionaDirectorioACopiar = tmpPath Else 'gfsSeleccionaDirectorio = "" End If End Function
Lo otro no te puedo ayudar ya que yo no uso controles data. Saludos,
44
« en: Viernes 21 de Abril de 2006, 16:04 »
Ya lo solucioné, gracias de todas formas. Pongo aquí la solución por si a alguien le sirve: En la cabecera del grupo he puesto la siguiente fórmula: whileprintingrecords; //Pongo las variables a 0 para cada agrupación shared numbervar nHoras:=0; shared numbervar nMinutos:=0;
En los detalles del informe he puesto la siguiente fórmula: whileprintingrecords; //Calculo las horas y minutos shared numbervar nHoras := nHoras + Hour ({vFichajes.dHoras}); shared numbervar nMinutos := nMinutos + Minute ({vFichajes.dHoras}); shared numbervar nHoras := nHoras + int(shared numbervar nMinutos/60); shared numberVar nMinutos:= nMinutos - (int(shared numbervar nMinutos/60)*60);
Y en el pie del grupo he puesto la siguiente fórmula: whileprintingrecords; //Aquí formateo el campo para que me lo ponga con formato hora (hh:mm) TimeValue(shared numbervar nHoras,shared numbervar nMinutos,0);
Saludos,
45
« en: Jueves 20 de Abril de 2006, 12:52 »
Buenas, estoy haciendo un informe en Crystal Reports donde tengo un campo que es de tipo hora, y quiero que al final del Grupo se haga un sumatorio de ese campo y que me lo de en formato hh:mm.
He intentado hacerlo pero no me deja sumar las horas automáticamente (desde el propio menú para insertar un total).
Sé que hay alguna forma de crear y manejar variables en Crystal, pero no encuentro información ya que si automáticamente no lo hace, por lo menos haciendo TimeValue(campoHora) + TimeValue(NombreVble) (Tal y como se haría en VB) en Crystal podría obtener el total. ¿Alguien podría ayudarme?
Gracias.
46
« en: Lunes 10 de Abril de 2006, 19:25 »
Hola Shiquilla, porque no dices el porque lo eres. No lo soy porque todas las religiones en este mundo son sectas, y la iglesia es el negocio más rentable que ha creado el hombre, todo es una mentira. Saludos,
47
« en: Lunes 10 de Abril de 2006, 19:18 »
Al item que agregues a la lista tienes que ponerle el ID que tienes en base de datos, esto se hace con esta linea: Lista.ItemData(Lista.NewIndex) = IIf(Not IsNull(loRS!nCodigo), loRS!nCodigo, 0)Luego, para saber en dónde ha clickado el usuario, sería recoger el código que ha seleccionado y hacer la SELECT correspondiente: lidCodigo = Lista.ItemData(Lista.ListIndex)Te paso un ejemplo Option Explicit Private goConexion As ADODB.Connection Private Const gsCadenaConexion = "PROVIDER=SQLOLEDB;DATA SOURCE=(local);DATABASE=BaseDeDatos;UID=sa;PWD=" Private Sub Form_Load() msCargarLista End Sub Public Property Get goBD() As Connection Dim lsCadenaConexion As String lsCadenaConexion = gsCadenaConexion If goConexion Is Nothing Then Set goConexion = New ADODB.Connection goConexion.Open lsCadenaConexion Else If goConexion.State = 0 Then goConexion.Open lsCadenaConexion End If Set goBD = goConexion End Property Private Sub msCargarLista() Dim loItem As ListBox Dim lsSQL As String Dim loRS As Recordset Lista.Clear lsSQL = "SELECT * FROM Empresas" Set loRS = goBD.Execute(lsSQL) While Not loRS.EOF Lista.AddItem IIf(Not IsNull(loRS!sNombre), loRS!sNombre, "") Lista.ItemData(Lista.NewIndex) = IIf(Not IsNull(loRS!nCodigo), loRS!nCodigo, 0) loRS.MoveNext Wend loRS.Close Set loRS = Nothing End Sub Private Sub Lista_Click() Dim lidCodigo As Long Dim lsSQL As String Dim loRS As Recordset Text1.Text = "" If Lista.ListIndex <> -1 Then lidCodigo = Lista.ItemData(Lista.ListIndex) lsSQL = "SELECT * FROM Empresas WHERE nCodigo = " & lidCodigo Set loRS = goBD.Execute(lsSQL) If Not loRS.EOF Then Text1.Text = IIf(Not IsNull(loRS!sDireccion), loRS!sDireccion, "") End If loRS.Close Set loRS = Nothing End If End Sub
Saludos,
48
« en: Domingo 9 de Abril de 2006, 11:19 »
Soy atea, asi que con esto he respondido.
Saludos,
49
« en: Viernes 24 de Febrero de 2006, 08:54 »
conexion.Execute "DELETE FROM FACTURAS WHERE F_Numero =" & Numero & " and F_Tipo = '" & Tipo & "' AND F_Fecha = #" & Format(FechaFactura , "mm/dd/yyyy") & "#"
Saludos,
50
« en: Sábado 11 de Febrero de 2006, 13:08 »
Buenas Seba_m, ya te agregué al MSN. Mi metodología a la hora de hacer un programa es hacer, por cada tabla, una clase donde tengo las operaciones más frecuentes que se harán sobre esa tabla (recuperar un registro, insert, update....). Por ejemplo, imaginate que tengo una tabla Clientes. Cuyos campos son: - idCliente (clave primaria) - Nombre - Direccion Entonces, en mi proyecto tendré una clase que se llamará clsClientes. En la clase, tengo una propiedad que devuelve la Key del cliente de esta forma: clsClientes#CamposClave (por ejemplo si recupero el cliente 1 entonces será --> clsClientes#1) Hasta aquí bien, ahora vamos con el sistema de bloqueos. Tengo una tabla que se llama Bloqueos que tiene los siguientes campos: - sKeyRegistro - idUsuario Si el usuario 34 está editando el cliente 1, en la tabla Bloqueos habrá un registro tal que asi: sKeyRegistro idUsuarioclsClientes#1 34 Ahora, si el usuario 50 quiere editar el cliente 1, hago lo siguiente: goBD = la conexion a la bd goUsuario = clase de usuario global a la aplicacion que contiene el codigo de usuario (en este caso será el 50) Public Function gfbBloquearRegistro(loObjecto As Object) As Boolean Dim lsSQL As String Dim loRS As Recordset Dim lbBloqueado As Boolean 'Si el registro no está bloqueado entonces lo bloqueo lbBloqueado = False lsSQL = "SELECT * FROM Bloqueos WHERE sKeyRegistro = " & loObjecto.MPSCODIGO 'Propiedad que me devuelve la Key Set loRS = goBD.Execute(lsSQL) lbBloqueado = Not loRS.EOF If Not lbBloqueado Then lsSQL = "INSERT INTO Bloqueos VALUES (" & loObjecto.MPSCODIGO & "," & goUsuario.midUsuario & ")" goBD.Execute lsSQL End If loRS.Close Set loRS = Nothing End Function Dim loCliente As clsClientes Dim lbBloqueado As Boolean Set loCliente = New clsClientes loCliente.MPSCODIGO = "clsClientes#1" lbBloqueado = gfbBloquearRegistro(loCliente) If lbBloqueado Then MsgBox "EL registro está bloqueado bla bla bla"
Bueno, por aquí no consigo explicartelo mejor. A ver si entras al MSN y te lo explico más detalladamente. SObre el sistema de base de datos, yo uso este sistema para cualquier gestor de base de datos (lo he usado tanto para Access como para SQL Server) Saludos,
|
|
|