Italian Consigli per principiante

ivanomonti

Expert
Licensed User
Longtime User
Brava Martina90 vedo che ti piace smanettare... bravi i ragazzi che ti aiutano... insomma bravi tutti.
 

LucaMs

Expert
Licensed User
Longtime User
Se, come dici, conosci bene il VB6, io ti consiglio di passare senz'altro a SQLite.
Puoi far un parallelo; quello con con ADO usualmente chiamavi Connection qui si chiama SQL
B4X:
Dim dbIAH                  As SQL        ' come cnn del Microsoft ADO
da dichiararsi generalmente in Process_Globals
Quello che con ADO chiamavi recordset qui si chiama cursor.
B4X:
Dim rs      As Cursor
da dichiararsi dove è necessario (anche in una Sub)
Il recordset lo popoli con una istruzione
B4X:
rs = dbIAH.ExecQuery(Criterio)
Di diverso, in B4A, c'è l'istruzione Position
B4X:
rs.Position = 33
senza la quale NON ti puoi posizionare al record N. 33 del recordset rs.
Poi ci sono i corrispondenti degli oggetti Command
B4X:
dbIAH.ExecnonQuery(Criterio)
Non c'è AddNew, sostituito da una istruzione "INSERT INTO ..."
Se vuoi stringhe di lunghezza fissa puoi utilizzare la libreria StringFunction nella quale troverai moltissime istruzioni molto molto simili a quelle del VB6 (che Dio l'abbia in gloria e lo conservi nei nostri HD in secula seculorum).


Ottimo impegno, AlpVir, ma penso che non usasse db in vb6, solo il suo file binario.

I DB sono una rogna, "di G iamolo" :)
 

Claudio57

Member
Licensed User
Longtime User
Esatto. Usavo i file binari. Sono sempre Martina ma per un discorso di account legato all'acquisto della licenza fatto con Paypal di mio zio ho dovuto prendere il suo nick. :-( Non so se ora si può tornare al mio nick vero ma penso di no. Pazienza.
Tornando al mio problema mi sto facendo aiutare a fatica da Erel (io non sono per niente brava in inglese). Per ora sono riuscita con un suo pezzo di codice a scrivere un piccolo file ma non riesco a trovare dove l'ha messo nell'S4 e non ho capito molto di quello che c'è, almeno non del tutto. Era tanto bello VB6 :-(
 

LucaMs

Expert
Licensed User
Longtime User
Esatto. Usavo i file binari. Sono sempre Martina ma per un discorso di account legato all'acquisto della licenza fatto con Paypal di mio zio ho dovuto prendere il suo nick. :-( Non so se ora si può tornare al mio nick vero ma penso di no. Pazienza.
Tornando al mio problema mi sto facendo aiutare a fatica da Erel (io non sono per niente brava in inglese). Per ora sono riuscita con un suo pezzo di codice a scrivere un piccolo file ma non riesco a trovare dove l'ha messo nell'S4 e non ho capito molto di quello che c'è, almeno non del tutto. Era tanto bello VB6 :-(

Non ho letto il codice di Erel, ma suppongo che tu lo possa trovare nella sd card (sdcard/android/data/nomeTuoPackage).

Vb6 era "bello", ma prova vb.net e poi mi dirai. Qui è tutto diverso per via di Android e mobile.

Semmai dovresti provare Windows 8 per phone... ma il mercato di windows in questo campo è ancora molto limitato (per fortuna?)

P.S. Martina90, 22 anni, quasi 23... come fà a conoscere vb6? no, no, non lo chiedo
 

Claudio57

Member
Licensed User
Longtime User
Ho cominciato a usarlo nel 2006 per fare un archivio di cd-dvd e ho sempre usato i file binari.
 

Claudio57

Member
Licensed User
Longtime User
Ti ringrazio ma a me non interessa la gestione dei DB, mi interessa la gestione dei file binari. Ho programmi fatti in VB6 sulla gestione dei tornei e del campionato di pallavolo e devo gestire gli stessi file generati condividendoli con il Samsung S4 e prossimamente con un tablet.
 

Claudio57

Member
Licensed User
Longtime User
Spero che non s'arrabbi.

Sub WriteClarification(raf As RandomAccessFile, c As ClarificationType)
Dim b() As Byte = c.Name.GetBytes("ASCII")
raf.WriteBytes(b, 0, b.Length, raf.CurrentPosition)
for i = b.Length To 14
raf.WriteByte(0, raf.CurrentPosition)
Next
raf.WriteInt(c.Point, raf.CurrentPosition)
raf.WriteInt(c.Goal, raf.CurrentPosition)
End Sub


Questa è per scrivere un Type dove Name è lunga 15 caratteri, Point e Goal sono interi. Ovviamente lui qui ha messo Int ma io penso che per la compatibilità con gli archivi del VB6 devo mettere Short. O sbaglio :)
 
Last edited:

Claudio57

