Lost Connection on Delphi XE - but only if FetchAll=False
Posted: Tue 18 Oct 2011 13:22
I am converting some code from Delphi 2006 to Delphi XE (DBExpress), I found a problem:
on example
SQLDataConnDirect is TSQLConnection
qu is a TSQLQuery
the TSQLQuery is linked only whith the TSQLConnection
//this works on D2006:
SQLDataConnDirect.LoginPrompt := false;
SQLDataConnDirect.DriverName := 'DevartMySQLDirect';
SQLDataConnDirect.LibraryName := 'dbexpmda30.dll';
SQLDataConnDirect.VendorLib := 'not used';
SQLDataConnDirect.GetDriverFunc := 'getSQLDriverMySQLDirect';
SQLDataConnDirect.Params.Clear;
SQLDataConnDirect.Params.Add('User_Name=root');
SQLDataConnDirect.Params.Add('Password=xxx');
SQLDataConnDirect.Params.Add('HostName=127.0.0.1:3308);
SQLDataConnDirect.Params.Add('DataBase=MyDataBase');
SQLDataConnDirect.Params.Add('FetchAll=False');
SQLDataConnDirect.Params.Add('EnableBoolean=False');
SQLDataConnDirect.Params.Add('Custom String=Compress=True;Protocol=TCP');
SQLDataConnDirect.Open...
//==>MyTable with more than 177 MB
qu.SQL.Text := 'Select * from MyTable;';
qu.Open;
qu.Close; //OK
//-------------------------------------------------------------------------
//this fails on XE:
SQLDataConnDirect.LoginPrompt := false;
SQLDataConnDirect.DriverName := 'DevartMySQLDirect';
SQLDataConnDirect.LibraryName := 'dbexpmda40.dll';
SQLDataConnDirect.VendorLib := 'not used';
SQLDataConnDirect.GetDriverFunc := 'getSQLDriverMySQLDirect';
SQLDataConnDirect.Params.Clear;
SQLDataConnDirect.Params.Add('User_Name=root');
SQLDataConnDirect.Params.Add('Password=xxx');
SQLDataConnDirect.Params.Add('HostName=127.0.0.1:3308);
SQLDataConnDirect.Params.Add('DataBase=MyDataBase');
SQLDataConnDirect.Params.Add('FetchAll=False');
SQLDataConnDirect.Params.Add('EnableBoolean=False');
SQLDataConnDirect.Params.Add('Custom String=Compress=True;Protocol=TCP');
SQLDataConnDirect.Open...
//==>MyTable with more than 177 MB
qu.SQL.Text := 'Select * from MyTable;';
qu.Open;
qu.Close; // <<== Lost Connection <<== problem
//-------------------------------------------------------
If MyTable is little data ( 2 MB), works fine, the error happens if MyTable is wih more data, on example 177MB.
Well, but if
SQLDataConnDirect.Params.Add('FetchAll=True');
so works fine...
seams the problem resides when FetchAll=False...
Maybe bug?
I am using DBExpress MySQL Devart 5.0.1.
Roberto
on example
SQLDataConnDirect is TSQLConnection
qu is a TSQLQuery
the TSQLQuery is linked only whith the TSQLConnection
//this works on D2006:
SQLDataConnDirect.LoginPrompt := false;
SQLDataConnDirect.DriverName := 'DevartMySQLDirect';
SQLDataConnDirect.LibraryName := 'dbexpmda30.dll';
SQLDataConnDirect.VendorLib := 'not used';
SQLDataConnDirect.GetDriverFunc := 'getSQLDriverMySQLDirect';
SQLDataConnDirect.Params.Clear;
SQLDataConnDirect.Params.Add('User_Name=root');
SQLDataConnDirect.Params.Add('Password=xxx');
SQLDataConnDirect.Params.Add('HostName=127.0.0.1:3308);
SQLDataConnDirect.Params.Add('DataBase=MyDataBase');
SQLDataConnDirect.Params.Add('FetchAll=False');
SQLDataConnDirect.Params.Add('EnableBoolean=False');
SQLDataConnDirect.Params.Add('Custom String=Compress=True;Protocol=TCP');
SQLDataConnDirect.Open...
//==>MyTable with more than 177 MB
qu.SQL.Text := 'Select * from MyTable;';
qu.Open;
qu.Close; //OK
//-------------------------------------------------------------------------
//this fails on XE:
SQLDataConnDirect.LoginPrompt := false;
SQLDataConnDirect.DriverName := 'DevartMySQLDirect';
SQLDataConnDirect.LibraryName := 'dbexpmda40.dll';
SQLDataConnDirect.VendorLib := 'not used';
SQLDataConnDirect.GetDriverFunc := 'getSQLDriverMySQLDirect';
SQLDataConnDirect.Params.Clear;
SQLDataConnDirect.Params.Add('User_Name=root');
SQLDataConnDirect.Params.Add('Password=xxx');
SQLDataConnDirect.Params.Add('HostName=127.0.0.1:3308);
SQLDataConnDirect.Params.Add('DataBase=MyDataBase');
SQLDataConnDirect.Params.Add('FetchAll=False');
SQLDataConnDirect.Params.Add('EnableBoolean=False');
SQLDataConnDirect.Params.Add('Custom String=Compress=True;Protocol=TCP');
SQLDataConnDirect.Open...
//==>MyTable with more than 177 MB
qu.SQL.Text := 'Select * from MyTable;';
qu.Open;
qu.Close; // <<== Lost Connection <<== problem
//-------------------------------------------------------
If MyTable is little data ( 2 MB), works fine, the error happens if MyTable is wih more data, on example 177MB.
Well, but if
SQLDataConnDirect.Params.Add('FetchAll=True');
so works fine...
seams the problem resides when FetchAll=False...
Maybe bug?
I am using DBExpress MySQL Devart 5.0.1.
Roberto