powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / дата -> MS SQL
24 сообщений из 24, страница 1 из 1
дата -> MS SQL
    #34523718
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть переменная вида
ldData = CTOT("01.'" + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))

так вот при INSERT на сервер она сохраняется в виде 01.01.1900

как её лучше преоразовать, чтобы она сохранялась нормально в виде "14.05.2007"?
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523727
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
ldData = DATE(THISFORM.Year,THISFORM.Month, 1 )
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523789
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну а тогда почему формат DMY не проходит, если перед этим дать команду серверу
lcSQLCommand = "SET DATEFORMAT dmy"
= SQLEXEC(h, lcSQLCommand)
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523806
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А при чем тут сервер, если преобразование производится еще до обращения к нему? И какой, кстати, сервер?
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523881
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
lcSQLCommand = "SET DATEFORMAT dmy"   
= SQLEXEC(h, lcSQLCommand) 
ldData = CTOT("'01.'" + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))
lcSQLcommand = "INSERT INTO...." 
= SQLEXEC(h, lcSQLcommand) 

и дата на MS SQL Server сохраняется как 01.01.1900. Почему?
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523891
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому, что ldData получается пустой, а MS SQL server не работает с пустыми датами.
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523892
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sorry, кавычки лишние поставил
ldData = CTOT("01." + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))

но сути это не меняет....
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523911
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот не вижу особой разницы между
ldData = CTOD("01." + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))
и между
ldData = DATE(THISFORM.Year, THISFORM.Month, 1)

но второй вариант работает....
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523932
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Результат функций CTOT, CTOD зависит от настроек среды исполнения. Мой вариант не зависит ни от чего.
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34523967
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот поэтому я сначала и даю команду
lcSQLCommand = "SET DATEFORMAT dmy"
= SQLEXEC(h, lcSQLCommand)

но всё равно....
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34524013
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот поэтому я сначала и даю команду
lcSQLCommand = "SET DATEFORMAT dmy"

Кому предназначена эта команда? Фоксу или серверу? А преобразование где идет - в фоксе или на сервере? CTOT - фоксовая функция или серверная? Что-нибудь видели в хелпе по фоксу про SET DATEFORMAT ? В каком месте?
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34524031
qwertyqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EndForвот поэтому я сначала и даю команду
lcSQLCommand = "SET DATEFORMAT dmy"
= SQLEXEC(h, lcSQLCommand)

но всё равно....

Потому что надо передвать в формате YMD.
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34524078
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПотому что надо передвать в формате YMD.

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
set date german
local lcSqlCmd, lnConnection
local lcConnString
*!*	text to lcConnString noshow pretext  15 
*!*		Driver=SQL Server;
*!*		SERVER=fff;
*!*		DATABASE=fff;
*!*		uid=kot;
*!*		pwd=;
*!*	endtext	
*!*	lnConnection = sqlstringconnect(lcConnString)

lnConnection =  3 

private pdDate
text to lcSqlCmd noshow pretext  7 
	if object_id('tempdb..#tmp_table') is not null drop table #tmp_table
	create table #tmp_table ([date] datetime)
	SET DATEFORMAT mdy
	insert into #tmp_table values(?pdDate)
	SET DATEFORMAT ydm
	insert into #tmp_table values(?pdDate)
	SET DATEFORMAT ydm
	insert into #tmp_table values(?pdDate)
	select * from #tmp_table
	drop table #tmp_table
endtext
pdDate = date()
close data all
sqlexec(lnConnection,lcSqlCmd,'tt')
select tt 
browse normal
close data all
pdDate = datetime()
sqlexec(lnConnection,lcSqlCmd,'tt')
select tt 
browse normal


text to lcSqlCmd textmerge noshow pretext  7 
	if object_id('tempdb..#tmp_table') is not null drop table #tmp_table
	create table #tmp_table ([date] datetime)
	SET DATEFORMAT mdy
	insert into #tmp_table values('<<dtos(pdDate)>>')
	SET DATEFORMAT ydm
	insert into #tmp_table values('<<dtos(pdDate)>>')
	SET DATEFORMAT ydm
	insert into #tmp_table values('<<dtos(pdDate)>>')
	select * from #tmp_table
	drop table #tmp_table
endtext
close data all
pdDate = date()+ 1 
sqlexec(lnConnection,lcSqlCmd,'tt')
select tt 
browse normal
close data all
pdDate = datetime()+ 10 
sqlexec(lnConnection,lcSqlCmd,'tt')
select tt 
browse normal
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34524929
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EndForесть переменная вида
ldData = CTOT("01.'" + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))

так вот при INSERT на сервер она сохраняется в виде 01.01.1900

