Устранение ошибки в TDatasetProvider (сложный путь) в Delphi 2010 или Delphi 2009

Как и каждый год, я получаю новую версию Delphi как владелец SA, и вот что я делаю:

  1. Установите delphi версии XX.
  2. Запустите delphi версии XX
  3. Вставьте компонент TSQLConnection.
  4. Подключите его к Microsoft SQL Server 2000, который будет с нами еще как минимум шесть лет.
  5. Вставьте TSQLQuery с 'select top 1 * from myTable', который представляет собой таблицу с некоторыми полями денег.
  6. вставьте дополнительные компоненты TDatasetProvider, TClientdataset, TDatasource, TDBGrid и TButton.
  7. Свяжите все.
  8. Создайте обработчик событий в DatasetProvider.OnUpdateError с исключением Raise.
  9. Clientdataset1.applyupdates (0); в button1click.
  10. внести некоторые изменения в текущую запись.
  11. Нажмите кнопку button1 и получите то же исключение, что и в delphi 2005 и новее.
  12. Обновите мой драйвер corelab или devArt dbx для MsSQLServer.

Серьезно сейчас. Несколько лет назад я обнаружил, что TDatasetprovider генерирует очень простую ошибку: TFMTBCDField (представление денежного поля в Delphi) создает несовместимые команды sql вставки / обновления для SQL Server 2000 и предыдущих версий. Проблема проста: поставщик набора данных создает кавычки для полей денег, которые не принимаются для этих серверов sql.

Пример: таблица с полем varchar и полем денег. Вы можете использовать такое обновление:

ОБНОВИТЬ набор тестовых таблиц MYMONEYFIELD = '1', где MYVARCHARFIELD = 'A'

для предыдущих версий SQLServer вам необходимо использовать:

ОБНОВЛЕНИЕ набора тестовых таблиц MYMONEYFIELD = 1, где MYVARCHARFIELD = 'A'

У кого-нибудь есть способ решения этой проблемы?


person Francis Lee    schedule 02.09.2009    source источник
comment
Вы зарегистрировали эту ошибку на QC?   -  person Fabricio Araujo    schedule 02.09.2009
comment
Я думал о том, чтобы предложить это, но это касается только пользователей MS SQL 2000, который не рекомендуется производителем. Это ошибка?   -  person Argalatyr    schedule 02.09.2009
comment
Да, потому что это числовое поле, и значение не должно заключаться в кавычки (поскольку значение НЕ является строкой). Тот факт, что новые версии СУБД допускают это, не делает это функцией - это ошибка. И SQL Server 2000 широко используется, поскольку он просто работает, и большинство компаний не хотят мигрировать до последней минуты.   -  person Fabricio Araujo    schedule 02.09.2009
comment
Да, Fabricio, QC # 69580 и более старый # 49628. Некоторое время назад сотрудники Codegear сказали мне, что они могут воспроизвести случай и проведут автоматический тест. Но не более того.   -  person Francis Lee    schedule 03.09.2009
comment
Есть ли причина, по которой вы не используете деньги SQL-сервера (или smallmoney) в сочетании с типом валюты Delphi?   -  person Gerry Coll    schedule 03.09.2009
comment
DBXpress адресует денежные поля к FMTBCDFields, а не к валюте, за исключением случаев, когда вы используете альтернативные драйверы.   -  person Francis Lee    schedule 03.09.2009


Ответы (1)


Borland / CodeGear / Embarcadero не одобряют это, но если это только для ваших собственных приложений, вы можете проследить до источника VCL и внести необходимые изменения в источник, чтобы гарантировать, что вы получите правильный SQL сгенерированный. Вам нужно будет вносить это изменение каждый раз, когда вы получаете новую версию или пока она не будет исправлена, но это решит вашу проблему.

Вы можете отправить свои изменения в codegear и посмотреть, подключат ли они его.

person Toby Allen    schedule 29.12.2009