Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

Как установить "SET DATEFORMAT dmy" на сервере MSSQL из программы   Найти похожие ветки 

 
Layner ©   (2005-01-27 14:44) [0]

Т.е. установить могу без проблем, Но, приходится это делать перед каждым запросом. Проблемы в этом тоже нет, пускай делает, просто думаю не красиво это.
Т.е. у меня DBgrid, в него входят столбцы с датой. Т.е. делаю выборку по дате. Запрос для выборки генерю динамически. Результат выборки отображается в DBgrid.

Для того, чтобы сделать выборку по дате, в приложении в OnCreate ставлю
 LongDateFormat:="dd.mm.yyyy";
 DateSeparator:=".";
 ShortDateFormat:="dd.mm.yyyy";


А на сервере прогоняю запрос в динамически созданной и уничтоженной потом ADOQuery: SET DATEFORMAT dmy

В результате устоновки не сохраняются. Стал копать. В SQL Profiler смотрю. После окончания любого динамического запроса, где ADOQuery создается и уничтожается, проходит такая штука - exec sp_reset_connection, я его сам не генерю. Т.е. этим самым збрасываются все установки. В том числе и даты.

Вопрос, как правильно установить формат даты на сервере MSSQL для клиента?

Заранее благодарю.


 
Layner ©   (2005-01-27 14:48) [1]

... у нас винда разная, есть английская, есть русская, у обоих стандарты дат разные. А надо, что бы клиент и там и там работал :(


 
Ega23 ©   (2005-01-27 14:50) [2]

const    SQLDateTimeFmt=""{ts""" yyyy-mm-dd hh:nn:ss""" }"";

Function Valx( i:Variant;d:string=""):string;{ret: <Str_of_Var>, }
//var //ss:string;
  // n:numeric;
begin
result:="";
try
case VarType(i) of
 varEmpty,//    = $0000;
 varNull: result:="Null"+d;
 varString: result:=""""+i+""""+d ;
 varDate: begin
           DateTimeToString(result,SQLDateTimeFmt,i);
           result:=result+d ;
          end;
 varDouble,
 varSingle: result:=NumsOnlyS(VarToStr(i)) +d;
else result:=VarToStr(i)+d;
end;//case
except
result:="";exit;
end;
end;



Я через такую байду все дин.запросы прогоняю.
Т.е.
ss:="select * from Table1 where DateTimeField ="+ValX(Now);


 
stone ©   (2005-01-27 15:02) [3]


> Т.е. у меня DBgrid, в него входят столбцы с датой. Т.е.
> делаю выборку по дате.

Дата - это число с плавающей точкой. Формат имеет значение только для отображения данных.


 
Layner ©   (2005-01-27 15:02) [4]

Спасибо Ega23 © !
Только у меня ошибка компиляции, ругается на NumsOnlyS.


 
Layner ©   (2005-01-27 15:03) [5]

stone ©   (27.01.05 15:02)
Ну да, я не про это, может что не так написал, мне важно динамический запрос правильно сгененрить с клиента на любой машине :(


 
Layner ©   (2005-01-27 15:06) [6]

Ega23
Да, желаю удачи жене на родах! :)
У меня самого недавно дочь родилась, уже год и 3 месяца, время летит :)


 
stone ©   (2005-01-27 15:11) [7]


> Ну да, я не про это, может что не так написал, мне важно
> динамический запрос правильно сгененрить с клиента на любой
> машине :(

Ну а кто тебе мешает составить запрос типа
where DateField = 38377.6353404


 
Layner ©   (2005-01-27 15:16) [8]

[7] stone ©   (27.01.05 15:11)
Не знаю, не серьезно как то :) Хотя на 100% согласен, что путаница ВООБЩЕ не будет с датой.

ПО идее верхний способ описанный мною должен работать, как бы только добится отмены сброса всех установок.

