|
Запрос DELETE
|
|||
---|---|---|---|
#18+
Добрый вечер. Почему при удалении просит выбрать таблицу? авторDELETE * FROM drivers WHERE (drivers.pasp=thisform.pageframe1.page3.text1.Value) OR (drivers.fio=thisform.pageframe1.page3.combo1.Value) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2014, 21:22 |
|
Запрос DELETE
|
|||
---|---|---|---|
#18+
В другой таблице почему-то запись не удаляется. Запрос: авторDELETE FROM way WHERE way.idm=VAL(thisform.pageframe1.page2.combo1.Value) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2014, 21:43 |
|
Запрос DELETE
|
|||
---|---|---|---|
#18+
А, нет все работает (2 пост) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2014, 21:48 |
|
Запрос DELETE
|
|||
---|---|---|---|
#18+
Не могу разобраться с 1 постом. Если удаляю так, без звездочки, он почему-то удаляет все записи. авторDELETE FROM drivers WHERE (drivers.pasp=thisform.pageframe1.page3.text1.Value) OR (drivers.fio=thisform.pageframe1.page3.combo1.Value) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2014, 22:04 |
|
Запрос DELETE
|
|||
---|---|---|---|
#18+
Это вопрос сравнения символьных строк. В частности, сравнения с пустой строкой. Дело в том, что по умолчанию, любое сравнение символьных строк выполняется до окончания символов в самой короткой из сравниваемых строк. Ну, а раз пустая строка имеет нулевую длину, то, по факту, имеем, что пустая строка равна любому значению. В частности, у Вас имеется Код: sql 1. 2. 3. 4.
Вот первое условие (drivers.pasp="") и выполняется всегда. Поскольку объединение условий через OR, то это означает истинность условий для вообще всех записей Решений проблемы несколько Вариант 1 - формировать условие в зависимости от введенных данных через макроподстановку Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Вариант 2 - дополнять символьные строки концевыми пробелами до некоторой фиксированной длины Код: sql 1. 2. 3. 4. 5.
Разумеется, число 10 - условно. Здесь надо подставить число, равное размерности полей drivers.pasp и drivers.fio соответственно Вариант 3 - использовать глобальную настройку SET ANSI Глобальная настройка SET ANSI определяет способ сравнения символьных строк в рамках команд Select-SQL. Глобально. Для всех команд Select-SQL в рамках текущего сеанса данных Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Решение крайне рискованное, поскольку Вы меняете глобальную настройку для решения локальных задач. А это требует особой аккуратности в использовании. Крайне не рекомендуется применять такое решение новичкам Вариант 4 - использовать выражение тождественного равенства (два символа равно подряд) Код: sql 1. 2. 3. 4. 5.
Сравнение на тождественное равенство работает как "локальная" настройка SET ANSI ON, действующая в рамках одного конкретного сравнения. В этом случае символьные строки сначала дополняются концевыми пробелами до одинаковой длины и только потом сравниваются. Здесь "тонкость" заключается в том, что прежде, чем выполнить сравнение, необходимо отсечь возможные ведущие пробелы. Поскольку Вы вводите значение через объекты формы, то наличие ведущих пробелов вещь достаточно обычная. Впрочем, отсечение ведущих пробелов необходимо выполнять в любом из вариантов сравнения. ============================================================= PS: Почему Delete * вызывает диалог выбора таблицы? "Если ничего не помогает, попробуйте прочитать инструкцию" В данном случае справку по команде Delete-SQL Код: sql 1.
После ключевого слова DELETE либо сразу следует ключевое слово FROM, либо имя таблицы, из которой и выполняется удаление. А если вместо имени таблицы указать звездочку, то это и есть необходимость указания списка таблиц, чтобы пользователь выбрал, из чего же он удалять собирается. Чтобы избежать появления списка для выбора, Вы должны явным образом указать из какой таблицы будет происходить удаление DELETE FROM drivers или так DELETE drivers FROM drivers ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2014, 14:57 |
|
|
start [/forum/topic.php?fid=41&fpage=32&tid=1582653]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 162ms |
0 / 0 |