Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизОшибка "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;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.065 c