Database best practice

Hi,

I am trying to set an access app using a SQLite DB.

Nothing fancy:

  • Visitor comes in,
  • RFID badge read by the app,
  • Add a new record in the DB (id_people, Date and Time)

I placed the DB as a property in the app as I have 2 windows and I want to access the DB in each (one for maintenance and set up and one as UI)

My question is regarding the DB connection. Would you open the db and connect to it in the app open event or would you trigger the open and connect every time a visitor presents a badge and close afterward?

What is the best practice?

TIA,

I would do the later.

1 Like

Hi Emile,

Just for my information, why?

I guess that it might be a problem keeping the DB Open in case of a power failure?

1 Like

Not only.

Lorsque je sors de la maison en hivers, je ferme la porte. Je la rouvre pour entrer. Même principe: pourquoi laisser quelque chose ouvert…
Cela dit, j’ai bataillé avant de modifier un programme devant tourner sur Windows 11 qui plantait sans me dire pourquoi. Lorsque j’ai utilisé DB.Open …/ utilise la base de données …/… DB.Close, mes ennuis se sont évaporés; d’où ma conclusion.
Maintenant, sur MacBook Pro m1: il s’en fout, mais laisser l’accès à la BD… ne me plait pas plus que cela !

1 Like

Bonjour Emile,

J’adore l’analogie avec la porte ouverte. C’est d’autant plus parlant qe la porte de ma grange vient de s’ouvrir violemment avec un super coup de vent :slight_smile:

Je vai faire comme çà donc. De toute façon comme j’apprend si ça fonctionne c’est bien on verra l’optimisation après.

Bonne journée,

En fait, on la retrouve de partout.

Pour une raison particulière, tu modifie une préférence Système dans ton application. Tu dois la remettre dans son état initial lorsque tu quittes ton application.
Pareil pour la base de données:
tu Ă©crit un Integer,
tu lis un integer (pas un texte, ni autre chose)…

Enfin, tu dis bonjour, on te répond (habituellement…) bonjour ! :wink:
Si ce n’est oas le cas, méfie-toi !!!

1 Like

i had sub class this SQLiteDatabase and create the object at need in a method.

Public Sub Constructor()
  // Calling the overridden superclass constructor.
  Super.Constructor
  
  Self.DatabaseFile = File()
  
  Self.Connect
End Sub

Public Sub Destructor()

  Self.Close
  
End Sub

Public Function File() As FolderItem

  Var f As FolderItem = SpecialFolder.Documents.Child("Database").Child("MyDB.Xojo.sqlite")
  
  System.DebugLog f.NativePath
  
  Return f
  
End Function

Nice. How will Yann call them in the his code ?

if the name of the class is DBClass with super SQLiteDatabase
just
var db as new DBClass

i would add a public method there

AddRecord(id_people As Integer)
... = DateTime.Now