|
Добавление даты рождения в поле типа дата, если значение NULL
|
|||
---|---|---|---|
#18+
Добрый день! Есть вопрос. Добавляю новую запись из временной таблицы Clnt в таблицу Clients на сервере в поле dt_birth (дата рождения), если значение NULL, то добавление не происходит: если есть значение - происходит добавление: Код: plaintext 1. 2. 3.
если значение равно NULL, то не добавляет: Код: plaintext 1. 2.
а вот так - добавляет: Код: plaintext 1. 2.
что-то не пойму, что может быть не правильно? Среда: VFP9.0+SP1 Сервер: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 5.2 <X64> (Build 3790: Service Pack 2) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2011, 16:00 |
|
Добавление даты рождения в поле типа дата, если значение NULL
|
|||
---|---|---|---|
#18+
и где вы траву берете? ну если хочется руками сервер трясти, то Код: plaintext 1. 2. 3.
не работатет? так, замеждупрочим: - что такое курсорадаптер знаете? - почему не используете? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2011, 16:17 |
|
Добавление даты рождения в поле типа дата, если значение NULL
|
|||
---|---|---|---|
#18+
> Автор: Сергей Мирный > если есть значение - происходит добавление: > lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES('&lcDt_birth')") Потому, что происходит неявная конвертация строки в дату > если значение равно NULL, то не добавляет: > lcDt_birth= 'NULL' > lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES('&lcDt_birth')") Потому, что неявная конвертация строки в дату обламывается и попытка вставить строку "NULL" в полу типа дата не происходит и возвращается ошибка, которую моюно посмотреть вызвав: Код: plaintext
> а вот так - добавляет: > lcDt_birth= 'NULL' > lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES(&lcDt_birth)") потому, что срабатывает макроподстановка и в таблицу вставляется значение NULL, а не строка, как в предыдущем случае. Вообще-то в параметрах запроса рекомендуют использовать символ "знак вопроса". Он показывает, что значение переменной нужно брать из фокса и подставлять в запрос. Т.е. у тебя не было-бы никаких проблем, если использовать так: Код: plaintext 1. 2. 3. 4.
Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2011, 16:30 |
|
Добавление даты рождения в поле типа дата, если значение NULL
|
|||
---|---|---|---|
#18+
2 Игорь Горбонос к чему весь бред? Вы для себя на стенке запишите вначале, что в венгерской нотации обозвать лок-ю переменную lcDt_birth- страшная ошиПка. "Вообще-то" для того, чтобы не было такого безумия - необходимо использовать абстрактные классы, которые облегчают жизнь разработчику. а так,- если также трясете сервер безумством - для себя откройте еще ф-ю dtos() только возникает вопрос зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2011, 08:12 |
|
Добавление даты рождения в поле типа дата, если значение NULL
|
|||
---|---|---|---|
#18+
Игорь, спасибо! Всё заработало. И всем спасибо за ценные замечания. С уважением, Сергей ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2011, 07:28 |
|
Добавление даты рождения в поле типа дата, если значение NULL
|
|||
---|---|---|---|
#18+
Вот выяснилось ещё следующее: При прямом использовании вставки записи с помощью функции SQLEXEC() функция SCOPE_IDENTITY() срабатывает по разному: в данном случае функция SCOPE_IDENTITY() и системная переменная @@IDENTITY возвращают разные значения поля id_client в таблице clients, имеющее свойство IDENTITY: т.е. id_client=2554 (возвратила @@IDENTITY), а фнукция SCOPE_IDENTITY() возвращает пусто (и не ноль, хотя поле числовое: N 20,0): Код: plaintext 1. 2. 3. 4.
а в этом случае функция SCOPE_IDENTITY() и системная переменная @@IDENTITY возвращают новое значение поля в таблице clients, имеющее свойство IDENTITY: Код: plaintext 1. 2. 3.
Получается, что в обоих случаях добавление происходит, однако в первом случае функция SCOPE_IDENTITY() не может определить новое значение. Сообщение Владимира Максимова прочитал (о работе данной функции) – спасибо, понятно. Но почему в первом случае добавления не происходит ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2011, 08:47 |
|
Добавление даты рождения в поле типа дата, если значение NULL
|
|||
---|---|---|---|
#18+
Сергей МирныйНо почему в первом случае добавления не происходит ? 1. Вы в курсе того, что результат выполнения каждой команды нужно проверять? т.е. блок команд должен быть оформлен с проверками примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
2. Почему Вы не используете курсорадаптер? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2011, 09:24 |
|
Добавление даты рождения в поле типа дата, если значение NULL
|
|||
---|---|---|---|
#18+
Вот немного прояснилось: если прописать в одной строке, то функция SCOPE_IDENTITY() возвращает значение: ?SQLEXEC(gnConnHandle, 'INSERT INTO clients (fio) VALUES(?lcFio) SELECT nNewId=SCOPE_IDENTITY()', 'ClNewId') ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2011, 09:27 |
|
|
start [/forum/topic.php?fid=41&msg=37124984&tid=1584544]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
237ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 618ms |
0 / 0 |