Check Connection

Creating desktop or client-server database solutions?

Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller, robinmiller

Da_Elf
Posts: 311
Joined: Sun Apr 27, 2014 2:45 am

Check Connection

Post by Da_Elf » Thu May 14, 2015 11:21 pm

Ok so i wanted to connect to my database to do all the stuff i want to do (as below it connects as needed)
But then i wanted that when i do anything that needed to connect to the database i would check if the connection still exists and if not to open a connection before doing anything. However when i forced my databse to drop the connection then tried to run something it doesnt like me using select if there is no connection. So i assume that one of the revDatabase commands that would be best to use to check if there is a connection and if not do something but not sure which is the best to use.

Code: Select all

on something
   checkServer
   do what needs to be done
end something

Code: Select all

on checkServer
   put "SELECT COUNT(id) FROM connecttest WHERE testid ='1' " into trSQL
   put revDataFromQuery(tab, cr, gConnectionID, trSQL) into trData
   if trData <> 1 then
      dbaseConnect
   end if
end checkServer

Code: Select all

on dbaseConnect    
   put "xxxxx" into tDatabaseAddress
   put "xxxxx" into tDatabaseName
   put "xxxxx" into tDatabaseUser
   put "xxxxx" into tDatabasePassword
   put revOpenDatabase("MySQL", tDatabaseAddress, tDatabaseName, tDatabaseUser, tDatabasePassword) into tResult
   if tResult is a number then
      put tResult into gConnectionID
   else
      put empty into gConnectionID
      answer error "Unable to connect to the database"
   end if
end dbaseConnect
Last edited by Da_Elf on Fri May 15, 2015 12:47 am, edited 2 times in total.

Da_Elf
Posts: 311
Joined: Sun Apr 27, 2014 2:45 am

Re: Check Connection

Post by Da_Elf » Fri May 15, 2015 12:05 am

Grrrr. neither of these works.
basically when i kill the connection and put a debug stop point on the checkServer and mouse over revOpenDatabases it says "revOpenDatabases :revOpenDatabases" which means its not empty which means it didnt run the dbaseConnect script to reconnect

Code: Select all

on checkServer
   if revOpenDatabases is empty then dbaseConnect
end checkServer

Code: Select all

on dbaseConnect
   if revOpenDatabases is empty then
      put "xxxxx" into tDatabaseAddress
      put "xxxxx" into tDatabaseName
      put "xxxxx" into tDatabaseUser
      put "xxxxx" into tDatabasePassword
      put revOpenDatabase("MySQL", tDatabaseAddress, tDatabaseName, tDatabaseUser, tDatabasePassword) into tResult
      if tResult is a number then
         put tResult into gConnectionID
      else
         put empty into gConnectionID
         answer error "Unable to connect to the database"
      end if
   end if
end dbaseConnect

robl
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 62
Joined: Wed Dec 22, 2010 9:50 pm
Location: 3rd planet from the Sun

Re: Check Connection

Post by robl » Fri May 15, 2015 11:27 am

I approach this a bit differently. My apps do not attempt maintain a database connection for a long period of time. Many times a database server will have a relatively short timeout period to close the connections, which is done to conserve resources (and on commercial database servers where you paid based on the number of concurrent connections, conserve on licensing cost).

My basic app flow is to open the connection; check that it is valid; run a series of queries that are immediately needed; close the connection. The user will then interact which triggers a script to open the connection again; check; query; close. This works well. With most modern computers, servers, and networks, the connection process is very quick, so it should have a minimal impact on your app performance.

Da_Elf
Posts: 311
Joined: Sun Apr 27, 2014 2:45 am

Re: Check Connection

Post by Da_Elf » Fri May 15, 2015 9:12 pm

hmm. maybe i should try this approach.

ghettocottage
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 366
Joined: Tue Apr 10, 2012 9:18 am

Re: Check Connection

Post by ghettocottage » Fri May 15, 2015 10:37 pm

Maybe use your global variable to check the connection

Code: Select all

 
   --check if already connected
   if gConnectionID  is  empty then 

    do whatever...


   end if
      

Da_Elf
Posts: 311
Joined: Sun Apr 27, 2014 2:45 am

Re: Check Connection

Post by Da_Elf » Sat May 16, 2015 3:13 am

that wouldnt work if im cut off from the server. Once ive opened a connection gConnectionID is set. if im cut off how does livecode know there is no connection to reset gConnectionID to empty

ghettocottage
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 366
Joined: Tue Apr 10, 2012 9:18 am

Re: Check Connection

Post by ghettocottage » Sat May 16, 2015 8:29 am

doh!

what about:

Code: Select all

on checkServer
   put "SELECT COUNT(id) FROM connecttest WHERE testid ='1' " into trSQL
   put revDataFromQuery(tab, cr, gConnectionID, trSQL) into trData
  if item 1 of trData = "revdberr" then
      dbaseConnect
   end if
end checkServer

Da_Elf
Posts: 311
Joined: Sun Apr 27, 2014 2:45 am

Re: Check Connection

Post by Da_Elf » Sat May 16, 2015 12:02 pm

i used to use a similar way but it will crash on the revData line since gConnectionID wont be valid is its not connected

Simon
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 3901
Joined: Sat Mar 24, 2007 2:54 am
Location: Palo Alto

Re: Check Connection

Post by Simon » Sat May 16, 2015 1:07 pm

hmmm try;

Code: Select all

on checkServer
   if revOpenDatabases() is empty then dbaseConnect
end checkServer
revOpenDatabases()

Simon
I used to be a newbie but then I learned how to spell teh correctly and now I'm a noob!

dave.kilroy
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 858
Joined: Wed Jun 24, 2009 1:17 pm
Location: Plymouth, UK
Contact:

Re: Check Connection

Post by dave.kilroy » Sat May 16, 2015 3:17 pm

Another way to check connectivity (which also works for an initial connection as well as checking for continued internet connection) is use a function to connect to a .lc file on the remote server, which if everything connects properly returns the seconds - and if the function returns as expected I then carry on and do my CRUD operation with the database

I should think it would be faster to check for connectivity from google.com (or I guess a ping?) but at least doing it this way I know for sure whether my server is working (my web service is currently on on-rev so I always check first...)
"...this is not the code you are looking for..."

Da_Elf
Posts: 311
Joined: Sun Apr 27, 2014 2:45 am

Re: Check Connection

Post by Da_Elf » Sat May 16, 2015 9:37 pm

im pretty sure i tried the revOpenDatabases with and without the () will have to try again but ive more or less decided to just close the connection after each executed search rather than keep it open and invite timeout disconnections

ghettocottage
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 366
Joined: Tue Apr 10, 2012 9:18 am

Re: Check Connection

Post by ghettocottage » Sat May 16, 2015 10:05 pm

Just out of curiosity: is this a remote server that you are connecting to a MySQL database?

Da_Elf
Posts: 311
Joined: Sun Apr 27, 2014 2:45 am

Re: Check Connection

Post by Da_Elf » Sat May 16, 2015 11:42 pm

its usually on an internal network

ghettocottage
Livecode Opensource Backer
Livecode Opensource Backer
Posts: 366
Joined: Tue Apr 10, 2012 9:18 am

Re: Check Connection

Post by ghettocottage » Sun May 17, 2015 1:35 am

have you tried using Livecode server as an intermediary?

Da_Elf
Posts: 311
Joined: Sun Apr 27, 2014 2:45 am

Re: Check Connection

Post by Da_Elf » Sun May 17, 2015 1:55 am

what do you mean by livecode server?

Post Reply

Return to “Databases”