2016-12-16 8 views
0

У меня есть локальный/веб-сайт разработки, работающий на сервере Windows 2003 с установленным Office 2003. У меня есть несколько страниц ASP, которые извлекают данные из локальной базы данных MS Access, используя довольно обычный ASP код:Проблемы с форматом для получения кода ASP/SQL из базы данных MS-Access

Site = "filedsn=" & Server.MapPath("/" & WebName & "/reffiles/accessdsn.dsn") & ";DBQ=" & Server.MapPath("/" & WebName & "/reffiles/MyDatabase.mdb") & ";DefaultDir="Server.MapPath("/" & WebName & "/") & ";" 

set Database = server.createobject("ADODB.Connection") 

Database.open(Site) 

strSQLMax = "SELECT Format(Max(GetDataRange.Date_Reading),'dd/mm/yy') AS MaxOfDate_Reading, Format(Max(GetDataRange.Speed), '#,###') AS MaxOfSpeed FROM GetDataRange;" 

set WeekRecMax = PiDatabase.Execute(strSQLMax) 

response.write("<P>Date of Maximum Speed:" & weekRecMax.fields(0).value & " " & weekRecMax.fields(1).value & " f/hr </P>") 

Когда я проверить код здесь (я живу во Франции, но локальный сервер настроен Язык и региональные настройки для США), результаты приведенного выше кода являются:

Дата Максимальная скорость: 14 décembre 2016 - 16:03 1 025 е/ч

Когда я публикую свой код для нашего производства сервера в США (также Server 2003 с Office 2003) на той же странице дает следующий результат:

Дата максимальной скорости: 14 декабря 2016 года - 16:03 1,025 f/hr

Конечно, результат «1 025» заставляет другие части моего кода выдавать ошибку, поскольку она не может использоваться в вычислениях. Пространство в «1 025» на самом деле является «неразрывным пространством», hex A0.

Итак, мой вопрос: почему это происходит и что я могу сделать с этим локальным сервером для производства продукции, например, нашего производственного сервера на базе США?

Обратите внимание, что если я изменил '#, ###' на '####', тогда вычисления продолжатся без проблем. Таким образом, это не «стоп-шоу», но это заставляет задуматься, какие еще сюрпризы могут скрываться за углом.

Благодаря

ответ

1

Перемещение форматирования DateTime и числовых значений из базы данных в ASP.NET.

strSQLMax = "SELECT Max(GetDataRange.Date_Reading) AS MaxOfDate_Reading, Max(GetDataRange.Speed) AS MaxOfSpeed FROM GetDataRange;" 

response.write("<P>Date of Maximum Speed:" & Convert.ToDateTime(weekRecMax.fields(0).value).ToString("dd MMMM yyyy") & " " & Convert.ToDecimal(weekRecMax.fields(1).value).ToString("N0") & " f/hr </P>") 

Форматирование значений теперь будут основаны на локализации, так что код не будет ломаться, когда вы используете его в США.

Подробнее о номерах форматирования here.

+0

На самом деле, код ломается при локальном тестировании, отлично работает в США. Если я понимаю ваши комментарии, вы предполагаете, что я не делаю форматирования в команде SQL, а делаю все это в ASP, когда я использую значения? Я смотрю на то, что вы предлагаете. Спасибо ... – RDK

+0

Да, это именно то, что я предлагаю. Когда вы форматируете в SQL, вы получаете строку вместо объекта datetime. И преобразование строки обратно в datetime или десятичные числа и т. Д. Всегда вызывает проблемы. – VDWWD

+0

ОК, это работает, но на самом деле мой вопрос действительно был связан с «исправлением» локального сервера, а не с моим кодом. Любые мысли по этому вопросу? – RDK