Solved

Using PHP for ODBC Sage Line 50 connection

Posted on 2010-09-06
9
1,722 Views
Last Modified: 2012-06-27
Hi,
I am looking into connecting to Sage's database using PHP. It appears to use MSSQL. I am not familiar with how to connect to non-mysql datasources. These are the connection details that excel uses to do it, which work;
Driver={Sage Line 50 v15};
UID=example;
PWD=test

How would I connect to the database using these details?
Thanks for your help
0
Comment
Question by:jdav357
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
9 Comments
 
LVL 12

Expert Comment

by:GMGenius
ID: 33611865
You will need to use ODBC in PHP
eg
$rConn = odbc_connect(DB_SERVER, DB_SERVER_USERNAME, DB_SERVER_PASSWORD);
 
0
 
LVL 2

Author Comment

by:jdav357
ID: 33611875
I have found where the files that I think from other posts say I need. These are located:
\\myserver\foldername\...\ACCDATA

Where would I put these details in the connection? (I have changed some bits of the string for test only)
0
 
LVL 2

Author Comment

by:jdav357
ID: 33611894
I am not entirely sure what would go in the string you posted,
I presume that UID is really the DB_SERVER_USERNAME and DB_SERVER_PASSWORD is the password?

I am not sure where I put:
\\myserver\foldername\...\ACCDATA
or
Driver={Sage Line 50 v15};
though!

0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 2

Author Comment

by:jdav357
ID: 33611898
sorry meant:
PWD is DB_SERVER_PASSWORD
0
 
LVL 12

Expert Comment

by:GMGenius
ID: 33612029
You will need to create an ODBC DNS on the server where IIS is being used
 define('DB_SERVER', 'SageLine50v13'); // eg, localhost - should not be empty for productive servers
 define('DB_SERVER_USERNAME', 'MANAGER');
 define('DB_SERVER_PASSWORD', 'password');
 
0
 
LVL 12

Expert Comment

by:GMGenius
ID: 33612064
Here is a PHP page i built for my tests
It will list ALL the tables on a given connection (in this case it was v13)
You can add in the url ?table=tablename to list the contents of the table
also add &where=your where clause  - to limit the results returned
or even ?all=y which will dump ALL tables with ALL contents...
 


<?php
//SageLine50v12

$table = @$_GET["table"];
$where = @$_GET["where"];
$all = @$_GET["all"];

	$rConn = odbc_connect("SageLine50v13", "manager", "password");
	
	if ($rConn == 0)
	 {
	 die('Unable to connect to the Sage Line 50 V12 ODBC datasource.');
	 }
 
	// Get a list of tables as I cannot remember ANY of the L50 table names!
	$query = "SELECT * FROM ". $table;
	if ($where != "") {
		$query .= ' WHERE ' .$where;
	}
	 if ($all == "y") {
		echo "Listing Everything<br>";
		$rRes = odbc_tables($rConn);
		while(odbc_fetch_row ($rRes))
			{	
			echo "Table:" . odbc_result($rRes,'TABLE_NAME').'<br>';		
			$query = "SELECT  * FROM ". odbc_result($rRes,'TABLE_NAME');
			$tableexe = odbc_do($rConn, $query);  
			odbc_result_all($tableexe,'BORDER=1');
			}
	 } else {   
	    $queryexe = odbc_do($rConn, $query);  
     	odbc_result_all($queryexe,'BORDER=1');
		$rRes = odbc_tables($rConn);
	 }
	 


// Output the entire result set as a HTML table - quick dump!
odbc_result_all($rRes);


	 
// Close the ODBC connection.
odbc_close($rConn);
?>

Open in new window

0
 
LVL 10

Accepted Solution

by:
Bruce Denney earned 250 total points
ID: 33612287
There are a couple of problems with what you are looking to do.

The Sage Database needs to be on the same server as your PHP script or at least have very fast (Gigabit connection) to the database as ODBC

You will need to update your code every time the users upgrade their Sage, Sage are very keen on getting users to upgrade every year.

ODBC is VERY slow especially with large amounts of data.

There are lots of ways around this issues if they affect your usage.

For example if your PHP is on a Linux hosted server and the Data is on the Users Network you are not going to get very far.


I have done various workarounds, for example a windows scheduled task that dumps the data from the appropriate tables puts them in a CSV file uploads to the web server and then hits a url to update the SQL database on web hosting with the latest data.   This avoids the problems of narrow bandwidth and the poor performance of ODBC however, it is not real time.  I used a 3rd party bit of software that did the reverse as well, downloaded stuff from the site and put it into sage, this had the advantage that they just needed to upgrade the 3rd party stuff each time they upgraded sage, all the rest of the code was static.

I think that you need to tell us more about the actual scenario as whilst nothing anyone has suggested is wrong, it might not be a particle path for you to follow.




0
 
LVL 12

Assisted Solution

by:GMGenius
GMGenius earned 250 total points
ID: 33612429
<The Sage Database needs to be on the same server as your PHP script or at least have very fast (Gigabit connection) to the database as ODBC >
Not true, you can install the ODBC driver on any server , you just need to have the ODBC driver working on the IIS server you want to use.
<You will need to update your code every time the users upgrade their Sage, Sage are very keen on getting users to upgrade every year.>
That goes without saying but in the code I provided you just change the ODBC name or (using registry editor) you can change the ODBC Driver used for the ODBC name in the PHP page
I personally dont think its a difficult job to create the new ODBC and change a PHP config page
0
 
LVL 2

Author Closing Comment

by:jdav357
ID: 33742263
Thanks for your help. I've had to find alternative solution.
0

Featured Post

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When table data gets too large to manage or queries take too long to execute the solution is often to buy bigger hardware or assign more CPUs and memory resources to the machine to solve the problem. However, the best, cheapest and most effective so…
Many old projects have bad code, but the budget doesn't exist to rewrite the codebase. You can update this code to be safer by introducing contemporary input validation, sanitation, and safer database queries.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

736 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question