Es mostren els missatges amb l'etiqueta de comentaris VB6. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris VB6. Mostrar tots els missatges

dimecres, 19 de juny del 2013

Càlcul del dígit de control en el codi SSCC

Recentment m’he trobat amb la necessitat de generar el dígit de control del codi SSCC per unes etiquetes EAN128. He trobat informació al respecte en aquesta web:

http://gs1ec.org/contenido/index.php?option=com_content&view=article&id=5&Itemid=42

La informació de fet és aquesta:

image

A continuació us poso la funció que he fe per tal de controlar aquest dígit de control:

Private Function Verifica_DC_SSCC(ByRef Valor_SSCC As String) As Boolean
Dim i As Byte
Dim TotalBase As Long
Dim Total10 As Long
Dim DC As Byte

    'de moment suposarem que em ve alguna cosa com ara (00)XXXXXXXXXXXXXXXXXC 
    Valor_SSCC = Right$(Valor_SSCC, 18)
   
    If Len(Valor_SSCC) <> 18 Then
        MsgBox "El SSCC ha de ser de 18 dígits.", vbInformation
    End If

    TotalBase = 0
   
    For i = 1 To 17
        TotalBase = TotalBase + Mid(Valor_SSCC, i, 1) * IIf(i Mod 2 = 0, 1, 3)
    Next i
   
    Total10 = TotalBase
   
    While Total10 Mod 10 <> 0
        Total10 = Total10 + 1
    Wend
   
    DC = Total10 - TotalBase

    If DC <> Right(Valor_SSCC, 1) Then
        MsgBox "Dígit de control incorrecte, hauria de ser un: " & DC
        Verifica_DC_SSCC = False
    Else
        Verifica_DC_SSCC = True
    End If
   
End Function

dimecres, 12 de juny del 2013

Desactivar el control automàtic de les columnes Identity en una replicació de barreja al SQL Server 2008 R2

En el cassos en que es vulgui desactivar el control automàtic de les columnes Identity en una replicació cal aplicar aquesta funció:

sp_changemergearticle @publication, @article, "identityrangemanagementoption", "none"

Per executar-la cal fer-ho a la base de dades publicada (per exemple a la base de dades “EXBD”, i a la taula “Tags” on la clau principal és una columna Identity):

sp_changemergearticle ‘EXBD’, 'tags', ‘identityrangemanagementoption’, ‘none’

Això desactiva tot el control del comptador Identity de la publicació, per tant, cal tindre en compte que les dades només seran entrades al publicador o a un subscriptor, ja que en cas contrari hi haurà conflictes amb aquest comptador. Si es volen entrar dades tan al publicador com al subscriptor cal utilitzar les instruccions SET IDENTITY_INSERT “nom_taula” ON i SET IDENTITY_INSERT “nom_taula” OFF per controlar i assignar manualment el comptador. Us poso un exemple per la taula “Tags” on el TagId és la columna Identity:

BEGIN TRANSACTION

SET IDENTITY_INSERT Tags ON

INSERT INTO Tags (TagId,Tag) VALUES (1000,'Tag Nou')

SET IDENTITY_INSERT Tags OFF

COMMIT TRANSACTION

També es poden utilitzar aquestes instruccions amb els objectes ADO per VB6. En el cas de l’exemple anterior i suposant que BDAux és la connexió a la base de dades:

BDAux.BeginTrans

BDAux.Execute "SET IDENTITY_INSERT Tags ON"

sql = "SELECT * FROM Tags

sql = sql & " WHERE TagId=1000"

Set Tb = New ADODB.Recordset

Tb.Open sql, BDAux, adOpenKeyset, adLockOptimistic

If Tb.EOF Then

    Tb.AddNew

    Tb!TagId = 1000

End If

Tb!Tag = “Tag Nou”

Tb.Update

Tb.close

Set Tb = Nothing

BDAux.Execute "SET IDENTITY_INSERT Tags OFF"

BDAux.CommitTrans

dijous, 30 de maig del 2013

Aplicacions VB6 que no funcionen via Terminal Server si no s’entra com usuari Administrador

