| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Выполнение ЛЮБОГО запроса |
| Автор: Artemon 2.2.2006, 13:31 | ||
Для выполнения любых SQL запросов использовал следующую конструкцию:
Вссе шло отлично до того момента, как мне захотелось выполнить следующий запрос: INSERT INTO TMP_ARTISTS SELECT ID_GENRE, ARTIST FROM ARTISTS WHERE ARTIST = QueryArtists->FieldByName("ARTIST")->Value Когда делаю запрос - в таблицу вставляются по две копии одной записи. Я даже знаю с чем это связанно: С тем, что сначала выполняется: ADOQuery->Open(); а затем еще и ADOQuery->ExecSQL() Как этого избежать? |
| Автор: Vit 2.2.2006, 14:56 |
| Или ADOQuery->Open(); - если нужен результат или ADOQuery->ExecSQL() - если нужно выполнить действие но ничего читать не надо. Оба оператора приводят к выполнению запроса дважды |
| Автор: bas 2.2.2006, 15:39 | ||
Ловит сообщение поробуй -
|
| Автор: Artemon 2.2.2006, 16:30 | ||
Vit, это я знаю, но как быть если запрос делает вставку в таблицу и при этом совершает выборку из другой таблицы - в этом-то и загвоздка. Bas, конструкцию, которую ты предлагаешь - может использоваться только с операторами выборки, но не как не модификации. Добавлено @ 16:43 Vit, я специально привел кусок кода который делает следующее: Если мы делаем выборку - то выполняется только метод Open, если мы вносим изменения в таблицу - то выполняется только ExecSQL(). |
| Автор: bas 2.2.2006, 17:07 | ||
|
| Автор: Artemon 2.2.2006, 17:30 |
| Кто-нибудь может быть уже посмотрит на кусок кода на C++Builder в первом топике. Этот код не противоречит всему тому что было сказано в этой теме. Я хочу узнать каким способом выполнить код: INSERT INTO TMP_ARTISTS SELECT ID_GENRE, ARTIST FROM ARTISTS WHERE ARTIST = 'NEW ARTIST' Ведь он сразуже выполняет и выборку (SELECT) и изменение таблицы методом INSERT. |
| Автор: Vit 2.2.2006, 19:47 | ||
Хм... А разве я говорил что Open не может выполнить Insert? |