[Lazarus] MariaDB gone away after long inactivities
Eric Kom
erickom at metropolitancollege.co.za
Tue Aug 18 07:44:52 CEST 2015
Hi Folks,
I got two procedures that are connected to MariaDB 5.6,
My goal is if my application was launch for a long time, it must not
lost the connection with my database and if the connection to the
database was lost due to any reasons and restored (MariaDB running
again), the procedure must still connect to the database without the
application been restarted.
I have initialized the connection to the database using TSQLConnection
to avoided the client library to trough away the connection, PLEASE see
below.
procedure TdataModuleMySQL.createConnection;
begin
SQLConnection1 := TMySQL55Connection.Create(nil);
SQLConnection1.HostName:='127.0.0.1';
SQLConnection1.DatabaseName:='first';
SQLConnection1.UserName:='erickom';
SQLConnection1.Password:='tux.';
end;
procedure TdataModuleMySQL.startDatabase;
begin
//Start of connection
createConnection;
//Open the connection & transaction
SQLConnection1.Connected:=True;
SQLConnection1.Transaction:=SQLTransaction1;
SQLTransaction1.DataBase:=SQLConnection1;
end;
I use the first procedure to INSERT data in the database via
TLabeledEdit component and has been tested successfully , see below:
procedure TfrmMySQLTest.bitBtnInsertClick(Sender: TObject);
begin
try
dataModuleMySQL.startDatabase;
//Start of execution statment
dataModuleMySQL.queryAtInsert;
dataModuleMySQL.SQLQuery1.SQL.Text:='INSERT INTO student (names, dob)
VALUES (:getNAMES, :getDOB);';
dataModuleMySQL.SQLQuery1.Params.ParamByName('getNAMES').AsString:=lblEdtNames1.Text;
dataModuleMySQL.SQLQuery1.Params.ParamByName('getDOB').AsString:=lblEdtDOB1.Text;
//This lets you know via the label if you are connected or not.
if dataModuleMySQL.SQLConnection1.Connected then
begin
lblStatus1.Caption:='Connected';
try
//This starts the query which was created in the connection string
dataModuleMySQL.SQLQuery1.ExecSQL;
//Close the database
dataModuleMySQL.stopDatabase;
except
showMessage('Execution of your query with error; APP can not
continued. ');
end;
end;
except
lblStatus1.Caption:='Not Connected';
showMessage('Database Connection Error. The database may be shutdown
or network issue.');
end;
The second procedure is used to SELECT and display in the TDBGrid
(Successfully done) but lost the connect after the database been
shutdown or when the application been running for long without
activities, see below:
procedure TdataModuleMySQL.queryGrid;
begin
SQLQueryGrid.DataBase:=SQLConnection1;
SQLQueryGrid.Transaction:=SQLTransactionGrid;
DataSource1.DataSet:=SQLQueryGrid;
SQLQueryGrid.SQL.Text:='SELECT * FROM student;';
end;
procedure TfrmMySQLTest.btnGridClick(Sender: TObject);
begin
try
dataModuleMySQL.startDatabase;
//Start of execution statment
dataModuleMySQL.queryGrid;
DBGrid2.DataSource:=dataModuleMySQL.DataSource1;
//This lets you know via the label if you are connected or not.
if dataModuleMySQL.SQLConnection1.Connected then
begin
lblStatus3.Caption:='Connected';
//This will also pass the inormation through to the GRID
//This starts the query which was created in the
connection string
try
dataModuleMySQL.SQLQueryGrid.Open;
except
showMessage('Execution of your query with error; APP can
not continued.');
end;
end;
except
lblStatus3.Caption:='Not Connected..';
showMessage('Database Connection Error. The database may be
shutdown or network issue.');
dataModuleMySQL.createConnection;
end;
end;
I don't know if the datasource can be the problem or not? or it is a
normal behave?
Thank you in advance
More information about the Lazarus
mailing list