Italian SQL1.EndTransaction

Elric

Well-Known Member
Licensed User
Apro nuovo thread, perché è diventato più lungo di quello che credessi:
Discussione che proviene da:
https://www.b4x.com/android/forum/threads/chiacchiericci.63457/post-864578
https://www.b4x.com/android/forum/threads/chiacchiericci.63457/post-864595
https://www.b4x.com/android/forum/threads/chiacchiericci.63457/post-864676
https://www.b4x.com/android/forum/threads/chiacchiericci.63457/post-864686

Scoperto l'arcano.
Ok, scoperto l'arcano per il post Unknown member: endtransaction (mea ignorantia).

Ma qual è l'arcano di questo codice (che nella mia testa è SQLite):
B4X:
Public SQL1 As SQL
(...)
    Public SQLDataBasePath As String
    Public SQLDataBaseName As String
   
    SQLDataBasePath = File.DirApp
    SQLDataBaseName = "myDataBaseSQLite.db"
   
#If B4J
    SQL1.InitializeSQLite(SQLDataBasePath, SQLDataBaseName, True)
#Else If B4A OR B4I
    SQL1.Initialize(SQLDataBasePath, SQLDataBaseName, True)
#End If
   
   ' ******************************************************
   ' *************** SUGGERITO DALL'IDE ***************
   ' ******************************************************
    SQL1.BeginTransaction
    Try
        'block of statements like:
        For i = 1 To 1000
            SQL1.ExecNonQuery("INSERT INTO table1 VALUES(...)
        Next
        SQL1.TransactionSuccessful
    Catch
        Log(LastException.Message)
        SQL1.RollBack 'no changes will be made
    End Try
   ' ************************************************************************************
   ' *************** QUI NON VIENE SUGGERITO SQL1.EndTransaction ***************
   ' ************************************************************************************
?
 

udg

Expert
Licensed User
Longtime User
EndTransaction appartiene alla versione per B4A
Klaus was quicker than me :)
B4X:
SQL1.BeginTransaction
    Try
        <blah blah>
        SQL1.TransactionSuccessful
    Catch
        Log(LastException.Message)
        #If B4i OR B4J
        SQL1.Rollback
        #END IF
    End Try
    #If B4A
    SQL1.EndTransaction
    #End If
 
Last edited:

udg

Expert
Licensed User
Longtime User
EndTransaction appartiene alla versione per B4A !
Sorry, a typo. Code shows correctly that EndTrasaction is for B4A.

Correggo al volo l'indicazione, ma per fortuna il codice di esempio mostrava chiaramente che EndTransaction fosse per B4A..
Meglio sospendere i post e passare ai fornelli..comincio a sentire un certo languorino.. hehe
 

LucaMs

Expert
Licensed User
Longtime User
Basta confrontare gli esempi (e copiarne-incollarne il codice) di BeginTransaction nei due linguaggi.

Dovrebbe essere così:
B4X:
    SQl1.BeginTransaction

    Try
        'block of statements like:
        For i = 1 To 1000
            SQl1.ExecNonQuery("INSERT INTO table1 VALUES(...)")
        Next
        SQl1.TransactionSuccessful
    Catch
        Log(LastException.Message)
        #IF B4J
            SQL1.RollBack 'no changes will be made
        #End If
    End Try

    #IF B4A
        SQl1.EndTransaction
    #End If

Nota personale: in B4J, inserire 1000 record alla volta può avere senso, se il progetto è un server, mentre B4A-Android e B4i-iOS, ovvero app mobile, non lo vedo, in quanto questi sarebbero client.
 

udg

Expert
Licensed User
Longtime User
Cos'è, il gioco "trova le differenze"? :)

Per una serie di Insert si potrebbe utilizzatre anche ExecNonQueryBatch che internamente utilizza una transaction
B4X:
Dim sql1 As SQL
    For i = 1 To 1000
        sql1.AddNonQueryToBatch("INSERT INTO table1 VALUES (?)", Array(Rnd(0, 100000)))
    Next
    Dim SenderFilter As Object = sql1.ExecNonQueryBatch("SQL")
    Wait For (SenderFilter) SQL_NonQueryComplete (Success As Boolean)
    Log("NonQuery: " & Success)
Come al solito, ci sono tante alternative ...
 

udg

Expert
Licensed User
Longtime User
Eh sì, quella era questione
Ma come scrivi?? Sei ancora influenzato? :D
A parte gli scherzi, come ti senti? Meglio?
 

Elric

Well-Known Member
Licensed User
Intanto auguri di pronta guarigione!

Poi, grazie mille a tutti!
Thanks a lot to all

Infine:
Nota personale: in B4J, inserire 1000 record alla volta può avere senso, se il progetto è un server, mentre B4A-Android e B4i-iOS, ovvero app mobile, non lo vedo, in quanto questi sarebbero client.
Potrebbe avere senso se vuoi scaricare i dati dal db online e conservarli in locale. Ho provato a cercare sul forum, ogni tanto il problema si è posto ma non ho trovato soluzione.
 

udg

Expert
Licensed User
Longtime User
Potrebbe avere senso se vuoi scaricare i dati dal db online e conservarli in locale. Ho provato a cercare sul forum, ogni tanto il problema si è posto ma non ho trovato soluzione
In che senso? E' ciò che faccio in quasi tutte le mie app. O quanto meno per quelle che devono poter lavorare anche off-line.
In fase di start effettuo una sincronizzazione con il server remoto e prelevo tutti i dati aggiornati registrandoli in locale. Poi lavoro sui dati locali.
Il server remoto ha MySql, la app utilizza Sqlite.
 

Elric

Well-Known Member
Licensed User
In che senso? E' ciò che faccio in quasi tutte le mie app. O quanto meno per quelle che devono poter lavorare anche off-line.
In fase di start effettuo una sincronizzazione con il server remoto e prelevo tutti i dati aggiornati registrandoli in locale. Poi lavoro sui dati locali.
Il server remoto ha MySql, la app utilizza Sqlite.
Intendevo esattamente questo. Così ha senso inserire 1000 record alla volta.
:)
 
Top