Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];
ВнизSQL запрос - UPDATE Найти похожие ветки
← →
Aleksf (2003-12-12 21:46) [0]Помогите плиз начинающему, не могу понять почему не происходит обновления при 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
Заранее благодарен, Алек.
← →
sniknik (2003-12-12 23:28) [1]второй апдейт в пакете явно лишний.
← →
Hawk2 (2003-12-12 23:35) [2]>Также, возникают проблемы при использовании метода
>Query1.Open вместо Query1.ExecSQL... выскакивает ошибка "Error >creating cursor handle".
Метод Open нужно вызывать при выборке SELECT, а при INSERT, UPDATE и DELETE нужно вызывать метод ExecSQL.
← →
Aleksf (2003-12-13 11:25) [3]sniknik: да, лишний
Hawk2: при использовании ExecSQL для UPDATE все проходит без ошибок, но данные не заносятся (не обновляются), но зато без ошибок. Почему не заносятся? может я чего забыл допистать?
← →
sniknik (2003-12-13 11:38) [4]> но данные не заносятся (не обновляются), но зато без ошибок
без ошибок значит запрос верный получился
не обновляется, а условие срабатывает ->
WHERE field1 is null ?
если с SELECT - ом его небось пустой рекордсет выдает.
может у тебя там пустые строки вместо null - ов
сделай условие другим
WHERE DATALENGTH(RTRIM(field1)) = 0
(трим можно убрать, но только не всегда строка пустая даже если ты туда явно "" внес (зависит от того как поле создано))
← →
Aleksf (2003-12-13 22:02) [5]sniknik
нет, поле из начала null, поэтому условие у меня "... is null"
может дело еще в чем нить?
если не трудно, попробуй у себя использовать простой пример с этим Query и UPDATE, если у тебя получится, то пришли кусок кода, может я не так что-то делаю...
← →
Aleksf (2003-12-13 22:07) [6]sniknik
кстати, я работаю без использования DBNavigator, а данные меняю через обычный TEdit
а запрос "SELECT * FROM table1 WHERE field1 is null" проходит отлично. И через консоль запрос UPDATE работает отлично, но вот из Delphi с Query не хочет... (((
← →
sniknik (2003-12-13 23:20) [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? а ведь ложили одно и тоже "" одинаковой длинны.
← →
Наталия (2003-12-14 07:55) [8]Попробуй вместо явного указания значения в запросе передать его параметром. Может, там что-нибудь с кавычками?
← →
JibSkeart (2003-12-14 11:09) [9]кстати а если у иебя будет несколко пустых значений ,
то они все изменятся на 123
или тебе так и надо ?
← →
Aleksf (2003-12-14 17:01) [10]JibSkeart: да, так мне и нужно, это просто пример я привел
Наталия: кавычки ставятся если Requestlive=True, а у меня он False
← →
sniknik (2003-12-14 19:24) [11]> кавычки ставятся если Requestlive=True, а у меня он False
бред какой. не поделишся источником сего?
особенно учитывая что update не возвращает рекордсет, и следовательно что true что false ему совершенно параллельно.
Наталия © (14.12.03 07:55) [8]
кавычки в этом случае, (в запросе, MSSQL) правильны ""-строка, "" или [] указание что это имя поля (с пробелами и т.д. если сразу не понять что это имя поля, надо ставить)
← →
ЮЮ (2003-12-15 02:49) [12]>но данные не заносятся (не обновляются)
Откуда такое мнение?
Добавь после ExecSQL
Application.MessageBox(IntToStr(Query1.RowsAffected),"Records updated(Query1)", 0);
и лишь затем утверждай, что ничего не изменяется
← →
Aleksf (2003-12-15 20:34) [13]tnx 4 all
все заработало!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c