несоответствующий тип данных в запросе доступа - PullRequest
0 голосов
/ 26 августа 2011

Итак, у меня есть запрос, который должен получить данные из двух таблиц.Который работает нормально, пока формат даты находится под английской (нас) локалью.Когда он находится в международном форматировании, запрос получает ошибку при запуске и завершается неудачно.запрос имеет вид

        SELECT DISTINCT AlarmDet.Machine, AlarmDet.Job, 
AlarmDet.Mode, AlarmDet.User, AlarmDet.JobStart,
 AlarmDet.Object, AlarmDet.AlarmId, AlarmDet.AlarmStart, 
AlarmDet.MachineFault, AlarmDet.OperFault,
     AlarmDet.PiecesFed, Val(OperFault)+Val(MachineFault) AS AlarmStopTime, 
    (Mid(alarmdet.AlarmStart,5,7) & Right(alarmdet.AlarmStart,4) & Mid(alarmdet.AlarmStart,11,9)) AS AlarmTimeDate, 
    Mid(alarmdet.AlarmStart,12,2) AS AlarmHH, 
    Mid(alarmdet.AlarmStart,15,2) AS AlarmMM,
 Mid(alarmdet.AlarmStart,18,2) AS AlarmSS, 
CVDate((Mid([alarmdet].[AlarmStart],5,7) & Right([alarmdet].[AlarmStart],4))) AS AlarmDate, Alarms.ALARM_DESC
    FROM AlarmDet INNER JOIN Alarms ON AlarmDet.AlarmId = Alarms.id;

Формулы в запросе принимают значение alarmstart (date) и разбивают его на отдельные сегменты.

Раздел запроса, вызывающий ошибкукогда я вхожу в него и пытаюсь запустить его, вот что:

CVDate((Mid([alarmdet].[AlarmStart],5,7) & Right([alarmdet].[AlarmStart],4))) AS AlarmDate

Что я хотел бы знать, так это то, есть ли способ доступа для преобразования форматирования запроса, который будет передан в США.dateformating?Или есть лучший способ структурировать эту часть запроса, чтобы он работал в международном формате?

Обновление

, потратив некоторое время и попытавшисьнекоторые из ваших предложений, я пришел с этим:

format(Mid([alarmdet].[AlarmStart],5,7) & right([alarmdet]![alarmstart], 4), "mm/dd/yyyy")

Однако, вместо того, чтобы получить мм / дд / гггг, я получаю это: мм-дд-гггг.

ЛюбойМысли о том, почему это так?

Обновление: снова ...

Не имеет значения, похоже, что это имеет отношение к тому, где установлена ​​ваша локаль.

Любые предложения или помощь с благодарностью.

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Посмотрите, позволит ли функция Format () отображать [AlarmStart] по вашему желанию. Вот несколько примеров выражений, скопированных из окна Immediate.

? Format(Date(), "yyyy/mm/dd")
2011/08/29

? Format(Date(), "mmm d, yyyy h:nn:ss ampm")
Aug 29, 2011 12:00:00 AM

Редактировать : Это то, что я получаю в «Немедленном окне», используя текстовое значение примера («Вторник, 18 января 10:10:57 2011»), которое вы указали для [AlarmStart].

? Format(Mid("Tue Jan 18 10:10:57 2011", 5, 7) & _
    Right("Tue Jan 18 10:10:57 2011", 4), "mm/dd/yyyy")
01/18/2011
1 голос
/ 26 августа 2011

Попробуйте использовать функции ACCESS Year () и Month () в поле даты, а не MID и Right для анализа даты ... У меня не установлен ACCESS, но это будет что-то вроде:

CVDate(Str(month([alarmdet].[AlarmStart]))&
     "/"&str(year([alarmdet].[AlarmStart]))) AS AlarmDate

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

...