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

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

Ошибка "CommandText does not return a result set".


Страницы:   1 2

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
Позор Борланду, что они творят с начинающими программистами, а потом мы удивляемся откуда такие берутся..


Страницы:   1 2

Наверх

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