Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Come programmare Datalogic Memor ?

365 views
Skip to first unread message

RobertoA

unread,
Sep 7, 2017, 10:25:35 AM9/7/17
to
Scrivo in questo ng perche' sto usando un terminalino per la lettura
barcode di qualche anno fa, del periodo in cui VB era utilizzato
diffusamente, il modello e' 944201019
Vorrei scambiare idee con chi abbia programmato i Datalogic Memor con
Windows CE 5.0
In particolar modo sulla comunicazione via wi-fi
Ciao e grazie
RobertoA

PaF

unread,
Sep 8, 2017, 3:57:11 AM9/8/17
to
Ciao,
io programmo sui Datalogic Memor X3, più recenti (Windows CE 6.0).
Visual Studio 2008 e .NET Framework 2.0
SDK scaricato dal sito Datalogic (Memor_X3 SDK_1.0.1 R2.zip)

Per il WiFi c'è un namespace dedicato del quale uso le API per verificare
la potenza del segnale (WiFiGetRssi). Purtroppo non sono riuscito a
rilevare il MAC Address dell'Access Point collegato (l'API dedicata mi
ritorna una stringa vuota).

La mia configurazione dovrebbe essere compatibile anche con Windows CE 5.0,
ma è solo una ipotesi.

Ciao
PaF

RobertoA

unread,
Sep 8, 2017, 6:18:54 AM9/8/17
to
Ringrazio molto per la risposta
Per comunicare poi dal Memor al pc con i dati come ti regoli?
Nel senso, se dal terminale devo vedere il prezzo di un articolo, dopo
aver scannerizzato ed acquisito il codice, come interroghi il db sul pc
per restiruire a Memor prezzo/descrizione/esistenza?
E quando vuoi mandare informazioni dal Memor al pc, esempio inventario
articoli, come spedisci, file di testo/connessione a socket/ftp ?


PaF

unread,
Sep 12, 2017, 9:18:52 AM9/12/17
to
Il Fri, 8 Sep 2017 12:32:49 +0200, RobertoA ha scritto:


> Ringrazio molto per la risposta
> Per comunicare poi dal Memor al pc con i dati come ti regoli?
> Nel senso, se dal terminale devo vedere il prezzo di un articolo, dopo
> aver scannerizzato ed acquisito il codice, come interroghi il db sul pc
> per restiruire a Memor prezzo/descrizione/esistenza?
> E quando vuoi mandare informazioni dal Memor al pc, esempio inventario
> articoli, come spedisci, file di testo/connessione a socket/ftp ?

Ciao,
uso le funzioni di ADO.Net 2.0, utilizzando il provider di Microsoft SQL
Server (nel mio caso). Niente di basso livello (socket o altro).
La scelta di utilizzare le API per monitorare il livello del WiFi è nata
dal voler gestire in modo "preventivo" l'impossibilità di collegarsi al
server, se per esempio il segnale è troppo basso ed il terminale si
disconnette.

Inizialmente mi basavo solo sul timeout della connessione al server e
relativa eccezione, ma dal punto di vista della User Interface è brutto
vedere la clessidra, aspettare x secondi e poi ricevere l'errore. Immagina
che questi device li usa il mulettista che non ha tempo/voglia/pazienza di
aspettare il risultato di una scansione.
Molto meglio disabilitare il tasto di lettura e/o il controllo che riceve
la lettura, segnalare in rosso la mancanza di segnale, etc etc

Aggiungo che per utilizzare il provider di SQL Server su Windows CE ho
dovuto installare questo: sql.wce5.armv4i.cab
Lo trovi googlando.

Ciao
PaF

RobertoA

unread,
Sep 13, 2017, 12:14:09 AM9/13/17
to
Ringrazio per le utili indicazioni
Devo collegarmi a db Firebird e finora da WinCe vai wifi non trovo
niente per andare direttamente sul db posto in lan
Quindi devo fare un programma 'server Memor' da far girare a bordo di un
pc in rete, che dialoghi coi terminali wireless li faccia 'parlare' col
db centrale
Non avevo pensato al livello radio su form operatore a bordo dei terminalini
Credo sia un'ottima cosa inibire le operazioni se non c'e' campo
Ma come rilevi la connessione tra terminali e pc?
Perche' monitorare il livello del wifi potrebbe non essere sufficiente,
magari 'vede' la rete radio ma il dhcp non gli ha ancora dato
l'indirizzo e quindi non e' 'in rete'
Oppure e' collegato alla rete radio ed il dhcp server centrale non
funziona e quindi i terminalini non avranno mai il loro bell'indirizzo
Monitorando solo il wifi, il programma potrebbe sparare fuori dati che
non verrebbero ricevuti

