[Gambas-user] how to avoid second instance in hole project

Christof Thalhofer chrisml at deganius.de
Tue Nov 28 22:50:33 CET 2017


Am 28.11.2017 um 18:09 schrieb PICCORO McKAY Lenz:

> we need a common and consistent code and i try to made a common
> lib/module that init the db using config file detected

I do this in my programs in a class called "DBs" like this:

---8<-------------------------------
' Gambas class file

Create Static

'' Our Main Database
Property Read MainDb As Connection
Private $MainDb As New Connection

Private Function MainDb_Read() As Connection

    If Not $MainDb.Opened Then
        $MainDb.Type = "postgresql"
        $MainDb.Host = Settings.["MainDb/Host", ""]
        $MainDb.Name = Settings["MainDb/Datenbank", ""]
        $MainDb.Login = Settings["MainDb/User", ""]
        $MainDb.Password = Settings["MainDb/Password"]

        If $MainDb.User = Null And If $MainDb.Password = Null Then
            Error.Raise("No MainDb Credentials")
        Endif
        Open($MainDb)
    Endif

    Return $MainDb

Catch
    Message.Error(Error.Text)

End

---8<-------------------------------

This is a "singleton pattern":

https://en.wikipedia.org/wiki/Singleton_pattern

You can do this also in a module which is a singleton by design.

To use it, you can do anywhere in your program:

---8<-------------------------------
Dim qry As String
Dim res As Result

qry = "select sthing from tableany;"
res = Dbs.MainDb.Exec(qry)
---8<-------------------------------

On the first usage of Dbs.MainDb it will be instanciated, on every
latter usage the connection will be reused!

This is very safe, as it ensures, that your program always uses this one
 connection and does not do concurrent connections to the same database
(which can lead to database deadlocks ).


Alles Gute

Christof Thalhofer

-- 
Dies ist keine Signatur

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20171128/c2f5ccea/attachment.sig>


More information about the User mailing list