Data Access Components for MySQL Frequently Asked Questions
Couldn't find the answer to your question? Take a look at our
support forum.
Answers
Installation and Deployment
I am having a problem installing MyDAC
or compiling MyDAC-based projects...
You may be having a compatibility issue that shows up in one or more
of the following forms:
- Get a "Setup has detected already installed DAC packages which
are incompatible with current version" message during MyDAC installation.
- Get a "Procedure entry point ... not found in ... " message when
starting IDE.
- Get a "Unit ... was compiled with a different version of ..." message
on compilation.
You can have such problems if you installed incompatible MyDAC,
ODAC, SDAC, IBDAC, or UniDAC versions. All these products use
common base packages. The easiest way to avoid the problem is to
uninstall all installed DAC products and then download from our
site and install the last builds.
What software should be installed on a
client computer for MyDAC-based applications to work?
Usually, you do not need any additional files. The only
exceptions to this rule are listed below:
- If you are using MySQL Embedded server (if you are using TMyConnection
with TMyConnection.Options.Embedded = True or TMyEmbConnection), you need
the server itself (libmysqld.dll) and the service files for it,
for example errmsg.sys.
- If you are connecting in Client mode,
(TMyConnection.Options.Direct = False), you need libmysql.dll.
- If you are using SSL (TMyConnection.Options.Protocol = mpSSL), you
need the OpenSSL library files - ssleay32.dll and
libeay32.dll.
Core Lab renaming issue that conserns Delphi for .Net users
-
Please remove all CoreLab assamblies references from your project and add corresponding Devart ones
-
Please change all unit references in uses clauses from CoreLab to Devart (you can use standard renaming tool)
Licensing and Subscriptions
Am I entitled to distribute applications written with
MyDAC?
If you have purchased a full version of MyDAC, you are
entitled to distribute pre-compiled programs created with its use. You are
not entitled to propagate any components inherited from MyDAC or using MyDAC
source code. For more information see the License.rtf file in your
MyDAC installation directory.
Can I create components using MyDAC?
You can create your own components that are inherited from MyDAC or that
use the MyDAC source code. You are entitled to sell and distribute compiled
application executables that use such components, but not their source code
and not the components themselves.
What licensing changes can I expect
with MyDAC 5.00?
The basic MyDAC license agreement will remain the same. With MyDAC 5.00,
the MyDAC Edition Matrix will be
reorganized and a new MyDAC Subscription
Program will be introduced.
What do the MyDAC 5.00 Edition Levels
correspond to?
MyDAC 5.00 will come in four editions: Standard Edition,
Professional Edition, Developer Edition, and Trial Edition.
MyDAC Professional Edition and MyDAC Developer Edition can be
acquired with Source Code.
When you upgrade to the new version, your edition level will
be automatically updated using the following Edition Correspondence Table.
Edition Correspondence Table for Upgrading to MyDAC 5.00
| Old Edition Level |
New Edition Level |
| - No Correspondence - | MyDAC Standard Edition |
| MyDAC Standard Edition | MyDAC Professional Edition |
| MyDAC Professional Edition | MyDAC Professional Edition
with Source Code |
| - No Correspondence - | MyDAC Developer Edition |
| - No Correspondence - | MyDAC Developer Edition with
Source Code |
| MyDAC Trial Edition | MyDAC Trial Edition |
The feature list for each edition can be found
here.
I have a registered version of MyDAC. Will I need to pay
to upgrade to future versions?
After MyDAC 5.00, all upgrades to future versions are free to users with an
active MyDAC Subscription.
Users that have a registration for versions of MyDAC prior to MyDAC 5.00 will
have to first upgrade to MyDAC 5.00 to jump in on the Subscription Program.
What are the benefits of the MyDAC Subscription Program?
The MyDAC Subscription Program is an
annual maintenance and support service for MyDAC users.
Users with a valid MyDAC Subscription get the following benefits:
- Access to new versions of MyDAC when they are released
- Access to all MyDAC updates and bug fixes
- Product support through the MyDAC Priority Support program
- Notification of new product versions
Priority Support is an advanced product support program which offers
you expedited individual assistance with MyDAC-related questions from the MyDAC
developers themselves. Priority Support is carried out over email and has a two
business day response policy.
The MyDAC Subscription Program is available for registered users of MyDAC
5.00 and higher.
Can I use my version of MyDAC after my Subscription expires?
Yes, you can. MyDAC version licenses are perpetual.
I want a MyDAC Subscription! How can I get one?
An annual MyDAC Subscription is included when ordering or upgrading to
any registered (non-Trial) edition of MyDAC 5.00 or higher.
You can renew your MyDAC Subscription on the MyDAC
Ordering Page. For more information, please contact
sales@devart.com.
Does this mean that if I upgrade to MyDAC 5 from
MyDAC 4, I'll get an annual MyDAC Subscription for free?
Yes.
How do I upgrade to MyDAC 5.00?
To upgrade to MyDAC 5.00, you can get a Version Update from the
MyDAC Ordering Page. For more information,
please contact sales@devart.com.
Performance
I would like to develop an application that works
with MySQL Server. Should I use MyDAC or DbxMda?
DbxMda is our dbExpress driver for
MySQL. dbExpress technology serves for providing a more or less uniform way
to access different servers (MS SQL, MySQL, Oracle and so on). It is based on
drivers that include server-specific features. Like any universal tool,
in many specialized cases dbExpress providers lose some functionality.
For example, the dbExpress design-time is quite poor and cannot be
expanded.
MyDAC is a specialized set of components for MySQL, which has
advanced server-specific design-time and a component interface similar
to that of BDE.
We tried to include maximal support of MySQL-specific features in both
DbxMda and MyDAC. However, the nature of dbExpress technology has some
insurmountable restrictions. For example, Unicode fields cannot be passed
from a driver to dbExpress.
MyDAC and DbxMda use the same kernel and thus have similar performance.
In some cases dbExpress is slower because data undergoes additional
conversion to correspond to dbExpress standards.
To summarise, if it is important for you to be able to quickly adapt
your application to a database server other than MySQL, it is probably
better to use DbxMda. In other cases, especially when migrating from BDE
or ADO, you should use MyDAC.
How productive is MyDAC?
MyDAC uses a low-level protocol to access the database
server. This allows MyDAC to achieve high performance. From time to time
we compare MyDAC with other products, and MyDAC always takes first place.
Why does the Locate function work so
slowly the first time I use it?
Locate is performed on the client. So if you had set FetchAll to False
when opening your dataset, cached only some of the rows on the client, and
then invoked Locate, MyDAC will have to fetch all the remaining rows from
the server before performing the operation. On subsequent calls, Locate
should work much faster.
If the Locate method keeps working slowly on subsequent calls or you
are working with FetchAll=True, try the following. Perform local sorting
by a field that is used in the Locate method. Just assign corresponding
field name to the IndexFieldNames property.
How To
How can I enable syntax highlighting in MyDAC
component editors at design time?
Download and install MyDeveloper Tools.
In addition to syntax highlighting, MyDeveloper Tools provides a lot of
additional features.
Alternatively, you can download and install the freeware
SynEdit component set.
How can I quickly convert a project
from BDE to MyDAC?
To quickly migrate your project from BDE
you can use the BDE Migration Wizard. To start it, open your
project and choose BDE Migration Wizard from the MySQL menu
of your IDE.
How can I determine which version
of MyDAC am I using?
You can determine your MyDAC version number
in several ways:
- During installation of MyDAC, consult the MyDAC Installer screen.
- After installation, see the history.html file in your MyDAC
installation directiory.
- At design-time, select MySQL | About MyDAC from the main menu of
your IDE.
- At run-time, check the value of the MydacVersion and DACVersion
constants.
How can I stop the cursor from changing to an
hour glass during query execution?
Just set the DBAccess.ChangeCursor variable to False
anywhere in your program. The cursor will stop changing after this command
is executed.
How can I execute a query saved in the SQLInsert,
SQLUpdate, SQLDelete, or SQLRefresh properties of a MyDAC dataset?
The values of these properties are templates for query
statements, and they cannot be manually executed. Usually there is no need
to fill these properties because the text of the query is generated automatically.
In special cases, you can set these properties to perform more complicated
processing during a query. These properties are automatically processed by
MyDAC during the execution of the Post, Delete, or RefreshRecord methods, and
are used to construct the query to the server. Their values can contain
parameters with names of fields in the underlying data source, which will
be later replaced by appropriate data values.
For example, you can use the SQLInsert template to insert a row into
a query instance as follows.
- Fill the SQLInsert property with the parameterized query template
you want to use.
- Call Insert.
- Initialize field values of the row to insert.
- Call Post.
The value of the SQLInsert property will then be used by MyDAC to
perform the last step.
Setting these properties is optional and allows you to automatically
execute additional SQL statements, add calls to stored procedures and functions,
check input parameters, and/or store comments during query execution. If these
properties are not set, the MyDAC dataset object will generate the query itself
using the appropriate insert, update, delete, or refresh record syntax.
How can I get a list of the databases
on the server?
Use the TMyConnection.GetDatabaseNames method.
How can I get a list of the tables list in
a database?
Use the TMyConnection.GetTableNames method.
Some questions about the visual part of MyDAC
The following situations usually arise from the same
problem:
- I set the Debug property to True but nothing happens!
- While executing a query, the screen cursor does not change
to an hour-glass.
- Even if I have LoginPromp set to True, the connect dialog
does not appear.
To fix this, you should add the MyDacVcl (for Windows) or
MyDacClx (for Linux) unit to the uses clause of your project.
General Questions
Are the MyDAC connection components
thread-safe?
Yes, MyDAC is thread-safe but there is a
restriction. The same TMyConnection object cannot be used in several
threads simultaneously. So if you have a multithreaded application, you
should have a TMyConnection object for each thread that uses MyDAC.
Behaviour of my application has changed when I
upgraded MyDAC.
How can I restore the old behaviour with the new version?
We always try to keep MyDAC compatible with
previous versions, but
sometimes we have to change behaviour of MyDAC in order to enhance
its functionality,
or avoid bugs. If either of changes is undesirable for your application,
and you want
to save the old behaviour, please refer to the "Compatibility with
previous versions"
topic in MyDAC help. This topic describes such changes, and how to
revert to the old
MyDAC behaviour.
When editing a DataSet, I get an exception with
the message 'Update failed. Found %d records.' or 'Refresh failed. Found
%d records.'
This error occurs when the database server is unable
to determine which record to modify or delete. In other words, there are
either more than one record or no records that suit the UPDATE criteria.
Such situation can happen when you omit the unique field in a SELECT statement
(TCustomDADataSet.SQL) or when another user modifies the table simultaneously.
This exception can be suppressed. Refer to TCustomMyDataSet.Options.StrictUpdate
topic in MyDAC help for more information.
Why can't I use BIGINT and INT UNSIGNED fields as key
fields in a master-detail relationship? When I set Field.Value, the value is
lost or an exception is raised.
Fields of this type are represented in Delphi by
TLargeIntField objects. In some versions of Delphi, you cannot access these
fields through the Value property (see the protected method
TLargeintField.SetVarValue in the DB unit for details). To avoid this problem,
you can change the field type to INT, which is usually sufficient for key fields.
Alternatively, you can avoid using Value.
On accessing the server, I get a
'MySQL server has gone away' or 'Lost connection to MySQL server during query'
error.
First of all, you should find out what causes the problem.
The list of most frequent reasons for this error to occur is below.
- Client side: The value of TMyConnection.ConnectionTimeout or
TCustomMyDataSet.CommandTimeout is too small. To check this hypothesis,
try setting TCustomMyDataSet.CommandTimeout to 0 (infinitive) and
TMyConnection.ConnectionTimeout to 300.
- Server side: MySQL server has closed the connection. You can read
a detailed description of all possible reasons for this to happen in the
MySQL Reference
Manual. Almost always it is because the value of wait_timeout variable
is too small. Try increasing it. If this solution is not possible
(for example, because you don't have enough rights), you should invoke
MyConnection.Ping with an interval less than wait_timeout. Use TTimer
in TMyConnection thread to accomplish this task.
- Unstable connection (GPRS etc). In case of unstable connection you
can adapt MyDAC to work in such conditions by changing some of its settings.
For more information please see the "Working in Unstable Networks" article
in the MyDAC help documentation.
If the connection is lost, MyDAC tries to reconnect to server. However,
your last command will probably not be executed, and you should
repeat it again.
MyDAC does not try to reconnect if a transaction has started or if at
least one of statements is prepared.
Common problems with using
TCustomDADataSet.FetchAll=False mode
The following problems may appear when using
FetchAll=False mode:
- I have problems working with temporary tables.
- I have problems working with transactions.
- Sometimes my application hangs on applying changes to the database.
Usage of FetchAll=False mode has many advantages; however, it also has
some restrictions since it requires an additional connection to server for
data fetching to be created. The additional connection is created to prevent
the main connection from blocking.
These problems can be avoided by setting the FetchAll property. Please
see description of the FetchAll propery and the CreateConnection option
in MyDAC help for more information.
Another alternative that prevents the application from hanging is to
switch to the InnoDB storage engine from MyISAM (FetchAll stays False).
An application may hang because MyISAM tables can get locked in a read/write
collision. If you try to update a table that is not fetched out, MySQL blocks
the thread and waits untill the table is completely fetched. For details please
refer to the MySQL Reference Manual, the
Locking Issues section.
I get an error when opening a Stored Procedure that
returns a result set.
Probably this is a bug of the MySQL Server protocol with
prepared stored procedures that return record sets. It occurs
in the following cases: