Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Вниз

Не происходит удаление в базе данных ACCESS   Найти похожие ветки 

 
Iehbr   (2006-06-02 15:31) [0]

Выполняю такой код:

ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Append("DELETE * FROM Zayavki WHERE No = " + StringGrid1.Cells[0,StringGrid1.Row]);
ADOQuery1.ExecSQL;

Но ExecSQL выдает постоянно значение 0.
Не могу понять причину. Запись, которую я пытаюсь удалить существует и условию WHERE соответствует.
HELP....


 
Sergey13 ©   (2006-06-02 15:39) [1]

>Но ExecSQL выдает постоянно значение 0.

Это как?


 
Iehbr   (2006-06-02 15:46) [2]


> Sergey13 ©   (02.06.06 15:39) [1]
> >Но ExecSQL выдает постоянно значение 0.
>
> Это как?


var i : Integer;
...

i:=ADOQuery1.ExecSQL;

...

i всегда равна 0 - то бишь ничего не удалила, насколько я понимаю.

из справки: ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement.


 
Desdechado ©   (2006-06-02 15:51) [3]

> DELETE * FROM Zayavki
странный синтаксис какой-то


 
Iehbr   (2006-06-02 15:54) [4]

Почему странный? Я в SQL слабоват, подскажите чего не так?


 
Iehbr   (2006-06-02 15:58) [5]

Вот еще выдержка из хэлпа по JetSQL:
Синтаксис
DELETE [таблица.*]
   FROM таблица
   WHERE условиеОтбора


Вроде бы и у меня синтаксис такой же.


 
Desdechado ©   (2006-06-02 15:59) [6]

в стандарте никаких звездочек в DELETE не предусмотрено
может, ты давишь ошибку и потому ответ 0 ?


 
Iehbr   (2006-06-02 16:03) [7]

В приведенном в справке примере всё сделано также:

Sub DeleteX()
   Dim dbs As Database, rst As Recordset
   " Укажите в следующей строке путь к базе данных "Борей"
   " на вашем компьютере.
   Set dbs = OpenDatabase("Борей.mdb")
   " Удаляет записи о всех сотрудниках с должностью "Стажер".    
   dbs.Execute "DELETE * FROM " _
       & "Сотрудники WHERE Должность = "Стажер";"
   dbs.Close
End Sub


 
Iehbr   (2006-06-02 16:07) [8]

Такое чувство, что запрос на удаление не находит записи, соответствующей условию отбора. Глюк JetSQL?


 
sniknik ©   (2006-06-02 16:12) [9]

access не стандарт... понимает и так и так, а указание DELETE [таблица.*] FROM ... применяется для указания из какой таблицы удалять в сложных связанных (по join к примеру) запросах на удаление.

> Глюк JetSQL?
да, возможно, гдето на 0,02%...  99.98% за другую возможность...


 
Desdechado ©   (2006-06-02 16:12) [10]

может, ты ее уже удалил, а теперь пытаешься доудалить :?


 
Iehbr   (2006-06-02 16:12) [11]

Ошибок я не давлю, вот весь кусок кода:
if MessageDlg("Вы действительно хотите удалить заявку?",
   mtWarning, [mbYes, mbNo], 0) = mrYes then
 begin
   if StringGrid1.Cells[2,StringGrid1.Row] = WhoIsYou then
    begin
      ADOQuery1.Active := False;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Append("DELETE * FROM Zayavki WHERE No = " + StringGrid1.Cells[0,StringGrid1.Row]+";");
      ADOQuery1.ExecSQL;
      //GetDataFromMyBase;
    end else ShowMessage("Вы не можете удалить заявку, поданную не вами!");
 end;


 
Iehbr   (2006-06-02 16:18) [12]


> Desdechado ©   (02.06.06 16:12) [10]
> может, ты ее уже удалил, а теперь пытаешься доудалить :?
>


Нет, не удалил. :)
Делаю запрос на выборку SELECT * FROM ...
И вот она, передо мной...
Может быть эта запись - запись-МкКлауд? (неубиваемая).


 
Desdechado ©   (2006-06-02 16:24) [13]

Остается тогда неверно передаваемый код.
Если поле NO - символьное, то код должен быть в кавычках.
Иначе код 001, засунутый в такой запрос, интерпретируется как число, а потом неявно приводится к строке, отрезая лидирующие нули


 
Iehbr   (2006-06-02 16:28) [14]

Поле No - численный autoincrement.


 
Iehbr   (2006-06-02 16:31) [15]

Может быть хоть какие-нибудь предположения есть?


 
saxon   (2006-06-02 16:49) [16]

Ну скопируй полученную команду из дебагера и попробуй ее в access"е.
Посмотри что произойдет.


 
Iehbr   (2006-06-02 17:04) [17]


> saxon   (02.06.06 16:49) [16]
> Ну скопируй полученную команду из дебагера и попробуй ее
> в access"е.
> Посмотри что произойдет.


Спасибо. Чего-ж я раньше об этом не подумал.
Вот рабочий код:

ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Append("DELETE * FROM Zayavki WHERE Zayavki.[No] = " + StringGrid1.Cells[0,StringGrid1.Row]+";");
ADOQuery1.ExecSQL;


Всем спасибо.


 
saxon   (2006-06-02 17:06) [18]

Не в тему :
Из [11],
проверку
> if StringGrid1.Cells[2,StringGrid1.Row] = WhoIsYou then
надобы первой делать, а уж потом запрос на подтверждение юзеру.
Вот так и пишут Windows :)


 
Iehbr   (2006-06-02 17:40) [19]


> Вот так и пишут Windows :)

А как вы догадались, что я Windows пишу ??? :)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.08.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.01 c
6-1143130382
RusGl
2006-03-23 19:13
2006.08.06
idHTTP, SSL и Connection Closed Gracefully


2-1152875372
crazy_corpse
2006-07-14 15:09
2006.08.06
ВОПРОСЫ АЛГОРИТМОВ!


6-1143250745
Setor
2006-03-25 04:39
2006.08.06
Как завершить работу сетевого приложения?


2-1152941687
Urvin
2006-07-15 09:34
2006.08.06
Как прокрутить содержимое ListView


2-1153299112
Crazy monkey
2006-07-19 12:51
2006.08.06
Учет пользователей





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский