Italian Infarinatura su DB in B4A.

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Come da titolo, eccomi arrivato ai DB e a chiedere come farli e varie soluzioni :p
Dovendo fare un DB del mio gioco, dove inserire i livelli, i record, etc. volevo fare alcune domandine.
Ho scorrazzato nelle varie domande e mi sono imbattuto in quella di Ivanomonti
dove la risposta di maxware, spiega facilmente, la creazione di un DB ma....

1) Si può inserire un Password sul DB? Come?
2) Si può trasferire questo in internet, per le classifiche?
3) Potete postare un piccolo esempio di un semplice DB, o dire dove trovarlo? :D:p

Per ora, sto utilizzando i file usando questa Sub (di scrittura):

B4X:
Public Sub  WriteIni(mykey As String,myvalue As String,fPath As String,filename As String)As String
    Dim Map1 As Map
    Map1.Initialize
    If File.Exists(fPath,filename) Then
    Else
        File.WriteMap(fPath, filename, Map1)  'to create it if not exist
    End If
    Map1 = File.ReadMap(fPath,filename)
                Map1.Put(mykey, myvalue)
    File.WriteMap(fPath, filename, Map1)
    Log("CREATO RECORD")
End Sub

...però, essendo un gioco di logica ed avendo livelli ed altro ancora, non vorrei che sia semplice entrare nel file e modificarlo. :(
 

ivanomonti

Expert
Licensed User
Longtime User
usa key di sistema con le proprieta di sistema, se trovo ti mando un idea
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Grazie Ivano... ti riferisci al DB vero, o alla scrittura dei file del codice?
Scusa ma, pur conoscendo i DB in VB e PHP.... vorrei capire come si interfaccino con B4A.
Grazie per l'eventuale idea ;)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Help! consigli su come fare?
PS: x Ivano... l'idea era intesa a quella che mi avresti, eventualmente, trovato il modo di inviare :p
Cosa intendi per Key di sistema?
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Sempre girovagando nei vari Thread, ho trovato un piccolo programmino creato dall'onnipresente Klaus, che spiega la crezione di un DB con tanto di spiegazioni,ovvero QUESTO

Però, vedo che non vi è protezione... cioè, basta fare delle selct per entrare senza utilizzare una password. :(
C'è un modo per metterla in questo tipo di DB?
E per rendere i dati leggibili da tutti (Punteggi), come fare?

Danghiu!
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Vabbé, mi rispondo da solo :(
Invece di utilizzare la libreria SQL, utilizzo la libreria SQLCipher che, nella sua funzione, ha anche quella di inserire la password.
Però è strano che el SQL classico, non sia possibile inserirne una :confused:
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Nulla, è tutt'oggi che cerco di capire questi DB su B4A, ma non riesco proprio! o_O
Necessito di piccolo codice di esempio, con password, per capire meglio... grazie :oops:
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Vabbè grazie max, meglio di niente ;)
Cercherò di capire meglio l'inserimento della password (e quindi la libreria SQLCipher).
Vorrei inserire un semplice db nel dispositivo e quando connesso, previa autorizzazione, inviare i dati su un server... ma ho paura che a questo, senza una adeguada protezione, si possano modificare facilmente i dati :(
 

maxware

Well-Known Member
Licensed User
Longtime User
diciamo che uno dovrebbe avere una app per aprire il db diciamo sqllite manager
diciamo che uno sappia anche smanettare nei db e che capisca la tabella ed il campo dove tu scrivi il punteggio
diciamo anche che sia bravo e lo modifichi
potresti pensare a scrivere il valore del punteggio su + tabelle/record...se sono discordanti forse ha fatto il furbo
ma puoi anche fare di meglio , ossia il punteggio lo cripty con encripter..quindi l'utente non vedrà piu nel campo il valore es. di 1500 punti ma 645645caadada09d808cnbakn
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Ecco, vedi? la sapienza rende un uomo libero e leggero :D
Stratagemmi che limitino i dolori :p
Devo spulciarmi un po sto encrypter ;)
Quindi mi consigli SWQlite con encrypter...ma il codice che ho riportato all'inizio, invece, è solo una Open (scrittura file su supporto in file testo)?
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Scusa per lo sbaglio (intendevo SQLLite), ma litigo sempre con la tastiera (questa del Asus nonmi piace....quanto era bella quella del Vaio :().
Comunque grazie mille.

Obrigado ;)
 

LucaMs

Expert
Licensed User
Longtime User
Bene, come direbbe un lord inglese: "nun ce sto a capi' 'na mazza!"

Max (eros, non ware :p) fa una cosa, per aiutarmi ad aiutarti: scrivi i passaggi che vorresti ottenere.

Per esempio:

1) accesso all'app (con pw o no?)
2) lettura dati X (quali? da dove? db sul cell o internet?)
3) gioco

