![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не происходит удаление в базе данных 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.
Это как?