Member
Licensed User
Longtime User
Wowwwwww, ce l'ho fatta da sola cercando qua e la in giro per i post. Ora scrivo e leggo come volevo io. Certo che la comodità di scrivere e leggere un Type con una riga di codice me la scordo.
 

Claudio57

Member
Licensed User
Longtime User
Sto diventando matta. Sto B4A fa proprio schifo. Ma com'è possibile?
Dichiaro due array di un tipo definito da me:

Dim ClaS(19) as Classifica ' Nuova classifica
Dim ClasVec(19) as Classifica ' Vecchia classifica

poi in una sub in base ai risultati aggiorno la ClaS facendo assegnazioni del tipo
ClaS(2).Punti=ClasVec(2).Punti+2

com'è possibile che prima di uscire dalla sub senza che sia stato assegnato un valore a ClasVec questo si ritrovi ad essere uguale a ClaS?
Cioè, in base all'assegnazione d'esempio fatta sopra se ClasVec(2).Punti valeva 24 dopo l'assegnazione ClaS(2).Punti dovrebbe essere 26 e ClasVec(2).Punti rimanere 24, invece mi ritrovo che anche ClasVec(2).Punti vale 26.

Non ditemi che non devo usare gli array ma le liste etc. etc. perché non ha senso. Il programma dovrebbe funzionare così.
 

LucaMs

Expert
Licensed User
Longtime User
Sto diventando matta. Sto B4A fa proprio schifo. Ma com'è possibile?
Dichiaro due array di un tipo definito da me:

Dim ClaS(19) as Classifica ' Nuova classifica
Dim ClasVec(19) as Classifica ' Vecchia classifica

poi in una sub in base ai risultati aggiorno la ClaS facendo assegnazioni del tipo
ClaS(2).Punti=ClasVec(2).Punti+2

com'è possibile che prima di uscire dalla sub senza che sia stato assegnato un valore a ClasVec questo si ritrovi ad essere uguale a ClaS?
Cioè, in base all'assegnazione d'esempio fatta sopra se ClasVec(2).Punti valeva 24 dopo l'assegnazione ClaS(2).Punti dovrebbe essere 26 e ClasVec(2).Punti rimanere 24, invece mi ritrovo che anche ClasVec(2).Punti vale 26.

Non ditemi che non devo usare gli array ma le liste etc. etc. perché non ha senso. Il programma dovrebbe funzionare così.

Mi viene da pensare a due variabili oggetto che abbiano lo stesso riferimento, ma non dovrebbe essere il tuo caso.

Intanto, ti consiglio di lanciare l'app in debug e, usando il tasto F8, esegui il sorgente una riga alla volta; quindi, passando il mouse sulle variabili, controlli il contenuto, il momento in cui cambiano il loro valore.
Poi, se "posti" (bleah, odio ste nuove parole) il codice della Sub, magari possiamo aiutarti di più.
 

Claudio57

Member
Licensed User
Longtime User
Oh bella, ce n'è un'altra:
Come fa a non eseguirmi questa condizione:

if ..... then
else if claS(i).punti=claS(j).punti AND claS(i).SetPersi > claS(j).SetPersi then
codice da eseguire
end if

allora Clas(i).Punti=20, Clas(j).Punti=20, claS(i).SetPersi=18, claS(j).SetPersi=12 dovrebbe eseguire il codice, invece manco per niente. Ma robe da matti!
 

LucaMs

Expert
Licensed User
Longtime User
No, quest'ultima l'ho capita. E' sempre un pasticcio combinato dal primo problema posto.

SOLO PER PROVA (poi le togli), invece di fare assegnazioni con gli array (come ClaS(2).Punti=ClasVec(2).Punti+2), usa delle variabili.

B4X:
varA = ClaS(2).Punti
log("varA = " & varA)
varB = ClasVec(2).Punti
log("varB = " & varB)
VarA = VarB + 2
log("varA = " & varA)



così, con F8 ed i log, segui meglio tutto
 

Claudio57

Member
Licensed User
Longtime User
Niente, ho già perso troppo tempo. Sai cosa faccio? Invece di caricare la classifica vecchia una volta sola all'inizio la carico da file binario ogni volta che entro nella sub che fa la nuova classifica. Il discorso è che dentro questa sub ci si entra parecchie volte, pazienza, tanto lavora lo smartphone, mica io :)
 

LucaMs

Expert
Licensed User
Longtime User
Niente, ho già perso troppo tempo. Sai cosa faccio? Invece di caricare la classifica vecchia una volta sola all'inizio la carico da file binario ogni volta che entro nella sub che fa la nuova classifica. Il discorso è che dentro questa sub ci si entra parecchie volte, pazienza, tanto lavora lo smartphone, mica io :)

Eh ma ti rallenta l'app. Vedi tu
 

Claudio57

Member
Licensed User
Longtime User
Sì, ma non è che debba essere una scheggia. Comunque Lunedì scrivo una mini app con le caratteristiche uguali alla mia in modo che si veda l'errore presunto che fa lei o io.
 
Top