在Windows上使用PHP和ODBC访问Sage Timberline Accounting的连接错误

时间:2010-10-29 00:43:03

标签: php odbc sage-erp

我正在尝试使用PHP 5.3连接到Windows 2003 Server上的Sage Timberline Accounting数据库。我用PHP正确安装了PHP作为fastcgi。我在ODBC管理器中有一个系统DSN设置,并为Timberline数据库正确配置。

这是我的PHP脚本。

<?php

$conn = odbc_connect("Timberline ODBC","user", "password");

?>

我收到以下错误:

  

警告:odbc_connect():SQL错误:[Sage Timberline Office] [Sage Timberline Office ODBC驱动程序] [DRM文件库]无效的帐户名。,C状态08001,位于C:\ Inetpub \ wwwroot \ index.php中的SQLConnect在第3行

我尝试的有效Timberline用户名和密码组合无关紧要。

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:2)

不确定这仍然是一个问题......但你确实知道普遍的SQL连接是一个索引文件,然后索引引用其他信息?更好地称为平面文件数据库结构。

因此,没有干净的切割方式来进行连接。我正在解决类似的问题,将我的MSSQL服务器桥接到Timberline数据库,它并不像你想象的那样干净利落。

您是否尝试将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

答案 1 :(得分:1)

确保IIS作为有权访问Timberline目录的用户(您在连接字符串中为dbq参数设置的路径)运行。

更改IIS服务的“登录身份”设置。同样,请确保您使用的帐户可以访问您的林线数据的网络位置。

答案 2 :(得分:0)

我正在使用此代码构建连接字符串,以便与ADO.NET一起使用以连接到Timberline。您可以将其用作在PHP中构建连接字符串的模板。另外,请考虑使用默认的“Timberline数据源”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;
        }
}

答案 3 :(得分:0)

我最近花了很多时间做这项工作;我找到了几十个无法连接的帖子;但答案很少。这些是我的经验:

Sage Timberline Office,现在名为Sage CRE 300,使用Pervasive SQL数据库。他们的升级路径是2019年底之前的SQL Server。

您可以使用2个ODBC连接进行连接:

<强> 1。使用本机Pervasive ODBC驱动程序

ODBC驱动程序包含在免费的Pervasive Client中。只需搜索最新的安装。

两者,32&amp;包括64位驱动程序。

PHP允许您通过简单的连接字符串进行连接,例如:odbc_connect("Driver={Pervasive ODBC Interface};ServerName=myserver;ServerDSN=mydsn;", "", "", SQL_CUR_USE_ODBC);

Pervasive提供了大量优秀的最新文档。

一个巨大的缺点:你只能 读取数据。 Sage字段在内部标记,需要密码才能更新。 Sage不会提供密码;即使是薪水。 (我试过了。)

<强> 2。使用Sage提供的ODBC驱动程序

获取ODBC驱动程序的唯一方法是安装Sage客户端。 (但请继续阅读,因为你可能不想这样做)。

Sage ODBC驱动程序称为Timberline Data和Simba产品。

驱动程序仅提供32位版本。

驱动程序不仅仅是接口:   - 普遍的表和字段名称很短;这个ODBC驱动程序就像一个提供长名称的翻译器。这些长名称有两个版本。决定你想要使用什么并坚持下去。   - Sage ODBC驱动程序允许更新字段。不是所有领域;只是Sage允许你改变的字段。如果更新至关重要,那么这是 only 选项。

这是官方连接字符串,以及如何在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位作为Sage ODBC驱动程序; 64位不会 工作!
  • 用于测试与MS的连接访问ODBC驱动程序很容易;它是获取表和字段名称的好方法,并确认 连接字符串。
  • 我最终在Sage服务器上设置了一个Web服务器并安装了一个PHP实例。这有以下好处:
    • 无需在Web服务器上安装Sage Client(500MB)。
    • 如果以64位运行主站点,则提供32位选项。
    • UNC路径没有问题

答案 4 :(得分:-1)

出现这种错误,您可能需要确保只有一个Windows配置文件已经或已经注册了DSN名称。换句话说,如果您有更多的配置文件注册了相同的DSN名称(在同一台计算机/服务器中),这很可能是导致错误的原因!