Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 ACCESS -> SQL Server, вопрос по совместимости...  [new]
очень озлобленный на Microsoft ч
Guest
У меня вопрос!
Есть софт, стучится к ACCESS через ODBC!
Софт использует СRecordset::Open из MFC!
Но это так лирическое отступление....

А проблема в том что АССESS дату в SQL запросе воспринимает в виде #01/31/2005#

а вот SQL Server хочет
'01/31/2005'

Можно ли заставить работать программу c любой СУБД не меняя SQL запрос и не перекомпилируя программу?
Последнее что мне приходит в голову использовать параметры... со всеми вытекающми... Надо еще глянуть через какую ж... это реализовано в MFC!

Вообщем хочется вопрос решить на уровне текста запроса или базы данных...
Очень важно и срочно....
Жду любых соображений!!!
15 май 05, 05:33    [1541558]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Их бин нихт большой спец в SQL сервере, но мне кажется, что он может принимать дату в любом формате - только надо указать при дате, чтО это за формат.
15 май 05, 10:28    [1541614]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
А вообще язык SQL действительно имеет разные версии, в том числе есть много (больше одного) различий между Аксессом и SQL сервером. И от этого никуда не попишешь.
15 май 05, 10:29    [1541615]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7316
>#01/31/2005#
Это похоже на консантанту VBA типа Date
Если вам повезло и СRecordset::Open из MFC передает ее в звпрос как строку
а уже само ядро Jet преобразует ее в дату
то следует избавится от # и самому позаботится
о преобразовании строки в дату с помощью соотв функций в теле запроса

>а вот SQL Server хочет '01/31/2005'
На самом деле сервер ничего не хочет,
а использует для преобразования текущие нац настройки винды
в принципе строку можно преобразовать с помощью функции CONVERT
или сменить на время транзкции нац настройку.
но обычно , чтобы не иметь проблем с авто преобразованием
передают дату на MSSQL в формате YYYYMMDD

SQLDate = Format(DateF, "yyyymmdd")
15 май 05, 10:47    [1541622]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
ЛП
Guest
блин, а я вот в течение нескольких лет и не знал ни разу - какие там форматы для кого нужны. патамушта использовал параметры, и пусть сами библиотеки ADO/DAO мучаются с конвертацией чего-то во что-то.

пусть лошодь думает, у него голова большой.

З.Ы. попытка "заставить работать программу c любой СУБД не меняя SQL запрос" говорит только о квалификации разработчика. либо о примитивности решаемой задачи.
15 май 05, 10:53    [1541628]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
очень очень злой
Guest

Это похоже на консантанту VBA типа Date
Если вам повезло и СRecordset::Open из MFC передает ее в звпрос как строку
а уже само ядро Jet преобразует ее в дату
то следует избавится от # и самому позаботится
о преобразовании строки в дату с помощью соотв функций в теле запроса


Прикол в том что для Accessa можно писать DateSerial(y, m, d)

SQLServer на этот DateSerial так ругнется, что в соседенй комнате аукнется!
Соответсвенно Access ругнется на CONVERT!
А текст запроса хочется сделать одниковым!
Или я что-то не понял?

Единственное, что еще приходит в глову это сделать функцию CONVERT в базе Access, может кто-нибудь знает как сделать функцию, которую можно будет использовать в выражениях?


попытка "заставить работать программу c любой СУБД не меняя SQL запрос" говорит только о квалификации разработчика. либо о примитивности решаемой задачи.

А мне и нужна вожможность сказать "Смотрите какая у нас чудесная программа! Хотите Acccess? Пожалуйста! Много данных? Нажимаем кнопочку и данные перенеслись в SQL Server, а мы работаем как ни в чем не бывало!"
А база в принципе простая как три копейки, но из нее почти ничего не удаляется и через пару лет там такая п--- начнется, а всяких аналитических отчетов по этим данным делается много и суется это все в ворд через COM, который и так тормоз!

И еще вопрос к Всемогущему Оллу как получить название (версиию) СУБД с помощбю SQL запроса?
15 май 05, 21:59    [1542108]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
очень очень злой
А текст запроса хочется сделать одниковым!
Или я что-то не понял?

Уже двое ответили (я и ЛП), что в серьезных задачах это невозможно. Жалобы просьба направлять в Microsoft заказным письмом.
15 май 05, 22:12    [1542127]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
очень очень оху....й от счастья
Guest
Всем большое спасибо!

Если кто-нибудь знает, как функцию для выражений (expressions) сделать в Access'е поделитесь опытом!
16 май 05, 02:42    [1542288]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
Shark
Member

Откуда:
Сообщений: 2366
Может я не очень понял о чем речь, но, по моему, для того чтобы язык запросов был один для разных типов баз, надо просто использовать просто еще один слой, БДЕ или ДАО.
16 май 05, 07:09    [1542330]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7316
>как функцию для выражений
проще на TSQL обернуть CONVERT в DateSerial

CREATE FUNCTION  dbo.DateSerial
	(
	@y smallint,
	@m tinyint,
	@d tinyint
	)
RETURNS datetime
AS
	BEGIN
		--если год двухзначный
		IF @y<100
			--Явное приведение типа функцией CONVERT
			 RETURN CONVERT(datetime,REPLACE(STR(@y,2)+STR(@m,2)+STR(@d,2) ,' ','0'),12)
			--Явное приведение типа функцией CAST
			--RETURN CAST(REPLACE(STR(@y,2)+STR(@m,2)+STR(@d,2) ,' ','0') AS datetime)
			--неявное  приведение типа
			--RETURN REPLACE(STR(@y,2)+STR(@m,2)+STR(@d,2) ,' ','0')

		--если год четырехзначный
		RETURN  CONVERT(datetime,REPLACE(STR(@y,4)+STR(@m,2)+STR(@d,2) ,' ','0'),112)
	END
16 май 05, 10:43    [1542698]     Ответить | Цитировать Сообщить модератору
 Re: ACCESS -> SQL Server, вопрос по совместимости...  [new]
очень уже не злой
Guest
Отдельное спасибо Latuk!
17 май 05, 02:55    [1545829]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить