powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MSSQL - дата - VFP
8 сообщений из 8, страница 1 из 1
MSSQL - дата - VFP
    #32705466
Фотография Диченка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, те, кто занимается разработкой в связке MSSQL+VFP, посоветуйте, как лучше хранить дату в MSSQL и работать с ней из фокса. Читал, что некоторые преобразуют дату в фоксе в ггггммдд и хранят ее как число на сервере, а при передачи даты обратно в фокс преобразуют число обратно в дату.
...
Рейтинг: 0 / 0
MSSQL - дата - VFP
    #32705493
SergeyPl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой опыт следующий:
Фокс показывает даты, полученные с сервера в зависимости от установки
SET DATE.
У меня на клиенте стоит SET DATE GERMAN.
А вот при записи, обновлении или поиске приходится дату конвертировать в формат MS SQL Server. Мы на клиенте добавили настройку и управляем ее в зависимости от параметров сервера. Дату в число на сервер не конвертируем.
...
Рейтинг: 0 / 0
MSSQL - дата - VFP
    #32705502
SergeyPl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот моя функция преобразования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
function GetSqlDate
	lparameter voidLocPrmValue
	local strLocType,voidLocRetValue,strLocSetDate,;
		strLocSetCentury,strLocSetHour,strLocSetSeconds,strLocSetMark
	voidLocRetValue = ""
	strLocType = vartype(voidLocPrmValue)
	strLocSetDate = set("DATE")
	strLocSetCentury = set("CENTURY")
	strLocSetHour = set("HOUR")
	strLocSetSeconds = set("SECONDS")
	strLocSetMark = set("MARK")
	set date to AMERICAN
	set century on
	set hour to  24 
	set seconds on
	set mark to "."
	do case
		case (strLocType = "D")
			voidLocRetValue = ttoc(dtot(voidLocPrmValue))
		case (strLocType = "T")
			voidLocRetValue = ttoc(voidLocPrmValue)
	endcase
	set date to &strLocSetDate
	set century &strLocSetCentury
	set hour to &strLocSetHour
	set seconds &strLocSetSeconds
	set mark to &strLocSetMark
return voidLocRetValue
...
Рейтинг: 0 / 0
MSSQL - дата - VFP
    #32705539
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SergeyPi
А разве не легче после установки соединения с MSSQL из фокса для текущего соединения выполнить
Код: plaintext
1.
SET LANGUAGE russian
или
Код: plaintext
1.
SET DATEFORMAT DMY
Тогда при обновлении не надо будет менять местами день-месяц.

Кстати, если для вашего логина на MS SQL установлен язык Russian то вообще таких проблем не должно быть

Короче, хранить дату на SQL лучше стандартно - datetime
...
Рейтинг: 0 / 0
MSSQL - дата - VFP
    #32705553
SergeyPl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Ts2SergeyPi
А разве не легче после установки соединения с MSSQL из фокса для текущего соединения выполнить
Код: plaintext
1.
SET LANGUAGE russian
или
Код: plaintext
1.
SET DATEFORMAT DMY
Тогда при обновлении не надо будет менять местами день-месяц.

Кстати, если для вашего логина на MS SQL установлен язык Russian то вообще таких проблем не должно быть

Короче, хранить дату на SQL лучше стандартно - datetime
Согласен, я привел наше решение. Но, преобразовывать форматы все равно придется, например тип логический - фоксовский .T. или .F. в 1 или 0 для SQL Server.
...
Рейтинг: 0 / 0
MSSQL - дата - VFP
    #32705588
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно я не прав но кажеться если делать все средствами сервера а не фокса то сервер все сам сделает хотя это наверное если таблицы перегонять
...
Рейтинг: 0 / 0
MSSQL - дата - VFP
    #32705597
lesha_spb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2SergeyPi: не обязательно, если работать через remote view все преобразуется само.
...
Рейтинг: 0 / 0
MSSQL - дата - VFP
    #32705732
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прежде чем советовать что-нибудь, сначала неплохо бы уточнить, а что собственно не нравится?

Единственная проблема заключается в том, что в MS SQL нет типа Date, а только тип DateTime.

Это значит, что если в FoxPro нужна только дата без времени, то могут возникнуть проблемы:

1) Отображение только фрагмента даты без времени
2) Операции сравнения, когда во фрагменте времени записано значение отличеное от нуля

Если используется Remote View, то в нем можно просто явно задать тип выходных данных и DateTime будет автоматически конвертироваться в Date и обратно.

Если используется SQLExec(), то, да, тут возможны проблемы.

Основная проблема - это возможность записи времени, если нужен только фрагмент даты. Но это можно решить через триггер на вставку-модификацию непосредственно на MS SQL, чтобы принудительно обнулять фрагмент времени.

PS: Использовать для хранения даты - число мне кажется не очень хорошей идеей. Я слышал про вариант хранения в виде символьной строки C(8) "ГГГГММДД"
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / MSSQL - дата - VFP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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