Форум: "Начинающим";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];
ВнизУдаление строки в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c