Ega23
Понятно, varSingle я передавать не буду. А с датой понятно. Только смотри что, мы описываем в константе формат даты как yyyy-mm-dd hh:nn:ss, хотя на сервере не известно, какой стандарт, может тоже американский какой нибудь :(


 
Ega23 ©   (2005-01-27 15:26) [9]

NumsOnlyS. - это ещё одна "личная" функция. Если хочешь - могу поделиться. Только будет работать при наличии установленного RXLib.


 
Layner ©   (2005-01-27 15:29) [10]

NumsOnlyS
Да не, уже с ней разобрался, спасибо.
Сейчас дальше ломаю голову, проще конечно пристыковать к каждому запросу SET DATEFORMAT dmy, пользоваться стандартными ф-я преобразованя даты в строку, да и не мучатся не с чем.


 
MOA ©   (2005-01-27 15:29) [11]

Гарантированно сработает в любом стандарте даты вот так: yyyymmdd (20050127) или yyyymmdd hh:mm:ss.qqq (20050127 15:28:37.345)
Удачи!


 
Ega23 ©   (2005-01-27 15:30) [12]

Ega23
Понятно, varSingle я передавать не буду. А с датой понятно. Только смотри что, мы описываем в константе формат даты как yyyy-mm-dd hh:nn:ss, хотя на сервере не известно, какой стандарт, может тоже американский какой нибудь :(


А ты попробуй. Лично я проблем никаких не имел.
Да, вот ещё пример использования ValX:
ss:="Declare @X int Set Nocount On "+
    "Exec @X=S_PersEdit @PersNam1="+ValX(Trim(ePersNam1.Text),",")+" @PersNam2="+ValX(Trim(ePersNam2.Text),",")+
    "@PersNam3="+ValX(Trim(ePersNam3.Text),",")+"@PersSexFl="+ValX(cbSex.ItemIndex,",")+
    "@PersTabNr="+ValX(eTabNr.Text,",")+
    "@PersConstFl="+ValX(cbStatus.ItemIndex,",")+
    "@PersNot="+ValX(ePersNot.Text,",")+
    "@DepCod="+ValX(DMpas.RQDepForPers.FieldByName("DepCod").AsInteger,",")+
    "@ProfCod="+ValX(DMpas.RQProfs.FieldByName("ProfCod").AsInteger,",")+
    "@PersDatOut="+ValX(dePersDatOut.Date,",")+"@PersAddress="+ValX(ePersAddress.Text,",")+
    "@BirthDat="+ValX(deBirthDat.Date,",")+"@PersPasp="+ValX(ePersPasp.Text,",")+
    "@PersWPhonNr="+ValX(ePersWPhon.Text,",")+"@PersHPhonNr="+ValX(ePersHPhon.Text,",")+
    "@UserPersID="+Valx(Sessinfo.PersId,",")+"@UserWorkCod="+Valx(sessinfo.Workcod,",");
    if Mode=1 then ss:=ss+"@Weight="+lWeight.Caption+",";


 
MOA ©   (2005-01-27 15:30) [13]

Не у видел - это, конечно же, именно строки, те. читать:
"yyyymmdd" ("20050127") или "yyyymmdd hh:mm:ss.qqq" ("20050127 15:28:37.345")


 
MOA ©   (2005-01-27 15:31) [14]

Да что такое, а :(. Тысячные секунды тоже через двоеточие - hh:mm:ss:qqq



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
6-1103622595
Автор333
2004-12-21 12:49
2005.02.27
Задачка!!!


4-1105397977
GanibalLector
2005-01-11 01:59
2005.02.27
GetOpenFileName/GetSaveFileName


3-1106766390
HATAB
2005-01-26 22:06
2005.02.27
Поиск в БД


3-1107013435
neat
2005-01-29 18:43
2005.02.27
dbExpress. Ошибка в параметре запроса


14-1107428519
ArMellon
2005-02-03 14:01
2005.02.27
Кому не лень...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский