2016-12-16 2 views
0

J'ai un site Web local/de développement, exécuté sur un serveur Windows 2003 avec Office 2003 installé. J'ai plusieurs pages ASP qui extraient les données d'une base de données locale MS Access en utilisant le code ASP assez normal:Problèmes de format pour le code ASP/SQL lors de la récupération de numéros à partir de la base de données 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>") 

Quand je teste le code ici (je vis en France, mais le serveur local est configuré avec les paramètres régionaux et linguistiques pour les Etats-Unis), les résultats du code ci-dessus sont:

date de Vitesse maximale: 14 décembre 2016 - 16h03 1 025 f/h

Quand je publie mon code à notre serveur de production aux Etats-Unis (aussi Server 2003 avec Office 2003) la même page donne ce résultat:

Date de la vitesse maximale: 14 décembre 2016 - 16:03 1,025 f/h

Bien sûr, le résultat "1 025" entraîne une erreur de la part d'autres parties de mon code car elle ne peut pas être utilisée dans les calculs. L'espace dans le "1 025" est en fait un "espace non brisant", hex A0. Donc, ma question est la suivante: pourquoi cela se passe-t-il et que puis-je faire pour que ce serveur local produise une sortie comme notre serveur de production basé aux États-Unis? Remarquez, si je change le '#, ###' en '####' alors les calculs se passent sans problème. Ainsi, ce n'est pas un «bouchon de spectacle», mais je me demande quelles autres surprises se cachent au coin de la rue.

Merci

Répondre

1

Déplacer la mise en forme des valeurs DateTime et numériques de la base de données. 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>") 

La mise en forme des valeurs sera désormais basée sur la localisation, de sorte que le code ne se cassera pas lorsque vous l'utilisez aux Etats-Unis.

Voir plus sur le formatage des numéros here.

+0

En fait, le code rompt lors d'un test local, fonctionne bien aux États-Unis. Si je comprends vos commentaires, vous suggérez que je ne fais aucune mise en forme dans la commande SQL, faites plutôt tout dans l'ASP quand j'utilise les valeurs? Je regarde ce que vous suggérez. Merci ... – RDK

+0

Oui, c'est exactement ce que je suggère. Lorsque vous formatez en SQL, vous obtenez une chaîne au lieu d'un objet datetime. Et les chaînes de conversion à datetime ou décimales etc est toujours gênant. – VDWWD

+0

OK, cela fonctionne, mais en fait, ma question était vraiment liée à "réparer" le serveur local et non mon code. Des pensées sur ce sujet? – RDK