Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Избавиться от NULL  [new]
Pulsar_p
Member

Откуда: Потому, что я с севера, что ли...
Сообщений: 1908
Ребята, может подскажет кто...
База на MS SQL, делаю выборку через SQLEXEC(). В возвращаемом курсоре попадают поля со значением NULL. Есть ли возможность избавиться от них одним махом?

Я вот такой костыль придумал:

***************************************************************************
PROCEDURE NETNULLAM
    PARAMETERS PRIEMBAZA
    SELESELE=SELE()
    SELECT (PRIEMBAZA)
    FCOUFCOU=FCOUNT()
    FOR I=1 TO FCOUFCOU
        NAMEPOLE=FIELD(I)
        TYPEPOLE=TYPE(FIELD(I))
        DO CASE
            CASE TYPEPOLE=[C]
                UPDATE &PRIEMBAZA SET &NAMEPOLE=[] WHERE &NAMEPOLE IS NULL
            CASE TYPEPOLE=[D]
                UPDATE &PRIEMBAZA SET &NAMEPOLE={} WHERE &NAMEPOLE IS NULL
            CASE TYPEPOLE=[L]
                UPDATE &PRIEMBAZA SET &NAMEPOLE=.F. WHERE &NAMEPOLE IS NULL
            CASE TYPEPOLE=[N]
                UPDATE &PRIEMBAZA SET &NAMEPOLE=0 WHERE &NAMEPOLE IS NULL
        ENDCASE
    ENDFOR
    SELECT (SELESELE)

***************************************************************************
но проблема в том, что если курсор большой, так эта конструкция долговасто работает.
Существует ли более "лёгкое" решение?
11 июл 14, 10:20    [16290342]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
Станислав С...кий
Guest
Pulsar_p,
Ну... Можно еще при запросе с сервера делать преобразования из Null в какое-либо значение...
Или при обработке курсора на клиенте вызывать NVL(<поле>, <значение при Null>)....
11 июл 14, 10:38    [16290477]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
Pulsar_p
Member

Откуда: Потому, что я с севера, что ли...
Сообщений: 1908
Станислав С...кий
Ну... Можно еще при запросе с сервера делать преобразования из Null в какое-либо значение...

Можно, конечно, да уж больно код громоздкий получается...

Или при обработке курсора на клиенте вызывать NVL(<поле>, <значение при Null>)....

Да, я пользуюсь такой конструкцией, но это все-таки частный случай, мне бы хотелось простое общее решение (если оно существует) что-то типа
SET NULL OFF
в некоем таком глобальном варианте.
11 июл 14, 10:51    [16290578]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
ping_09
Member

Откуда:
Сообщений: 270
Pulsar_p,

насколько я помню, то можно попробовать обернуть в самом запросе эти нуллы.

select iif(name1=.null.,"",name1) as name1 from table1
11 июл 14, 11:10    [16290710]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
ping_09
Member

Откуда:
Сообщений: 270
Pulsar_p,

тут всё зависит от того, к какому скуль-серверу Вы делаете запрос.
11 июл 14, 11:11    [16290715]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
ping_09
Member

Откуда:
Сообщений: 270
Pulsar_p,

сорри, невнимательно прочитал, Вы используете MS SQL. Его синтаксис я не знаю, но может это поможет:
тынц
11 июл 14, 11:15    [16290738]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
Pulsar_p
В возвращаемом курсоре попадают поля со значением NULL. Есть ли возможность избавиться от них одним махом?
Зачем?
...
Существует ли более "лёгкое" решение?
Не заниматься ерундой и научиться работать с null.
...
Pulsar_p
мне бы хотелось простое общее решение (если оно существует) что-то типа
SET NULL OFF
в некоем таком глобальном варианте.
А настройку типа SET .T. OFF не хочется? А SET 0 OFF? Или SET "" OFF? Чем значение null отличается от приведенных? Неумением некоторых работать с этим значением?
11 июл 14, 11:29    [16290821]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
Pulsar_p
Member

Откуда: Потому, что я с севера, что ли...
Сообщений: 1908
Sergey Sizov
В возвращаемом курсоре попадают поля со значением NULL. Есть ли возможность избавиться от них одним махом?
Зачем?

А вот зачем: базу я на скуль перевожу, и есть, скажем, на клиенте у меня такой критерий выборки:
IF cursor.mypole=.F.
бла-бла-бла...
ENDIF


С NULL и без NULL результат получается разный.
Перелопачивать все приложение нужно, меняя вышеуказанное на:
IF cursor.mypole=.F. OR cursor.mypole IS NULL
бла-бла-бла...
ENDIF

У меня сложные конструкции, пропустить боюсь, наступил уже на эти грабли. Мне бы на этапе формирования курсора хитренько почикать эти NULL'ы и дело с концом. Ан нет, костыльный огород городить приходится. И кто NULL придумал, жили ведь раньше без него.
11 июл 14, 14:23    [16292054]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
ping_09
Member

Откуда:
Сообщений: 270
Pulsar_p,

А почему бы сразу тогда не вытянуть в курсор всё без нуллов?
На истину не претендую, но идея , думаю, что понятна.
select * from my_table where my_field is not null
11 июл 14, 14:38    [16292169]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1547
Pulsar_p
Sergey Sizov
В возвращаемом курсоре попадают поля со значением NULL. Есть ли возможность избавиться от них одним махом?
Зачем?

А вот зачем: базу я на скуль перевожу
Тем более не надо заниматься ерундой. Кстати, на есть ли на скуле пустая дата? И если нет, то что будешь делать? Опять магические значения?
...
У меня сложные конструкции, пропустить боюсь, наступил уже на эти грабли. Мне бы на этапе формирования курсора хитренько почикать эти NULL'ы и дело с концом.
Размечтался. :) Впрочем. не ты первый, не ты и последний...
Ан нет, костыльный огород городить приходится.
Так не городи, а сделай сразу правильно.
И кто NULL придумал, жили ведь раньше без него.
Кто тебе такую чушь сказал? Он придуман еще до твоего рождения. И на скулях как раз он в полный рост используется. И твое нытье как раз выдает твое полное ламерство в теории баз данных.
11 июл 14, 14:46    [16292245]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
Pulsar_p
Member

Откуда: Потому, что я с севера, что ли...
Сообщений: 1908
ping_09
Pulsar_p,

А почему бы сразу тогда не вытянуть в курсор всё без нуллов?
На истину не претендую, но идея , думаю, что понятна.
select * from my_table where my_field is not null


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

Ладно, я так понял простого решения не существует, буду ковырять-лопатить.
Всем Большое спасибо за участие!
11 июл 14, 14:48    [16292271]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
Pulsar_p
Member

Откуда: Потому, что я с севера, что ли...
Сообщений: 1908
Sergey Sizov
.....И твое нытье как раз выдает твое полное ламерство в теории баз данных.


Не судите, да не судимы будете...
11 июл 14, 14:57    [16292349]     Ответить | Цитировать Сообщить модератору
 Re: Избавиться от NULL  [new]
ping_09
Member

Откуда:
Сообщений: 270
Pulsar_p
ping_09
Pulsar_p,

А почему бы сразу тогда не вытянуть в курсор всё без нуллов?
На истину не претендую, но идея , думаю, что понятна.
select * from my_table where my_field is not null


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

Ладно, я так понял простого решения не существует, буду ковырять-лопатить.
Всем Большое спасибо за участие!

Ну тогда используйте ISNULL() на клиенте да и всё тут.
11 июл 14, 14:58    [16292356]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить