Solved

Using PHP for ODBC Sage Line 50 connection

Posted on 2010-09-06
9
1,653 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
  • 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
What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

 
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

VMware Disaster Recovery and Data Protection

In this expert guide, you’ll learn about the components of a Modern Data Center. You will use cases for the value-added capabilities of Veeam®, including combining backup and replication for VMware disaster recovery and using replication for data center migration.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
paypal ipn to mysql 3 35
Showing random records from database 10 35
MySQL Query Using Up Memory 6 21
Teradata converting character to integer 2 12
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
The viewer will learn how to dynamically set the form action using jQuery.
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…

815 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

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now