PaF

unread,
Sep 15, 2017, 3:16:25 AM9/15/17
to
Il Wed, 13 Sep 2017 06:28:06 +0200, RobertoA ha scritto:

> Ringrazio per le utili indicazioni
> Devo collegarmi a db Firebird e finora da WinCe vai wifi non trovo
> niente per andare direttamente sul db posto in lan

[cut]

Per mia esperienza personale nel momento in cui c'è una connessione WiFi
attiva l'IP address è già stato recepito, in caso di disconnessioni
comunque il lease dovrebbe essere tale da non farlo cambiare.
Premesso questo l'unica soluzione per essere sicuri di essere "in rete" è
pingare il server e quindi proseguire con le operazioni in caso di risposta
positiva.

https://www.codeproject.com/Articles/10241/Ping-Control

Non sapendo se esiste un connettore .NET Compact Framework per Firebird io
propenderei per una soluzione basata su Web service, che inoltre ti
permette di disaccoppiare la business logic dal terminale: se un domani
passi ad altro server cambi solo la parte "web".

Questo approccio l'ho implementato in un altro software (desktop) per la
connessione verso Oracle, per togliermi dai piedi il malloppo necessario
alla connessione client/server verso quel DB, che mi ha fatto sempre
disperare.

PaF

RobertoA

unread,
Sep 15, 2017, 4:17:22 PM9/15/17
to
Veramente ci sarebbe anche un client diretto al db, da installare su
Windows Ce, il che sempificherebbe in modo anomalo i problemi

NETProvider-2.5.2-CF.7z

Sto provando e non mi funziona
Compila un esempio minimo minimo, ma poi si pianta sull'istruzione
conn1.Open() in esecuzione con un bel errore:

'MissingMethodException'

-------------------------
FbConnection conn1 = new
FbConnection("Database=d:\\test.fdb;UserID=SYSDBA;Password=masterkey");

conn1.Open();

.....

-------------------------

Sullo stesso problema vedo che c'hanno sbattuto gia' un bel po' di
persone, senza arrivare ad una soluzione

http://www.progtown.com/topic499158-connection-with-firebird-in-windows-ce-50-net-cf-20.html

E quindi non avendo il client per il db, la prima scelta attuale e' fare
un mini server http da installare sul pc, collegato al db dati, che
risponda alle richieste dei terminalini



Andrea (Work)

unread,
Sep 28, 2017, 11:40:23 AM9/28/17
to
Il Fri, 15 Sep 2017 22:31:04 +0200, RobertoA ha scritto:

> Sto provando e non mi funziona
> Compila un esempio minimo minimo, ma poi si pianta sull'istruzione
> conn1.Open() in esecuzione con un bel errore:
>
> 'MissingMethodException'
>
> -------------------------
> FbConnection conn1 = new
> FbConnection("Database=d:\\test.fdb;UserID=SYSDBA;Password=masterkey");
>
> conn1.Open();

La connessione da un palmare windows CE su firebird (il DB ovviamente sta
su un PC/server), l'ho sempre fatta cosģ:
"user id=SYSDBA;password=masterkey;character set=NONE;initial
catalog=miodb;datasource=192.168.1.100"

Poi ho creato su aliases.conf di firebird l'alias del db "miodb".
Se non erro provider firebird 2.5.2 e CF3.5.

RobertoA

unread,
Sep 28, 2017, 12:11:49 PM9/28/17
to
Il 28/09/2017 17:40, Andrea (Work) ha scritto:
> Il Fri, 15 Sep 2017 22:31:04 +0200, RobertoA ha scritto:
>
>> Sto provando e non mi funziona
>> Compila un esempio minimo minimo, ma poi si pianta sull'istruzione
>> conn1.Open() in esecuzione con un bel errore:
>>
>> 'MissingMethodException'
>>
>> -------------------------
>> FbConnection conn1 = new
>> FbConnection("Database=d:\\test.fdb;UserID=SYSDBA;Password=masterkey");
>>
>> conn1.Open();
>
> La connessione da un palmare windows CE su firebird (il DB ovviamente sta
> su un PC/server), l'ho sempre fatta così:
> "user id=SYSDBA;password=masterkey;character set=NONE;initial
> catalog=miodb;datasource=192.168.1.100"
>
> Poi ho creato su aliases.conf di firebird l'alias del db "miodb".
> Se non erro provider firebird 2.5.2 e CF3.5.
>

