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

Вниз

MS SQL в ХР и 2000 Вмндоусе. Почему работает по разному?   Найти похожие ветки 

 
DimonS ©   (2006-04-26 05:20) [0]

Есть база в MS SQL (спутниковое наблюдение - GPS).
Есть программа для просмотра пробега авто за любой промежуток времени. Работает так: при запуске делается выборка данных, а затем из нее методом фильтрации выбирается нужный диапазон (база на серваке, который соединен радиомомедом, поэтому изначально делалось на фильтрации, т.к. не всегда есть доступ и иногда очень медленный).

Так вот...
Фильтр такой:
s:="TimeNav>="""+DateToStr(StrToDateTime(DateEdit1.Text+" "+MaskEdit3.Text))+""" and TimeNav<="""+DateToStr(StrToDateTime(DateEdit2.Text+" "+MaskEdit4.Text))+""" and UniqId="+QT.fieldByName("Uniq_ID").AsString;

QP.Filter:=s;

В ХР работает на ура! А в 2000 ни в какую - QP.Filter:=s; -  не присваивается значение s фильтру. Разборка полета дала, что ошибка где-то в преобразовании даты. Пробовал дату преобразовать в Float - то же самое.

Пошел по пути делать выборки.

QP.Close;
QP.SQL.Clear;
QP.SQL.Add("select TimeSys, TimeNav,UniqID,Distance from Distance_all where TimeNav>"+D1+" and TimeNav<="+D2+" and UniqId="+QT.fieldByName("Uniq_ID").AsString+" order by Timenav");
QP.Open;

Ругается на запятую в формате даты.
Сделал:
D1:=ReplaceStr(FloatToStr(StrToDateTime(DateEdit1.Text+" "+MaskEdit3.Text)),",",".");
D2:=ReplaceStr(FloatToStr(StrToDateTime(DateEdit2.Text+" "+MaskEdit4.Text)),",",".");
(заменил запятую на точку) - работает, НО! Выбираются данные на 2 дня позже почему-то... Да и кривой, конечно, способ заменять запятую, на другом серваке формат даты другой могет быть...

Вот и вопрос - что за трабл такой?


 
Nikolay M. ©   (2006-04-26 10:31) [1]

Работал у меня студент, сплошь и рядом лепил такое


> StrToDateTime(DateEdit1.Text)


Поубивал бы, если бы его раньше не уволили...

http://www.yandex.ru/yandsearch?rpt=rad&text=%F0%E5%E3%E8%EE%ED%E0%EB%FC%ED%FB%E5+%ED%E0%F1%F2%F0%EE%E9%EA%E8+delphi

PS
Скажи, что за система, думаю как раз GPS-навигатор приобретать, не дай вдруг наткнуться...


 
DimonS ©   (2006-04-26 16:04) [2]

Nikolay M. ©  
> StrToDateTime(DateEdit1.Text)

Ответ не понят. Если предложите другое - предлагайте, а не "Поубивал бы, если бы его раньше не уволили..."

Ответа на вопрос не озвучен, таких я услыщал много на разных форумах, НО НИКТО!!! НЕ СКАЗАЛ, ЧТО ЗА ОШИБКА!!!

Извиняйте, если залез не на тот форум, где не могут ответить на такой вопрос (ДЛЯ ВСЕХ, а не для Профи), то я пас... Звиняйте....


 
Johnmen ©   (2006-04-26 16:13) [3]

Всё очень просто. Достаточно почитать StrToDateTime+F1, подумать.
Изучить параметы в запросах.


 
DimonS ©   (2006-04-26 16:20) [4]


> Johnmen ©   (26.04.06 16:13) [3]

Пробовал, не помогает.

Если не сложно, объясните ошибку то? А то F1 и такие ответы не помогают.
Каюсь, в англицком я не силен. Если не трудно, объясните, как правильно?


 
Nikolay M. ©   (2006-04-26 17:11) [5]


> НО НИКТО!!! НЕ СКАЗАЛ, ЧТО ЗА ОШИБКА!!!


Я бы сказал, что ошибка в ДНК, но это грубо и не по сути.
Что ты надеешься получить, если напишешь StrToDateTime ("01.02.2006")? А StrToDateTime ("2006/02/02 12:34:56.789")? А StrToDateTime ("Пишу сюда все, что захочу")?
Не храни даты и вещественные числа в строках - и будет тебе счастье.


 
DimonS ©   (2006-04-27 00:23) [6]

В общем, понятно. Можно в этот форум не заглядывать больше. Одна болтовня и ни одного дельного ответа.

Я же попросил: ПОДСКАЖИТЕ, КАК ПРАВИЛЬНО!!! А не то, как я неправильно делаю. Я и сам вижу, что косяк вылез. Но, похоже, здесь или все такие умные, что не могут снизойти до того, чтобы написать ответ, или сами не знают. Второе скорее всего.


> Что ты надеешься получить, если напишешь StrToDateTime ("01.
> 02.2006")? А StrToDateTime ("2006/02/02 12:34:56.789")?
> А StrToDateTime ("Пишу сюда все, что захочу")?
> Не храни даты и вещественные числа в строках


Я надеялся получить дату-время в формате DateTime. Как ни странно, но срабатывает такой способ. По крайней мере, в Аксессовской базе таких траблов нет, ив парадоксе, и в дбф.


 
Джо ©   (2006-04-27 01:44) [7]

Ну, хотя бы использовать для ввода даты не TEdit, а TDateTimePicker и параметры для TQuery (или что ты там используешь).


 
DimonS ©   (2006-04-27 02:01) [8]


> Джо ©  

Я для ввода даты использую TDateEdit из библиотеки RxLib.
В том то и дело, в ХР переводит отлично, в 2000 не хотит.


> Nikolay M. ©

Что ты надеешься получить, если напишешь StrToDateTime ("01.02.2006")?
Я не понял юмора. А для чего тогда функция StrToDateTime существует? Не для перевода ли из строкового представления даты-времени в DateTime?


 
Джо ©   (2006-04-27 02:25) [9]

> Что ты надеешься получить, если напишешь StrToDateTime ("01.02.2006")
> ?

Да, в принципе, все, что угодно :) Включая исключение (но это как раз самое лучшее). Уже тут несколько раз говорили — региональные настройки. Прочитайте, в конце концов, справку по StrToDateTime.


 
DimonS ©   (2006-04-27 02:49) [10]


> Уже тут несколько раз говорили — региональные настройки.


Ну ясен пень, это я понял еще до того, как написал сюда. Вопрос в том, КАК СДЕЛАТЬ ТАК, чтобы программа работала на машинах с разными региональными настройками? Или никак?

ЗЫ. Проверил региональные настройки на своей машине, на той, где стоит 2000 винда (где программа не работает) и на сервере. ВЕЗДЕ ОДИНАКОВЫЕ!!! Но... Что-то видно еще влияет.


 
atruhin ©   (2006-04-27 03:51) [11]

См. использование параметров в хапросах. Это не просто, а очень просто! :)


 
Nikolay M. ©   (2006-04-27 10:07) [12]


> КАК СДЕЛАТЬ ТАК, чтобы программа работала на машинах с разными
> региональными настройками?


Ты ответы читаешь или будешь продолжать истерить?


> Не храни даты и вещественные числа в строках - и будет тебе
> счастье.


Для повышения образованности можешь почитать про ShortDateFormat и LongDateFormat, о чем тебе было сказано еще в [3] - в хелпе про StrToDateTime все это разжевано.


> > А StrToDateTime ("Пишу сюда все, что захочу")?
>
> Я надеялся получить дату-время в формате DateTime.


И какое же будет дата-время у StrToDateTime ("Пишу сюда все, что захочу")?


 
atruhin ©   (2006-04-27 14:18) [13]


> [1] Nikolay M. ©   (26.04.06 10:31)
> сплошь и рядом лепил такое
> > StrToDateTime(DateEdit1.Text)
> Поубивал бы, если бы его раньше не уволили

А в чем здесь проблемма? Я периодически использую для контроля правильности введенной даты.
try
 StrToDateTime(DateEdit1.Text)
except
 // вывод сообщения пользователю
end


 
Nikolay M. ©   (2006-04-27 14:33) [14]


> except
>  // вывод сообщения пользователю


Проблема будет с пользователи, которые будут вбивать правильную, по их мнению, дату, а потом окажется, что "эта дурацкая программа не понимает дату и выдает какие-то окошки".
Зачем самому создавать проблемы там, где их нет?


 
atruhin ©   (2006-04-27 14:57) [15]


> Зачем самому создавать проблемы там, где их нет?

Ну про периодически я переборщил :). Использовал в D6 там вроде не было стандартного компонента ввода дат, несколько раз нужно было написать модули без использования сторонних компонент.


 
MOA ©   (2006-04-27 15:02) [16]

>региональные настройки на своей машине, на той, где стоит 2000 винда (где программа не работает) и на сервере. ВЕЗДЕ ОДИНАКОВЫЕ!!!
Похоже, компоненты доступа используют DB Library (BDE, например) - тогда региональные установки есть ещё в SQL Server Client Network Utility - вкладка "DB Library Options".
Удачи!


 
Nikolay M. ©   (2006-04-27 15:23) [17]


> Использовал в D6 там вроде не было стандартного компонента
> ввода дат


Палитра компонентов Win32 -> DateTimePicker. На худой конец MaskEdit.


 
atruhin ©   (2006-04-27 15:53) [18]


> На худой конец MaskEdit

Ну дак я его и имел ввиду.

> Палитра компонентов Win32 -> DateTimePicker.

А вот он мне кажется только в 7ке появился. Хотя может я и не прав.


 
Nikolay M. ©   (2006-04-27 16:04) [19]


> Хотя может я и не прав.


Еще в четверке был, как минимум.


 
atruhin ©   (2006-04-27 16:07) [20]

Ну значит забыл. Сдаюсь.


 
DimonS ©   (2006-04-29 03:19) [21]

Ну вот еще добавлю.
Дата вводится через DateEdit, из библиотеки RxLib, так что ввести неправильно ее невозможно.

Доступ осуществляется через ADO.

ShortDateFormat и LongDateFormat не хотелось бы использовать, ведь на другой машине может оказаться другие настройки и опять будут те же ошибки, так ведь?


 
sniknik ©   (2006-04-29 10:37) [22]

> Дата вводится через DateEdit, из библиотеки RxLib, так что ввести неправильно ее невозможно.
зато после она у тебя преобразовывается в число... число это не дата (по типу, так то она конечно числом представлена), в принципе ничего страшного когда в одной системе, но у тебя идет передача между системами... точка отсчета даты (ноль) может быть разной, ты это не учитываеш и + обманываеш систему что это число а не дата... т.е. она тоже не учитывает.
ну тогда и не жалуйся
> НО! Выбираются данные на 2 дня позже почему-то...

> ведь на другой машине может оказаться другие настройки и опять будут те же ошибки, так ведь?
используй параметры (обязательно того типа который есть самом деле) либо передавай строкой в универсальном формате движка (для mssql это "yyyymmdd" или "yyyy-mm-dd", для аксесс #yyyy-mm-dd# уточни в справке)


 
DimonS ©   (2006-04-29 13:02) [23]


> sniknik ©  


Спасибо, попробую. А ведь Акцесс не принимает дату в строковом виде, нужно обязательно переводить в число. А mssql число не принимает. Просто mssql почти не касался, а с Аксессом небыло таких траблов, вот и мучуюсь. :)


 
sniknik ©   (2006-04-29 13:11) [24]

> нужно обязательно переводить в число
в дататайм, а не число. тут тип имеет значение, хотя суть типа тоже число... вот если бы ты внутри одной системы манипуляции делал то было бы без разници.

там не только точки отсчета разные но и к примеру в дельфе дататайм это число с плавающей запятой, а в mssql (насколько помню) два составленных целых одно под дату другое под время. при передаче числом оно конечно может автоматически преобразовать тип, но потери в точности будут.


 
DimonS ©   (2006-04-29 13:16) [25]


> дельфе дататайм это число с плавающей запятой, а в mssql
> (насколько помню) два составленных целых одно под дату другое
> под время

Вот наконец то подсказали, чем форматы отличаются! Получается, что региональные настройки и ни при чем. Буду пробовать после праздников :)


 
VadimSpb   (2006-04-29 13:28) [26]

Посмотри пример для MSSQL:
          DataModule1.ADOCommand.CommandText := "INSERT INTO HistoryConnect2 (AbonentID,ConnectDate,DisconnectDate) VALUES (:AbonentID,:ConnectDate,:DisconnectDate)";
          DataModule1.ADOCommand.Parameters.ParamValues["AbonentID"]      := DataModule1.tbAbonentAbonentID.AsInteger;
          DataModule1.ADOCommand.Parameters.ParamValues["ConnectDate"]    := Int(DateTimePicker1.Date);
          DataModule1.ADOCommand.Parameters.ParamValues["DisconnectDate"] := Int(DateTimePicker6.Date);
          DataModule1.ADOCommand.Execute;


 
VadimSpb   (2006-04-29 13:32) [27]

И еще: РАБОТАЙ С ДАТОЙ ТОЛЬКО ЧЕРЕЗ ПАРАМЕТРЫ


 
DimonS ©   (2006-04-29 13:35) [28]

Спасибо всем, теперь понятно, в чем апшипкИ :). Негде попробовать сейчас, дома ХРю стоит, придется ждать допослепразников.


 
DimonS ©   (2006-05-11 16:03) [29]

ТО
> VadimSpb   (29.04.06 13:28) [26]


Спасибо, единственный, кто подсказал нормально, просто применил пример, которого я и ждал. Все работает отлично. (Хотя фильтрация не работает, но это уже не важно).

Через параметры проверил на машинах с 95, 98, 2000 и МЕ виндой, все работает!



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

Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.012 c
1-1145444485
solenko
2006-04-19 15:01
2006.05.28
Вызов функции во время выполнения


1-1145075103
anubis
2006-04-15 08:25
2006.05.28
как загрузить иконку в image list


2-1147412757
ruslan_as
2006-05-12 09:45
2006.05.28
Как убрать Enter-ы в DBMemo


1-1145553236
viktorsen
2006-04-20 21:13
2006.05.28
Написание собственного инсталлятора


2-1147560405
EZHIK
2006-05-14 02:46
2006.05.28
Разные действия для одной кнопки.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский