在Windows上使用PHP和ODBC访问Sage Timberline会计时出现连接错误
我试图在使用PHP 5.3的Windows 2003 Server上连接到Sage Timberline会计数据库。我有PHP正确安装与IIS作为fastcgi。我在ODBC管理器中设置了系统DSN并正确配置了Timberline数据库。在Windows上使用PHP和ODBC访问Sage Timberline会计时出现连接错误
这是我的PHP脚本。
<?php
$conn = odbc_connect("Timberline ODBC","user", "password");
?>
我得到以下错误:
Warning: odbc_connect(): SQL error: [Sage Timberline Office][Sage Timberline Office ODBC Driver][DRM File Library]Invalid account name., SQL state 08001 in SQLConnect in C:\Inetpub\wwwroot\index.php on line 3
不要紧,我尝试什么有效廷伯莱恩的用户名和密码组合。
任何人都可以帮忙吗?
不知道这是否仍然是一个问题,但你确实意识到普遍的SQL连接是一个索引文件,然后索引引用其他信息?更好地称为平面文件数据库结构。
因此,没有干净的切割方式来进行连接。我正在处理类似的问题,将我的MSSQL服务器连接到Timberline数据库,并不像你想象的那样干净利落。
您是否曾尝试将木材线驱动程序加载到网络服务器或用于消费的应用程序? Sage并不便于您访问这些信息,如果我有2分钱来说明这个应用程序套件,我会不惜一切代价提出反对。
到目前为止,这里是一个通过VS2k5工作的连接字符串。它是一个DSN字符串,但连接字符串不会少。我遇到的问题是将DSN部分从连接字符串中分离出来并使其正常工作。
DSN=<whatever>;uid=<userid>;dbq=<PathToDirectory>;codepage=1252;
maxcolsupport=1536;dictionarymode=0;standardmode=0;shortennames=1;databasetype=1
这应该为ADO工作,但不能让它正常工作:
Provider=MSDASQL.1;Driver={Timberline Data};dbq=<PathToDirectory>;
uid=<userid>;pwd=<password>;codepage=1252
确保正在运行IIS作为访问山林目录(路径将用户已经在连接字符串中设置了dbq参数)。
更改IIS服务的“登录身份”设置。再次确保您使用可以访问您的林线数据网络位置的帐户。
我正在使用此代码构建连接字符串以便与ADO.NET一起使用以连接到Timberline。您可以将其用作在PHP中构建连接字符串的模板。另外,请考虑使用默认的“Timberline Data Source”DSN。
public class TimberlineConnectionStringBuilder
{
public static string GetConnectionString(string username, string password, string dataFilePath, string dsn)
{
var builder = new OdbcConnectionStringBuilder { Dsn = dsn };
builder.Add("uid", username);
builder.Add("dbq", dataFilePath);
builder.Add("codepage", 1252);
builder.Add("dictionarymode", 0);
builder.Add("standardmode", 1);
builder.Add("maxcolsupport", 1536);
builder.Add("shortenames", 0);
builder.Add("databasetype", 1);
builder.Add("pwd", password);
return builder.ConnectionString;
}
}
有了这种错误,您可能需要确保只有一个Windows配置文件已经或已经注册了DSN名称。换句话说,如果您有更多使用相同DSN名称注册的配置文件(在同一台计算机/服务器中),这很可能是导致错误的原因!
我最近花了很多时间做这项工作;我发现了几十个无法连接的人的帖子;但很少有答案。这些是我的经验:
Sage Timberline Office,现在名为Sage CRE 300,使用Pervasive SQL数据库。他们的升级途径是在2019年底前向SQL Server发展。
有可以用来连接2个ODBC连接:
1.使用本地普适的ODBC驱动程序
驱动程序包含在免费的普适客户端的ODBC。只需搜索最新的安装。
两者都包括32位32位32329,64位驱动程序。
PHP可以让你通过像一个简单的连接字符串连接:odbc_connect("Driver={Pervasive ODBC Interface};ServerName=myserver;ServerDSN=mydsn;", "", "", SQL_CUR_USE_ODBC);
普适有很多好了最新的文档可用。
一个巨大的缺点:你可以只有读取数据。 Sage字段在内部标记,需要密码才能更新。 Sage不会提供密码;即使是工资。 (我试过了)。
2.使用鼠尾草提供ODBC驱动程序
获得ODBC驱动程序的唯一方法是通过安装一个圣人客户端。 (但请继续阅读,因为您可能不想这样做)。
Sage ODBC驱动程序被称为Timberline Data和Simba产品。
该驱动程序仅适用于32位版本。
该驱动程序不仅仅是接口: - 普适表和字段名称较短;这个ODBC驱动器就像一个提供长名字的翻译器。这些长名称有两个版本。决定你想要使用什么,并坚持下去。 - Sage ODBC驱动程序允许更新字段。并非所有的领域;只是Sage允许你改变的领域。如果更新很关键,那么这是您的只有选项。
这是官方的连接字符串,以及如何你会使用它在PHP:
odbc_connect("Driver={Timberline Data};UID=Mark;PWD=sage123!;DBQ=C:\Documents and Settings\All Users\Application Data\Sage\Timberline Office\Data\Construction Sample Data;CODEPAGE=1252;DictionaryMode=0;StandardMode=1;MaxColSupport=1536;", "", "", SQL_CUR_USE_ODBC);
我没有使用了UID=Mark;PWD=sage123!;
当然,确保所有的反斜杠。 C:\\Documents and Settings\\All..
Sage指出他们的ODBC驱动程序只能用MS Office产品进行测试;但它也可以用C++,C#等(Per Sage支持)。
以下例外情况:我无法在C#或PHP连接字符串中使用UNC路径。 MS Access连接使用UNC路径没有问题。我无法让PHP使用字符串。映射的驱动器没有帮助;他们可能会为你工作。
提示:
- 确保使用PHP 32位为贤者ODBC驱动程序; 64位不会 工作!
- 用于测试与MS Access连接的ODBC驱动程序很容易;它是获取表格和字段名称的好方法,并且确认连接字符串为 。
- 我最终设置了一个Web服务器并在Sage服务器上安装了一个PHP实例。这具有以下优点:
- 无需在Web服务器上安装Sage Client(500MB)。
- 如果您以64位运行主站点,则提供32位选项。
- 与UNC路径
的建议不加圣人UNO没有问题。如果一家公司不想提供方便的连接和apis访问,而且几乎没有文档,那么他们的软件已经过时了。 SAGE DEVS我希望你阅读这篇文章! – BAR 2015-01-23 22:19:28