E non erri, il provider 2.5.2 e' l'ultima versione fatta con i framework
pre-4, e quindi usabile col VS2008
La cosa del aliases.conf non la sapevo
Ora provo subitisssimo



RobertoA

unread,
Sep 28, 2017, 6:11:09 PM9/28/17
to
Il 28/09/2017 17:40, Andrea (Work) ha scritto:
> Il Fri, 15 Sep 2017 22:31:04 +0200, RobertoA ha scritto:
>
>> Sto provando e non mi funziona
>> Compila un esempio minimo minimo, ma poi si pianta sull'istruzione
>> conn1.Open() in esecuzione con un bel errore:
>>
>> 'MissingMethodException'
>>
>> -------------------------
>> FbConnection conn1 = new
>> FbConnection("Database=d:\\test.fdb;UserID=SYSDBA;Password=masterkey");
>>
>> conn1.Open();
>
> La connessione da un palmare windows CE su firebird (il DB ovviamente sta
> su un PC/server), l'ho sempre fatta così:
> "user id=SYSDBA;password=masterkey;character set=NONE;initial
> catalog=miodb;datasource=192.168.1.100"
>
> Poi ho creato su aliases.conf di firebird l'alias del db "miodb".
> Se non erro provider firebird 2.5.2 e CF3.5.
>

Niente, ho provato e non mi funziona
Sto usando Visual Studio 2008, la libreria
FirebirdSql.Data.FirebirdClient e' la versione 2.5.2.0
Sto usando il seguente codice:

--------------------------------
string stringa_connessione =
"Database=D:\\test_db\\TEST.FDB;Datasource=192.168.1.1;User=SYSDBA;Password=masterkey;";

FbConnection connessione = new FbConnection(stringa_connessione);
connessione.Open();

string queryString = "SELECT DITTA from CLIENTI";

FbCommand MyCOMMAND = new FbCommand(queryString, connessione);
FbDataReader MyDataReader = MyCOMMAND.ExecuteReader();
while (MyDataReader.Read()) {
campo1 = MyDataReader.GetString(0);
Console.Write(campo1);
}

MyDataReader.Close();
connessione.Close();
--------------------------------

Si pianta sul connessione.Open()
L'errore restituito e' MissingMethodException
Per vedere la versione di framework usato di solito da Project /
Property / Application si vede
Ma nei progetti iniziati per File / NewProject / Smart Device, non si
vede niente, dalla versione dei file Riferimenti, System, System.Data,
ecc, credo sia la 2.0

Ho provato, come consigliato, a modificare l'aliases.conf ma niente
Ho scritto all'autore del Dot Provider, Jiri Cincura, che molto
cortesemente mi ha consigliato di attivare la Legacy autentication, ma
niente (
https://www.tabsoverspaces.com/233642-ado-net-provider-5-11-0-0-for-firebird-is-ready-with-net-standard-2-0-support/
)

Visto che mi sembra di capire che l'hai fatto, posso chiederti la
cortesia di passarmi un frammento di programma per Windows ce, che si
connetta ed estragga dati da un db remoto qualsiasi?

Andrea (Work)

unread,
Sep 29, 2017, 4:35:39 AM9/29/17
to
Il Fri, 29 Sep 2017 00:25:59 +0200, RobertoA ha scritto:

> Visto che mi sembra di capire che l'hai fatto, posso chiederti la
> cortesia di passarmi un frammento di programma per Windows ce, che si
> connetta ed estragga dati da un db remoto qualsiasi?

Questo funziona. Uso sempre gli alias sui palmari, perchč editare un file č
scomodo lě sopra, e nel caso edito il server.

dbConnectionString = "user
id=SYSDBA;password=masterkey;character set=NONE;initial
catalog=miodb;datasource=192.168.1.1"

' testo la connection
Using cn As New FbConnection(dbConnectionString)
cn.Open()
cn.Close()
End Using

