Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизУдаляет запись,но после выдает ошибку Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.507 c