I have a Firebird 2.1.1 database deployed over a LAN. In a recent upgrade I used an FB internal function (COALESCE). When I was testing my Delphi app on my development machine there were no problems.
But when I tried to run a query on a production machine I received an error message telling me that the function (COALESCE) was unavailable.
Coalesce is a built in internal function in FB. It is not a UDF or a stored proc, it is built in.
Q: Why does a query using Coalesce work on my development machine but not a production machine?
Some more Info:
XP pro SP2 on both
My program is developed in Delphi 3.0 with BDE
BTW: I installed FB server on the workstation (production machine) and, low and behold, the query using Coaclesce works! I thought Coaclesce was an internal function?! I don't want to have to install FB Server on every machine. There are over seventy workstations in three different locations.
Normally I have FB (ver 2.1.1) installed on one machine running XP. This is my designated database server. All workstations running my app get their data from this server. I upgraded my app and changed the schema of the FB database that resides on my server that my client side app uses. One of the changes that I made was that I am using FB internal funcations for the first time. Specifically I am using function COALESCE. When I run my app on a workstation I get the following error message:
-SQL error code = -804
-Function unknown
-COALESCE
The app running on the workstation is running a select statement against the database on the server that uses COALESCE.
Here's the interesting part: The query containing COALESCE ran fine on my development machine (which is another workstation on our network) but not my users' workstations (production machines). So I asked myself "What's the different about my development computer?" Well it has FB server on it. So I installed FB server on a user's workstation (FB is now on our server + on the workstation running my app) and: I don't get the error anymore! My app is still using the server's database (not the workstation's) but it's as if by having a full FB server on the client workstation my app can now find the internal FB functions.
I have been assuming that FB internal functions are part of the server install. They don't need to be copied to workstations and they don't need to be declared. They are like SUM, MIN, MAX or AVG.
Q: Why don't Firebird Internal functions run on Firebird client conmputers?
The Firebird's client library "fbclient.dll" (or perhaps renamed as "gds32.dll") parse the statement and validates the SQL keywords that are used.
It is not necessary to install the server on the client machines.
What happened is that the machine was running with an old version of the client library (maybe BDE has been distributed with an old "gds32.dll") that not recognize the "COALESCE" keyword. When you installed the server version 2.1.1 it also install the updated client modules, and possibly replaced the old "gds32.dll" in the system directory for a "fbclient.dll" (option checked by default in the server installer) compatible with Firebird 2.1, renamed as "gds32.dll".
You can attempt to reproduce the problem, search for all copies of "fbclient.dll" and "gds32.dll" in the workstation, and then notice if they are really old version, and try replace only this specific files, without install the server in the client machines.
Related
Suppose that I've created a project using MS SQL Server.
Now if somebody asks me to run my application on their brand new PC, should I install the entire SQL Server management studio on their computer? Or are there any other choices?
Please note that I just want to run my app (.exe template) not to debug it or anything else.
If your application is intended for standalone use on a PC, you can include the redistributable version of SQL Server Express in your installer. It's a limited but functional version of SQL server intended to be included with application programs like yours free of charge.
https://www.microsoft.com/en-us/sql-server/sql-server-editions-express
If your application program is designed for either shared or standalone use, and you have time to polish up your installer, you can ask your users whether they want to use a shared SQL Server instance. That will let you skip the installation of SQL Server Express when it's not necessary.
No they don't need SQL server or management studio , however they a database driver to access the server. ADO, ODBC and JDBC are the types of drivers you would look at. This depends on the language you wrote your application in and the connection string.
You clients would use the server's address and connect to it using the driver which is specified in a connection string. See the examples below:
.Net Framework Data Provider For SQL Server:
Server=myServerAddress;Database=myDataBase;User Id=myUsername;
Password=myPassword;
SQL Server Native Client 11.0 OLE DB Provider:
Provider=SQLNCLI11;Server=myServerAddress;Database=myDataBase;Uid=myUsername;
Pwd=myPassword;
If you application only connect to the database that you have a two-tier client server architecture. For the server to be reachable it needs to be on a network or network endpoint that the clients(people running your software) can see. The server needs to be on as well(your comments).
My Problem is that I cannot connect to an SQL Server Express 2008 64bit Database via an Access Runtime 32bit, neither by Windows authentification nor by SQL auth.
On the Windows 2011 Small Business Server runs a Virtual machine with Windows 7 Prof. 32 bit. From this Windows I tested my Access App. using a (32bit) SQL Driver 11, which works fine.
The same Access App used from a 64 bit Windows 7 Prof. Client using a 64bit SQL Driver 11 fails with SQLState 08001 error.
The Thing which I do not understand is, that ODBC Connection test is successful, a data link (UDL) is successful, but not my Access App.
When starting the app, the first Thing is to run a stored procedure through a passthrougquery and grab data from a certain tbl in the SQL-Database. This SP brings the Connection error, but not an runtime error from Access (I removed even an error handler!).
So, how can I find the reason or any error in the Access app (if there is one)?
I am helpless as anything I know to test or to do I already tried out to make the app run. As I cannot even install the SQL Driver 11 in 32bit, it should not be a Driver related error.
Does anyone know a test-app, where I cannot only connect but retrieve data from an SQL-Database or any other tricks to check the Access to the database?
Thanks your help!
Access usually is installed as a 32bit Application. So on 64bit computers it will use the 32bit subsystem. On Windows 7 all the default shortcuts to the ODBC Data Source Administrator utility will lead to the 64bit version of it. Whatever you see or configure there is completely irrelevant, as your 32bit Access is not going to see it.
Solution:
You need to explicitely open the 32bit version of the ODBC Admin utility and configure the data source there.
To make sure you get the right version, use Windows Explorer and open this file: C:\WINDOWS\syswow64\odbcad32.exe
Well, what I found out meanwhile is, that the Connection Fails when trying to use a Connection like this "ODBC; DSN=MyDSN;....." but it works, when I make a Connection DNS-less, by connecting with "ODBC;DRIVER=SQL Server Native Client 11; SErver=myServer;....".
Maybe this is exactly that what you are talking aout. When I just use a DSN it takes the wrong bit Version.
So I will try this: delete the DSN I have, open odbcad32.exe and create the same DSN again.
If I understand you correct, then Win 7 provides the correct Driver and stores it in the DSN. Calling this DSN by Access would lead to the correct Settings.
Further Problem is, that my SSQL-Server instance is not at port 1434, and the SQL Server Native Client 11 Driver has no more Clientconfiguartion to set the static port. So I found a string solution for that "MyServer\Myinstance, 15999".
I hope that this port Setting will be accepted in the DSN, otherwise I really have to Change to DSN-less which is more complicated due to different Servers for the development and the production.
Thanks yr. reply.
I have developed a application in c# which is windows based application. It stores data into database sql server. I want to know, when I create setup in VS and install it in a client computer should I install sql server software also or Is there any way without installing SQL Server in client's PC My application can function correctly.
sIf you use a filebased implementaion of SQL (localDB) you should be able to get away with a "setup" installing the neccecary dependencies to bootstrap the DB. (Someone correct me?)
If you use the DB in a hosted SQL environment (SQL Server running as a service), you will need to install SQL server on the deployed pc, and get the database up.
I am no sure if you can "automate" installing SQL server and getting the DB up from a setup app.
You have two deployment options for applications that contain SQL Server Compact 3.5 databases. The method of deployment you choose depends on the servicing requirements of your application and whether your users will need administrative credentials on the computer on which the application will be installed.
Following are the deployment options for SQL Server Compact 3.5 databases:
1. Traditional Microsoft Windows Installer (Microsoft setup technology)
a. Users need administrative credentials to install the application.
b. SQL Server Compact 3.5 will be serviced by Microsoft Update.
c. Can use ClickOnce deployment.
-or-
Private file–based deployment (deploying the SQL Server Compact 3.5 DLLs as part of the project)
1. Users do not need administrative credentials to install the application.
2. SQL Server Compact 3.5 will not be serviced by Microsoft Update.
3. Can also use ClickOnce deployment.
I have a problem connection to a SQL Server 2012 instance running on Windows Server 2012. I have a .NET 4.5 windows forms application installed on a client machine running Windows 7. The error I get is this:
A connection was successfully established with the server, but then an error
occurred during the pre-login handshake. (provider: SSL Provider, error: 0 -
The wait operation timed out.)
My connection string looks like this:
server=SERVERNAME;database=DATABASENAME;User Id=someuser;password=somepassword;Timeout=60;app=LabelMaker
I tried connecting to the SQL Server from the client machine using QueryExpress
and that worked! My app is 64-bit if that is of any help. I've checked every setting I can think of in SQL Server. No force encryptions are enabled on the protocols (shared memory and tcp/ip), the domain firewall is open on the server. I've tried various connection strings with all kinds of unheard off parameters, always the same result, failure.
I'm really confused about why it works with QueryExpress? My app works when connected to a remote instance of SQL SERVER Express on another machine, it also works if I run it on the SQL Server 2012 machine.
I've also tried connecting to the server from the client machine with LinqPad and this is also really weird, with the new version based on net4/4.5 (Version: 4.43.06) it fails but when I use the old version of Linqpad (2.x) based on net3.5 it works!
It seems like Panda Security is causing the problem, I ran
netsh winsock show catalog
and found a few panda entries, I then did a reset
netsh winsock reset
now my application works fine, I then rebooted the machine, ran the catalog command again,
the panda entries were back and my app is having the same problem as before.
Here are the Panda entries in the winsock catalogue: https://gist.github.com/pellehenriksson/5159883
All ideas and suggestions are appreciated.
UPDATE
Panda Security v5 is the cause of this problem, this has been confirmed by Panda support.
The root cause of the problem is explained by Alex below. The customer will do an upgrade to v6 of Panda Security, I will test again after the upgrade.
CONCLUSION
Moving to Panda Security v6.0 fixed this issue.
This seems to be a non-Microsoft related issue: Visual Studio 11 beta installation disabled my abillity to connect remote MS SQL Server but not local databases.
The ticket has been closed as external.
The only workaround available at this time on Microsoft Connect is:
Posted by Lars Joakim Nilsson on 5/4/2012 at 5:03 AM
My machine had this problem. The work around for me was to remove non-IFS LSP installed Winsock Catalog Provider. Se
http://support.microsoft.com/kb/2568167
/Lars Nilsson
The SetFileCompletionNotificationModes API causes an IO completion port not work correctly with a non-IFS LSP installed link gives the resolution:
Not specifying the FILE_SKIP_COMPLETION_PORT_ON_SUCCESS flag or
removing any non-IFS Winsock LSPs installed. Also moving from a
non-IFS LSP to Windows Filter Platform (WFP) can resolve this issue.
So, you should remove Panda Security or, as an alternative, you may try to execute netsh winsock reset as a pre-build command (although I'm not sure if this is effective without a reboot), which would let you develop/debug your application.
[UPDATE]
More information about application compatibility is given here: Application Compatibility in the .NET Framework 4.5:
Data
SQLClient
Feature
Ability to connect to a SQL Server database from managed code that
runs under the .NET Framework 4.5.
Change
The existing synchronous API code path was modified to add
asynchronous support.
Impact
The presence of non-IFS Winsock Base Service Providers (BSPs) or Layered Service Providers (LSPs) may interfere with the ability to
connect to SQL Server. For more information, see
SetFileCompletionNotificationModes API causes an IO completion port
not work correctly with a non-IFS LSP installed on the Microsoft
Support website.
I hate to say it, but restarting Visual Studio and my Microsoft SQL Server Management Studio solved this problem.
If I create my database using SQL Server Express 10 and in target system where my application needs to run SQL Server Express 10.5, will I face any problems?
On my system I have SQL Server Express 10 installed (I guess it was installed with Visual Studio 2010) after sometime I installed VS2012 and removed it couple of months later. In my application I use .\sqlexpress in the connection string, I am not sure whether this is a SQL Server 2012 Express version or a 2010 version which is being used on my system?
So I just wanted to know if moving to the new system would cause me any kind of incompatibility or weird and unpredictable results and to avoid them what do I need to install on the target machine?
And also what would be sufficient to be installed on the target system by the way?
When I search SQL Server Express, there are several versions with different sizes, which one is needed and is enough?
This is perfectly safe but you can't go back because the database will be upgraded.