dimecres, 26 d’octubre del 2011

Consulta SQL per veure totes les opcions d'una plantilla i quines estan marcades

Quan ens trobem que he fer una consulta d'una taula on per una determinada opció cal saber si està marcada o no, moltes vegades ho fem de la següent manera:

    ColParametres=TornaTotsElsParametres()
    for each Parametre in ColParametres
        if MiraSiElClientTeElParametreMarcat(codi_client, codi_parametre) then
            'parametre marcat
        else
            'parametre NO marcat
        endif
    next Parametre

Mostrant la taula de la següent manera:


Això comporta el problema que la funció MiraSiElClientTeElParametreMarcat() també fa un accés a la base de dades, i fem aquest accés per cada paràmetre de la llista. Per tant accedim a la base de dades tantes vegades com paràmetres tenim a la taula base.

Una millor manera de fer-ho, suposant que la taula "Paràmetres" té els camps "codi_client", "codi_parametre"; seria fent una consulta única de la següent manera:


    SELECT Codi_Parametre, Descripcio
    (SELECT Codi_Parametre FROM Parametres_Clients
    WHERE Codi_Client = 'codidelclient'
    AND codi_parametre=Parametres.Codi_Parametre) AS Codi_Parametre_Client"
    FROM Parametres

LLavors el codi quedaria com:

    if tb!Codi_Parametre_Client Is Null then
        'parametre No marcat
    else
        'parametre marcat
    endif

dilluns, 24 d’octubre del 2011

Accedir via "for each" a una colecció en VB6

A vegades quan programem amb VB6, ens trobem que no podem accedir a una coleccio personalitzada via "for each". Aquesta funció no rutlla:


Public Property Get NewEnum() As IUnknown
    'esta propiedad permite enumerar
    'esta colección con la sintaxis For...Each
    Set NewEnum = mCol.[_NewEnum]
End Property

Per poder accedir via "for each" cal seleccionar la paraula "NewEnum" i anar a l'opció de menú "Herramientas" --> "Atributos del procedimiento..." i un cop al formulari clicar el botó "Abanzados >>". Un cop desplegades les opcions avançades, cal comprovar que segurament no tens un -4 en el "Id. del procedimiento" ni tens la opció marcada de "Ocultar este miembro". Un cop arreglat això ja podràs accedir a la colecció via "for each".

dimarts, 26 d’abril del 2011

Connexió lenta entre un host win7 64 i una windows virtual pc amb xp

He trobat com arreglar aquest bug en aquest post:

http://www.softblog.com/2009-12/slow-network-virtual-pc-windows-7/

Si no vols llegir aquest post i vols anar directament a la solució, doncs aquí la tens:
  1. En primer lloc fes una cópia del registre
  2. Entra al registre (regedit.exe) a la següent key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. Crea una nova DWORD amb el nom DisableTaskOffload i posa-hi el valor 1
  4. Reinicia
Els problemes jo els tenia en una direcció, del host a la màquina virtual. Es pot comprovar la eficiència de la xarxa amb aquesta eina:

http://www.cyberhades.com/2011/04/07/commtest-aplicacion-gratuita-para-comprobar-la-velocidad-de-la-red/?utm_source=rss&utm_medium=rss&utm_campaign=commtest-aplicacion-gratuita-para-comprobar-la-velocidad-de-la-red

dimarts, 20 d’abril del 2010

Especificació del C# 4.0

A continuació poso l'enllaç a l'especificació del C# 4.0:

http://geeks.ms/blogs/jorge/archive/2010/04/20/c-language-specification-4-0.aspx

dimecres, 31 de març del 2010

Connexions lentes a SQL Server 2005 des d’un client Windows 7


El problema ve per el protocol LLMNR (Link Local Multicast Name Resolution)

Per més informació sobre aquest protocol:

http://technet.microsoft.com/en-us/library/bb878128.aspx

He trobat en un fòrum aquest post:

 "I looked on the network traffic with Network Monitor.
It seems that the delayed caused by the LLMNR protocol which is a new name resolution protocol for both IPv4 & IPv6 that is used on Vista, Server 2008 & Windows 7.
The client computer which uses Windows 7, sends an LLMNR request to the server which is 2003 server.
I guess the server does not familier with this protocol, and thus doesn't respond to it.
The client resend again the request after 0.1s.
After waiting another 0.2s for respond, with no answer, it sends NbtNs (NetBios I guess), and only then get an NbtNs respond from the server with its IP.
In total, 0.3sec where wasted on waiting for a response from the server.
On the next connection attempt, the client sends again LLMNR request as described above, and waste another 0.3s. This time, no NbtNs request was send, since I guess its uses the previously received IP.
So, for every connection we waste 0.3s, multiply it by 20 connections, and voila, we'll get to 6s of delay...
I guess you didn't encountered this problem since your connection was against a server which uses Vista, Server 2008 or Windows 7. Try your tests against XP or Server 2003."


Pots mirar el fòrum sencer a l'adreça:

http://social.msdn.microsoft.com/Forums/en-US/windowscompatibility/thread/f295994c-5812-4e46-8ac9-f05471d4dd54

També en parlen en aquest altre blog:

http://ttcshelbyville.wordpress.com/2009/11/30/slow-sql-connection-to-windows-7/

Per tant cal desactivar el protocol LLMNR

Per desactivar el protocol cal anar al "Editor de directivas de grupo local", posant al menú inici, al textbox de "buscar programas y archivos": GPEdit.msc

Llavors cal anar a habilitar la següent entrada:

(en anglès)
Computer Configuration\Administrative Templates\Network\DNS Client
\Turn off Multicast Name Resolution = Enabled


(en castellà)
Configuración del equipo\Plantillas administrativas\Red\Cliente DNS\Desactivar resolución de nombres de multidifusión = Habilitar
























També es pot fer per el registre tot i que no ho he provat:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Win dows NT\DNSClient
\EnableMulticast = 0x0

dimarts, 23 de març del 2010

Còpies SQL en xarxa

Aquesta és la meva primera entrada del meu primer blog. Ja se sap que les primeres vegades son una mica desastroses, tot i que totalment necessàries per a les segones oportunitats. La funcionalitat d'aquest blog no vol ser més que la d'anotar-me una sèrie de recordatoris "informàtics" en forma d'entrades per a poder ser consultades amb posterioritat i des de qualsevol lloc. Però posades en un blog per si poden ser útils per algun altre internauta dedicat a aquest mon de la programació.

Avui per començar voldria publicar un script per SQL Server per a poder fer còpies en xarxa. Ens pot servir en els casos de servidors amb poc espai de disc. Cal tindre en compte que aquestes còpies triguen més que les còpies locals. La primera part crea un dispositiu en xarxa, la segona part fa la còpia, i la tercera esborra el dispositiu. Aquest és el script:


EXEC master.dbo.sp_addumpdevice

@devtype = N'disk',

@logicalname = N'LAN',

@physicalname = N'\\PcCopies\c\Copies\MyBackup.bak'

GO


BACKUP DATABASE [MyDatabase]

TO [LAN]

WITH NOFORMAT, INIT,

NAME = N'MyDatabase-Completa Base de datos Copia de seguridad',

SKIP, NOREWIND, NOUNLOAD, STATS = 10

GO


IF EXISTS (SELECT name FROM master.dbo.sysdevices WHERE name = N'LAN')

EXEC master.dbo.sp_dropdevice @logicalname = N'LAN'

GO