Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Как установить "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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
1-1107705137
Jilian
2005-02-06 18:52
2005.02.27
Вопрос по текстовому файлу


1-1107939243
chup
2005-02-09 11:54
2005.02.27
Печать в Word


14-1108016672
Магнит
2005-02-10 09:24
2005.02.27
Установка базовой станции GSM


1-1107966737
juice
2005-02-09 19:32
2005.02.27
Глобальная переменная


6-1102434677
Klopan
2004-12-07 18:51
2005.02.27
FTP server