diumenge, 6 de novembre del 2011

Problemes TrueOleDBGrid80 al crear columnes desenllaçades de dades en temps d'execució

Si en VB6 volem crear una TrueOleDBGrid80.Column desenllaçada de dades (unbound) i en temps d'execució, és obligatori que després de crear la columna o columnes cridem a la funció  "HoldFields" ja que si no es fa, la columna es crea però en temps d'execució no es poden entrar dades. Aquest és l'exemple a seguir:

Dim Col As TrueDBGrid80.Column
With TDBGrid1
     Set Col = .Columns.Add(1)
     Col.Visible = True
     Col.Caption = "Unbound"
     .HoldFields
     .ReBind
End With

Us deixo l'enllaç relacionat a sota:

http://helpcentral.componentone.com/nethelp/truedbgrid8/default.htm?turl=creatingunboundcolumns.htm

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