Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.061 c
2-1140525190
Wel
2006-02-21 15:33
2006.03.12
TImage


6-1132918760
Dimedrol
2005-11-25 14:39
2006.03.12
Как выставить TwebBrowser-у UTF-8 кодировку ?


2-1140570136
Bogdan1024
2006-02-22 04:02
2006.03.12
Скомандовать виндовс открыть файл.


15-1139931163
Knight
2006-02-14 18:32
2006.03.12
Что делать с трояном?


2-1140608067
sydenis
2006-02-22 14:34
2006.03.12
что-то ibx не рулит





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский