Вставка немецкого формата даты в SQL с использованием VBA - PullRequest
3 голосов
/ 18 сентября 2009

Я очень расстроен, пытался это несколько дней ... Все, что я хочу, чтобы немецкие пользователи могли вводить даты, которые должны храниться в SQL Server. Даты в следующем формате "дд.мм.гггг". Я всегда получаю сообщения об ошибках вроде этого: Синтаксическая ошибка в дате в выражении запроса '# 23.01.2004 00: 07: 00 #'. - используя Access на данный момент.

Я пробовал много методов (Thread.CultureInfo, CDate (), Formatting DateTimeStyles), но вот мой последний:

Dim dTermin As DateTime
dTermin = DateTime.Parse(txtTermin.Text)

sSQL = "INSERT INTO Termin (Termin) VALUES ("
sSQL = sSQL & "#" & dTermin & "#)"

Это также дает мне ошибку. Если я жестко закодирую дату, например «10-04-2004», тогда это сработает. Это Access 2000 db, и есть два поля: ID (Autonumber) и Termin (ShortDate). Использование Jet OLEDB 4.0 Provider.

Ответы [ 4 ]

6 голосов
/ 18 сентября 2009

Предлагаю вставить нелокализованные даты в БД и локализовать их только во время отображения.

4 голосов
/ 01 октября 2009

Вы не должны хранить локализованные даты в базе данных. Сохраните их в стандартном формате , затем позвольте соединителю ODBC или клиенту SQL или тому, что вы используете - локализуйте его в соответствии с культурой того, кто их просматривает.

2 голосов
/ 18 сентября 2009

Я бы использовал строковые даты в формате ISO: ГГГГ / ММ / ДД Практически каждая система (и в каждой локали) однозначно понимает даты в формате ISO.

См. Превосходный справочник Тибора Караси: Полное руководство по типам данных datetime

2 голосов
/ 18 сентября 2009

Если я правильно понимаю, разделителем даты и времени SQL Server будет «например,« 23.03.2009 »

Тогда у вас возникнет вторая проблема, если в SQL Server по умолчанию используется локаль us_enlish.

SET LANGUAGE us_english
GO
DECLARE @dt datetime
SET @dt = '23.03.2009' --error
GO
SET LANGUAGE german
GO
DECLARE @dt datetime
SET @dt = '23.03.2009' --ok
GO

Используйте yyyydddd или это

SET LANGUAGE us_english
SET DATEFORMAT DMY
GO
DECLARE @dt datetime
SET @dt = '23.03.2009' --ok
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...