Выборка из одной таблицы в другую

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Oldman
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 10.11.2003 (Пн) 12:23
Откуда: ТРТУ

Выборка из одной таблицы в другую

Сообщение Oldman » 10.11.2003 (Пн) 12:43

Господа-эксперты, подскажите, плиз... У меня уже запас идей кончился...
Суть проблемы: есть база данных - каталог видеозаписей (обширный)
Есть таблица, содержащая поля KodAktera и KodFilma (фильмография актеров - кто в каком фильмме снимался). Необходимо получить временный список с фильмографией одного актера, но так, чтобы список в дальнейшем не был связан с основной таблицей (есть необходимость удалять записи, не прошедшие еще один критерий отбора, но так, чтобы это не отразилось в исходной таблице. В SQL-запросе его не обработать).
Пример, приведенный ниже, удалял из исходной таблицы, чем и не устроил.
Set DD_t = New ADODB.Recordset
Set cmdDD = New ADODB.Command
Set cmdDD.ActiveConnection = DB
DD_t.CursorType = adOpenDynamic
DD_t.LockType = adLockOptimistic
result = "SELECT AktersFilm.KodFilma FROM AktersFilm WHERE (AktersFilm.KodAktera = " & Form4.Akters.TextMatrix (0,1) & ") ORDER BY AktersFilm.KodFilma"
cmdDD.CommandText = result
Set DD_t = cmdDD.Execute

Создал новую таблицу в самой базе DD. Типа, чтоб изголяться над ней, не трогая исходную таблицу. Теперь возникла проблема заполнить эту таблицу данными из исходной таблицы. Поменял код на такой:
Set DD_t = New ADODB.Recordset
Set cmdDD = New ADODB.Command
If Form4.AktDB.Rows > 0 Then
result = Trim(Form4.AktDB.TextMatrix(0, 1))
Else
result = "0"
End If
Set cmdDD.ActiveConnection = DB
DD_t.CursorType = adOpenDynamic
DD_t.LockType = adLockOptimistic
'DD_t.Source = "DD"
cmdDD.CommandType = adAsyncExecute
result = "SELECT AktersFilm.KodFilma FROM AktersFilm AS DD WHERE AktersFilm.KodAktera = " & Form4.Akters.TextMatrix (0,1) cmdDD.CommandText = result
Set DD_t = cmdDD.Execute

Возникает ошибка, что не хватает исходных данных. Замена двух последних строк на
DD_t.Open result
ни к чему не приводит (в смысле та же ошибка в SQL-запросе).
Может имело смысл отсортировать данные в массив, но я не знаю, как можно убить строку в массиве :(
Ежики не колются, только бухают иногда

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 10.11.2003 (Пн) 12:49

Насколько я помню, в SELECT'е есть параметр INTO, который позволяет указать имя таблицы, в которую будут помещены результаты запроса.

Oldman
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 10.11.2003 (Пн) 12:23
Откуда: ТРТУ

Сообщение Oldman » 10.11.2003 (Пн) 17:17

Сенкаю вери матч :lol:

А без новой таблицы в базе обойтись можно? Типа временной таблицы в памяти?
Ежики не колются, только бухают иногда

Oldman
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 10.11.2003 (Пн) 12:23
Откуда: ТРТУ

Сообщение Oldman » 11.11.2003 (Вт) 14:16

RayShade писал(а):Насколько я помню, в SELECT'е есть параметр INTO, который позволяет указать имя таблицы, в которую будут помещены результаты запроса.


А вот и фиг!!!!

"Ошибка синтаксиса в предложении FROM"
Причем тут это?

Хелп, плз!!!!!!!
Ежики не колются, только бухают иногда

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.11.2003 (Вт) 14:49

Код: Выделить всё
select AktersFilm.KodFilma
into tmp
from AktersFilm
where AktersFilm.KodAktera={KodAktera}


В таблице tmp должно быть единственное поле KodFilma.

Другой вариант (кодом). Все результаты запоминаются в массив, проверка идет непосредственно при добавлении элемента в массив.
Код: Выделить всё
Dim res() As Long, N As Long
ReDim res(0)
N=0
With DB.Execute("select AktersFilm.KodFilma from AktersFilm where AktersFilm.KodAktera=" & Text1.Text)
  Do Until (.BOF Or .EOF)
    If .Fields("KodFilma") = ... Then
      If N Mod 100 = 0 Then ReDim Preserve res(0 To 100*(1+Fix(N/100)))
      N=N+1
      res(N) = .Fields("KodFilma")
    End If
    .MoveNext
  Loop
  .Close
End With
ReDim Preserve res(0 To N)
Lasciate ogni speranza, voi ch'entrate.

Oldman
Обычный пользователь
Обычный пользователь
 
Сообщения: 56
Зарегистрирован: 10.11.2003 (Пн) 12:23
Откуда: ТРТУ

Сообщение Oldman » 11.11.2003 (Вт) 15:03

Сорри, был не прав... Действительно ошибка!!!
Все заработало. Огромное сенькс!!!!

Надо было вот так:
Код: Выделить всё
"INSERT INTO DD SELECT AktersFilm.KodFilma FROM AktersFilm WHERE AktersFilm.KodAktera = " & result
Ежики не колются, только бухают иногда


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 156

    TopList