Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дата в MSSQL / 19 сообщений из 19, страница 1 из 1
19.01.2006, 19:11
    #33492835
фокс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
вопрос сбствно такой, табличка из MSSQL, в ней поле даты, если новая запись то там 01.01.1900 .... в фоксе для обнаружения таких записей мы использовали empty() теперь она не работает, писать = 01.01.1900 не хочется, что применить для ловли этих записей?
...
Рейтинг: 0 / 0
19.01.2006, 20:45
    #33492955
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Я в таком случае записываю NULL. И при вызове этого значения делаю проверку на NULL, а там требуемые действия.
...
Рейтинг: 0 / 0
20.01.2006, 06:32
    #33493212
фокс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
НедоходящийЯ в таком случае записываю NULL. И при вызове этого значения делаю проверку на NULL, а там требуемые действия.

т.е. необходимо принудительно вставлять null ?

сам скл нил не вставляет?
...
Рейтинг: 0 / 0
20.01.2006, 09:23
    #33493323
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
фокс НедоходящийЯ в таком случае записываю NULL. И при вызове этого значения делаю проверку на NULL, а там требуемые действия.

т.е. необходимо принудительно вставлять null ?

сам скл нил не вставляет?
Вставляет, вставляет, если у вас в поле не определен Constraint DEFAULT или объект Defaults и в этом поле разрешено хранить NULL.
С уважением, Алексей.
...
Рейтинг: 0 / 0
20.01.2006, 10:17
    #33493435
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Да,да. Нужно в нужной табле открыть окно св-во и найти там требуемое поле и поставить галочку NULL.
...
Рейтинг: 0 / 0
20.01.2006, 10:22
    #33493451
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
НедоходящийДа,да. Нужно в нужной табле открыть окно св-во и найти там требуемое поле и поставить галочку NULL.

Угу, НО при этом если эта база разрабатывалась не вами и с ней работает еще какое то приложение, то можете огрести кучу неприятностей.
...
Рейтинг: 0 / 0
20.01.2006, 10:25
    #33493457
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
2 AleksMed
Цэ точно!. Поэтому "фокс-у" придеться проконсультироваться с создателем этой базы.
...
Рейтинг: 0 / 0
21.01.2006, 09:22
    #33495421
фокс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Да нет ребята, вы не правы...

в SQL именно null и стоит (галочка) , только для SQL это не нул а именно 01.01.1900. А фкспро его так и воспринимает. И признака никакого нет, чтобы выделить.
...
Рейтинг: 0 / 0
21.01.2006, 09:54
    #33495429
Программизд 01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Лично я типом datetime в MSSQL не пользуюсь, храню дату как строку char(10) в виде dd/mm/yyyy. И нет никаких заморочек с записями, в которых "нет даты", и не надо в запросах конвертить дату из того вида, в котором хранит ее сервер в удобоваримый вид с помощью convert(char(10),дата,103). А для выборок на сервере строка dd/mm/yyyy прекрасно кастуется в тип datetime, причем как мною, так и автоматически самим сервером. Я отказался от использованием datetime именно из-за головняков с записями в которых "нет даты". Потому-что приходилось постоянно как-то извращаться и на клиенте отслеживать это дело, чтобы юзер видел не NULL и не 01/01/1900, а просто "пустой столбец" или маску ввода даты / /
...
Рейтинг: 0 / 0
21.01.2006, 19:32
    #33495750
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
фоксв SQL именно null и стоит (галочка) , только для SQL это не нул а именно 01.01.1900. А фкспро его так и воспринимает. И признака никакого нет, чтобы выделить.
Проблема в том, что у MS SQL нет такого понятия как "пустая дата". Когда он получает от FoxPro "пустую дату" он воспринимает это как "самую маленькую" дату. А это как раз и есть 01.01.1900.

Т.е. надо ПЕРЕД отправкой на сервер даты конвертировать "пустую дату" в значение NULL или же ПОСЛЕ приема даты с сервера конвертировать 01.01.1900 в пустую дату.

Наиболее простой вариант, это вместо пустой даты записывать значение NULL, а для отображения пустой строки использовать настройку SET NULLDISPLAY или свойство конкретного объекта NullDisplay

Программизд 01Лично я типом datetime в MSSQL не пользуюсь, храню дату как строку char(10) в виде dd/mm/yyyy. И нет никаких заморочек с записями, в которых "нет даты", и не надо в запросах конвертить дату из того вида, в котором хранит ее сервер в удобоваримый вид с помощью convert(char(10),дата,103).
Зато есть заморочки с сортировкой по таким полям. Для правильной сортировки по дате это должна быть строка вида yyyy/mm/dd. Или же постоянно конвертировать ее в тип DateTime во всех выборках.

Программизд 01А для выборок на сервере строка dd/mm/yyyy прекрасно кастуется в тип datetime, причем как мною, так и автоматически самим сервером.
А вот "автоматическая трансляция" зависит от текущей настройки

SET DATEFORMAT

Т.е. надо постоянно помнить, чем такой автоматизм обеспечиватся. Иначе однажды может и не произойти этой автоматической трансляции.

Универсальным форматом для MS SQL является символьная строка вида "YYYYMMDD". Вот этот формат автоматически преобразуется в дату вне зависимости от текущей настройки SET DATEFORMAT и обеспечивает корректную сортировку даже в символьном виде без преобразования в дату.

Его недостатком является именно корректный перевод со стороны FoxPro. Т.е. из даты такую строку легко сделать через DTOS(), а вот обратно в дату - уже не так просто.
...
Рейтинг: 0 / 0
21.01.2006, 19:53
    #33495765