Suposem el cas d’una aplicació VB6 que funciona correctament, i de la qual tenim una instal·lació que també funciona correctament. Fem la instal·lació en un servidor i quan executem l’aplicació tot funciona bé. Si entrem remotament a aquest servidor, amb un usuari amb privilegis d’administrador i executem l’aplicació també funciona tot correctament.

En canvi, si entrem remotament amb un usuari SENSE privilegis d’administrador resulta que l’aplicació no funciona bé. Es pot donar el cas que no entra en determinats formularis (problema de registre d’OCX) i també es pot donar el cas de que en un formulari per exemple de manteniment, podem veure les dades en els camps de text, si ens movem per el adodc el registre va canviant, però si mirem la consulta per el TDBGrid resulta que està en blanc, no es veu cap dada.

Per tal d’arreglar aquest problema i d’altres problemes d’instal·lació quan s’accedeix a un equip remotament, cal que es faci la instal·lació des de l’opció “Panel de control” –> ”Instalar aplicación en servidor de Escritorio remoto”:

image

S’obrirà un assistent on tan sols cal escollir el programa d’instal·lació que volem executar, i un cop finalitzada la instal·lació polsarem el botó “Finalizar” del assistent. Un cop feta o fetes les instal"·lacions d’aquesta manera, les execucions de l’aplicació via Terminal Server ja funcionaran correctament.

Si no trobeu aquesta opció al “panel de control” també podeu fer-ho amb la comanda CHGUSR /Install

Aquí us deixo un link on s’explica:

http://www.itechtalk.com/thread3652.html

dijous, 26 d’abril del 2012

Arguments de línia de comanda (passar paràmetres) al executar un programa fet en VB6

Ja fa uns dies que em vaig trobar amb la necessitat de poder accedir a diferents servidors sql des d’un mateix executable, depenent de l’accés directe que tenia a l’escriptori. Vull dir, que a l’escriptori tenia dos accessos directes a un EXE, des d’un havia d’atacar al servidor sql “ServidorAAA” i des de l’altre al servidor “ServidorBBB”. Vaig pensar que una bona manera de fer-ho seria mitjançant el pas de paràmetres a l’executable. Avui ho he estat mirant, no recordava si es podia fer o no amb VB6, i al final m’he posat a investigar.

La manera de fer-ho es ben senzilla, tan sols cal accedir al valor de la variable “Command”. Si te un valor, és que s’han passat paràmetres, si no té cap valor llavors vol dir que no s’ha passat cap paràmetre. En el meu cas aquest codi serviria:

If Command = "" Then
    Server = PosarElServidorQueEsVulgui
Else
    Server = Command
End If

Llavors tan sols cal modificar els destins dels dos accessos directes:

Destí accés directe: "C:\AppDir\AppName.exe" ServidorAAA

Destí accés directe: "C:\AppDir\AppName.exe" ServidorBBB

El meu cas és molt senzill, tan sols passo com paràmetre el nom del servidor. El problema ve quan volem passar diferents paràmetres. Doncs bé, el sistema és el mateix, la diferència és que cal tractar la variable “Command” separant els paràmetres. Per exemple, suposant que volem dos paràmetres separats per una coma (“6,9”) es podria aplicar el següent codi:

Dim separador, a, b As Integer

separador = InStr(1, Command,",", vbTextCompare)
a = Mid(Command, 1, separador - 1)
b = Mid(Command, separador + 1)
MsgBox "Primer paràmetre: " & a & “ Segon paràmetre: " & b

Si necessitem més paràmetres encara, el procés seria també el mateix, separar-los per comes (a,b,c,d,e) i llavors com que Command=”a,b,c,d,e” , caldria separar els paràmetres amb un split. En aquests cassos, però,  és millor aprofitar el codi fet dels mestres :-)

http://www.elguille.info/vb/utilidades/LineaComandos_2.htm

Una última cosa, per tal de fer proves, podeu posar els paràmetres d’entrada a la carpeta “generar” de les propietats del projecte:

image