![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление строки в 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]Сменить провайдера? :)
А вообще модно указывать СУБД и Провайдера.