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

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

как её лучше преоразовать, чтобы она сохранялась нормально в виде "14.05.2007"?
...
Рейтинг: 0 / 0
14.05.2007, 15:48
    #34523727
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
Код: plaintext
ldData = DATE(THISFORM.Year,THISFORM.Month, 1 )
...
Рейтинг: 0 / 0
14.05.2007, 16:01
    #34523789
EndFor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
ну а тогда почему формат DMY не проходит, если перед этим дать команду серверу
lcSQLCommand = "SET DATEFORMAT dmy"
= SQLEXEC(h, lcSQLCommand)
...
Рейтинг: 0 / 0
14.05.2007, 16:06
    #34523806
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
А при чем тут сервер, если преобразование производится еще до обращения к нему? И какой, кстати, сервер?
...
Рейтинг: 0 / 0
14.05.2007, 16:24
    #34523881
EndFor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
Код: 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
14.05.2007, 16:25
    #34523891
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
Потому, что ldData получается пустой, а MS SQL server не работает с пустыми датами.
...
Рейтинг: 0 / 0
14.05.2007, 16:26
    #34523892
EndFor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
sorry, кавычки лишние поставил
ldData = CTOT("01." + ALLTRIM(STR(THISFORM.Month)) + "." + ALLTRIM(STR(THISFORM.Year)))

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

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

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

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

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

Потому что надо передвать в формате YMD.
...
Рейтинг: 0 / 0
14.05.2007, 17:03
    #34524078
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
авторПотому что надо передвать в формате 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
15.05.2007, 07:21
    #34524929
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
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
15.05.2007, 07:37
    #34524941
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
Есть проще велосипед :) Фокс сам все как надо преобразовывает
Код: plaintext
1.
ltDate = datetime()
sqlexec(lnHandle, 'insert into mytable (tDate) values (?ltDate)')
...
Рейтинг: 0 / 0
15.05.2007, 09:43
    #34525160
EndFor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
В итоге я передал на 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
15.05.2007, 09:54
    #34525185
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
Да, EndFor, ну и каша у тебя в голове.

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

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

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

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

Так ты подставишь содержимое переменной в запрос
...
Рейтинг: 0 / 0
15.05.2007, 14:59
    #34526421
qwertyqwerty
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
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
15.05.2007, 15:13
    #34526463
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
дата -> MS SQL
qwertyqwerty

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

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

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

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

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

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


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

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

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


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