powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление даты рождения в поле типа дата, если значение NULL
8 сообщений из 8, страница 1 из 1
Добавление даты рождения в поле типа дата, если значение NULL
    #37124984
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день! Есть вопрос.
Добавляю новую запись из временной таблицы Clnt в таблицу Clients на сервере в поле dt_birth (дата рождения),
если значение NULL, то добавление не происходит:

если есть значение - происходит добавление:
Код: plaintext
1.
2.
3.
SET DATE YMD
lcDt_birth= CHRTRAN(DTOC(Clnt.dt_birth),'/','-')
lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES('&lcDt_birth')")

если значение равно NULL, то не добавляет:
Код: plaintext
1.
2.
lcDt_birth= 'NULL'
lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES('&lcDt_birth')")

а вот так - добавляет:
Код: plaintext
1.
2.
lcDt_birth= 'NULL'
lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES(&lcDt_birth)")

что-то не пойму, что может быть не правильно?


Среда: 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)
...
Рейтинг: 0 / 0
Добавление даты рождения в поле типа дата, если значение NULL
    #37125047
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и где вы траву берете?

ну если хочется руками сервер трясти, то

Код: plaintext
1.
2.
3.
ldDate = Clnt.dt_birth
lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES(?ldDate)")


не работатет?


так, замеждупрочим:
- что такое курсорадаптер знаете?
- почему не используете?
...
Рейтинг: 0 / 0
Добавление даты рождения в поле типа дата, если значение NULL
    #37125083
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Сергей Мирный
> если есть значение - происходит добавление:
> 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
MessageBox(Message())

> а вот так - добавляет:
> lcDt_birth= 'NULL'
> lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES(&lcDt_birth)")

потому, что срабатывает макроподстановка и в таблицу вставляется значение NULL, а не строка, как в предыдущем случае.

Вообще-то в параметрах запроса рекомендуют использовать символ "знак вопроса". Он показывает, что значение переменной
нужно брать из фокса и подставлять в запрос. Т.е. у тебя не было-бы никаких проблем, если использовать так:
Код: plaintext
1.
2.
3.
4.
lcDt_birth= Clnt.dt_birth
lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES(?lcDt_birth)")

lcDt_birth= NULL
lnResult= SQLEXEC(gnConnHandle, "INSERT INTO clients (dt_birth) VALUES(?lcDt_birth)")


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Добавление даты рождения в поле типа дата, если значение NULL
    #37125832
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Игорь Горбонос

к чему весь бред?

Вы для себя на стенке запишите вначале,
что в венгерской нотации
обозвать лок-ю переменную lcDt_birth-
страшная ошиПка.

"Вообще-то"

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

а так,- если также трясете сервер безумством - для себя откройте еще ф-ю dtos()

только возникает вопрос зачем?
...
Рейтинг: 0 / 0
Добавление даты рождения в поле типа дата, если значение NULL
    #37127306
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь, спасибо! Всё заработало.

И всем спасибо за ценные замечания.

С уважением, Сергей
...
Рейтинг: 0 / 0
Добавление даты рождения в поле типа дата, если значение NULL
    #37127365
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот выяснилось ещё следующее:

При прямом использовании вставки записи с помощью функции SQLEXEC() функция SCOPE_IDENTITY() срабатывает по разному:

в данном случае функция SCOPE_IDENTITY() и системная переменная @@IDENTITY возвращают разные значения поля id_client в таблице clients, имеющее свойство IDENTITY:
т.е. id_client=2554 (возвратила @@IDENTITY), а фнукция SCOPE_IDENTITY() возвращает пусто (и не ноль, хотя поле числовое: N 20,0):
Код: plaintext
1.
2.
3.
4.
lcFio= ‘Петров’
?SQLEXEC(gnConnHandle, "INSERT INTO clients (fio) VALUES('&lcFio')")
?SQLEXEC(gnConnHandle, "SELECT SCOPE_IDENTITY() as new_id", "ClNewId")
?SQLEXEC(gnConnHandle, "SELECT @@IDENTITY as new_id ", "ClNewId2")

а в этом случае функция SCOPE_IDENTITY() и системная переменная @@IDENTITY возвращают новое значение поля в таблице clients, имеющее свойство IDENTITY:
Код: plaintext
1.
2.
3.
?SQLEXEC(gnConnHandle, "INSERT INTO clients (fio) VALUES(?lcFio)")
?SQLEXEC(gnConnHandle, "SELECT SCOPE_IDENTITY()as new_id ", "ClNewId")
?SQLEXEC(gnConnHandle, "SELECT @@IDENTITY as new_id ", "ClNewId2")

Получается, что в обоих случаях добавление происходит, однако в первом случае функция SCOPE_IDENTITY() не может определить новое значение.
Сообщение Владимира Максимова прочитал (о работе данной функции) – спасибо, понятно.

Но почему в первом случае добавления не происходит ?
...
Рейтинг: 0 / 0
Добавление даты рождения в поле типа дата, если значение NULL
    #37127410
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей МирныйНо почему в первом случае добавления не происходит ?

1. Вы в курсе того, что результат выполнения каждой команды
нужно проверять?

т.е. блок команд должен быть оформлен с проверками примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  
  if sqlexec(lnConn? lcCmd)> 0 
     if sqlexec(lnConn? lcCmd)> 0 
       ....  
  else
     messageb("бага")
  endif


2. Почему Вы не используете курсорадаптер?
...
Рейтинг: 0 / 0
Добавление даты рождения в поле типа дата, если значение NULL
    #37127417
Сергей Мирный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот немного прояснилось:

если прописать в одной строке, то функция SCOPE_IDENTITY() возвращает значение:

?SQLEXEC(gnConnHandle, 'INSERT INTO clients (fio) VALUES(?lcFio) SELECT nNewId=SCOPE_IDENTITY()', 'ClNewId')
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Добавление даты рождения в поле типа дата, если значение NULL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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