Newsgroup: it.comp.lang.vo-clipper
Titolo: Ancora SPE.

Ciao a tutti.
Sto modificando una applicazione per l'utilizzo di SPE.
Ho creato una classe ServerRemoto ed all'interno di questa classe i metodi 
per gestire i dati. Nel metodo Init della classe ho messo il path dei dati
self:cPath := SpeGetIniEntry(.......) e l'use dell'RDD SpeCdx
RDDSETDEFAULT("SPECDX").
Quando in un metodo utilizzo le funzioni StBegin() ed stCommit(), dopo aver 
modificato un record, nella SpeConsole mi compare un'altra connessione. In 
pratica ho due connessioni per lo stesso terminale e poichè ho la versione 
demo di SPE, non posso più fare prove in rete.
E' corretto ciò? E perchè se utilizzo la SPECDX, dopo la modifica di un 
record, se uso oServer:Commit() mi dà errore mentre se metto stCommit() va 
bene? (però con due connessioni)
Ho letto che le modifiche da fare per usare SPE sono poche. Io sto 
modificando tutto.
Sbaglio ad usare l'approccio del Sever remoto?
In questo modo faccio tutte le elaborazioni sul server e mi faccio ritornare 
un array con i valori dei campi. In pratica viaggiano in rete solo i dati 
dell'Array.
Ho modificato la tabella Comuni d'italia, circa 9000 record, facendo in modo 
che leggo per lettera inziale passandogli la condizione 
"left(o:Comune,1)=='A' (o 'B' o 'C' ...) ed è molto veloce (in rete locale).
Sul ServerRemoto sto creando tutti i metodi di cui ho bisogno. 
(RicercaRecord(cFile,aCampi,nOrder,cCondi,cSeek)) ecc.
Domanda finale: E' giusto questo approccio oppure non ho capito come usarla 
questa libreria?
Devo capire perchè devo decidere, abbastanza in fretta, quale libreria 
comprare e quale approccio usare (SPE+Dbf o DeVoMySql+MySQL).
Ciao a tutto il N.G.. Enzo. 

questa libreria?
A me sembra che stai ripetendo il lavoro che ho fatto io per scrivere
il driver SPECDX. Il problema non è sicuramente la capacità di
riscriverlo, ma il tempo necessario.
Ricapitolando, tu vorresti aprire un DBF, ottenere un array di record
ed eventualmente scorrere il DBF, giusto? 
Ecco un esempio:
//<inizio esempio>
// PATHDATI è un alias al percorso lato-server
// impostabile da SPE CONSOLE->Setup->Paths
oDb := DbServer{ "PATHDATI\COMUNI.DBF",,,"SPECDX"}
IF oDb:Seek( "CAGLIARI" )
    //HO TROVATO CAGLIARI!
ELSE
    //
ENDIF
// Adesso voglio ottenere un array dei comuni
oDb:SetFIlter( "left(o:Comune,1)=='A'" ) 
oDb:Gotop()
aCampi := {<nomi di campo come STRINGA o SYMBOL>}
aArrayConComuni := (oDb:alias)->( speGetArrayOfRecords( aCampi,
oDb:Reccount) ) //anche se gli passo Reccount, mi restituirà solo i
record del filtro
// Adesso scorro il mio bel DBF
oDb:ClearFilter()
oDB:Gotop()
WHILE !oDb:EOF
	//qui posso fare qualcosa col record corrente
	oDB:Skip()
ENDDO
oDb:Close()
//<fine esempio>
Considerando che nella maggior parte dei casi le modifiche
ai programmi sono veramente minime, puoi anche sottopormi
in privato qualche metodo del tuo programma, così ti posso
dire se il passaggio a SPE è indolore.
Antonello
___________________________________
Antonello Negrone
Biella - Italy
http://www.anc-software.it
S.P.E. client/server engine for Visual Objects,
it runs remote-objects on any TCP/IP connection.
http://www.anc-software.it

Ciao Antonello.
Io ti ho mandato, giorno 6/4, una e-mail con una classe remota, direttamente 
a te, ma non ho avuto risposta.
Come vedi ho capito poco oppure ho preso ad esempio gli esempi sbagliati. Il 
mio intento era quello di far eseguire tutte le elaborazioni direttamente 
sul server, anche eventuali cicli di selezione su archivi grossi. Ecco 
perche avevo creato la classe ServerRemoto, ad esempio della tua 
CustomServer.dll. Devo comunque dirti che funziona benissimo ed è molto 
veloce, inoltre la classe legge direttamente dall'ini di spe la directory di 
lavoro, da me creata tramite la Spe Console.
Come tu dici, basterebbe che nel mio programma sostituissi queste righe 
nell'Init della Main Shell:
SELF:cPath := WorkDir()+'Archivi\'
SetDefault(self:cPath)
con
SELF:cPath := WorkDir()+'Archivi\'
SetDefault(self:cPath)
Spe_SetProfile( GetCurrentSPEConnection(), "SPECDX" )
SELF:cPath := SpeGetIniEntry("PATHS","MiaPath","")
SetDefault(Self:Path)
solo che la SpeGetIniEntry, chiamata da programma client dà errore mentre se 
chiamato nella dll compilata, CustomServer.dll per capirci, non da nessun 
errore.
Ma la Path così ottenuta sarebbe, per esempio, "C:\ArchiviGenerali\" dove un 
qualunque client la cercherebbe in locale. o devo specificare  nella MiaPath 
\\Server1\c\ArchiviGenerali\. Sono confuso. Tutti gli esempi che ci sono 
nella directory Tutarials, funzionano alla vecchia maniera, a meno 
dell'apertura della connessione nella funzione start.
Quelli che lavorano effettivamente su server sono remoto sono SpeTutor4 e 5. 
Gli altri aprono la connessione, ma i file li aprono come sempre.
Ho compila e linkato SpeTutor8. Funziona nel server, ma sul client mi dice 
che non trova la directory C:\Spe30\Tutarials\Data\Customer.dbf.
Comincio a capire di non capirci più niente.
Aiutami. Mandami in privato, se puoi e vuoi, un tuo recapito.
Ciao Enzo.
Gli archivi sono aperti come aArc := Archivio{}, a cui ho tolto la path al 
momento della creazione con dbserver editor. 

Aiutami. Mandami in privato, se puoi e vuoi, un tuo recapito.
ok.Ciao
