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

Вниз

Удаляет запись,но после выдает ошибку   Найти похожие ветки 

 
John_Doe   (2006-02-20 16:16) [0]

Пишу вот что в Memo:
DELETE FROM Sample1 WHERE Id=4

Вот процедура на нажатии кнопки:
procedure TForm1.ButtonClick(Sender: TObject);
begin
   with ADOQuery do
     begin
       Close;
       SQL.Text:=Memo1.Lines.Text;
       Open;
     end;
end;

---------------------------
Debugger Exception Notification
---------------------------
Project SELECT.exe raised exception class EOleException with message "Current provider does not support returning multiple recordsets from a single execution". Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------

"Current provider does not support returning multiple recordsets from a single execution"
Смысл таков: “Данный вид драйвера не поддерживает возврат множества записей при одном выполнении”.

Честно сказать не особо пойму,где это возвращается несколько записей.
И потом запись-то он удаляет,но ошибку после удаления записи все равно выдает.
Непонятно.
Такого рода глюки у меня бывают и с другими инструкциями,когда работаю в SQL.
Может быть что данную версию SQL надо переустановить?
И как это сделать?

PS.Использую MS Access.


 
Ega23 ©   (2006-02-20 16:19) [1]


> Вот процедура на нажатии кнопки:
> procedure TForm1.ButtonClick(Sender: TObject);
> begin
>    with ADOQuery do
>      begin
>        Close;
>        SQL.Text:=Memo1.Lines.Text;
>        Open;
>      end;
> end;


Исправь на ExecSQL.


 
Sergey13 ©   (2006-02-20 16:21) [2]

2John_Doe   (20.02.06 16:16)
>Честно сказать не особо пойму,где это возвращается несколько записей.
Вот и провайдер не понимает. 8-)
Open для Select, для остального ExecSQL (или как там в АДО).


 
John_Doe   (2006-02-20 17:14) [3]

Спасибо,все отлично работает без ошибок.
Но увы после ExecSQL,Query почему-то не отображает данные  гриде.
И изменения видны только при следующем запуске. :/


 
Виталий Панасенко   (2006-02-20 17:20) [4]


> John_Doe   (20.02.06 17:14) [3]
> Спасибо,все отлично работает без ошибок.
> Но увы после ExecSQL,Query почему-то не отображает данные
>  гриде.
> И изменения видны только при следующем запуске. :/

Можно подумать, они были видны после возникновения ошибки...


 
John_Doe   (2006-02-20 17:26) [5]


> Можно подумать, они были видны после возникновения ошибки.
> ..

И что тогда предлагаете?


 
Рустем ©   (2006-02-20 17:28) [6]


> Но увы после ExecSQL,Query почему-то не отображает данные
>  гриде.
> И изменения видны только при следующем запуске.

Используй ADOQuery1 (для получения набора данных) и ADOQuery2 (для добавления, изменения, удаления записей). После команды ADOQuery2.ExecSQL добавь ADOQuery1.Requery


 
Виталий Панасенко   (2006-02-20 17:36) [7]


> John_Doe   (20.02.06 17:26) [5]
>
> > Можно подумать, они были видны после возникновения ошибки.
>
> > ..
>
> И что тогда предлагаете?

Я так понял, ты создаешь какую-то универсальную программу. На каком-то интересном языке: имеет один оператор, но позволяет писать гибкие программы. Что-то типа
Program Salary;
begin
  Execute;
end.
Хоп, есть прога по рассчету з/п
Program Sklad;
begin
  Execute;
end.
Хопа - складской учет
Program SkladPlusSalary;
begin
  Execute;
end.
Склад+З/п.
Ссылку дашь ?
По теме: писАть нужно, трудится.


 
Ega23 ©   (2006-02-20 17:40) [8]

Всё просто. Сделай 2 кнопки. Одна для открытия наборов данных (select), другая для выполнения команд (Insert, Update и Delete).


 
John_Doe   (2006-02-20 17:43) [9]


> Используй ADOQuery1 (для получения набора данных) и ADOQuery2
> (для добавления, изменения, удаления записей). После команды
> ADOQuery2.ExecSQL добавь ADOQuery1.Requery


procedure TForm1.Button1Click(Sender: TObject);
begin
   with ADOQuery1 do
     begin
       SQL.Text:=Memo1.Lines.Text;
       ExecSQL;
       Requery;
     end;
end;

Вот что выдает:
---------------------------
Debugger Exception Notification
---------------------------
Project SELECT.exe raised exception class EDatabaseError with message "ADOQuery1: Cannot perform this operation on a closed dataset". Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------
Никакой датасет я не закрывал.


 
Рустем ©   (2006-02-20 17:46) [10]


> John_Doe

Ты для получения набора данных и для выполнения команд по удалению, добавлению и т.д. используешь один компонент что ли?


 
John_Doe   (2006-02-20 17:48) [11]


> По теме: писАть нужно, трудится.

Слушай ей Богу меня уже достали клоуны вроде тебя,всегда в каждой ветке найдется кто-то.Странное дело,в жизни все такие вежливые,а вот в нете все язвят.
Знал бы как сделать,сделал бы сам.
Так как не знаю,то обращаюсь к людям на форуме.

> Всё просто. Сделай 2 кнопки.

Спасибо так и поступлю.


 
msguns ©   (2006-02-20 17:49) [12]

А почитать хэлпы по ADO и разобраться вместо тупого перебора всех предлагаемых вариантов без учета контекстов, в которых они предлагались ?


 
John_Doe   (2006-02-20 17:50) [13]


> Ты для получения набора данных и для выполнения команд по
> удалению, добавлению и т.д. используешь один компонент что
> ли?

В смысле SQL только начал изучать,и увы стандартов написания кода не знаю.


 
Виталий Панасенко   (2006-02-20 17:50) [14]


> John_Doe   (20.02.06 17:43) [9]
>
> > Используй ADOQuery1 (для получения набора данных) и ADOQuery2
>
> > (для добавления, изменения, удаления записей). После команды
>
> > ADOQuery2.ExecSQL добавь ADOQuery1.Requery
>
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
>    with ADOQuery1 do
>      begin
>        SQL.Text:=Memo1.Lines.Text;
>        ExecSQL;
>        Requery;
>      end;
> end;
>
> Вот что выдает:
> ---------------------------
> Debugger Exception Notification
> ---------------------------
> Project SELECT.exe raised exception class EDatabaseError
> with message "ADOQuery1: Cannot perform this operation on
> a closed dataset". Process stopped. Use Step or Run to continue.
>
> ---------------------------
> OK   Help  
> ---------------------------
> Никакой датасет я не закрывал.

Ты что, стебаешься ? Человек тебе
> Рустем ©   (20.02.06 17:28) [6]
>
> > Но увы после ExecSQL,Query почему-то не отображает данные
>
> >  гриде.
> > И изменения видны только при следующем запуске.
>
> Используй ADOQuery1 (для получения набора данных) и ADOQuery2
> (для добавления, изменения, удаления записей). После команды
> ADOQuery2.ExecSQL добавь ADOQuery1.Requery

все разжевал. И на счет
> Такого рода глюки у меня бывают и с другими инструкциями,
> когда работаю в SQL.
> Может быть что данную версию SQL надо переустановить?
> И как это сделать?
- лучше почитай чего-нибудь. В принципе. "Графа Монте-Кристо", например...


 
John_Doe   (2006-02-20 17:52) [15]


> А почитать хэлпы по ADO и разобраться вместо тупого перебора
> всех предлагаемых вариантов без учета контекстов, в которых
> они предлагались ?

В этой книге все выполняется при помощи Open.
Автор:Андрей Сорокин "Delphi разработка баз данных"


 
John_Doe   (2006-02-20 17:53) [16]

