![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос - UPDATE [D7, MSSQL]
Aleksf © (2003-12-12 21:46:00)
Помогите плиз начинающему, не могу понять почему не происходит обновления при SQL запросе (работаю из под Delphi с БД MSSQL):
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("UPDATE table1 SET");
Query1.SQL.Add("field1=""123""");
Query1.SQL.Add("WHERE field1 is null");
Query1.SQL.Add("UPDATE table1");
Query1.ExecSQL;
при выполнении такого кода все проходит без ошибок, но данные не заносятся в таблицу (не меняются).
если я использую "INSERT, "SELECT" или "DELETE" в Query1, то все проходит без проблем, а с "UPDATE" ничего не получается.
Также, возникают проблемы при использовании метода
Query1.Open вместо Query1.ExecSQL... выскакивает ошибка "Error creating cursor handle".
В консоли UPDATE работает отлично, но из под Delphi не желает работать...
Помогите плиз разобраться с этим!!!
Пишите на мыло, т.к. с инетом проблемы
aleksf@mail.ru
Заранее благодарен, Алек.
Aleksf (2003-12-15 20:34:00) [1]
tnx 4 all
все заработало!
ЮЮ (2003-12-15 02:49:00) [2]
>но данные не заносятся (не обновляются)
Откуда такое мнение?
Добавь после ExecSQL
Application.MessageBox(IntToStr(Query1.RowsAffected),"Records updated(Query1)", 0);
и лишь затем утверждай, что ничего не изменяется
sniknik (2003-12-14 19:24:00) [3]
> кавычки ставятся если Requestlive=True, а у меня он False
бред какой. не поделишся источником сего?
особенно учитывая что update не возвращает рекордсет, и следовательно что true что false ему совершенно параллельно.
Наталия © (14.12.03 07:55) [8]
кавычки в этом случае, (в запросе, MSSQL) правильны ""-строка, "" или [] указание что это имя поля (с пробелами и т.д. если сразу не понять что это имя поля, надо ставить)
Aleksf (2003-12-14 17:01:00) [4]
JibSkeart: да, так мне и нужно, это просто пример я привел
Наталия: кавычки ставятся если Requestlive=True, а у меня он False
JibSkeart (2003-12-14 11:09:00) [5]
кстати а если у иебя будет несколко пустых значений ,
то они все изменятся на 123
или тебе так и надо ?
Наталия (2003-12-14 07:55:00) [6]
Попробуй вместо явного указания значения в запросе передать его параметром. Может, там что-нибудь с кавычками?
sniknik (2003-12-13 23:20:00) [7]
> а запрос "SELECT * FROM table1 WHERE field1 is null" проходит отлично
значит и UPDATE должен.
или (если селект пустой) условие неверное. вариантов нет (если не хочеш проверить на пустые строки).
> если не трудно, попробуй у себя использовать простой пример с этим Query и UPDATE, если у тебя получится, то пришли кусок кода
мне незачем это еще раз пробовать пробовал сотню раз, это работает
UPDATE table1
SET field1="123"
WHERE field1 is null
а вот это всетаки проверь (прямо пакетом) ибо вижу непонял ты меня в прошлый раз
CREATE TABLE Table1 (ID INT Identity (1, 1), Field1 Char(10),Field2 VarChar(20), I INT)
INSERT INTO Table1 (I) VALUES (1)
UPDATE table1 SET field1="", field2=""
SELECT DATALENGTH(field1) AS Fil1, DATALENGTH(field2) AS Fil2 FROM Table1
чему Fil1 и Fil2? а ведь ложили одно и тоже "" одинаковой длинны.
Aleksf (2003-12-13 22:07:00) [8]
sniknik
кстати, я работаю без использования DBNavigator, а данные меняю через обычный TEdit
а запрос "SELECT * FROM table1 WHERE field1 is null" проходит отлично. И через консоль запрос UPDATE работает отлично, но вот из Delphi с Query не хочет... (((
Aleksf (2003-12-13 22:02:00) [9]
sniknik
нет, поле из начала null, поэтому условие у меня "... is null"
может дело еще в чем нить?
если не трудно, попробуй у себя использовать простой пример с этим Query и UPDATE, если у тебя получится, то пришли кусок кода, может я не так что-то делаю...
sniknik (2003-12-13 11:38:00) [10]
> но данные не заносятся (не обновляются), но зато без ошибок
без ошибок значит запрос верный получился
не обновляется, а условие срабатывает ->
WHERE field1 is null ?
если с SELECT - ом его небось пустой рекордсет выдает.
может у тебя там пустые строки вместо null - ов
сделай условие другим
WHERE DATALENGTH(RTRIM(field1)) = 0
(трим можно убрать, но только не всегда строка пустая даже если ты туда явно "" внес (зависит от того как поле создано))
Aleksf (2003-12-13 11:25:00) [11]
sniknik: да, лишний
Hawk2: при использовании ExecSQL для UPDATE все проходит без ошибок, но данные не заносятся (не обновляются), но зато без ошибок. Почему не заносятся? может я чего забыл допистать?
Hawk2 (2003-12-12 23:35:00) [12]
>Также, возникают проблемы при использовании метода
>Query1.Open вместо Query1.ExecSQL... выскакивает ошибка "Error >creating cursor handle".
Метод Open нужно вызывать при выборке SELECT, а при INSERT, UPDATE и DELETE нужно вызывать метод ExecSQL.
sniknik (2003-12-12 23:28:00) [13]
второй апдейт в пакете явно лишний.