Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.054 c
1-37701
DimaK
2003-12-24 22:50
2004.01.13
В чем моя ошибка?


6-37827
AlexanderSK
2003-11-10 16:54
2004.01.13
Несколько HTTP запросов один за одним


6-37830
PVOzerski
2003-11-10 13:14
2004.01.13
Управление Internet Explorer


3-37537
DimonNew
2003-12-17 14:07
2004.01.13
ADO без DSN (Paradox, dBase, FoxPro, Access)


6-37828
Денисыч
2003-11-11 13:49
2004.01.13
Ошибка 12018