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

Вниз

Удаление строки в ADOQuery через SQL - Немогу удалить   Найти похожие ветки 

 
koha ©   (2006-12-12 13:25) [0]

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

DELETE FROM MainTabl
WHERE LinkToName=Fkey

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

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


 
Megabyte ©   (2006-12-12 13:27) [1]

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


 
koha ©   (2006-12-12 13:28) [2]

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


 
Megabyte ©   (2006-12-12 15:33) [3]

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


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

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

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


 
koha ©   (2006-12-14 15:52) [5]

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

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


 
Sergey13 ©   (2006-12-14 15:55) [6]

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

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


 
koha ©   (2006-12-14 16:02) [7]

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

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


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

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

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


 
koha ©   (2006-12-14 16:07) [9]

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


 
Max Zyuzin ©   (2006-12-14 16:12) [10]

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


 
koha ©   (2006-12-14 16:15) [11]

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

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;


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

>  Open;

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


 
Max Zyuzin ©   (2006-12-14 16:22) [13]

>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.


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

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

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


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


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


Можно подумать, в БДЕ с 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 исполняет запросы и возвращающие НД и не возвращающие



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

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

Наверх




Память: 0.51 MB
Время: 0.03 c
2-1166374385
Vladimir1984
2006-12-17 19:53
2007.01.07
Как отрыть файл BMP в виде цифровой таблице?


2-1166215698
DillerXX
2006-12-15 23:48
2007.01.07
Проблема с (var S: array of const)


2-1166175991
sidiakin
2006-12-15 12:46
2007.01.07
Помогите разобраться с машинным кодом!


15-1166515691
vidiv
2006-12-19 11:08
2007.01.07
реклама в бесплатном хостинге


3-1161529514
diofant
2006-10-22 19:05
2007.01.07
Подключение к серверу приложений