Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ACCESS -> SQL Server, вопрос по совместимости... / 11 сообщений из 11, страница 1 из 1
15.05.2005, 05:33
    #33065674
ACCESS -> SQL Server, вопрос по совместимости...
У меня вопрос!
Есть софт, стучится к ACCESS через ODBC!
Софт использует СRecordset::Open из MFC!
Но это так лирическое отступление....

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

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

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

Вообщем хочется вопрос решить на уровне текста запроса или базы данных...
Очень важно и срочно....
Жду любых соображений!!!
...
Рейтинг: 0 / 0
15.05.2005, 10:28
    #33065713
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ACCESS -> SQL Server, вопрос по совместимости...
Их бин нихт большой спец в SQL сервере, но мне кажется, что он может принимать дату в любом формате - только надо указать при дате, чтО это за формат.
...
Рейтинг: 0 / 0
15.05.2005, 10:29
    #33065714
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ACCESS -> SQL Server, вопрос по совместимости...
А вообще язык SQL действительно имеет разные версии, в том числе есть много (больше одного) различий между Аксессом и SQL сервером. И от этого никуда не попишешь.
...
Рейтинг: 0 / 0
15.05.2005, 10:47
    #33065718
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ACCESS -> SQL Server, вопрос по совместимости...
>#01/31/2005#
Это похоже на консантанту VBA типа Date
Если вам повезло и СRecordset::Open из MFC передает ее в звпрос как строку
а уже само ядро Jet преобразует ее в дату
то следует избавится от # и самому позаботится
о преобразовании строки в дату с помощью соотв функций в теле запроса

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

SQLDate = Format(DateF, "yyyymmdd")
...
Рейтинг: 0 / 0
15.05.2005, 10:53
    #33065722
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ACCESS -> SQL Server, вопрос по совместимости...
блин, а я вот в течение нескольких лет и не знал ни разу - какие там форматы для кого нужны. патамушта использовал параметры, и пусть сами библиотеки ADO/DAO мучаются с конвертацией чего-то во что-то.

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

З.Ы. попытка " заставить работать программу c любой СУБД не меняя SQL запрос " говорит только о квалификации разработчика. либо о примитивности решаемой задачи.
...
Рейтинг: 0 / 0
15.05.2005, 21:59
    #33066026
ACCESS -> SQL Server, вопрос по совместимости...
Это похоже на консантанту VBA типа Date
Если вам повезло и СRecordset::Open из MFC передает ее в звпрос как строку
а уже само ядро Jet преобразует ее в дату
то следует избавится от # и самому позаботится
о преобразовании строки в дату с помощью соотв функций в теле запроса


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

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

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


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

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

И еще вопрос к Всемогущему Оллу как получить название (версиию) СУБД с помощбю SQL запроса?
...
Рейтинг: 0 / 0
15.05.2005, 22:12
    #33066042
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ACCESS -> SQL Server, вопрос по совместимости...
очень очень злойА текст запроса хочется сделать одниковым!
Или я что-то не понял?
Уже двое ответили (я и ЛП), что в серьезных задачах это невозможно. Жалобы просьба направлять в Microsoft заказным письмом.
...
Рейтинг: 0 / 0
16.05.2005, 02:42
    #33066158
ACCESS -> SQL Server, вопрос по совместимости...
Всем большое спасибо!

Если кто-нибудь знает, как функцию для выражений (expressions) сделать в Access'е поделитесь опытом!
...
Рейтинг: 0 / 0
16.05.2005, 07:09
    #33066191
Shark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ACCESS -> SQL Server, вопрос по совместимости...
Может я не очень понял о чем речь, но, по моему, для того чтобы язык запросов был один для разных типов баз, надо просто использовать просто еще один слой, БДЕ или ДАО.
...
Рейтинг: 0 / 0
16.05.2005, 10:43
    #33066441
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ACCESS -> SQL Server, вопрос по совместимости...
>как функцию для выражений
проще на TSQL обернуть CONVERT в DateSerial

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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
...
Рейтинг: 0 / 0
17.05.2005, 02:55
    #33068509
ACCESS -> SQL Server, вопрос по совместимости...
Отдельное спасибо Latuk!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / ACCESS -> SQL Server, вопрос по совместимости... / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]