Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.051 c
15-1161977193
Master_
2006-10-27 23:26
2006.11.12
Принцип поиска вирусов Антивирусниками


4-1151253289
pizz_pizz
2006-06-25 20:34
2006.11.12
работа с сертификатами


9-1138616293
Yanis
2006-01-30 13:18
2006.11.12
Почему этот код вызывает ошибку


2-1161929161
Mishenka
2006-10-27 10:06
2006.11.12
Как в ячейке таблицы указать горизонтальное выравнивание?


2-1162118210
ymy1
2006-10-29 13:36
2006.11.12
неиспользуемое в классе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский