![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка "CommandText does not return a result set".
Kolan © (2006-10-25 23:59:00)Здравствуйте,
Делаю такой запрос:
S := 'INSERT INTO dbo.Operators VALUES ('
+#39+ SurName +#39+ ',' +#39+ Name +#39+ ',' +#39+ PatronymicName +#39+ ')';
BaseManager.ExecQuery(S);
И соответственно:
function TBaseManager.ExecQuery(Query: string): Boolean;
begin
FADODataSet.Active := False;
FADODataSet.CommandText := Query;
FADODataSet.Active := True;
end;
Получаю ошибку как в сабже. Прочел на королевстве что дляADO QueryестьExcecSQL. А как быть сFADODataSet?
Ketmar (2006-10-26 20:28:00) [1]>[37] saxon 26-Oct-2006, 20:27
>Я ж не против, просто смешно получилось :)
отмаз: а у меня не ADO. вот.
saxon (2006-10-26 20:27:00) [2]
> Ketmar © (26.10.06 20:26) [36]
Я ж не против, просто смешно получилось :)
Ketmar (2006-10-26 20:26:00) [3]>[34] saxon 26-Oct-2006, 20:22
это просто пример работы с параметрами. взят первый попавшийся под руку класс. идея была -- дать направления для раскопок. %-)
Kolan (2006-10-26 20:23:00) [4]> [33] Ketmar © (26.10.06 20:06)
А вот как.. Ясно, благодарю...
saxon (2006-10-26 20:22:00) [5]
> Ketmar © (26.10.06 20:06) [33]
->
> Kolan © (26.10.06 18:36) [20]
> > Вставляй с помощью ADOQuery, что тебе мешает-то?
> Anatoly Podgoretsky и мешает :)
:)
Ketmar (2006-10-26 20:06:00) [6]
Query2: TQuery;
...
Query2.SQL.Clear;
Query2.SQL.Add('INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)');
Query2.SQL.Add('VALUES (:Name, :Capital, :Population)');
Query2.Params[0].AsString := 'Liechtenstein';
Query2.Params[1].AsString := 'Vaduz';
Query2.Params[2].AsInteger := 420000;
Query2.ExecSQL;
(ц) справка
Kolan (2006-10-26 20:00:00) [7]> например о том, что классы -- они не в курсе твоих переменных.
> а также о том, что параметры надо ручками потом прописывать
Понял.
> что параметры надо ручками потом прописывать
Дык нафиг эти ":":( Может свойство Parametrs тут нужно? Или как?
Честно чувствую себя дураком..
[2] evvcom © (26.10.06 08:28)
Сказал
Но еще более читабельно будет с параметрами:
'... VALUES (:SurName, :Name, :PatronymicName)';
Не так ли?
Согласен это читабельнее, но как это использовать?
Ketmar (2006-10-26 19:49:00) [8]>[30] Kolan(c) 26-Oct-2006, 19:41
ты это... подумай немного. например о том, что классы -- они не в курсе твоих переменных. а также о том, что параметры надо ручками потом прописывать. разница в том (если грубо), что можно сконструировать запрос один раз, а потом задавать параметры без пересоздания строки. но задавать всё равно надо руками. это вам не VBA. %-)
Kolan (2006-10-26 19:41:00) [9]> например, взять твой вариант. только "обернуть" +... в вызовы
> какой-нибудь своей функции, которая обработает и "обезопасит"
> одинарные кавычки в строке.
Это я все могу. Как двоеточиями пользоваться?
Если писать так:
procedure TOperatorManager.AddNewOperator(SurName, Name, PatronymicName: string;
BaseManager: TBaseManager);
var
S: string;
begin
S := 'INSERT INTO dbo.Operators VALUES (:SurName, :Name, :PatronymicName)';
BaseManager.ExecCommand(S);
end;
То в S и будет'INSERT INTO dbo.Operators VALUES (:SurName, :Name, :PatronymicName)'.
А я хочу чтобы вместо SurName была фамилия переданная как параметр.
Как работает мой вариант со склйкой я понимаю, а как пользоваться ":" - нет.
Ketmar (2006-10-26 19:35:00) [10]>[28] Kolan(c) 26-Oct-2006, 19:32
>Не ну как делать?
например, взять твой вариант. только "обернуть"+...в вызовы какой-нибудь своей функции, которая обработает и "обезопасит" одинарные кавычки в строке.
Kolan (2006-10-26 19:32:00) [11]> [27] Ketmar © (26.10.06 19:30)
> >[26] Kolan(c) 26-Oct-2006, 19:28
> >Так оставил, только потом не обзывайтесь :)
> а мы и не будем. сервер будет.
Не ну как делать?(:SurNameне то тут что-то. Или я не ясно выразился?
Ketmar (2006-10-26 19:30:00) [12]>[26] Kolan(c) 26-Oct-2006, 19:28
>Так оставил, только потом не обзывайтесь :)
а мы и не будем. сервер будет.
Kolan (2006-10-26 19:28:00) [13]> S := 'INSERT INTO dbo.Operators VALUES ('
> +#39+ SurName +#39+ ',' +#39+ Name +#39+ ',' +#39+ PatronymicName
> +#39+ ')';
Так оставил, только потом не обзывайтесь :)
Kolan (2006-10-26 18:57:00) [14]> (:SurName, :Name, :PatronymicName
Где этот синтаксис описан? В справке протые примеры:Select * From Table
Kolan (2006-10-26 18:43:00) [15]> У тебя ошибка в программе.
Да это я понялл:)
procedure TOperatorManager.AddNewOperator(SurName, Name, PatronymicName: string;
BaseManager: TBaseManager);
var
S: string;
begin
S := 'INSERT INTO dbo.Operators VALUES (:SurName, :Name, :PatronymicName)';
BaseManager.ExecCommand(S);
end;
Как правильно записать?
Anatoly Podgoretsky (2006-10-26 18:42:00) [16]
> несработало. в строке получились не переменные а именно
> SurName, Name, PatronymicName
У тебя ошибка в программе.
Anatoly Podgoretsky (2006-10-26 18:40:00) [17]Неправда не мешаю, я же сказал - это личное горе каждого, я предупреждаю от неверных шагов, чтобы потом не так больно было.
Kolan (2006-10-26 18:39:00) [18]> VALUES (:SurName, :Name, :PatronymicName)
несработало. в строке получились не переменные а именно SurName, Name, PatronymicName
Kolan (2006-10-26 18:36:00) [19]> Вот любители извращаться!
Сделал как придумал. Намеренно запостил, чтобы узнать как правильно.
Это самый лучьшеий вариант:VALUES (:SurName, :Name, :PatronymicName)';?
Параметры
Параметры
Параметры
Не понял?
> Вставляй с помощью ADOQuery, что тебе мешает-то?
Anatoly Podgoretsky и мешает :)
Сделал еще одну процедурку:
procedure TBaseManager.ExecCommand(Command: string);
begin
FADOCommand.CommandText := Command;
FADOCommand.Execute;
end;
Ей и пользовался - работает.
Anatoly Podgoretsky (2006-10-26 18:03:00) [20]Не правда, это дополнительно к уже занятой под strings памяти, а она прожорливая.
> Используется для совместимости с другими Query
И не только Query, но и Table и StoredProc
Позор Борланду, что они творят с начинающими программистами, а потом мы удивляемся откуда такие берутся..