Программизд 01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
ВладимирМЗато есть заморочки с сортировкой по таким полям. Для правильной сортировки по дате это должна быть строка вида yyyy/mm/dd. Или же постоянно конвертировать ее в тип DateTime во всех выборках.

Абсолютно никаких:

1) На стороне сервера - ORDER BY CAST(дата AS DATETIME)
1) На стороне фокса - СTOD прямо в control source колонки грида

ВладимирМ

А вот "автоматическая трансляция" зависит от текущей настройки

SET DATEFORMAT

Т.е. надо постоянно помнить, чем такой автоматизм обеспечиватся. Иначе однажды может и не произойти этой автоматической трансляции.

Универсальным форматом для MS SQL является символьная строка вида "YYYYMMDD". Вот этот формат автоматически преобразуется в дату вне зависимости от текущей настройки SET DATEFORMAT и обеспечивает корректную сортировку даже в символьном виде без преобразования в дату.

Его недостатком является именно корректный перевод со стороны FoxPro. Т.е. из даты такую строку легко сделать через DTOS(), а вот обратно в дату - уже не так просто.

Конечно нужно помнить. И поменьше трогать настройки SET, в идеале их вообще оставляя по-умолчанию. Идеального варианта на все случаи жизни нет. Но мой метод для моих условий - наименее геморройный в плане лишних телодвижений и заморочек.
...
Рейтинг: 0 / 0
23.01.2006, 13:06
    #33497116
Недоходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
2 Программизд 01
Не думаю. С DateTime гораздо легче делать выборку и сортировку, я работаю так чтоб поменьше было символьных строк. Потому что с символьными строками трудностей больше возникает. Конечно есть неприятная вещь со стороны MS SQL. Она заключаеться в том что при копировании даты в курсор фокса заноситься дата и время. Чтоб избавиться от времени и оставить дату. призодиться прописывать CTOD(DTOC()). И получаем чистую дату.
...
Рейтинг: 0 / 0
23.01.2006, 13:09
    #33497131
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Программизд 01 ВладимирМЗато есть заморочки с сортировкой по таким полям. Для правильной сортировки по дате это должна быть строка вида yyyy/mm/dd. Или же постоянно конвертировать ее в тип DateTime во всех выборках.

Абсолютно никаких:

1) На стороне сервера - ORDER BY CAST(дата AS DATETIME)

Это называется - не дай серверу использовать индексы
...
Рейтинг: 0 / 0
23.01.2006, 13:21
    #33497171
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
ВладимирМПроблема в том, что у MS SQL нет такого понятия как "пустая дата". Когда он получает от FoxPro "пустую дату" он воспринимает это как "самую маленькую" дату. А это как раз и есть 01.01.1900.

Ну это не совсем так. Самая маленькая дата для datetime = 1.1.1753, а вот для smalldatetimeона действительно равно 1.1.1900, но пустую дату сервер все рано берет 1.1.1900 в не зависимости от типа (datetime или smalldatetime)
Я предпочитаю на сервер оставлять пустые даты в виде NULL, а на клиенте:
переводить ее в пустую дату:
Код: plaintext
 NVL(TTOD(DDok), {})
С уважением, Алексей
...
Рейтинг: 0 / 0
23.01.2006, 13:29
    #33497192
Программизд 01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Glory
1) На стороне сервера - ORDER BY CAST(дата AS DATETIME)

Это называется - не дай серверу использовать индексы[/quot]

А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент.
...
Рейтинг: 0 / 0
23.01.2006, 13:34
    #33497204
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Программизд 01
А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент.
Именно для ORDER BY и необходим индекс по полю (выражению) сортировки.
Иначе, серверу придется сортировать данные "на лету". Это одна из самых "дорогих" операций. Посомотрите план выполнения запроса - сами все увидите.
С уважением, Алексей.
...
Рейтинг: 0 / 0
23.01.2006, 13:59
    #33497283
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Программизд 01 Glory
1) На стороне сервера - ORDER BY CAST(дата AS DATETIME)
Это называется - не дай серверу использовать индексы

А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент.
Не мне, а серверу. Про 99% случаев я бы тоже не говорил так уверенно.
Наличие ORDER BY в тексте запроса может привести к испольхованию индекса и в ходе выполнения запроса.
Например, выборка записей и их обработка могут осуществляться уже по индексу. Именно с той целью, чтобы не делать упорядочивание конечного результата
...
Рейтинг: 0 / 0
23.01.2006, 14:01
    #33497292
Программизд 01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Aleksey-K Программизд 01
А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент.
Именно для ORDER BY и необходим индекс по полю (выражению) сортировки.


Ну не скажите! А если у меня сто стобцов в таблице и теоритически сортироваться может каждый, то что прикажите делать ? Вешать индекс на каждый столбец ?

Aleksey-K
Иначе, серверу придется сортировать данные "на лету". Это одна из самых "дорогих" операций. Посомотрите план выполнения запроса - сами все увидите.
С уважением, Алексей.

Вот поэтому никогда ничего не сортирую на сервере, благо фокс позволяет это делать без проблем после получения итоговой выборки.
...
Рейтинг: 0 / 0
23.01.2006, 14:08
    #33497324
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дата в MSSQL
Программизд 01 Aleksey-K Программизд 01
А зачем вам использование индексов в order by ? В 99% случаев order by используется для сортировки результирующей выборки, которая потом попадает на клиент.
Именно для ORDER BY и необходим индекс по полю (выражению) сортировки.


Ну не скажите! А если у меня сто стобцов в таблице и теоритически сортироваться может каждый, то что прикажите делать ? Вешать индекс на каждый столбец ?

В любой системе всегда ищется компромисс.
Если вероятность выбора пользователем столбца для сортировки мала, то нет смысла тратить ресурсы для индекса.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дата в MSSQL / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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