B4J Question B4j Connect Access MDB file

Jones Hone

Active Member
Licensed User
Longtime User
B4X:
#Region  Project Attributes
    #MainFormWidth: 600
    #MainFormHeight: 400
    #AdditionalJar: ucanaccess-4.0.4.jar
    #AdditionalJar: hsqldb.jar
    #AdditionalJar: jackcess-2.1.11.jar
    #AdditionalJar: commons-logging-1.1.3.jar
    #AdditionalJar: commons-lang-2.6.jar
#End Region

Sub Process_Globals
    Private gSQL As SQL
    Private DBFile As String
End Sub

Sub AppStart (Form1 As Form, Args() As String)
    MainForm = Form1
    MainForm.RootPane.LoadLayout("test")
    MainForm.Show
    '
    DBFile = File.DirApp & "\B4JTEST1.MDB"
    Try
        gSQL.Initialize("net.ucanaccess.jdbc.UcanaccessDriver", "jdbc:ucanaccess://" & DBFile & ";memory=true")
        Dim Cursor As ResultSet
        Cursor = gSQL.ExecQuery("SELECT * from PLU")
        Do While Cursor.NextRow
            Log(Cursor.GetString("PLUNO") & "." & Cursor.GetString("PNAME"))
        Loop
    Catch
        Log(LastException.Message)
    End Try
End Sub

If there is a table named PLU(only 10 records.) in b4jtest1.mdb.
It only takes 2 seconds to execute the above program.

But. If there is a table named PLU(only 10 records) and HIST table(have 100,000 records) in b4jtest1.mdb
It need takes 40 seconds to execute the above program.

Why do I just read the PLU table, if there are other tables in the database, it will slow down?
Is there a solution?
Thank you!
 

Jones Hone

Active Member
Licensed User
Longtime User
The database is being used by the existing program, and conversion to other databases is not allowed.
gSQL.Initialize(): This command took too much time.
Switch to gSQL.InitializeAsync() always slow.
 
Upvote 0

Jones Hone

Active Member
Licensed User
Longtime User
I found. When the program is running will auto generate Ucanaccess_net.ucanaccess.jdbc.DBReference@10c2bb3 this temporary directory.
The directory size bigger than the b4jtest1.mdb database(Now the database size is 205MB).

It should be to create this temporary directory, so it took so much time.
Can let it not create a temporary directory?
 
Upvote 0

BigBoss123

Member
Licensed User
Longtime User
Just noticed you still have an old *mdb using Jet engine 4.
Can you not update to the new Jet engine 12 and use *.accdb.

Cheers
 
Upvote 0

Jorge M A

Well-Known Member
Licensed User
Longtime User

Source: https://stackoverflow.com/questions/31991838/slow-initial-connection-to-ms-access-database
 
Upvote 0

OliverA

Expert
Licensed User
Longtime User
Besides the mirror database, you may want to try not setting memory=false and try to increase the JVM heap space

Links:

 
Upvote 0

Jones Hone

Active Member
Licensed User
Longtime User
@BigBoss123:
The database is being used by an existing program and cannot be replaced with .accdb

@Jorge MA:
I have tried "keepMirror", But, That database is updated at any time. So it will always rebuild the mirror. So it still took a lot of time.

@OliverA:
I have tried memory=false, But it's always out of memory! Because my database may be nearly 1G MB in size.

It seems that I may have to give up using UCANACCESS.
Excuse me, is there any other library available?
 
Upvote 0
Cookies are required to use this site. You must accept them to continue using the site. Learn more…