4

I cannot access ANY database by ANY means from within Delphi XE Professional. What I mean by accessing the data base is:

  1. having the live database appear via components in the Object Inspector, when the connected property is set to true
  2. using the Data Explorer to create and explore database connections

EDIT:
SORTED !!

The core problem is that communication into the database, including specifically the communication generated by the IDE and any code built using the drivers was problematic.

Confounding and masking sub-issues were:

  1. Missing or misplaced DLLs.
  2. The Data Explorer does not fully support dbExpress drivers.
  3. There is a bug within the 2009 IDE code, found by Chee-Yang Chau when writing the dbxFirebird driver, which limits static linking of drivers into Delphi. It is not known if this bug extends to 2010 or XE.
  4. When using the Object Inspector, it is easy to cause the IDE to revert changed connection parameters to their default values.
  5. Some drivers had incorrect default values (eg assuming the client dll was always gdb32.dll irrespective of whether the database was Interbase or Firebird).
  6. Installation of two versions of Interbase led to some clashes in database communication - server names generated by the tools were odd; and the view of the databases depended on which installation of the Interbase tools were used.
  7. The documentation available is of varying dates; refers to different versions; and as a result often appears contradictory.

END EDIT:

Approaches tried:

  1. Multiple databases
  2. Multiple different drivers/components
  3. Accessing the database through other external tools, such as IBSQL and Flame Robin.
  4. Raising questions (here and here) on SO.
  5. Raising questions on the support forums for Firebird, Embarcardo, and Flame Robin.

Environment:

  1. OS: Windows 7 Ultimate 64bit:
  2. Delphi Embarcadero® RAD Studio XE Professional Version 15.0.3953.35171
  3. Database: W1-V2.5.0.26074 Firebird 2.5 (64 bit)
  4. Connection technology: dbExpress
12
  • 2
    don't you need enterprise or architect or whatever it is called? Commented Apr 23, 2011 at 16:33
  • 2
    @Chris I've said it before, but why don't you buy the devart drivers? The time you have spent on this already must have eclipsed the cost many times over. Commented Apr 23, 2011 at 16:40
  • 3
    You have tu use 32 bit fbclient.dll because Delphi IDE is 32 Bit (for 32 bit application you have tu use fbclient.dll 32 bit even if server is 64 bit) Commented Apr 26, 2011 at 11:47
  • 1
    I know you don't want to spend more money, but the fastest route to the finish line is to pay for an upgrade to Enterprise or Architect. Otherwise, some people ARE using Delphi XE Pro with Interbase and Firebird, via DbGo (ADO). Commented Apr 27, 2011 at 20:06
  • 1
    @Warren - As far as the Enterprise or Architect versions are concerned, it is not that I don't want to spend more money - I cannot afford it, even with the current offers of an upgrade around. I am going to purchase the Devart drivers, if my current line of investigation pans out - which is looking very promising. Commented Apr 27, 2011 at 23:32

4 Answers 4

3

Delphi Professional does not support Firebird with the native dbExpress drivers that come with Delphi. You need the Enterprise or Architect version of Delphi in order for the native firebird dbExpress driver to work.

I have Delphi 2010 Professional. I didn't want to spend the extra money on the E or A version and I failed to read the feature matrix to see that the Firebird dbExpress driver is not available with the Pro version.

I have found a few really nice videos that show how to connect to Firebird using Delphi. However, when I tried to follow along with my Professonal version nothing worked.

Shame on me and more shame on Embarcadero for touting that Delphi supports Firebird in big bold print but not mentioning that you need the Enterprise or Architect version except in the tiny fine print.

Sign up to request clarification or add additional context in comments.

Comments

2

I can now write code to access Firebird within the IDE. I have (limited, but sufficient) access to the drivers within the IDE. Specifically, the drivers appear in the Data Explorer, which can be used to generate default values for the SQLConnection (dbExpress component). These can be accessed and used within the Object Inspector. The workaround to the IDE bug quoted below is necessary to ensure the communication parameters are correct. When writing database code, it is necessary to compile in the source for the dbExpress driver.

The following code is the minimum, with minimum parameter set, necessary to establish and test a database connection:

unit Unit2;
interface
uses Classes, SqlExpr, Dialogs, dbxDevartInterbase;
var SQLConnection1 : TSQLConnection;
implementation
{$R *.dfm}
  begin
    SQLConnection1 := TSQLConnection.Create(nil);
    with SQLConnection1 do
    begin
      ConnectionName := 'TestConnection';
      DriverName := 'DevartInterBase';
      LibraryName := 'dbexpida40.dll';
      VendorLib := 'fbclient.dll';
      GetDriverFunc := 'getSQLDriverInterBase';
      Params.Clear;
      Params.Add('User_Name=SYSDBA');
      Params.Add('Password=masterkey');
      Params.Add('Database=localhost:C:\Program Files\Firebird\Firebird_2_5\examples\empbuild\employee.fdb');
      Open;
      If Connected then ShowMessage('Connection is active');
      Free;
    end;
  end.

The workaround, courtesy of Bob Swart on one of the Codegear forums is:

The trick is to select a ConnectionName value, which will then assign a value to the Driver property and all other properties like LibraryName, VendorLib and GetDriverFunc.

Then, make changes - if needed - to the subproperties of the Driver property, and finally clear the name of the Driver property.

This will leave all your changes in the Params list (which you can also manually edit if you wish).

Note: leave the ConnectionName set - if you clear that one, the parameters will be cleared again.

Now you can compile your application and deploy it without the need for dbxdrivers.exe or dbxconnections.ini (but you need to deploy the DLLs specified in the LibraryName and VendorLib, of course).

Also make sure to set LoginPrompt to False and leave LoadParamsOnConnect set to False, too.

Comments

2
+50

BOUNTY AWARD

I have awarded the bounty to this answer as it was the one that pointed me away from investigation of the IDE, its installation and configuration, to investigation of the connection into the database.

END

DK about Firebird 64 bit - -no experience. But I've always had a lot of trouble with dbExpress. Never any problem with the included IB components suite. But there is a lot of confusion with IB versions...

But IMO you're best served using the ADO ('DBGo') components as opposed to any proprietary IB or Delphi specific drivers. What you need is an ADO provider for IB, available @:

http://www.ibprovider.com/eng/ - and as others have said, avoid using localhost, use 127.0.0.1, or better still, determine the true IP address of your workstation (ping machine-name...) And are you sure you don't have some kind of firewall or intrustion protection that may be involved?

You also need to make sure that your IB connection is configured properly - local or TCP, and no, don't use quotation marks for your names, pwrds, etc. The error message you got seems to indicate that you're trying to connect via TCP and it's not properly configured. What happened between the time it worked and the time it didn't work? Shut down Delphi? Reboot the machine? Explain please....

No 'special permissions' are needed - you simply need to ensure that your database server and client are properly installed and configured. In terms of functionality you can do everything with the pro version - just that the drivers etc aren't included in the package.

Again, IMO go for ADO and you'll never look back.

HTH, MNG

11 Comments

Where in the question is devexpress mentioned?
@David - sorry, I meant dbExpress.
@Chris - use ping -4 myMachine name. Win 7 by default uses IPv6. Link: DK - I just right clicked and invoked 'open link in new tab' and it came up fine. IDE and database don't need to be 'aware of each other's presence' - if your server and client connection are configured correctly, it will work. Can you access the database using the IB tools that come with the package? Start from there -
@Chris - BTW, if I'm not mistaken, you can't connect via TCP/IP using the included IB drivers in pro version, and/or the version of IB included in pro version only allows local connection mode, not TCP/IP. If so you could connect to a remote server, which is reserved for 'enterprise' versions etc. ADO will see a server anywhere, but if you have a version of IB that doesn't support remote connections, that won't help. Not sure what DevArt does. HTH MNG
@Chris - are you accessing the DB locally or across a network? What connection mode are these tools using? If I'm not mistaken, IB has 2 connection modes by default 'local' and 'TCP/IP'.
|
1

Have you tried Paradox via the Borland Database Engine (BDE) and related components: TTable TQuery TStoredProc TDatabase and TSession?