insomma, dato che in questo periodo sono meno sveglio del solito, mi aiuterebbe.

Cmq, hai dato un'occhiata anche a KeyValueStore?
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Allora, come ha detto maxware, non andrebbe male....in fin dei conti a me serve solo criptare i contenuti per evitare di barare al mio gioco che sto creando ;)
Quindi:

1) Accesso all'app normale (è un game e quindi farò 2 versioni) ma al DB, se possibile con psw...altrimenti, se più facile, come detto maxware;
2) Dati minimi (livelo raggiunto e voto, punteggi)...db sul cell ma, quando c'è connessione (e autorizzando l'invio) su internet;
3) Ancora in lavorazione (40% completo) e con studio aggiunte; Mancano i mini-games ma la struttura è pronta. Si tratta di un gioco dove bisogna essere veloci e conoscere bene l'italiano (No per estero)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
...mmmh, scusate la mia ignoranza ma, dovendo riempire il DB, devo caricare al suo interno tutto ciò che ho in un mio file .txt sito nel mio PC.
Come diamine faccio ad aprirlo?
Ho provato passando il comando di apertura file:

B4X:
txtInit=Initialize(File.OpenInput(File.DirInternal, "Bozza.txt"))

Ma questo va a leggere nel telefono (o in una cartella emulatore che non trovo /data/data/b4a.example/files
Ho provato anche con DirAssets e a mettere il percorso del mio computer (es: File.OpenInput("C:\Prova\", "Bozza.txt")...ma nulla! :(
Come fare a leggere da PC oppure inserire il file in questa cartella (se raggiungibile)? :confused:
 

LucaMs

Expert
Licensed User
Longtime User
Leggere file da PC è complicato.

Puoi aggiungere il file nella Tab File dell'IDE (che corrisponde alla cartella DirAssets) però ricordati che in questo caso non potrai scriverci (tutti i file in quella directory sono read-only). Perciò, potresti poi eseguire un comando FileCopy dalla dirassets alla DirDefaultExternal, che poi è la cartella della tua app.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
mmmm... in che senso non puoi scrivere? Cioè negli emulatori non si può?
Quindi, se io ho un file .txt che dovrei convertire in un DB già cryptato... come faccio a farlo e se non posso scrivere?
Per il DB, invece di convertire il file txt direttamete da codice, potrei crearlo su PC... ma la libreria che legge e crea i DB (SQL) con cosa è copatibile? Con quale posso crearlo s PC... in Access o MySQL? :confused:
Eppoi, per criptarlo e farlo decriptare da encripter? :eek::eek::eek:
Ma il DirDefaultExternal non si riferische alla scheda microSD del telefono? Io, visto le dimensioni non eccessive, lo inserirei in quella interna.
PS: sempre che non si può scrivere anche da emulatore
 

LucaMs

Expert
Licensed User
Longtime User
Il file txt che vuoi creare (io pensavo che tu l'avessi già) dovresti metterlo nell'IDE, nel Tab Files. Questa corrisponde alla DirAssets, ma in questa cartella non puoi modificare file.

Quindi il procedimento sarebbe:
Clicki su Files-AddFiles e aggiungi il file txt
Nell'app, usi FileCopy(File.DirAssets, "MyFile.txt", File.DirDefaultExternal, "MyFile.txt")
Quindi lo apri, ci scrivi, ci fai quel che ti pare da File.DirDefaultExternal.

La File.DirDefaultExternal normalmente corrisponde alla cartella in cui viene messa anche la tua app, ma è una memoria interna, non la sd card esterna.

Che io sappia, non esiste una libreria che ti consenta di leggere un txt e creare un db SQLite al volo.
O crei il db con un tool esterno (SQLite Expert Personal 3, per esempio) o lo crei da codice, con istruzioni SQL (il modulo di codice DBUtils può essere utile per questo).

POI, dovrai importare i dati dal txt al DB.
 
Top