как её лучше преоразовать, чтобы она сохранялась нормально в виде "14.05.2007"?
Приведите вашу команду INSERT , которая через SQLEXEC добавляет дату на сервер.
С уважением, Алексей
P.S. Для исключения путаницы с датами, достаточно отсылать ее на сервер в виде строки 'YYYYMMDD'
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34524941
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть проще велосипед :) Фокс сам все как надо преобразовывает
Код: plaintext
1.
ltDate = datetime()
sqlexec(lnHandle, 'insert into mytable (tDate) values (?ltDate)')
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34525160
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге я передал на SQL Server дату в формате YMD и все работает, но перед этим пытался в формате DMY (более привычный всё-таки формат) и делал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
lcSQLCommand = "SET DATEFORMAT dmy"   
= SQLEXEC(h, lcSQLCommand) 
ldData = CTOD("'01.'" + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))
* или вот так, т.е. явно переводил в формат DATETIME
* ldData = CTOT("'01.'" + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))
lcSQLCommand  = "INSERT INTO table (data) VALUES (ldData)" 
= SQLEXEC(h, lcSQLCommand) 
и результат был "01.01.1900", т.е. ни фокс (тем кто говорит, что фокс сам всё преобразует), ни MS SQL Server (зачем тогда ему нужна установка SET DATEFORMAT dmy?) ничего не преобразовывали....

ЗЫ. щас версия MS SQL Server 7, но в 2000 установка SET DATEFORMAT dmy для SQL Server срабатывала и из фокса я уже дату передавал в формате DMY (задачка была только другая)... вот я и задумался, то ли дело в версии, толи лыжи у меня не едут....
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34525185
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, EndFor, ну и каша у тебя в голове.

Не пробовал посмотреть содержимое ldData сразу вот после этой команды?
Небось, пустая дата?

Код: plaintext
ldData = CTOD("'01.'" + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))

И при чем тут Set DATEFORMAT на сервере, если передаешь дату, а не строку, представляющую дату?
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34525840
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вобщем да, лыжи у меня не ехали просто....
в выражении типа ldData = CTOD("01." + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year))) напутал с кавычками.... в программе у меня вместо "01" стоит вычисляемая переменная.... вот там и были кавычки лишние...

а по сему считаю тему закрытой.... всем спасибо....
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34526255
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Невнимательно ты мой пост читал
Надо было ? добавить
lcSQLCommand = "INSERT INTO table (data) VALUES ( ? ldData)"

Так ты подставишь содержимое переменной в запрос
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34526421
qwertyqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to alex11100

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

В первой части команда SET DATEFORMATне нужна:
...................
* SET DATEFORMAT mdy
insert into #tmp_table values(?pdDate)
...................

И во второй части тоже не нужна, т.к. dtos(pdDate) = YYYYMMDD
...................
* SET DATEFORMAT ydm
insert into #tmp_table values('<<dtos(pdDate)>>')
...................

И если уж ему нужна была строка, то легче всего было бы передвать в ANSI (а это годмесяцдень).
ldData = CTOT(ALLTRIM(STR(THISFORM.Year))+STRTRAN(STR(THISFORM.Month,2),' ','0') + '01')
'20070514'
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34526463
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwertyqwerty

меня учить не нужно,
Вы меня желаете записать в свою религию???

я вообче-та не о том писал,
а показал, что фокс сам парсит правильно дату
если передать параметром переменную,
о чем тут и другие толкуют

и вообче-та я написал пример для передачи дататайма
pdDate = datetime()
sqlexec(lnConnection,lcSqlCmd,'tt')

фокспро имеется мощнейший класс
для автоматического преобразования типов,
который как раз позволяет не творить безумия
так, что ..... работаем дальше ....
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34526624
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Dima_T

в программе в инсёрте у меня всё правильно: там везде как и положено стоят ?....
это здесь в теме выше я просто запарил поставить ?, а в коде они стоят.... в коде перед инсёртом у меня выражение даты из-за неправильно раставленных кавычек принимало пустое выражение.... кавычки поправил и всё ОК....
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34526634
EndFor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а SQL Server похоже вобщем-то пох в каком формате ему дату отправлять... пробовал и DMY и YMD... получилось и так и так....
...
Рейтинг: 0 / 0
дата -> MS SQL
    #34526864
qwertyqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100qwertyqwerty

меня учить не нужно,
Вы меня желаете записать в свою религию???
......................


Обиделся(лись) ...
На что интересно?

Какая такая своя религия? Поясни(те), я то я именю, а не знаю, что имею ...

Здесь поросили конкретной помощи ... а вы написали ... то ли так вы пишете и советуете так сделать, то ли еще чего сказать хотите ...
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / дата -> MS SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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