Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление строки в ADOQuery через SQL - Немогу удалить [D7]


koha ©   (2006-12-12 13:25:00) 

Удаление строки в ADOQuery через SQL - запрос
Цель удаление нескольких записей в соподченённой связаной таблице

DELETE FROM MainTabl
WHERE LinkToName=Fkey

- Запрос возвращает несколько записей, но удалять отказывается происходит ошибка: Типа провайдер не поддерживает режим удаления для нескольких записей.

Как это можно преодолеть?


ЮЮ   (2006-12-15 10:31:00) [1]


> (и путает именно тех ради кого вроде бы они и делались,
> типа облегчить переход/сделать одинаково)


Можно подумать, в БДЕ с TQuery Open для такого запроса прошел бы без ошибки :)

> в ADO вообще очень четкое разграничение на команды возвращающие
> данные (ADODataSet), и не возвращающие(ADOCommand). борланд
> же своими

ADOCommand и ADODataSet - это не какое-то там ADO, а ADO от борланд.
Причем  ADOCommand.Execute не метод, а функция, возвращающая, как ни странно _Recordset:
 function Execute: _Recordset; overload;

А на примере TADOConnrction  это ещё нагляднее видно:

procedure TADOConnection.Execute(const CommandText: WideString;
 var RecordsAffected: Integer; const ExecuteOptions: TExecuteOptions = [eoExecuteNoRecords]);
var
 VarRecsAffected: OleVariant;
begin
 CheckActive;
  ConnectionObject.Execute(CommandText, VarRecsAffected,
   adCmdText+ExecuteOptionsToOrd(ExecuteOptions));
 RecordsAffected := VarRecsAffected;
end;

function TADOConnection.Execute(const CommandText: WideString;
 const CommandType: TCommandType = cmdText;
 const ExecuteOptions: TExecuteOptions = []) : _Recordset;
var
 VarRecsAffected: OleVariant;
begin
 CheckActive;
  Result := ConnectionObject.Execute(CommandText, VarRecsAffected,
   Integer(CommandTypeValues[CommandType])+ExecuteOptionsToOrd(ExecuteOptions));
end;


А само ADO никаких различий не делает, к.к. один и тот же ConnectionObject исполняет запросы и возвращающие НД и не возвращающие


sniknik   (2006-12-14 16:46:00) [2]

> Пользоваться только ADODataSet.
в этом случае ADOCommand.
в ADO вообще очень четкое разграничение на команды возвращающие данные (ADODataSet), и не возвращающие(ADOCommand). борланд же своими "микс" компонентами а.ля.BDE только все путает. (и путает именно тех ради кого вроде бы они и делались, типа облегчить переход/сделать одинаково)

если бы выбрал изначально правильно ADOCommand, то ситуация данного топика была бы попросту невозможной.


Max Zyuzin   (2006-12-14 16:22:00) [3]

>koha ©   (14.12.06 16:15) [11]
Ох... от куда примеры брал?


  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text := 'DELETE FROM MonthTlb WHERE LinkToName= :pLinkToName';
  ADOQuery1.Parameters.ParamByName('pLinkToName').value := ADOTable5.FieldByName('Key').value;
  ADOQuery1.ExecSQL;


Когда же хелп то читать будут? К тому же не пользуйся вообще ADOQuery. Пользоваться только ADODataSet.


Sergey13   (2006-12-14 16:19:00) [4]

>  Open;

Execute, ExecSQL или как там у АДО.


koha   (2006-12-14 16:15:00) [5]

Вот код такой был:

procedure TForm1.BitBtn1Click(Sender: TObject);
Var fKey: string;
begin
 fKey:=ADOTable5.FieldByName('Key').AsString;
 with ADOQuery1 do begin
   Close;
   SQL.Clear;
   SQL.Add('DELETE FROM MonthTlb');
   SQL.Add('WHERE LinkToName='+Fkey);
   Open;
 end;
end;


Max Zyuzin   (2006-12-14 16:12:00) [6]

>koha ©   (14.12.06 16:07) [9]
Случаем возвращаемые записи не "Invalid use of keyword...." :)


koha   (2006-12-14 16:07:00) [7]

А, да, забыл, в запросе ковычки там всякие опустил.


Sergey13   (2006-12-14 16:05:00) [8]

> [7] koha ©   (14.12.06 16:02)

Ты можешь сколько угодно утверждать что-то или сомневаться, но пока не видно кода нам остается только гадать.


koha   (2006-12-14 16:02:00) [9]

> Вот этот запрос возвращает несколько записей?!!!

- вот на счет этого не буду утверждать, что он что то вернул, но должен был найти все записи равные условию WHERE LinkToName=Fkey и удалить их.


Sergey13   (2006-12-14 15:55:00) [10]

> DELETE FROM MainTabl
> WHERE LinkToName=Fkey
>
> - Запрос возвращает несколько записей

Вот этот запрос возвращает несколько записей?!!!
Че то ты делаешь не так.


koha   (2006-12-14 15:52:00) [11]

> Т.е. СУБД указать религия не позволяет?

Вот ConectionStrinng:
Provider=Microsoft.Jet.OLEDB.4.0;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=GarageCool.mdb;Persist Security Info=False


koha   (2006-12-14 15:44:00) [12]

> Megabyte ©   (12.12.06 15:33) [3]
> Т.е. СУБД указать религия не позволяет?

- А первая строка не о чем не говорит:
      Удаление строки в ADOQuery через SQL - запрос


Megabyte   (2006-12-12 15:33:00) [13]

Т.е. СУБД указать религия не позволяет?


koha   (2006-12-12 13:28:00) [14]

> Megabyte ©   (12.12.06 13:27) [1]
- Провайдеров несколько кто подойдет?


Megabyte   (2006-12-12 13:27:00) [15]

Сменить провайдера? :)
А вообще модно указывать СУБД и Провайдера.


Наверх

Титульная страница Поиск, карта сайта Написать письмо