FirebirdSql.Data.FirebirdClient.dll č un file da 368kb

RobertoA

unread,
Sep 29, 2017, 5:01:43 AM9/29/17
to
Il 29/09/2017 10:36, Andrea (Work) ha scritto:
> Il Fri, 29 Sep 2017 00:25:59 +0200, RobertoA ha scritto:
>
>> Visto che mi sembra di capire che l'hai fatto, posso chiederti la
>> cortesia di passarmi un frammento di programma per Windows ce, che si
>> connetta ed estragga dati da un db remoto qualsiasi?
>
> Questo funziona. Uso sempre gli alias sui palmari, perchè editare un file è
> scomodo lì sopra, e nel caso edito il server.
>
> dbConnectionString = "user
> id=SYSDBA;password=masterkey;character set=NONE;initial
> catalog=miodb;datasource=192.168.1.1"
>
> ' testo la connection
> Using cn As New FbConnection(dbConnectionString)
> cn.Open()
> cn.Close()
> End Using
>
> FirebirdSql.Data.FirebirdClient.dll è un file da 368kb
>

Si, la FirebirdSql.Data.FirebirdClient.dll e' quella, la mia e' datata
14/02/2010
E quell'esempio funziona pure a me
Se pero' parto scegliendo File/Project/VisualC#/SmartDevice e sul
pannellino dove mi chiede Target platform (metto Windows CE) e dove
chiede ".Net Compact Framework version" (metto la 2.0) allora non
funziona piu' restituendo un bel MissingMethodException
Non posso mettere la 3.5 perche' altrimenti i controlli Datalogic per il
Memor non li vedo piu'
E quindi credo sia la versione di framework usata dal programma l'inghippo
Purtroppo sono legato a quella perche' altrimenti non 'parlo' col
terminalino


Andrea (Work)

unread,
Sep 29, 2017, 11:46:33 AM9/29/17
to
Il Fri, 29 Sep 2017 11:16:34 +0200, RobertoA ha scritto:

> Non posso mettere la 3.5 perche' altrimenti i controlli Datalogic per il
> Memor non li vedo piu'
> E quindi credo sia la versione di framework usata dal programma l'inghippo
> Purtroppo sono legato a quella perche' altrimenti non 'parlo' col
> terminalino

Da quel che mi ricordo la minima č la 3.5 per avere la libreria firebird.
Altrimenti devi valutare altri database se ci sono compatibili fwk2.0. Se
si parla di pochi dati puoi usare anche un file di testo in rete.

RobertoA

