Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
4-37976
dar
2003-11-10 09:52
2004.01.13
Раскладка клавиатуры


3-37570
Alex_x
2003-12-17 13:45
2004.01.13
DBtree


1-37676
ГС ТОФ
2003-12-26 14:17
2004.01.13
Exel


14-37855
Ермек
2003-12-23 01:28
2004.01.13
Руссифицированный IbExpert


1-37700
Frogkiller
2003-12-25 22:52
2004.01.13
Ошибка при запуске потока





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский