Jump to content

Lajos Juhász

Members
  • Content Count

    838
  • Joined

  • Last visited

  • Days Won

    11

Posts posted by Lajos Juhász


  1. Let's return the focus on the original question. In the IDE the blue dots represents the lines of codes that might be executed (http://docwiki.embarcadero.com/RADStudio/Sydney/en/Debugging_the_Application_(IDE_Tutorial).

    IMHO nobody should expect the IDE will keep which method is where used (especially if you have a project with thousands of units). Another problem could be if you debug a code in a package. There you can have public methods that are used exclusively only from outside of the package. If the IDE would place blue dots only to reachable code from the  active project you would be unable to debug those procedures.

     


  2. Maybe read the help (you should use Last):

    FindLast is intended to be used together with FindPrior, FindFirst and FindNext in order to search for the last record using any filters. See the example.

    Notes:

    Descendant classes override FindLast to make the last record active, honoring any filters that are in effect. In descendants, FindLast returns true:

    • True -- if the active record is successfully changed.
    • False -- if the active record is not successfully changed.

  3. I asked this question in the FB Delphi developer group. Bruce McGee answered a month ago: "It's in the works". I have no idea whenever he has some insider information about it or not.

    It would be really useful to know when we can expect the hotfix for the compiler error in 10.4.1.

     

  4. Are you loooking for this http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsscopedenums_xml.html ?

    The $SCOPEDENUMS directive enables or disables the use of scoped enumerations in Delphi code. More specifically, $SCOPEDENUMS affects only definitions of new enumerations, and only controls the addition of the enumeration's value symbols to the global scope.  

    In the {$SCOPEDENUMS ON} state, enumerations are scoped, and enum values are not added to the global scope. To specify a member of a scoped enum, you must include the type of the enum. For example:

     

    {$SCOPEDENUMS ON} 
    type
      THTMLType = (htTemplate, htStatic, htHeader, htCustom);



    vHtmlReportType:=THTMLType.htTemplate; // Ok

     

    vHtmlReportType:=htTemplate; // [dcc32 Error] Unit1.pas(35): E2003 Undeclared identifier: 'htStatic'

     


  5. 20 hours ago, Jacek Laskowski said:

    from documentatio9n:

     

    "The ConnectionName property value must be specified before Prepare call. If it matches the name of one of connection definitions, then FireDAC will transparently create connection object and link the dataset with it. "

    I don't know where is this written in the documentation. However, of course this is true only for the first time. Like in BDE,as FD was designed to replace BDE, later when you give the same connectionname it will use the already created connection. There is no reason to create a connection for every single query as it would be inneficient with databases.

    You can check it simple using code:
     

     FDQuery1.ConnectionName:=CONN_DEF_NAME;
     FDQuery1.Open;
     FDQuery1.Connection.Name:='Test'; // Just to give a name.

     

     FDQuery2.ConnectionName:=CONN_DEF_NAME;
     FDQuery2.Open;

     if FDQuery1.connection=fdQuery2.Connection then

        ShowMessage('FDQuery1 shares the connection with FDQuery2.');


  6. This is the documented behavior: http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=Multi_Threading.html.


    FireDAC is thread-safe, when the following conditions are meat:

    • A connection object and all associated with it objects (like TADQuery, TADTransaction, etc) in each moment of time must be used by a single thread.
    • ADManager must be activated before threads will start by setting ADManager.Active to True.

    Means, after a thread opened a query, and until its processing is not finished, application cannot use this query and connection objects in an other thread. Or, after a thread started a transaction, and until it is not finished, application cannot use this transaction and connection objects in an other thread. 

    Practically this means an application must serialize access to a connection across all threads, and that is not a convenient technique. Breaking these rules may lead to misbehavior, AV's and errors like the SQL Server error "Connection is busy with results for another command". 


  7. On 9/16/2020 at 2:53 PM, Uwe Raabe said:

    Perhaps a simple "Open as text" in the context menu of a DFM in the project manager may be sufficient.

    It's already possible file - open enter or select the desired dfm (if you enter the filename you must add the .dfm extenstion). The IDE will open the file as text. It will just not focus the invalid lines.


  8. Did anyone else tried to use TDEVentAlerter on Informix? I have installed the DBMS_ALERT and setup everything. When the component tried to register itself the error is:

     

    When the Event alerter tries to execute:

    EXECUTE PROCEDURE DBMS_ALERT_WAITANY(:name, :message, :status, :timeout)", ATimes=0, AOffset=0]

     

    The error message is:

    [FireDAC][Phys][ODBC][Informix][Informix ODBC Driver][Informix]Argument must be a Statement Local Variable or SPL variable or argument for an
    OUT or INOUT parameter.

     

    Delphi 10.4.1 there is on RSP-30452.

×