unread,
Sep 29, 2017, 1:02:32 PM9/29/17
to
Il 29/09/2017 17:47, Andrea (Work) ha scritto:
> Il Fri, 29 Sep 2017 11:16:34 +0200, RobertoA ha scritto:
>
>> Non posso mettere la 3.5 perche' altrimenti i controlli Datalogic per il
>> Memor non li vedo piu'
>> E quindi credo sia la versione di framework usata dal programma l'inghippo
>> Purtroppo sono legato a quella perche' altrimenti non 'parlo' col
>> terminalino
>
> Da quel che mi ricordo la minima è la 3.5 per avere la libreria firebird.
> Altrimenti devi valutare altri database se ci sono compatibili fwk2.0. Se
> si parla di pochi dati puoi usare anche un file di testo in rete.
>
Il Jiri Cincura mi ha risposta ( http://disq.us/p/1mccx8a )
consigliandomi la versione 2.1.0 del provider :net per Firebird
Ho provato, carico progetto nuovo su Visual Studio, aggiungo la ddl di
Firebird, metto un tasto sulla form e nel codice metto il tuo esempio
minimale, ovviamente con nome db ed ip corretti
Niente, spara fuori un errore MissingMethod ....... sull'apertura dela
connessione
Mi arrendo, pazienza

Basterebbe trovare l'sdk Datalogic che funzioni anche col CF 3.5
Ma sul loro sito c'e' solo quello per CF 1.1 e 2.0, questo:
Datalogic Mobility Developer Assistant for VS2005 (Version 2.0.2)

Avendo un po' di coraggio si potrebbe tentare di aggiornare il firmware
del Memor per metterci il Windows Mobile 6.1, se il processore e' uguale
e la scheda wifi e' la stessa ci sono buone probabilita' che l'hardware
sia lo stesso tra i due modelli Windows CE 5.0 / Windows Mobile 6.1
Certo che se qualcosa va storto mi blocco il terminalino e non posso
piu' provare dovrei prenderne un altro

RobertoA

unread,
Sep 30, 2017, 11:27:52 AM9/30/17
to
Alla fine ci sono riuscito
Anche se Datalogic ufficialmente fornisce l'sdk per i Memor solo per il
CF 2.0, installando l'sdk per i MemorX3 funziona tutto lo stesso anche
sui Memor normali
Ma l'sdk per i MemorX3 e' basato sul CF 3.5 e quindi nessun problema ad
usare anche il provider .Net per Firebird
Ho usato la 2.5.2.0 e funziona correttamente
Provando a salire gia' la 3.2.0 butta fuori problemi vari, quindi
restero' con la 2.5.2
Piuttosto, la connessione porta via un'enormita' di tempo tipo 15-20
secondi, mi sembra una cosa abbastanza strana e sicuramente non normale
Intendo da palmare a database su pc in rete wifi, il task manager del pc
non mostra nessuna attivita'
Sembra il palmare piantato ad attendere qualcosa
Qualcuno sa da cosa possa dipendere ?

Andrea (Work)

unread,
Oct 6, 2017, 6:24:00 AM10/6/17
to
Il Sat, 30 Sep 2017 17:42:39 +0200, RobertoA ha scritto:

> Piuttosto, la connessione porta via un'enormita' di tempo tipo 15-20
> secondi, mi sembra una cosa abbastanza strana e sicuramente non normale
> Intendo da palmare a database su pc in rete wifi, il task manager del pc
> non mostra nessuna attivita'
> Sembra il palmare piantato ad attendere qualcosa
> Qualcuno sa da cosa possa dipendere ?

Se non lo fai vai per IP invece che per nome macchina e prova ad usare i
soliti alias.
Altrimenti se non trovi la soluzione la metti su un background worker e poi
la usi appena disponibile.

RobertoA

unread,
Oct 6, 2017, 8:03:29 AM10/6/17
to
Vado gia' con l'indirizzo ip numerico ma ci mette 15 secondi, non capisco
Ma dai tuoi terminali, quanto ci mette ad aprire una connessione?
Che e' sto backgroud worker?



Andrea (Work)

unread,
Oct 9, 2017, 3:53:18 AM10/9/17
to
Il Fri, 6 Oct 2017 14:18:15 +0200, RobertoA ha scritto:

>> Se non lo fai vai per IP invece che per nome macchina e prova ad usare i
>> soliti alias.
>> Altrimenti se non trovi la soluzione la metti su un background worker e poi
>> la usi appena disponibile.
>>
>
> Vado gia' con l'indirizzo ip numerico ma ci mette 15 secondi, non capisco
> Ma dai tuoi terminali, quanto ci mette ad aprire una connessione?
> Che e' sto backgroud worker?

Avvii il programma e fai la connessione in un thread separato, così
l'interfaccia è reattiva. Ovviamente fino a quando non si è connesso non la
puoi usare, ma magari l'operatore nei primi secondi non la utilizza.

RobertoA

unread,
Oct 9, 2017, 4:37:58 AM10/9/17
to
Tocca tenerla aperta SEMPRE la connessione
E se si stacca il wifi?
E se riavvi il programma?
Il wifi non e' raro che si stacchi qualche attimo, poi si riprende subito
Comunque ho fatto anche senza connessione diretta al db
Un programma in ascolto su porta xy messo su uno dei pc in lan e che
comunica col database
I terminalini 'parlano' via socket tcp col programma 'server terminalini'
E' tutto abbastanza rapido, per interrogare un articolo sparando col
terminalino, la risposta arriva entro due-tre decimi di secondo, tutto
compreso, e' reattivo ed usabile a sufficienza
Certo che poter interrogare il db, direttamente dal terminalino, avrebbe
risparmiato tutto l'ambaradan dei messaggi che partono ed arrivano ed il
server custom su un pc
Diciamo che ora non mi serve, ma se ci fosse stato sarebbe stato meglio
Vorrei proprio capire cosa ci fa in quei 15 secondi prima di connettersi
E' sicuramente un timeout di qualcosa, ma de che' non si sa


0 new messages