viernes, 14 de febrero de 2014

RecordCount siempre vale -1

Seguro que muchos programadores de vb6 esto lo darán por obvio, pero si estas en mi situación de toma un código y haz que funcione bien en SqlSever tal vez no sea tan evidente.
Durante la migración
Dim total as Integer
sSql = "SELECT distinct nif FROM miTabla "
miRs.Open sSql, gConSQL
total = miRs.RecordCount
Con la conexión vieja funcionaba pero con la conexión a sqlserver no ¿? el resultado era siempre el mismo -1 y tenía datos!!!
Solución
Dim  total as Integer 
sSql = "SELECT distinct nif FROM  miTabla "
miRs.Open sSql, gConSQL, , adOpenStatic
total = miRs.RecordCount
http://www.lawebdelprogramador.com/foros/Visual_Basic_ADO/1064827-RecordCount_SQL...ante_query__.html

viernes, 7 de febrero de 2014

Servidores vinculados - update




Tengo dos servidores
Servidor1
Servidor2

Están vinculados, es decir desde el servidor 1 puedo acceder al servidor2.
Si ejecuto esta sentencia en el servidor1

select servidor2.mibase.dbo.mitabla.columna1  from servidor2.mibase.dbo.mitabla 

Mens. 4104, Nivel 16, Estado 1, Línea 1
El identificador formado por varias partes "servidor2.mibase.dbo.mitabla.columna1" no se pudo enlazar.

Pero esto funciona:select mitabla.columna1  from servidor2.mibase.dbo.mitabla 

Bien alguno estará pensado que estoy un poco torpe, porque lo podría solucionan con alias. Eso sería cierto si no fuera porque lo quería en un update y era algo más complejo que todo eso

