Ошибка подключения при доступе к Sage Timberline Accounting с помощью PHP и ODBC в Windows

Я пытаюсь подключиться к базе данных Sage Timberline Accounting на моем Windows 2003 Server, используя PHP 5.3. У меня правильно установлен PHP с IIS как fastcgi. У меня есть системный DSN, настроенный в ODBC Manager и правильно настроенный для базы данных Timberline.

Вот мой PHP-скрипт.

<?php

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

?>

Я получаю следующую ошибку:

Предупреждение: odbc_connect(): ошибка SQL: [Sage Timberline Office][Драйвер ODBC для Sage Timberline Office] [Библиотека файлов DRM] Неверное имя учетной записи. Состояние SQL 08001 в SQLConnect в C:\Inetpub\wwwroot\index.php в строке 3

Неважно, какую действительную комбинацию имени пользователя и пароля Timberline я пытаюсь использовать.

Кто-нибудь может помочь?

5 ответов

Не уверен, что это все еще вопрос или нет... но вы понимаете, что распространенное 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

Убедитесь, что IIS работает как пользователь, имеющий доступ к каталогу Timberline (путь, который вы указали для параметра dbq в строке подключения).

Измените настройку "Вход в систему" ​​службы IIS. Опять же, убедитесь, что вы используете учетную запись, у которой есть доступ к сетевому расположению ваших данных на линии связи.

Недавно я потратил много времени на эту работу; Я нашел несколько десятков сообщений людей, которые не смогли соединиться; но очень мало ответов. Это мои уроки:

Sage Timberline Office, теперь называемый Sage CRE 300, использует базу данных Pervasive SQL. Их путь обновления к SQL Server к концу 2019 года.

Есть 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 Client. (Но читайте дальше, так как вы, вероятно, не хотите этого делать).

Драйвер 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..

Сейдж утверждает, что их драйвер ODBC был протестирован только с продуктами MS Office; но он также будет работать с C++, C# и т. д. (поддержка Per Sage.)

Со следующим исключением: мне не удалось использовать UNC-путь в строке подключения с C# или PHP. У MS Access не было проблем с подключением по UNC-пути. Я не мог заставить PHP работать со строкой. Сопоставленные диски не помогли; они могут работать на вас.

подсказки:

  • Убедитесь, что вы используете PHP 32 bit для драйвера Sage ODBC; 64 бит не будет работать!
  • Для тестирования подключение с MS Access к ODBC-драйверу было несложным; это послужило хорошим способом получения имен таблиц и полей и подтверждения строки подключения.
  • В итоге я настроил веб-сервер и установил экземпляр PHP на сервере Sage. Это имеет следующие преимущества:
    • Нет необходимости устанавливать Sage Client (500 МБ) на ваш веб-сервер.
    • Предоставляет 32-битную опцию, если ваш основной сайт работает в 64-битной среде.
    • Нет проблем с путями UNC

Я использую этот код для построения строк подключения для использования с ADO.NET для подключения к Timberline. Вы можете использовать его как шаблон для построения строки подключения в PHP. Также рассмотрите возможность использования DSN по умолчанию "Источник данных Timberline".

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 (на том же компьютере / сервере), это, скорее всего, является причиной ошибки!

Другие вопросы по тегам