If memory serves me correctly, at least as far back as Delphi 3, the distinguishing factor between "professional" and the "higher-level" editions has been the type of database development "out the box".

  • In Delphi 1, the BDE was the only way to do out-the-box database development.
  • Delphi 2 permitted a custom database layer by abstracting parts of the database component hierarchy.
  • Delphi 3 Professional provided BDE and drivers for file-based databases and Interbase.
  • One level up (Enterprise?*) they provided BDE drivers for typical client-server database access: SQL Server, Sybase, Interbase, Oracle,... (and native drivers for Interbase)
  • Another level up (Architect?*) introduced multi-tier development with Midas. Unfortunately, Borland took a step back with Midas, because the multi-tier components were again hard-wired to the BDE. (This was resolved in Delphi 4.)

?* Please note, I may be mistaken about the exact naming of these editions. Around about that time I formed the opinion that Borland was merely coming up with "grander" names in order to charge more for features that didn't really offer as much benefit as the 'big-cheque-writing-CIOs' came to believe - leaving developers to deal with the fallout. (Yes, I have battle-scars from Midas I.)

Rant aside, the theory was....

If one embarked on entry-level database development, you would purchase Delphi ?? Professional. Develop your system against a file-based database or Interbase via the BDE.
If you later needed to scale-up: you would upgrade Delphi, purchase your chosen SQL RDBMS, switch your connectivity via the TDatabase component, and apply the few necessary tweaks.
NOTE: In Delphi 3, you could switch to Native Interbase (personally not recommended) or use third-party components for non-Midas development. From Delphi 4 up, ADO and DevExpress started receiving more attention and nowdays, the BDE seems to be pretty much forgotten.

Of course theory & practice seldom frequent the same pubs. However, with a few cautionary pointers, you should be able to develop a significant file based solution that can be upgraded relatively painlessly.

  • Keep your business logic out of the database. This is quite possibly the biggest and most frequently encountered error. Huge chunks of systems are often written in triggers and stored procedures, making it more difficult to maintain or migrate a system.
  • Avoid platform-specific database techniques. This should go without saying, but if you don't explicitly look out for them, you will encounter problems.
    • Particularly relevant to file based database systems, many support special locking mechanisms - avoid them! They don't scale well to large multi-user systems in any case.
    • Generating of artificial keys often varies by platform: Generators, IDENTITY columns, how you get the new value.
  • Plan your system for large volumes of data. Identify the high-transaction tables, and avoid using uncontrolled retrieval of all records. I'd also avoid the TTable in this situation - BDE does a lot of interesting background things with TTable, and behaviour can vary according to driver and platform.

Disclaimer: All this was a long time ago, so some of the details may be a bit sketchy.
Disclaimer2: I don't have any experience with Delphi XE specifically. I currently use D5 professionally, and D2009 in my personal capacity.

5 Comments

BDE is dead. No one on Embarcadero will ever touch this code even if a bug is found and need to be addressed for allowing a program run. And this state of affairs started in 2002 (AFAIR) when the last version of BDE was released (version 5.2). The reason I didn't downvoted your answer is because the good advice before disclaimer. Although I really disagree with the 1st advice, if taken as dogma.
@Fabricio: I know very well that BDE would rather be forgotten. It still has bugs inherited from its DBase roots that will never be fixed. It probably won't be ported to 64-bit. However, it's still distributed with Delphi, and given that OP wants a "low or zero cost" solution to his problem - this requires nothing other than what he currently has. BTW: I just tested a couple of the BDE demos: Demos\DelphiWin32\VCLWin32\Db\FishFact and Db\MastApp (viewing data with DbExplorer instead of Data Explorer) - it works on Win7 64-bit with only 1 tweak to settings... it's an option to consider!
@Fabricio: PS: Don't misunderstand the part of my post: "entry-level ... purchase Delphi Professional ... via BDE" .... I'm not saying that's how it should be done; I'm saying that's how it was done (circa Delphi 3 days). My point is: OP needs a solution. Don't write-off a possible solution simply because it uses dated technology. If OP finds that one of the other answers fully solves his problem, I'll happily delete mine - because the other answer will almost certainly be better future-proofed than relying on BDE.
I'll write off the BDE way because, since he have XE, he could use an OLEDb provider (one link was offered) and even OleDb over ODBC (which I used with FB without any problems). Both are better solutions than BDE, since in the end he'll install FB client anyway - and FB driver support dsn-less connections.
And FB ODBC is free of charge.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.