UPDATE servidor2.mibase.dbo.mitabla  SET
 columna2 = (SELECT a.valor1 FROM #tablatemporal a WHERE mitabla.columan1 = a.c1)
 WHERE columan1 IN (SELECT c1 FROM #tablatemporal)

viernes, 31 de enero de 2014

Secuencias Sql Server

Hablando sobre cuál sería la mejor forma de poner un contador de visitas. Descubrí las secuencias. Claro si eres de Oracle esto se sonara como algo normal, pero si vives del SQL SERVER tal vez no te suene tan evidente y lo primero que pienses sea en una tabla con una columna IDENTITY.

Aquí te dejo como construir un  secuencia.. si lo único que quieres es poner un contador de visitas tampoco hay que complicarse con una tabla no??

http://www.guillesql.es/Articulos/Secuencias_SQLServer2012.aspx

http://blogs.msdn.com/b/askjay/archive/2012/10/08/sequence-objects-in-sql-2012-and-sql-2008.aspx

viernes, 24 de enero de 2014

SqlServer date a string yyyymm



Chorra del dia, estoy en  SQLSERVER un campo de tipo date, pero quiero obtener una cadena con formato yyyymm (si el mes es 9 quiero 09 ).



select fecha,  YEAR(fecha ), MONTH(fecha),  FORMAT( MONTH(fecha),'00') , CONCAT (YEAR(fecha ), FORMAT( MONTH(fecha),'00')) 
from mitabla


sábado, 18 de enero de 2014

Parámetros opcionales y sus problemas



Vale culpa mía, tengo mucha tendencia a usar parámetros opcionales. Y para intentar arreglar un problema de otra cosa, en una dll puse uno, está dll se usa en mucho proyectos.

El problema, que si se compila nuevamente el proyecto que lo usa no hay problema, pero si otra dll lo usa da problemas en ejecución.

La explicación no puede estar más claro que en este link
http://www.variablenotfound.com/2010/05/parametros-opcionales-usense-con.html

jueves, 2 de enero de 2014

Cookies


Después de mirar, mucho esta el tema de las cookies, en realidad no creo que alguien que tenga un blog, sin publicidad y que únicamente usa el Google Analytics para ver quien usa el blog, debamos cumplir con esta exigencia. Pero como pueden resultar contradictoria la información, veamos como curarnos en salud

http://www.doctormetrics.com/2012/06/13/cumplir-ley-cookies-google-analytics/#.UsWcnbTJKQQ

http://nuriagarciacastro.es/guia-legal-del-blog-v-el-caso-de-google-analytics/

He modificado mi aviso:
Por : http://www.focoblogger.com/2014/02/implementar-aviso-de-cookies-en-blogger.html

Es lo mismo pero de distinta forma.

El año pasado tenia este aviso
En la plantilla del blog, añade un Gadget HTML/Javascript

Copiar el código que te da http://sitebeam.net/cookieconsent/code/

El mio está copiado de alli directamente (más o menos)


<!-- Begin Cookie Consent plugin by Silktide - http://silktide.com/cookieconsent -->
<link rel="stylesheet" type="text/css" href="http://assets.cookieconsent.silktide.com/current/style.min.css"/>
<script type="text/javascript" src="http://assets.cookieconsent.silktide.com/current/plugin.min.js"></script>
<script type="text/javascript">
// <![CDATA[
cc.initialise({
            cookies: {
                        analytics: {}
            }

});
// ]]>
</script>
<!-- End Cookie Consent plugin -->

lunes, 4 de noviembre de 2013

Serializar un objeto .net

Serializar un objeto


1. Objeto a xml


Private Function CrearXMLDesdeObj(ByVal objClase As MiClase) As XmlDocument
Dim oXmlDocument As XmlDocument = New XmlDocument()
Dim oXmlSerializer As XmlSerializer = New XmlSerializer(objClase.GetType())
Dim oStringBuilder As StringBuilder = New StringBuilder()
Dim oStringWriter As StringWriterWithEncoding = New StringWriterWithEncoding(oStringBuilder, Encoding.UTF8)
oXmlSerializer.Serialize(oStringWriter, objClase )
oXmlDocument.LoadXml(oStringBuilder.ToString())
Return oXmlDocument
End Function

2. Quitar elemento vacíos


Serializar si no se quieren cosas raras, es muy fácil. El problema es cuando por ejemplo no quieren que salga la etiqueta cuando el valor es null, y por supuesto no se quiere poner la propiedad nulable. Aqui una funcion que borra esos elmentos.

Cuando se pone IsNullable = true si el valor es null se serializa


Public Function EliminarNullElementsFromXML(ByVal oXmlDocument As XmlDocument) As XmlDocument
Dim oXmlDeclaration As XmlDeclaration = CType(oXmlDocument.FirstChild, XmlDeclaration)
Dim oXDocument As XDocument = XDocument.Parse(oXmlDocument.OuterXml)
Dim oXElements As IEnumerable(Of XElement) = oXDocument.Descendants()
Dim oXElementsDelete As List(Of XElement) = New List(Of XElement)
Dim elem_list As IEnumerable(Of XElement) = From elem In oXElements Select elem
For Each element As XElement In elem_list
If (element.IsEmpty) Then
oXElementsDelete.Add(element)
End If
Next
oXElementsDelete.Remove()
oXmlDocument.LoadXml(oXDocument.ToString(SaveOptions.DisableFormatting))
oXmlDocument.InsertBefore(oXmlDeclaration, oXmlDocument.FirstChild)
Return oXmlDocument
End Function


3. Serializar Bool que pueden ser null

[Serializable]
public class Foo
{
[XmlIgnore]
public bool? Bar { get; set; }

[XmlAttribute("Bar")]
[EditorBrowsable(EditorBrowsableState.Never)]
public string xmlBar
{
get { return Bar.ToString(); }
set
{
if (string.IsNullOrEmpty(value)) Bar = null;
else Bar = bool.Parse(value);
}
}
}

4. Quitar los elementos vacios.

La funcion CleanEmptyTags, quita los elementos vacios , si la propiedad es un string tendrias varios

Public Class UtilXml

Public Shared Function Serialize(ByVal objectToSerialize As Object) As String
Dim oXmlDocument As XmlDocument = New XmlDocument()
Dim oXmlSerializer As XmlSerializer = New XmlSerializer(objectToSerialize.GetType())
Dim oStringBuilder As StringBuilder = New StringBuilder()
Dim oStringWriter As StringWriterWithEncoding = New StringWriterWithEncoding(oStringBuilder, Encoding.UTF8)
oXmlSerializer.Serialize(oStringWriter, objectToSerialize)
Return (CleanEmptyTags(oStringWriter.GetStringBuilder().ToString()))
End Function


Private Shared Function CleanEmptyTags(ByVal xml As String) As String
Dim regex As RegularExpressions.Regex = New RegularExpressions.Regex("(\s)*<(\w)*(\s)*/>")
Return regex.Replace(xml, String.Empty)
Return xml
End Function
End Class