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

Вниз

Не происходит удаление в базе данных 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.042 c
15-1152265095
Jeer
2006-07-07 13:38
2006.08.06
бизнес не удовлетворен уровнем подготовки выпускников вузов


2-1152982542
Призрак
2006-07-15 20:55
2006.08.06
Form1.FormStyle:=fsStayOnTop


2-1153341775
userrrrr
2006-07-20 00:42
2006.08.06
Подключение к сети


15-1152220521
Guest06
2006-07-07 01:15
2006.08.06
Драйвер к Web камере


4-1144268716
polyarnik
2006-04-06 00:25
2006.08.06
Открыть Открытый COM порт