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

Вниз

Ошибка "CommandText does not return a result set".   Найти похожие ветки 

 
Kolan ©   (2006-10-25 23:59) [0]

Здравствуйте,
 Делаю такой запрос:

 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;


Получаю ошибку как в сабже. Прочел на королевстве что для ADOQuery есть ExcecSQL. А как быть с FADODataSet?


 
DrPass ©   (2006-10-26 01:04) [1]

Никак. Он предназначен для выборки, а не для вставки данных, о чем тебе и пытается сказать. Вставляй с помощью ADOQuery, что тебе мешает-то?


 
evvcom ©   (2006-10-26 08:28) [2]

> [0] Kolan ©   (25.10.06 23:59)
> +#39+ SurName +#39+ "," +#39+ Name +#39+

Вот любители извращаться! #39 - это что? Апостроф? А нормально написать не судьба? Чтобы читаемо было:
VALUES (""" + SurName + """,""" +
Но еще более читабельно будет с параметрами:
"... VALUES (:SurName, :Name, :PatronymicName)";
Не так ли?


 
Anatoly Podgoretsky ©   (2006-10-26 08:56) [3]

Сколько раз говорили, забудьте что есть такая штука как Query, она же только в заблуждения вводит, поубивал бы Борланд, везде понавпихивали свои Tabe, Query, StoredProc - народу мозги затуманили.

Для базовой работы с базами нужны только две вещи - Dataset для запросов возвращающих набор данных или набор записей и Command для всего остального.
Вот остальное можно только выполнить, а слово это переводится на ангельский как Execute


 
Anatoly Podgoretsky ©   (2006-10-26 08:57) [4]


> Вот любители извращаться!

Любители шагать по граблям

Параметры
Параметры
Параметры


 
DrPass ©   (2006-10-26 09:50) [5]


> забудьте что есть такая штука как Query, она же только в
> заблуждения вводит

Глупости. ADOQuery ничем не отличается от ADODataSet, кроме нескольких свойств "для совместимости" и возможности исполнять не возвращающие НД команды. Кто сомневается, может посмотреть исходник в ADODB.pas


 
Anatoly Podgoretsky ©   (2006-10-26 12:03) [6]

Ты думаешь, что не вводит, наблюдение за форумами этого не подтверждает, при том желательно пройтись по всему приведеному списку.
Крайний случай заблуждений в еоде выглядит так
Q.Active := True;
Q.ExecSQL;
Q.Open;

Это реальный код из форумов.


 
Плохиш ©   (2006-10-26 13:51) [7]


> Крайний случай заблуждений в еоде выглядит так
> Q.Active := True;
> Q.ExecSQL;
> Q.Open;
> Это реальный код из форумов.

Так это же логично :-)
Q.Active := True; - Сделать кАмпАненту активной
Q.ExecSQL; - выполнить запуздыренный запрос
Q.Open; - открыть набор данных

Хорошо, что хоть в такой последовательности :-)

> Kolan ©   (25.10.06 23:59)  
> Здравствуйте,
>  Делаю такой запрос:
>
>  S := "INSERT INTO dbo.Operators VALUES ("
>    +#39+ SurName +#39+ "," +#39+ Name +#39+ "," +#39+ PatronymicName
> +#39+ ")";

Представляешь, что будет, если хотя бы в одной из этих переменных будет свой апостров?


 
Ketmar ©   (2006-10-26 14:27) [8]

>[7] Плохиш(c) 26-Oct-2006, 13:51
>Представляешь, что будет, если хотя бы в одной из этих
>переменных будет свой апостров?
от "ничего страшного" до "ой, а почему у меня в базе нет ничего?" %-))


 
Shirson ©   (2006-10-26 15:58) [9]

Отказываться от очень удобного компонента, из-за того, что некоторые не умеют им пользоваться? Нах такое счастье.
ADOQuery самый удобный.  Всё описанно в хелпе и ненужно в обход его изобретать собственную логику использования компонентов.


 
Anatoly Podgoretsky ©   (2006-10-26 16:18) [10]

Отказываться от очень удобного компонента
Чего в нем удобного по сравнению с Dataset/Command?
Кроме наличия перегрузок и некоторых ошибок, на которые я к счастью не нарывался, но информацию по ним приводил Шикник в Базах.
Зачем изучать несколько технологий и ломать голову, когда есть прямые, а не костыли над ними?

Применять конечно имеешь право и никто тебе не судья, но упорствовать в этом не является признаком профессионализма.


 
Германн ©   (2006-10-26 16:27) [11]


> но информацию по ним приводил Шикник в Базах.

А если Николай обидится? :-)


 
Anatoly Podgoretsky ©   (2006-10-26 16:32) [12]


> А если Николай обидится

С чего бы, он придерживает такой же позиции.
А то что не захотел переключать раскладку, то за такое он не обижается. А вот если он пожелает подключиться и в очередной раз захочет выразить свое ФИ, правда я бы не стал, уже надоело это разжевывать в Базах.


 
Германн ©   (2006-10-26 16:41) [13]


> Anatoly Podgoretsky ©   (26.10.06 16:32) [12]
>
>
> > А если Николай обидится
>
> С чего бы, он придерживает такой же позиции. А то что не захотел переключать раскладку, то за такое он не обижается.

Дык я не про позицию и не про раскладку, а про вторую букву в нике :-)


 
DrPass ©   (2006-10-26 16:57) [14]


> Anatoly Podgoretsky ©   (26.10.06 16:18) [10]


> Чего в нем удобного по сравнению с Dataset/Command?
> Кроме наличия перегрузок и некоторых ошибок

Никаких перегрузок и ошибок там нет (по крайней мере, по сравнению с ADODataSet) - TADOQuery прямой наследник TCustomADODataset + свойства SQL, RowsAffected и метод ExecSQL, и ничего боле. А удобство - очевидно. Унифицированный код, который при необходимости можно легко портировать на другой тип источников данных, да и просто новичку освоить легче, по любой книге о Delphi + BDE


 
Anatoly Podgoretsky ©   (2006-10-26 17:00) [15]

Как это нет, а SQL типа strings


 
DrPass ©   (2006-10-26 17:36) [16]

Не считается :)


 
Anatoly Podgoretsky ©   (2006-10-26 17:40) [17]

Наоборот полный зачет, и это не углубляясь во внутренне устройство.


 
DrPass ©   (2006-10-26 17:48) [18]

А чем оно плохо? Используется для совместимости с другими Query, и просто копируется в CommandText датасета


 
Anatoly Podgoretsky ©   (2006-10-26 18:03) [19]

Не правда, это дополнительно к уже занятой под strings памяти, а она прожорливая.


> Используется для совместимости с другими Query

И не только Query, но и Table и StoredProc
Позор Борланду, что они творят с начинающими программистами, а потом мы удивляемся откуда такие берутся..


 
Kolan ©   (2006-10-26 18:36) [20]

> Вот любители извращаться!

Сделал как придумал. Намеренно запостил, чтобы узнать как правильно.
Это самый лучьшеий вариант: VALUES (:SurName, :Name, :PatronymicName)";?

Параметры
Параметры
Параметры

Не понял?

> Вставляй с помощью ADOQuery, что тебе мешает-то?

Anatoly Podgoretsky  и мешает :)

Сделал еще одну процедурку:
procedure TBaseManager.ExecCommand(Command: string);
begin
 FADOCommand.CommandText := Command;
 FADOCommand.Execute;
end;

Ей и пользовался - работает.


 
Kolan ©   (2006-10-26 18:39) [21]

> VALUES (:SurName, :Name, :PatronymicName)

несработало. в строке получились не переменные а именно SurName, Name, PatronymicName


 
Anatoly Podgoretsky ©   (2006-10-26 18:40) [22]

Неправда не мешаю, я же сказал - это личное горе каждого, я предупреждаю от неверных шагов, чтобы потом не так больно было.


 
Anatoly Podgoretsky ©   (2006-10-26 18:42) [23]


> несработало. в строке получились не переменные а именно
> SurName, Name, PatronymicName

У тебя ошибка в программе.


 
Kolan ©   (2006-10-26 18:43) [24]

> У тебя ошибка в программе.

Да это я понялл:)
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;


Как правильно записать?


 
Kolan ©   (2006-10-26 18:57) [25]

> (:SurName, :Name, :PatronymicName

Где этот синтаксис описан? В справке протые примеры: Select * From Table


 
Kolan ©   (2006-10-26 19:28) [26]

> S := "INSERT INTO dbo.Operators VALUES ("
>   +#39+ SurName +#39+ "," +#39+ Name +#39+ "," +#39+ PatronymicName
> +#39+ ")";

Так оставил, только потом не обзывайтесь :)


 
Ketmar ©   (2006-10-26 19:30) [27]

>[26] Kolan(c) 26-Oct-2006, 19:28
>Так оставил, только потом не обзывайтесь :)
а мы и не будем. сервер будет.


 
Kolan ©   (2006-10-26 19:32) [28]

> [27] Ketmar ©   (26.10.06 19:30)
> >[26] Kolan(c) 26-Oct-2006, 19:28
> >Так оставил, только потом не обзывайтесь :)
> а мы и не будем. сервер будет.

Не ну как делать? (:SurName не то тут что-то. Или я не ясно выразился?


 
Ketmar ©   (2006-10-26 19:35) [29]

>[28] Kolan(c) 26-Oct-2006, 19:32
>Не ну как делать?
например, взять твой вариант. только "обернуть" +... в вызовы какой-нибудь своей функции, которая обработает и "обезопасит" одинарные кавычки в строке.


 
Kolan ©   (2006-10-26 19:41) [30]

> например, взять твой вариант. только "обернуть" +... в вызовы
> какой-нибудь своей функции, которая обработает и "обезопасит"
> одинарные кавычки в строке.

Это я все могу. Как двоеточиями пользоваться?
Если писать так:
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:49) [31]

>[30] Kolan(c) 26-Oct-2006, 19:41
ты это... подумай немного. например о том, что классы -- они не в курсе твоих переменных. а также о том, что параметры надо ручками потом прописывать. разница в том (если грубо), что можно сконструировать запрос один раз, а потом задавать параметры без пересоздания строки. но задавать всё равно надо руками. это вам не VBA. %-)


 
Kolan ©   (2006-10-26 20:00) [32]

> например о том, что классы -- они не в курсе твоих переменных.
> а также о том, что параметры надо ручками потом прописывать

Понял.

> что параметры надо ручками потом прописывать

Дык нафиг эти ":":( Может свойство Parametrs тут нужно? Или как?
Честно чувствую себя дураком..

[2] evvcom ©   (26.10.06 08:28)
Сказал
Но еще более читабельно будет с параметрами:
"... VALUES (:SurName, :Name, :PatronymicName)";
Не так ли?


Согласен это читабельнее, но как это использовать?


 
Ketmar ©   (2006-10-26 20:06) [33]

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;


(ц) справка


 
saxon   (2006-10-26 20:22) [34]


> Ketmar ©   (26.10.06 20:06) [33]

->

> Kolan ©   (26.10.06 18:36) [20]
> > Вставляй с помощью ADOQuery, что тебе мешает-то?
> Anatoly Podgoretsky  и мешает :)

:)


 
Kolan ©   (2006-10-26 20:23) [35]

> [33] Ketmar ©   (26.10.06 20:06)

А вот как..  Ясно, благодарю...


 
Ketmar ©   (2006-10-26 20:26) [36]

>[34] saxon 26-Oct-2006, 20:22
это просто пример работы с параметрами. взят первый попавшийся под руку класс. идея была -- дать направления для раскопок. %-)


 
saxon   (2006-10-26 20:27) [37]


> Ketmar ©   (26.10.06 20:26) [36]

Я ж не против, просто смешно получилось :)


 
Ketmar ©   (2006-10-26 20:28) [38]

>[37] saxon 26-Oct-2006, 20:27
>Я ж не против, просто смешно получилось :)
отмаз: а у меня не ADO. вот.



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

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

Наверх




Память: 0.57 MB
Время: 0.049 c
15-1161746724
brother
2006-10-25 07:25
2006.11.12
Новшество на форуме...


2-1161891701
DiX
2006-10-26 23:41
2006.11.12
Помогите со временем


15-1161774885
ProgRAMmer Dimonych
2006-10-25 15:14
2006.11.12
Развод - Не развод


2-1161769105
Aleks
2006-10-25 13:38
2006.11.12
Подскажите, как скопировать с Form1 изображение, нарисованное


15-1161764749
Nic
2006-10-25 12:25
2006.11.12
Программа "Camp America"