Newsgroup: it.comp.lang.visual-basic
Titolo: Sapere se campo Alfanumerico o Numerico ?

Ciao a tutti,
In VB6 come faccio a sapere se un campo contiene un dato numerico o
alfanumerico ???
Grazie mille a chi mi rispondera'!!!
Bacioni da Lucilla la stella che brilla.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 alfanumerico ???
Esiste la funzione isnumeric, ma in realtà è una chiavica, perchè ti dice
che la stringa contiene un numero anche in casi in cui non lo è affatto.
Come primo controllo, usala (if isnumeric(text1.text) then...), ma se hai
tempo fatti una tua funzione che scandisce la stringa e la valuta.
Se invece ti riferivi al tipo del campo del DB, se usi ADO puoi
tranquillamente usare
Recordset.Fields.Item("nome_colonna").FieldType (o DataType, o Type, non
ricordo) e confrontarlo con le costanti Ad.......
Ciao
Alberto

Grazie, per essere piu' precisa mi riferivo ad un campo che puo' 
contenere il Codice fiscale (Alfanumerico con 16 caratteri) o la 
Partita Iva (Numerico di 11 caratteri).
Ciao Lucilla


 Bacioni da Lucilla la stella che brilla.
direi con isnumeric
Restituisce un valore Boolean che indica se un'espressione può essere
valutata come numero
Dim MyVar, MyCheck
MyVar = "53"   ' Assegna il valore.
MyCheck = IsNumeric(MyVar)   ' Restituisce Vero.
MyVar = "459.95"   ' Assegna il valore.
MyCheck = IsNumeric(MyVar)   ' Restituisce Vero.
MyVar = "45 Help"   ' Assegna il valore.
MyCheck = IsNumeric(MyVar)   ' Restituisce Falso.
se invece intendi campo di un db, questo direi funzioni con access:
Public Function TipoCampo(FldType)
    Select Case FldType
        Case 1: TipoCampo = "BOOL"
        Case 2: TipoCampo = "N-BYTE"
        Case 3: TipoCampo = "N-INT"
        Case 4: TipoCampo = "N-LONG"
        Case 5: TipoCampo = "N-CURR"
        Case 6: TipoCampo = "N-SINGLE"
        Case 7: TipoCampo = "N-DOUBLE"
        Case 8: TipoCampo = "DATE"
        Case 9: TipoCampo = "UNDEF"
        Case 10: TipoCampo = "TEXT"
        Case 11: TipoCampo = "OLE"
        Case 12: TipoCampo = "MEMO/HYPER"
        Case 13: TipoCampo = "UNDEF"
        Case 14: TipoCampo = "UNDEF"
        Case 15: TipoCampo = "N-IDREPLICA/GUID"
        Case 16: TipoCampo = "N-BIGINT"
        Case 17: TipoCampo = "VARBINARY"
        Case 18: TipoCampo = "CHAR"
        Case 19: TipoCampo = "N-NUMERIC"
        Case 20: TipoCampo = "N-DECIMAL"
        Case 21: TipoCampo = "N-FLOAT"
        Case 22: TipoCampo = "TIME"
        Case 23: TipoCampo = "TIMESTAMP"
        Case Else: TipoCampo = "_UNDEF_"
    End Select
End Function
puoi chiamarla tipo:
    For Each fld In td.Fields
        s = "------FLD: " & fld.Name
        s = s & " (" & TipoCampo(fld.Type) & " ; "
ciao

Se guardi in giro per la rete allora troverai un
fracco di esempi già belli e fatti.
Ciao
Andrea

 Bacioni da Lucilla la stella che brilla.
Ooooooh, quanta luce in cielo stasera.... ;-)

 Ciao Lucilla
a sto punto a che te serve sapere se e' numerico o no ?
sai che : 11 = partita iva 16 = cf altro = errato o null
allora all'inserimento dei dati controlli che sia o di 11 o di 16 altrimenti
fai correggere l'input.
nella lettura mettiamo che arrivi ad avere il contenuto in una variabile
stringa chiamata myString : (variant se hai i null )
select case len(myString)
 case 11 'partita iva
    call TrovataPartitaiva(myString)
 case 16 'CF
    call TrovatoCodicefiscale(myString)
 case else
    msgbox "dato non corretto"
end select
-- 
<Gigio2K>
Sito Comune
Nokia -> I.T.H.N. -> 
http://www.ithn.it/
VB -> I.C.L.VB -> 
http://www.it-lang-vb.net/

 sai che : 11 = partita iva 16 = cf altro = errato o null
