0

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

这是我的 PHP 脚本。

<?php

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

?>

我收到以下错误:

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

我尝试什么有效的 Timberline 用户名和密码组合并不重要。

任何人都可以帮忙吗?

4

5 回答 5

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
于 2011-04-12T17:06:18.130 回答
1

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

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

于 2011-05-11T19:54:59.670 回答
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;
        }
}
于 2013-06-17T15:17:43.080 回答
0

我最近花了很多时间来完成这项工作。我发现了几十个无法连接的帖子;但答案很少。这些是我的学习:

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

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

1. 使用原生 Pervasive ODBC 驱动程序

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

包括 32 位和 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 驱动程序就像一个提供长名称的翻译器。这些长名称有 2 个版本。决定你想使用什么并坚持下去。- 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 使用该字符串。映射驱动器没有帮助;他们可能对你有用。

提示:

  • 确保为 Sage ODBC 驱动程序使用 PHP 32 位;64位不行!
  • 测试与 MS Access 连接到 ODBC 驱动程序很容易;它是获取表和字段名称以及确认连接字符串的好方法。
  • 我最终设置了一个 Web 服务器并在 Sage 服务器上安装了一个 PHP 实例。这有以下好处:
    • 无需在您的 Web 服务器上安装 Sage 客户端 (500MB)。
    • 如果您以 64 位运行主站点,则提供 32 位选项。
    • UNC 路径没有问题
于 2016-12-20T03:41:52.120 回答
-1

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

于 2014-08-15T05:58:10.660 回答