Форум: "Базы";
Текущий архив: 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