Lettura porta seriale da applicazioni Access

martedì 26 agosto 2003 - 12.33

johnduke Profilo | Newbie

Vorrei leggere i dati della RS 232 (la stringa che invia una bilancia digitale) in una applicazione di Access utilizzando VBA e quindi senza MSComm.
E' possibile?

Grazie e saluti
Joseph

Brainkiller Profilo | Guru

Ciao John,
perchè? Non ti piace MSComm? Si può usare anche da Access anche se non è visuale ma le funzionalità ci sono comunque. E' sufficiente che da VBA vai sul menù Strumenti mi pare poi scegli Riferimenti.
Scegli "Sfoglia" e cerca il file MSCOMM32.OCX.
Una volta aggiunto nel progetto avrai a disposizione tutte le classi presenti nella libreria (OCX o DLL) che sia.
Se premi F2 vedi l'object browser, puoi selezionare la libreria e vedere classi e metodi.

Oppure puoi usare delle API per interfacciarti alle chiamate WIN32 native che sono comunque le stesse che richiama mscomm32.ocx, quindi faresti del lavoro per nulla, o comunque dovresti usare altre librerie di terze parti.
Fammi sapere.

ciao
David De Giacomi

johnduke Profilo | Newbie

Grazie per il consiglio, mi era sfuggito il tasto sfoglia.
Comunque, ti sembrerà strano, ma sul mio PC non è presente nessun file che inizia con MSCOMM.
Forse ho dimenticato di specificare che non ho installato VisualBasic, ma solo Office XP, per cui mi limito alle librerie di Visual Basic For Application, che forse non contiene il contollo ActiveX che mi hai indicato.
Ho provato a copiare solo il file MSCOMM32.ocx da un computer con VB5 ma ricevo un messaggio del tipo "...failed to register ActiveX control.." o qualcosa del genere.
Se non c'è alternativa a MSCOMM (che peraltro ho provato sulla macchina di cui sopra su cui era installato VB 5 con risultati ottimi) penso dovrò proprio rivolgermi alle API.
Il problema è che non so da che parte cominciare.
Dove si possono cercare librerie di terze parti?

Sei stato molto gentile a rispondere

Grazie e Saluti
Joseph

Brainkiller Profilo | Guru

Una volta copiato il mscomm32.ocx dovresti registrarlo con il programma regsvr32.exe
Prova a copiare il file .ocx nella cartella System32 di Windows (spero tu abbia XP o 2000).
Poi da Start->Esegui digita:

regsvr32 mscomm32.ocx

in teoria se va tutto bene dovrebbe uscire un messaggio di conferma che la registrazione è stata effettuata con successo. Da quel momento in potrai aggiungerlo come detto prima al progetto di Access. Prova!

Le API te lo dico per esperienza all'interno di VB sono un vero disastro non è possibile fare tutto, e i problemi sono più che altro di passaggio , ritorno e conversione dei dati. In C/C++ nonostante il linguaggio sia più complesso del VB però è più semplice usarle perchè sono anch'esse scritte in C.

Librerie di terze parti, costano qualche soldo ma ne puoi trovare. Cmq alla fine anche questo ti forniranno semplicemente un OCX o una DLL che dovrai referenziare dentro Access, quindi prima tanto vale provare quella di Microsoft come ti ho detto sopra.

Ciao
Fammi sapere.

David

johnduke Profilo | Newbie

Ho eseguito tutto quanto indicato con successo.
A questo punto ho provato a scrivere il codice

Sub LeggiPeso()
Dim MsComm1 As MSCommLib.MSComm
Dim Peso As Variant
MsComm1.CommPort = 1
MsComm1.PortOpen = True
Peso = MsComm1.Input
MsComm1.PortOpen = False
End Sub

Ottengo un errore quanto eseguo MsComm1.CommPort = 1 che recita "Variabile oggetto non impostata"
Devo scrivere Set Variabile=...?

Puoi aiutarmi ancora? Non sono molto pratico di librerie esterne, oggetti, proprietà, enum...

Grazie infinite per la tua pazienza.

Ciao
Joseph

Brainkiller Profilo | Guru

Eh sì Joseph,
è proprio così. Essendo un componente diciamo COM, devi creare una referenza all'oggetto appena creato e di solito si fa con l'operatore new.
Quindi tu giustamente con la Dim hai dichiarato la tua variabile, ma poi devi instanziare l'oggetto in questo modo:

Set MsComm1 = New MSCommLib.MSComm

Vedrai che ora funziona.
Fammi sapere.
Ciao

David

johnduke Profilo | Newbie

Per funzionare, funziona, solo che il codice questa volta si blocca perchè non riesce a trovare la licenza dell'oggetto di automazione.

Insomma, pare proprio che io debba acquistare Visual Studio.

Grazie comunque per tutti i suggerimenti ed il supporto molto professionale.

Ciao
Joseph

Brainkiller Profilo | Guru

Mh... mi spiace.
Mi è venuta in mente un'altra cosa. Sai cosa puoi fare?
Secondo me puoi fare così. Crea un progetto sul computer dove hai installato Visual Basic 6.0, all'interno di questo progetto referenzia l'oggetto .ocx di cui parlavamo.
Poi fra i Tools di Visual Basic 6.0 ce n'è uno per creare il Setup dell'applicazione che tu hai appena sviluppato. Di solito lui si prende tutte le DLL e gli OCX che usi e li inpacchetta. Poi quando distribuisci o installi il pacchetto su un'altra macchina, lui decomprime tutti i componenti li copia sul PC e li registra, e così non dovresti più avere problemi di licenza o quei messaggi d'errore che dicevi poco fa.
La registrazione che ti ho fatto fare io diciamo è stata "alla buona" di solito si fa così, però magari qui c'era qualche meccanismo aggiuntivo di Microsoft.
Con questa soluzione dovresti avere successo.
Ciao

David

johnduke Profilo | Newbie

Fatto!
Ho scaricato una liberia freeware, e grazie alle indicazioni che mi hai dato su come scrivere il codice sono riuscito a leggere questa benedetta porta RS 232.

Grazie ancora

Ciao
Joseph
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5