Еще раз спасибо всем.
Попробую так.
Если не получится,загляну.


 
Ega23 ©   (2006-02-20 17:54) [17]


> В смысле SQL только начал изучать,и увы стандартов написания
> кода не знаю.
>


Дело не в стандартах. Есть гм... "запросы", которые возвращают набор данных. Он может состоять из одного поля, может быть пустым. Но, тем не менее, это набор данных. И делает это команда Select.
Также есть команды, которые никогда не возвращают данных. К ним относятся Insert, Update и Delete.
Ими можно комбинировать, например в хранимых процедурах. Но если разобрать исходник хранимой процедуры, то всё равно, в конечном итоге, будет всего 4 команды - Insert, Update, Delete и Select.
Так вот, Делфи так устроен, что для возвращения набора данных надо вызывать метод TDataSet.Open.
А для всез остальных - TdataSet.ExecSQL


 
Виталий Панасенко   (2006-02-20 17:55) [18]


> John_Doe   (20.02.06 17:48) [11]
>
> > По теме: писАть нужно, трудится.
>
> Слушай ей Богу меня уже достали клоуны вроде тебя,всегда
> в каждой ветке найдется кто-то.Странное дело,в жизни все
> такие вежливые,а вот в нете все язвят.
> Знал бы как сделать,сделал бы сам.
> Так как не знаю,то обращаюсь к людям на форуме.

На счет клоунов - в зеркало глянь... :-)) Я просто веселый человек. По натуре. + дочка на днях родилась


 
John_Doe   (2006-02-20 18:13) [19]


> По натуре. + дочка на днях родилась

Поздравляю!
Здоровья ей и счастья в будущем.

> На счет клоунов - в зеркало глянь... :-))

Я сделаю вид что не заметил этого.

> - лучше почитай чего-нибудь. В принципе. "Графа Монте-Кристо",
>  например...

Уже читал.
Больше люблю С.Лема,и всю научную фантастику.

> Так вот, Делфи так устроен, что для возвращения набора данных
> надо вызывать метод TDataSet.Open.
> А для всез остальных - TdataSet.ExecSQL

Ааа...
Поэтому он мне выдавал ошибку о том,что неможет вернуть сразу несколько записей.


 
John_Doe   (2006-02-20 18:29) [20]

А если в одном запросе есть и SELECT и DELETE,то что использовать?
Скажем:

DELETE
FROM Поставки
WHERE ПС IN
    (SELECT  ПС
     FROM    Поставщики
     WHERE   Город = "Баку")


 
Ega23 ©   (2006-02-20 18:32) [21]


> А если в одном запросе есть и SELECT и DELETE,то что использовать?
>
> Скажем:
>


Это нормально, т.к. select - вложенный.


 
Виталий Панасенко   (2006-02-21 10:42) [22]


> John_Doe   (20.02.06 18:29) [20]
> А если в одном запросе есть и SELECT и DELETE,то что использовать?
>
> Скажем:
>
> DELETE
> FROM Поставки
> WHERE ПС IN
>     (SELECT  ПС
>      FROM    Поставщики
>      WHERE   Город = "Баку")

Это аналогично
DELETE
FROM Поставки
WHERE ПС=1 [or ПС=2 or...or ПС=N]



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

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.045 c
5-1126918562
rosl
2005-09-17 04:56
2006.03.12
иконка


15-1139893971
Думкин
2006-02-14 08:12
2006.03.12
Марсеру 20 лет.


2-1140589417
Bratskiy
2006-02-22 09:23
2006.03.12
Почему не выводится текст?


1-1138785708
Kolan
2006-02-01 12:21
2006.03.12
Байт стаффинг. Алгоритм.


15-1140025618
mr. Den
2006-02-15 20:46
2006.03.12
Люди ! Хелпь, плиз !