Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не происходит удаление в базе данных ACCESS [D6, ACCESS]


Iehbr ©   (2006-06-02 15:31:00) 

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

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....


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


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

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


saxon   (2006-06-02 17:06:00) [2]

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


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


> 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 16:49:00) [4]

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


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

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


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

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


Desdechado   (2006-06-02 16:24:00) [7]

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


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


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


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


Desdechado   (2006-06-02 16:12:00) [9]

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


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

Ошибок я не давлю, вот весь кусок кода:
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;


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

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

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


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

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


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

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

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


Desdechado   (2006-06-02 15:59:00) [14]

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


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

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


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


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

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


Desdechado   (2006-06-02 15:51:00) [17]

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


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


> 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.


Sergey13   (2006-06-02 15:39:00) [19]

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

Это как?


Наверх

Титульная страница Поиск, карта сайта Написать письмо