Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Вниз

SQL   Найти похожие ветки 

 
Alibaba   (2003-09-29 17:30) [0]

Народ, такой вопрос.

Если мне необходимо:
select A, B from C
я использую TQuery. Open;

Если мне необходимо:
insert into D
select A, B from C

я использую TQuery. ExecSQL;

А если мне необходимо:
select A,B
into D
from C

Ни Open ни ExecSQL не работают.

Что использовать в этом случае?


 
Reindeer Moss Eater   (2003-09-29 17:31) [1]

Справочное руководство по TransactSQL


 
Vlad   (2003-09-29 17:34) [2]

select A,B
into :D
from C


 
Alibaba   (2003-09-29 17:42) [3]

>Vlad © (29.09.03 17:34) [2]
Появляется ошибка:
Cursor must be opened before this command type can be initialized


 
Vlad   (2003-09-29 17:49) [4]

Вобщем не знаю как в MSSQL, а в оракле, напр. запрос выглядел бы след. образом:
begin
select A,B into :D, :E from C;
end;
Предварительно необходимо в Query определить параметр :D, :E
Затем Open (или ExecSql)
Думаю, там что-то похожее.


 
Alibaba   (2003-09-29 18:10) [5]

>Vlad © (29.09.03 17:49) [4]

Откуда появился термин параметр?
Я в своем вопросе не упоминал ни о каких параметрах.

Вариант №1
Есть sql-запрос:
select Field_A, Field_B
from Table_C

Берем TQuery, в свойстве SQL - прописываем этот запрос.
Для выполнения этого запроса выполняем: Query1.Open

Вариант №2
Есть sql-запрос:
insert into Table_D
select Field_A, Field_B
from Table_C

Берем TQuery, в свойстве SQL - прописываем этот запрос.
Для выполнения этого запроса выполняем: Query1.ExecSQL

Вариант №3
Есть sql-запрос:
select Field_A, Field_B
into Table_D
from Table_C

Берем TQuery, в свойстве SQL - прописываем этот запрос.
Для выполнения этого запроса выполняем:
Query1.Open - ошибка
Query1.ExecSQL - ошибка

Можни ли в этом варианте выполнить запрос?


 
Vlad   (2003-09-29 18:16) [6]

>Alibaba © (29.09.03 18:10) [5]
Сорри, не так понял.
Я думал речь идет о переменных.
Тогда не знаю.


 
MaxDDinc   (2003-09-29 18:16) [7]

В первом запросе - обычная выборка,
во втором - вставка выборки,
а в третьем ты сам-то понял, что написал ??????
Выборка может быть загружена в параметр запроса, это используется в процедурах и функциях, а у тебя фигня :(
SQL, он структурированый, ты не можешь выполнить вторую часть, если не закончил первую, у тебя первая часть:
select a, b
from c
и вторая:
insert into d

Лучше поясни, что сделать надо ?


 
ZrenBy   (2003-09-29 18:22) [8]

>>MaxDDinc (29.09.03 18:16) [7]

Вот уж не надо...

from BOL

Inserting Rows Using SELECT INTO
The SELECT INTO statement creates a new table and populates it with the result set of the SELECT. The structure of the new table is defined by the attributes of the expressions in the select list, for example:

SELECT Shippers.*, Link.Address, Link.City,
Link.Region, Link.PostalCode
INTO NewShippers
FROM Shippers
JOIN LinkServer.DB.dbo.Shippers AS Link
ON (Shippers.ShipperID = Link.ShipperID)

SELECT INTO can be used to combine data from several tables or views into one table. It can also be used to create a new table containing data selected from a linked server.

>>Alibaba © (29.09.03 17:30)

А сам-то запрос выполняется ? В таблице D что-нибудь
появляется?


 
MaxDDinc   (2003-09-29 18:29) [9]

>>ZrenBy © (29.09.03 18:22) [8]
У Вас в первой строке SELECT уже определены таблицы для выборки:
из таблицы shippers выбрать все, а из link выбрать address, city, region и postalcode, таким образом уже ясно, что надо выбирать, а дальше - вставка и join и т.д.
А в примере выше нет определения таблиц для выборки ...


 
ZrenBy   (2003-09-29 18:39) [10]

>>Query1.Open - ошибка
>>Query1.ExecSQL - ошибка

Блин, что за ошибка ?


 
MaxDDinc   (2003-09-29 18:41) [11]

Для выборкки используй TQuery, а для вставки, удаления - TStoredProc !


 
sniknik   (2003-09-29 22:57) [12]

ZrenBy © (29.09.03 18:39) [10]
>>>Query1.Open - ошибка
>>>Query1.ExecSQL - ошибка

>Блин, что за ошибка ?

читай между строк, там все написано, если непонятно поясню (на подработку начинающим телепатом чтоли устроится ;о)).

читаем исходный вопрос.
....
>Если мне необходимо:
>insert into D
>select A, B from C
>я использую TQuery.ExecSQL;
т.е. таблица D существует если ошибок не дает.

>А если мне необходимо:
>select A,B
>into D
>from C
>Ни Open ни ExecSQL не работают.
в ту же таблицу(?) "селект инту" не сработает. о том что менялась база или имя таблици на D2, к примеру. ни слова, а зная
( Alibaba © (29.09.03 18:10) [5])
>Откуда появился термин параметр?
>Я в своем вопросе не упоминал ни о каких параметрах.
)
как щепетильно автор относится к своим словам можно предположить, что и не сделано. т.е. ошибка будет звучать примерно так (в вольном переводе) "куды пихаеш? не видиш есть уже табличка!!!".

уфф... завлекательнее чем кроссворды. ;о)) тока писать обьяснения упаришся.


 
Alibaba   (2003-10-02 01:12) [13]

Для выполнения SQL-запросов использую два инструмента:
1. SQL Advantager
2. Delphi

Все три приведенных мной варианта работают в SQL Advantager.

В Delphi (использую TQuery) работает только первый вариант (выборка) и второй (вставка).
Третий вариант (выборка одновременно с вставкой) - работать не хочет. Delphi выдает ошибку "Cursor must be opened"

В принципе, решить третий вариант можно, разбив его на две части (собственно так я сейчас и делаю)
1. Create table Table_D (ExecSQL)
2. Insert into Table_D
Select Field_A, Field_B
From Table_C (ExecSQL)

Если делать два шага: создавать таблицу и наполнять её - то все работает.

Если делать это за один присест: вставлять данные в новую еще не существующую таблицу - не работает.
Обратите внимание, что в SQL Advantager (если кто знаком) - вариант "за один присест" проходит.


 
NAlexey   (2003-10-02 09:11) [14]

Используй временную. В твоем случае будет выглядеть так:

select A, B into #D from C
insert D select A, B from #D
drop table #D


 
Johnmen   (2003-10-02 09:22) [15]

В параметрах алиаса или в переопределяемых параметрах TDatabase укажи SQLQRYMODE=SERVER


 
NAlexey   (2003-10-02 09:50) [16]

Да и еще: Зачем на каждое действие выполнять по запросу?
Кладу на форму TADOQuery, кладу на форму TDataSource, кладу на форму DBGrid. Все соединяю, пишу в TADOQuery.SQL:

select top 10 * into #MustDie from Table
select * from #MustDie
drop table #MustDie

Делаю прям в дизайне Active := True; Все прекрасно видно...
Зачем на каждый оператор по Exec или Open? Да ты хоть в этот TQuery текст своей процедуры запихай с сотней Insert главное сделай где нибудь Select from и будет тебе набор данных.


 
Johnmen   (2003-10-02 10:14) [17]

>NAlexey ©

Не путай АДО с БДЕ.


 
NAlexey   (2003-10-02 10:26) [18]

>Johnmen ©
Не вижу разницы, с легкостью проделаю тоже самое в BDE.


 
Johnmen   (2003-10-02 10:36) [19]

>NAlexey © (02.10.03 10:26)

Проделай, проделай...:) О результатах сообщи.


 
NAlexey   (2003-10-02 10:40) [20]

Уже проделал, результаты такиеже:
1) Создаю alias в BDE
2) Кладу на форму TQuery, кладу DbGrid, кладу TDataSource, соединяю все это
3) Пишу в TQuery.SQL:

select top 10 * into #MustDie from Table
select * from #MustDie
drop table #MustDie

4) Делаю в design time Active := True; Все прекрасно видно...


 
Zelius   (2003-10-02 11:10) [21]


> Alibaba © (29.09.03 17:30)

используе форму не select into, а insert into Table1 (columns) values (values) select columns from Table2
и будет счастье!


 
Alibaba   (2003-10-02 11:23) [22]

>Johnmen © (02.10.03 09:22) [15]
Сначала так и стояло: SQLQRYMODE=SERVER

>Johnmen © (02.10.03 10:14) [17]
Путать действительно не надо. :))
Разные вещи, все таки...

>Zelius © (02.10.03 11:10) [21]
Счастье это всегда хорошо. :))
insert into можно использовать, когда таблица уже существует. (Alibaba © (02.10.03 01:12) [13])

>


 
Zelius   (2003-10-02 11:29) [23]


> insert into можно использовать, когда таблица уже существует.
> (Alibaba © (02.10.03 01:12) [13])


тогда проверяй ее на существование и если ее нет, то создавай...



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

Форум: "Базы";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.012 c
1-74197
TUser
2003-10-10 09:40
2003.10.23
Time


1-74174
хорек
2003-10-10 12:26
2003.10.23
анимационный курсор


3-73972
Neo
2003-10-01 09:56
2003.10.23
Хранимые процедуры


4-74527
wicked
2003-08-17 16:05
2003.10.23
вопрос о TPageSetupDlg....


1-74201
Максим
2003-10-10 07:37
2003.10.23
MDI приложение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский