Quick review of old bugs fixed for Delphi

David I. had an interesting question for the team - are we fixing enough of our older bugs in the product? Are we neglecting past issues reported by our customers?

As a resident quality champion, of course I want to know too :-)

So I took a quick query into the bug tracking system, and looked at how many reports found earlier then Jan 1, 2009 were fixed this year. A quick, no fuss query though I made sure to only include bug reports (not feature requests) and resolutions related to bug fixing.

The result?

711 Delphi bugs found earlier then Jan 1, 2009 have been fixed so far this year, and the team is in middle of polish phase for the next release "Weaver".

The next question is how many came from customer reports? So I looked at the number coming from Quality Central - 222 of those 711 are Quality Central reports.  Not an insignificant number. A number (about half) of those were released in RAD Studio 2009 Updates 3 and 4 with the remainder going into Weaver. As I mentioned - more is being done as well.

Additional slices:

  • 198 of the 711 were reported earlier then 2008
  • 116 reported prior to 2007
  • 91 reported prior to 2006

That’s good news, and a sign the team looks at older issues as well as new.

With 10 years of reports, there is a mixed bag of about 2000  public reports the team is constantly working on, and our beta feedback helps guide the release to ensure it’s a good one.

As always, we can improve- and need to to stay ahead of the pack.  So let me know if you have a QC report you feel is neglected. I’ll take a look at it.

38 Responses to “Quick review of old bugs fixed for Delphi”

  1. Graeme Says:

    I dont know…how about bug fixes for rad studio 2007!!!! Those numbers mean nothing to me unless I can update something other than 2009.

    I have been using delphi since version 1. Now I am pissed off as there has been no updates to rad studio 2007. Pull you finger out and support your customers.

  2. Chris Pattinson Says:

    Hi Graeme,

    RAD Studio 2007 was released in several phases with each phase having additional bug fixes. Delphi 2007 was the first release, with 3 updates to it by the time RAD Studio 2007 released (which included Delphi 2007 and C++Builder 2008) and then we released an additional December Update:

    http://edn.embarcadero.com/article/37442

    In purchasing the release, there is an option to buy maintenance which is for a year, and ensures you get all latest new product releases during that period. I think it’s a pretty good deal, and a good way to help the development team stay focused on next releases features and quality, and supporting existing customers.

    Maintenance is about 50% of the upgrade price, so with annual releases is a pretty good deal for the customers.

    I understand with RS 2007 some folks are hesitant to move to RAD Studio 2009 due to the Unicode changes, there is a lot more then that though and Andreano covers it really well in this paper:
    http://cc.embarcadero.com/Item/26707

    This probably sounds like it’s blowing you off, the team has a choice of how much effort to spend on past releases and with 4 updates total to D2007 that was considered ‘pretty good’ for our customers.

    There is a certain point in the code base where the cost to fix previous releases is too great, and then the new features that customers ask for suffer.

    If you have specific bugs that are blocking you in RAD Studio 2007, can you call them out? Be happy to look at them for you.

    Thanks for your comment, hopefully you can see that yes the team does do several updates, then has to move on to the next release.

    Regards,

    Chris

  3. Jens Fudge Says:

    Hi Got Delphi 1 when it first came out, as a personal license. I then got a job, where I worked with Delphi 2, 3, 5 and 6.
    I then started my own business, and bought Delphi 7, skipped 8, but bought 2006 with maintenance (I think), so I have now worked with 2006, 2007 and I am currently working on 2009. Very few of my projects have to be lifted to newer Delphi. As in the software I make, Delphi too has some bugs, I have however yet to find a bug that really is a showstopper. Some of the bugs are really annoying, but I can usually get the work done anyway.
    I have built some programs that customers are running, but I stringly suggest the customers to upgrade so they allways have latest version. Spares me the trouble of maintaining old software, gives me the time to implement new and cool features of the current version. If the customer has a bug, I’ll fix it, but if he is using a two or even three version older version, I only fix the bug if there is no workaround, and its a showstopper, or its really really simple.
    I have found quite a lot of bugs in the past 14 years is it of Delphi? But I havent run into any showstoppers. I’m not saying that other people havent. I think that Codegear is doing the right thing, concentrating more on current and future versions, than on older versions..
    This opinion is obviously only until I discover some bug in my Delphi 7, that I cannot workaround…
    Just my two bits.. Codegear, thanks for a real good product.
    Jens Fudge

  4. Bas Says:

    Chris,

    Please take a look at this topic:
    https://forums.codegear.com/thread.jspa?threadID=19261

    Bas

  5. samuel Says:

    >> 711 Delphi bugs found earlier then Jan 1, 2009 have been fixed so far this year

    I don’t think so, most of them you marked with "Won’t do","Feature Removed" or "Test Case Error".

    Here is my personal list. I have reported 33 issues since 2002.
    Report No. Year Resolution
    #2775 2002 Won’t do
    #2970 2002 Fixed
    #4539 2003 Withdrawn
    #6446 2003 Retest
    #6471 2003 As designed
    #6580 2003 Dublicate
    #6657 2003 Retest
    #6934 2004 Fixed
    #7158 2004 Withdrawn
    #8286 2004 Feature Rem.
    #8445 2004 Retest
    #8481 2004 Fixed
    #8763 2004 Feature Rem.
    #9506 2004 Feature Rem.
    #11763 2005 Retest
    #13462 2005 Feature Rem.
    #19716 2005 Open
    #21949 2005 Won’t do
    #27048 2006 Feature Rem.
    #36963 2006 Open
    #39959 2007 Open
    #40082 2007 Open
    #47939 2007 Open
    #47940 2007 Open
    #48800 2007 Open
    #49777 2007 Open
    #50507 2007 Open
    #51361 2007 Open
    #53160 2007 Withdrawn
    #58409 2008 !!!!!
    #62398 2008 Cannot Rep.
    #63153 2008 Fixed
    #63520 2008 Fixed

    5 Fixed out of 33 during the past 7 years.

  6. Jan Derk Says:

    The most voted ever bug for a 64-bit compiler support has been closed, but as far as I know there is no 64 bit compiler yet.

    A feature I have been waiting for for ages as I need to be able to support more than 2GB of memory.

    Can you please reopen it?

    http://qc.embarcadero.com/wc/qcmain.aspx?d=7324

  7. Hichem BOUKSANI Says:

    Hi Chris I have report about 49 issues
    Closed
    #67923 because too many report in one
    #69800 Cannot Reproduce (but the bug style existe in Windows French versions)
    #69760 Closed in my request
    Fixed
    #69763
    Withdraw
    #71736
    Opened
    #69759 (feature request)
    #70406 (feature request)
    #69761 and #69762 (duplicate because try to attach unsuccessfuly
    #70431
    #70829
    #71875
    #71878
    Reported neighter opened nor closed 36
    27 of them concerning BiDiMode
    Some of them have a work Around and most of them were published before SP3.
    This does not encouraged me to publish other bug, because as you see, I don’t speak english very well, so I have to do effort to try to explain.
    When I see that SP3 & 4 are published in May and sources of bug fixed have the date of Jan 14 2009, I can’t understand why the team stop fixing the bug in this date.
    Very sorry of my bad english

  8. Paul Green Says:

    I disagree strongly that maintenance is a good idea! I Upgraded to Delphi 2007 on release. I purchased maintenance at the time. I got ABSOLUTELY NOTHING for it. There was nothing released in the next 12 months that required a maintenance contract. I never even recieved ANY KIND of communication until I got one asking to pay for renewal, which, unsurprisingly, I declined, letting them know how cheated i felt. I would never take out maintenance as it stands.
    To be attractive, the maintenance should be for one year OR at least one major release.

  9. JensFudge Says:

    Hi

    Well, it does seem like a lot of people are annoyed with bugs.. Maybe I’m using my Delphi in a different manner, I really dont experience many bugs.
    I am not saying they are not there, but it seems that the kind of stuff I do, dont get into those areas..
    It is however interesting, that sometimes people confuse the terms "new features" with "bugs".
    As far as I know, Codegear never stated that Delphi came with a 64bit compiler. I totally agree, I would really like a 64bit compiler too, but it cannot be a bug.
    A bug is when the BinarySearch function gives you the wrong result or something. I dont even think its a bug that Delphi cannot compile to Linux, mac osx, unix or any other OS thinkable, even though I would really like it..
    I did read the link about the gif unit not being fixed, and the original auther said he could do it.. And yes, i do agree.. Codegear should sort it. As should they sort the other bugs that are there.
    And yes, maintenance should include one major release..

    Best regards
    Jens Fudge

  10. Atle Smelvær Says:

    Implement Andy’s fixes:
    http://andy.jgknet.de/blog/?page_id=246
    http://andy.jgknet.de/blog/?page_id=288

    Some smaller IDE annoyances:
    55633 When active item has edit button, it’s not visible at first
    43703 Possibility to hide toolbar in breakpoint window
    24999 Hint area is wrong, giving recreate problem on boundary
    19655 Wrong highlighting of the message word
    13469 Make use of $REGION on wizards for forms/datamodules/webmodules etc.
    11324 Refactoring does not handle the comment made by class completion
    10478 Highlight string start and end tag feature behaviour
    6589 Dissappearing debug marking (still a problem….)

    Major IDE annoyance:
    43099 Cursor hint response when working with keyboard in editor

    Showstopper for use of Block Completion (makes it easier without it):
    23472 Block completion work wrong with unfinished code under workarea (wont do.. why and who said that?)

    Very important, especially if you want cross compile/debug later:
    23807 Current Remote Debugging generates a lot of actions before every use

    VCL:
    24128 FileCtrl.pas SelectDirectory has wrong control focus
    15057 TStrings does not follow design path for TPersistent

    Major VCL annoyance:
    10567 Ability to create all VCL packages
    (You really should make it easier for us to implement fixes in VCL and be able to post back changes for review)

    If you want people to use TSOAPDatamodule:
    12979 DSML SOAP Session Support in TSOAPDatamodule

    With new RTTI features (big wish from me):
    26833 Visibility for design objects components should not be public

    I guess this one could be closed:
    26801 RTTI functionality for private and protected sections in classes

  11. Chris Pattinson Says:

    This is great feedback, I’ll pass on to the core management team to ensure it’s reviewed. Several of the issues such as old libraries not being updated are getting looked at.

    Jan, the QC report on 64 bit compiler is Deferred until a future release, it’s not closed for good. I need to look at how feature requests are handled in QC by the team to avoid such confusion.

    Atle, I looked up on the showstopper you mentioned and see this issue ‘Cannot be Fixed’ with following comments:
    [QC] From Andreas Hausladen:

    This bug can’t be fixed. If the code is changed to satisfy the bug report it will break the "if-begin".

    The bug report requests:

    procedure t;
    begin
    | No "end;" should be inserted because there is a second "begin" below the cursor

    procedure t;
    begin
    begin
    | "end;" should be inserted because the second "begin" is above the cursor

    But this breaks the following construct:

    procedure t;
    begin
    if True then
    begin
    | "end;" should be inserted but there is a second "begin" below the cursor !conflict!

    Adding the "above and below begin" logic only to the most outer "begin"
    doesn’t work either. I tried it. It disables the whole BlockCompletion.
    Without a brain reader this bug report (the second part of it) can’t be fixed.

    I’ll summarize the list of other issues mentioned by folks, and get them to the team for review.

    Thanks,

    Chris

  12. Chris Pattinson Says:

    Paul, feel free to shoot me an email with your maintenance dates and agreement. There were several releases last year, I’d have expected you to be covered for at least one major release with maintenance. Very odd if not and I’d like to see what happened.

    chris.pattinson@embarcadero.com

    Thanks,

    Chris

  13. Rej Cloutier Says:

    Yes we can use RAD studio 2007 every day having the work done. The problem is that all IDE bugs really slow down the development of a sofwate solution.

    For example, when nagivating through code and the IDE doesn’t point you at the right place (ctrl+click for exemple). This is a major issue. This is a should repair bug.

    I know, RAD Studio 2007 is really old stuff, but hey, after buying a ten pack of enterprise license (about 25k) and 6 months of use, no chance to get a service pack? I don’t think this could be called customer’s respect.

    Delphi is great.
    Support is poor.

  14. JB Says:

    Here’s one I reported a long time ago which has never moved past "reported" state:

    http://qc.embarcadero.com/wc/qcmain.aspx?d=58704

    You might run a query of old issues in "reported" state to get a feel for how many reports are falling through the cracks…

  15. Graeme Says:

    We are using C++ builder 2007 on a current project.

    The linker is the biggest pile of crap.

    Just try and use in in large applicaitions and it just dies, dies, dies….and my god is it slow……

  16. Graeme Says:

    http://andy.jgknet.de/

    does more good fixes than what we recieve from support.

    I have developers (from microsoft background)laughing…yes laughing at all the bugs they a forced to work against.

    I love delphi, c++ builder. But never again will i recommend for a project. never.

  17. Mason Wheeler Says:

    @Graeme:

    It’s C++. What do you expect? It compiles and links very slowly and everyone knows that. (Especially if you use non-trivial templates.)

  18. Wayne Says:

    Here is a Error insight QC that has been closed but I’ve still got the issue in Delphi 2009 with Update 3&4.

    http://qc.embarcadero.com/wc/qcmain.aspx?d=58662

    I didn’t understand the resolution comments.

    There are numerous other QC relating to this issue eg #33546, #22880 so I guess that’s another reason to close issues (but it doesn’t mean they have been resolved!)

  19. Bert Says:

    I would like to get #26318 fixed. Now I have to modify ComCtrls.pas and copy it to my project.
    Best resolution is to add another event passing the year.
    This really can’t be that much work?

  20. Atle Smelvær Says:

    About the Block Completion, it is possible to create a better behaviour. The general idea is that whenever you are not sure where the "end" should be put, don’t do it automatically.

    I guess this was your scenario?:

    proc something;
    begin
    if something then
    begin

    begin
    end
    end

    Let’s walk through that one. There is less begin than end total, and more begin than end before, there is more extra begin versus end before cursor than after cursor, and next tag is not end, so it should generate a "end".

    Solution solved..

  21. Mile Kitic Says:

    And how about .NET personality of D2007, basicaly it’s screw you poor users, IE 8 update breaks D2007 ASP.NET designer which doesn’t work so good in the first place. I am thinking that that is my fault, because I was stupid enough to trust CodeGear and doing ASP.NET work in delphi 2007.

    And talking about upgrade to Prism, you may fuck me once but not twice, sorry I really love Delphi but Prism is not Delphi, and so many VS.NET features doesnt work in Prism, especially in VS.NET Team System.

  22. Atle Smelvær Says:

    Btw. All TDictionary bugs still open should be fixed, they are all nasty.

  23. David Howes Says:

    If you really want to convince customers you are taking their concerns about quality seriously, I suggest the following approach:

    When you release a new version of the product, create a webpage that essentially contains the features matrix but with another column marked quality. Let each row in the column carry an Amazon like scoring system. e.g. score out of five displayed, and clicking on the score brings up a reviews page dedicated to that feature. This would firstly focus the development team on improving the areas that were getting the most attention from users and secondly enable potential buyers to tell at a glance if a feature they cared about had actually been fully implemented and tested.

    A matrix with lots of low scores would be an embarrassment and certainly something to focus minds. At the same time though, positive reviews for a feature would help to sell more products. How many people are sticking with Delphi 7, because they simply don’t have confidence in later releases to do they what they need? After all overall product quality improvements don’t mean much if the functionality you need doesn’t work.

    And finally make sure that comments are restricted to ordinary customers, not TeamB evangelists.

    Maybe you could implement the system in Delphi for PHP.

  24. clacke Says:

    What about Webdeploy menu for activex?
    I cannot do a new activex in Delphi2007 but I have to prepare it in Delphi 7 and then I recompile it in 2007.
    Chee Wee expert cannot solve every problem.
    Is this so difficult to solve?
    Delphi 2009 lost web deploy too? I posted a question on EDN a mounth ago and it isn’t answered yet.
    Am I the only delphi user who is writing activex?
    Yes, I know that I can write a web page from myself (and it was my solution) but it seems we are alone.

  25. m. Th. Says:

    Nasty bug:

    Report No: 59963 (RAID: 258597) Status: Open
    PopupMode=pmExplicit doesn’t handle correctly the closing of forms in certain cases
    http://qc.codegear.com/wc/qcmain.aspx?d=59963

    Major annoyance:

    Report No: 45282 Status: Reported
    Wrong handling of floating all IDE editors
    http://qc.codegear.com/wc/qcmain.aspx?d=45282

    Kudos for your effort in trying to enhance the product further. But because there are some phenomena popping in the community can you answer to the following questions? (Please give your _personal_ POV, isn’t a PhD exam here :-) )

    What means ‘Quality’?
    What means ‘Crowdsourcing’?
    What means ‘Streamlined workflow’?

  26. salar Says:

    My reports are still open:

    #71595 : Form resizing issue
    #72024 : VCL controls flashes on resize
    #72175 : Range check error in TGifImage
    #72396 : Request Event: OnCheckedChange for TRadioButton and TCheckBox

    all of the are before 2009/3

  27. Olaf Monien Says:

    @Jan Derks: The 64-bit compiler request has not been closed, but it has been deferred to "next version". Apparently that won’t be "Weaver" though. At Delphi Live! they stated that 64-bit will still need a while because the compiler needs quite a bit overhauled for that …

  28. Chris Pattinson Says:

    Hi JB,

    We’re working through the reported issues constantly.

    The interesting thing about QC is it was originally intended as a public self-support system, where Sysops would promote into the main bug area. If a report was not deemed worthy enough to promote, it was left in the ‘bucket’. A couple years ago, I had QA take over looking at the reports, and the team could do fairly well on incoming reports.

    The ‘debt’ of the old public reports is something the team is very aware of, and basically tries to triage based on public voting, reproducibility and severity of the issue.

    I’d love to see more public voting on issues, so we can prioritize better - otherwise the team is just working away as methodically as they can, and we take critical input from Beta Test Marshals on their ‘Top 10 Customer Issues’ lists - working on those as a top priority.

    Regards,

    Chris

  29. Chris Pattinson Says:

    Hi David,

    I really like that idea. I’m all for public surveys and ideally a grid of the feature areas that lists the public perception of quality. I’ll discuss with Michael Rozlog when he’s back from vacation.

    I really DO want to hear your top quality issues and top bugs. QC was made to make such feedback by the public possible, and let the community itself vote on issues and help prioritize bug fixing work. The public bug reports are visible, queryable and votable. We also have statistics that show which areas get the most bugs and feature requests.

    It’s a good way of doing it IMO, since a basic ‘5 star’ does not give you concrete information on what exactly you need to improve - just that there is a problem. QC gives us hundreds of areas we can improve, then it comes down to voting and prioritization of which improvements to do first.

    Thanks,

    Chris

  30. Chris Pattinson Says:

    When Michael Rozlog produces the next Delphi/RAD Studio he’s the ultimate authority on feature priority and rough schedule.

    Graeme - As to C++Builder - we took several hundred new fixes including some really critical ones to the Linker in C++Builder 2009. More has been done since with Weaver, I suggest trying out the 2009 Trial and see if the linker bugs you mentioned were fixed as a part of those changes.

    C++Builder is still supported by a significant compiler and QA group. David Dean usually does a great job tracking down such issues, so feel free to contact me with QC numbers and/or information which I’ll forward on to David and the team to look at.

    Thanks,

    Chris

  31. Michael Skachkov Says:

    Chris

    i suggest you to change a bit the bug-fixing mode that you work in.

    i see the key problem in fact that you select only bugs you find important and try to fix them. well, this is not bad itself, but often it results the situation when for certain area there are couple of important fixes, but the area still cannot be used because of other bugs.

    in this case your statistics about number of fixed bugs looks quite useless. I mean the aspect of "i don’t care about amount of fixes, i need this thing working!".

    great example for that is TListView component. you add support for new features like groups and so on. however, there are tons of bugs in VCL sources related to this control and they are not fixed. So it’s hard actually to decide to use the control because of new features - knowing that all bugs are still there.
    (i mentioned TListView because it is quite complicated control - a lot of subclassing used and so on. we cannot easily change sources to fix painting problems or problems with dragging columns - it is easier to buy commercial component or download VirtualTree for free).

    so, what i propose to you is to make small, eh, support updates that are focused on single areas.

    in other words, you take all bugs for, say, list view control and fix them. ALL, important and not important. i’m not talking about adding new features. no, just fixing bugs.

    i makes much more sense to have 4 of 10 areas working perfect instead of 10 of 10 being fixed, but having 0 of them usable.

    PS. so it would be good initiative: say, "update XX contains fixes for all components from Standard page", then "update XX contains fixes for all components from Additional page" and so on. The same thing can be made for IDE-related stuff and so on. if you do this way, the overall logic of development/support will be much more clear for the public.

  32. Chris Says:

    Michael, that’s not a bad approach. Especially as it could isolate testing and also help focus the team.

    This is effectively what was done for Update 1 for D2009- that was mainly a RibbonControls VCL update patch. Update 4 was focused on database fixes. The Update 3 was a more comprehensive update where riskier and deeper changes were managed - I think it’s a good approach to have some small focused updates, then a general comprehensive one.

    We can look at doing more focused, smaller ones in the future. The team does try and prioritize based on all feedback coming in from all sources.

    Regards,

    Chris

  33. Michael Skachkov Says:

    Chris

    Well, what can I say? Nice to hear :)

  34. salar Says:

    Hi Chris
    Why don’t your team release hotfixes between updates.
    For example the issues for compiler about generics was serious but we had to wait for update 3 to arrive.
    That would be nice to have hotfixes for important issues before any major update.

    Regards,
    Salar

  35. Chris Says:

    Hi Salar,

    We often release hotfixes, there were over a dozen in D2007 time frame that then rolled up into a hotfix pack. D2009 we had several small updates and then the larger one.

    Both team and management provide input into what should go into a hotfix or update, and the scope of it. We are especially sensitive to maintaining backwards compatibility and functionality. I certainly don’t mind if anyone notices something broken that used to work and send me an email - QA ’should’ catch all such cases with the large set of regression tests that are run daily.

    Regards,

    Chris

  36. David Wright Says:

    Great timing on this posting…

    I wasted about 2 hours of my Thursday morning on a bug that has been out there for what appears to be nine years now.

    The imfamous 4GB free-space bug in the BDE. We have one app that still uses the BDE and it is not our app, so we cannot migrate to another database technology.

    If you are not familiar with the bug (I was not either until Thursday), it causes intermittent ‘out of disk space’ errors in your app if the free space happens to be near an exact multiple of 4 GB. In my case, I was getting out of space errors on a machine with 56 GB free.

    There was a half-hearted attempt to patch in 2004, but from the reports I read it came with it’s own batch of problems.

    For those of us who inherited a BDE product, how about a quick fix for this? It could not be more than a couple of lines of code - if you still have the source laying around somewhere :)

    Thanks,
    David

    PS - My workaround for this? I copied a half-gig of junk onto the drive to get to 55.5 GB free and everything started working again.

  37. Thomas Koos Says:

    I also stopped to add any found bugs to the quality central. The bugs are never fixed or declined without any cause, etc. The support is very bad.

    Best example on closing without any further reaction is QC # 62498. Even the given resolution comment shows that this is a internal design failure - and was even correctly handled in earlier versions.

    Another example on how worse the support is, is case # 3239. Reported in 2001 (year is not correct in QC) (found in Delphi 5) and fixed in 2006 in Delphi 2006. Wow - fast fix - it’s amazing, because the fixed structure was posted on creating the entry. Just copy & paste takes some years…

    And their is still the big lack on all things affecting the usage of delphi sources in C++Builder. All the new features of the delphi language are simply never tested in C++Builder. The Header generator is a complete show stopper here. We use such combined projects and have to fix the headers on every build process. Even delphi compiler options are not offered in the IDE (DebugInLib) or just simply not passed to the pascal compiler (enum size). It is simply sometimes unusable…

    Here are some other bugs that are still open and show stopper when using Delphi with C++Builder…

    69296, 53994, 52682, 42782

    But the goldiest thing I ever is bug 42782. The HPP generation is basicly wrong on const pointer declarations since generation hpp. Never used by codegear so nobody got’s crazy on the needed const_cast. The HPP generator has to be build with people from Delphi & C++Builder and they have to get in common. The new feature of the Delphi language is partly incompatible with C++ (e.g. the class inside a class declaration) and so the very good feature of using Delphi sources in C++Builder projects gets lost. Destroyed by codegear itself - and the user has to fix and test it.

    Regards,
    Thomas

  38. Alberto Pérez Muñoz Says:

    We have been waiting for a solution to our two reports for three years now

    We have 5 licenses of BDS2006 Enterprise.

    In this time we have had to live with that bugs doing the following…

    BUG 33679

    The mark’s discussion help us to find a way to change the threading model of a Classic web service… , but to use a delphi dll into a WCF service was different and we didnt have way to change de threading model because WCF don´t use the classic httphandler of ASP.NET 2.0.

    In this case we had to change Borland.Vcl.DSIntf in that form:

    procedure CreateDbClientObject(const CLSID, IID: TGUID; out Obj);
    var
    Factory: IClassFactory;
    begin
    // APM comentado para ver si funciona en MTA
    //CheckThreadingModel(System.Threading.ApartmentState.STA);
    CheckDbClient(CLSID);
    Factory := DllGetClassObject(CLSID, Guid.Create(CLSID_IClassFactory));
    Factory.CreateInstance(nil, IID, Obj);
    end;

    For now is running well because is a web service with little concurrency.

    I think that is time to prepare midas.dll for the future because if not you are limiting de future of dbexpress on internet applications because everybody
    do the bussiness logics with TClientDataset->TDatasetProvider->TSqlQuery to compile one version code to win32 and dotnet.

    BUG 35900

    use of database aliases in sql sentences in INFORMIX is not supported

    The last year we ported a Delphi 7 application to Delphi 2006 and with the patch:

    Unit SQLExpr.

    procedure TSQLQuery.QueryChanged(Sender: TObject);
    begin
    if not (csReading in ComponentState) then
    begin
    Close;
    SetPrepared(False);
    if ParamCheck or (csDesigning in ComponentState) then
    begin
    FCommandText := SQL.Text;
    FText := FCommandText;
    SetParamsFromSQL(nil, False);
    { TODO : CAMBIO REALIZADO POR APM PARA QUE FUNCIONEN LAS QUERYS DE SQLSERVICES } FText:=FNativeCommand;
    end
    else
    FText := SQL.Text;
    DataEvent(dePropertyChange, 0);
    end
    else
    FText := FParams.ParseSQL(SQL.Text, False);
    SetFCommandText(FText);
    end;

    Unit DB.pas

    function TParams.ParseSQL(SQL: WideString; DoCreate: Boolean): WideString;
    const
    Literals = ['''', '"', '`'];
    var
    Value, CurPos, StartPos: PWideChar;
    CurChar: WideChar;
    Literal: Boolean;
    EmbeddedLiteral: Boolean;
    Name: WideString;
    posicion:Integer;
    function NameDelimiter: Boolean;
    begin
    Result := inOpSet(CurChar, [' ', ',', ';', ')', #13, #10]);
    end;

    function IsLiteral: Boolean;
    begin
    Result := CurChar in Literals;
    end;

    function StripLiterals(Buffer: PWideChar): WideString;
    var
    Len: integer;
    TempBuf: PWideChar;

    procedure StripChar;
    begin
    if TempBuf^ in Literals then
    begin
    WStrMove(TempBuf, TempBuf + 1, Len - 1);
    if (TempBuf + (Len -2))^ in Literals then
    (TempBuf + Len-2)^ := #0;
    end;
    end;

    begin
    Len := WStrLen(Buffer);
    TempBuf := AllocMem((Len + 1) * 2);
    try
    WStrCopy(TempBuf, Buffer);
    StripChar;
    Result := TempBuf;
    finally
    FreeMem(TempBuf, (Len + 1) * 2);
    end;
    end;

    begin
    Result := SQL;
    Value := PWideChar(Result);
    if DoCreate then Clear;
    CurPos := Value;
    Literal := False;
    EmbeddedLiteral := False;
    repeat
    CurChar := CurPos^;
    if (CurChar = ‘:’) and not Literal and ((CurPos + 1)^ ‘:’) then
    begin
    StartPos := CurPos;
    while (CurChar #0) and (Literal or not NameDelimiter) do
    begin
    Inc(CurPos);
    CurChar := CurPos^;
    if IsLiteral then
    begin
    Literal := Literal xor True;
    if CurPos = StartPos + 1 then EmbeddedLiteral := True;
    end;
    end;
    CurPos^ := #0;
    if EmbeddedLiteral then
    begin
    Name := StripLiterals(StartPos + 1);
    EmbeddedLiteral := False;
    end
    else Name := WideString(StartPos + 1);
    if DoCreate then
    TParam(Add).Name := Name;
    CurPos^ := CurChar;
    StartPos^ := ‘?’;
    Inc(StartPos);
    WStrMove(StartPos, CurPos, WStrLen(CurPos) + 1);
    CurPos := StartPos;
    end
    else if (CurChar = ‘:’) and not Literal and ((CurPos + 1)^ = ‘:’) then
    begin
    WStrMove(CurPos, CurPos + 1, WStrLen(CurPos)) //APM//
    // posicion:=(Curpos-value);
    // Result:=Copy(Result,1,posicion)+Copy(Result,posicion+2,length(Result)-(posicion+1));
    // curpos:=PWideChar(Result);
    // curpos:=curpos+posicion;
    end
    else if IsLiteral then Literal := Literal xor True;
    Inc(CurPos);
    // Value:=PWideChar(Result);
    // posicion:=(Curpos-Value);
    until CurChar = #0;
    // until (posicion)>=Length(Result);

    end;

    Please we are customers of codegear from delphi 3 , I think that is time to do anything.

    Thanks for all….

Leave a Reply