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?
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
Intendevo esattamente questo. Così ha senso inserire 1000 record alla volta.
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…