Forse sarebbe anche ora che si iniziasse a metterne 12, per la partita IVA:
http://www.agenziaentrate.it/servizi/vies/vies.htm
E probabilmente prevederne 14 non sarebbe tutta quella gran cattiva idea:
http://europa.eu.int/comm/taxation_customs/vies/it/vieshome.htm
;-)
-- 
Ale
La RFD originale per it.comp.dotnet su
http://www.sen.it/stoa/articles.asp?id=10
Se vuoi discuterne, vai su it.news.gruppi

 non avendo problemi di prestazioni, farei così:
[Cut]
Quindi 1.2.3.4.5.6,7,8.7,6.5,.,3....,,,,,,4
è un numero valido?
:-))))
Ciao
Alberto

 è un numero valido?
In effetti dovrebbe funzionare così:
L = Len(ExprToParse)
Do
    pos =(InStr(1, "0123456789.EeDd", _
          Mid$(ExprToParse, Count, 1), vbBinaryCompare)
    if (pos >= 1) Then
        Count = Count + 1
        if (pos >= 10) Then
            If (Count >= L) Then
                Numeric = True
            else
                Exit Do
            End if
        End If
    End if
Loop
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 Partita Iva (Numerico di 11 caratteri).
Valido = (strP_IVA Like
"[A-Z][A-Z][A-Z][A-Z][A-Z][A-Z]##[A-Z]##[A-Z]###[A-Z]")


 "[A-Z][A-Z][A-Z][A-Z][A-Z][A-Z]##[A-Z]##[A-Z]###[A-Z]")
Scusate, questo era per il codice fiscale.
Per la P.IVA il concetto non cambia.


 
http://europa.eu.int/comm/taxation_customs/vies/it/vieshome.htm
Alessandro, scusa (mi interessa molto), da cosa deduci che ... si va verso
14 caratteri (escluso il codice ISO)?
Inoltre, ho girato un po' nel sito, ma non ho trovato qualcosa che indichi
quale sia il metodo di controllo della partita IVA per i vari stati. Hai
maggiori informazioni in merito?
Grazie.

 è un numero valido?
Era solo un esempio, da adattare per le proprie esigenze.
Ho inserito l'intercettazione dei segni (,.+-) solo per maggior completezza,
ma nel caso specifico (CF o PI) andrebbero rifiutati.
Comunque, visto che mi solletichi (e se mi passi il goto solo per brevità):
Function Solo_Cifre(stringa as string) As Boolean
    dim crt as integer
    dim segno as boolean
    dim separatore as boolean
    Solo_Cifre=1
    segno=False
    separatore=False
    for crt=1 to len(stringa)
        select case mid(stringa,crt,1)
            case "0" to "9"    'Cifra
            case "-", "+"        'Segno?
                if segno then goto non_numerico
                if crt>1 then goto non_numerico
                segno=true
            case ".", ","        'Separatore interi/decimali?
                if separatore then goto non_numerico
                if crt=len(stringa) then goto non_numerico
                separatore=true
            case else        'Altro carattere
non_numerico:


 Hai maggiori informazioni in merito?
Se ho capito bene la domanda (come i vari stati calcolano la correttezza del
codice), per quanto ne so io, ogni stato dovrebbe poter usare l'algoritmo
che preferisce (e probabilmente anche andare in alfanumerico, ma non ho
letto la direttiva in merito, quando la troverò sarò molto felice ;-),
utilizzando al massimo 12 caratteri. In Italia si usa lo 0 e si aggiungono
gli 11 caratteri della partita IVA nazionale.
Il servizio dei link è il VIES, che è praticamente un gateway ai vari
servizi nazionali (alcuni, come quello Italiano, a loro volta online). Per
fare queste interrogazioni, ottenendo quelle informazioni (soprattutto la
data di inizio attività e di cessazione attività), bisognerebbe ovviamente
riuscire a connettersi in una qualche maniera ad un servizio che per ora non
credo sia pubblico (ho cercato più volte, ma niente).
Si potrebbe facilmente scrivere una procedura per fare le interrogazioni
sfruttando il loro servizio web, però ogni tanto sta fuori servizio per un
po' :-( probabilmente si piglia le pause caffé..


 letto la direttiva in merito, quando la troverň sarň molto felice ;-),
Ecco, ci siamo intesi. Non mi interessa tanto una verifica in linea, quanto
conoscere gli algoritmi di controllo per poter verificare (nel mio
gestionale) la correttezza formale delle varie partite IVA (noto il codice
ISO) per ogni stato. Attualmente conosco solo l'algoritmo per l'Italia e
qualche indicazione sulle lunghezze per gli altri stati, nulla piů :-((