Отсортировать по тому, чего нет

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Отсортировать по тому, чего нет

Сообщение Alexanbar » 19.04.2005 (Вт) 21:46

Есть несколько таблиц (mdb-97). Одна из них (Photo) содержит поля Personal_ID и Photo.
После создания запроса на основе 3х таблиц порядок следования получается отличным от того, что в таблице Photo. Можно было бы добавить в эту таблицу поле типа счётчик, и отсортировать по нему.

А вот интересно, можно ли, не добавляя счётчика, сохранить порядок следования таким, как он был в таблице Photo, т.е. последние добавленные записи в конце

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 19.04.2005 (Вт) 23:35

После создания запроса на основе 3х таблиц


А запрос в студию?

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 19.04.2005 (Вт) 23:54

Public Function GetPhotoByEmailRS(strEmail As String) As String

GetPhotoByEmailRS = "Select " & EnumRecordsetFieldsOnly("Resources", GetDatabasename) & " , " & _
EnumRecordsetFieldsOnly("Photo", GetDatabasename) & " , " & _
EnumRecordsetFieldsOnly("PersonalData", GetDatabasename) & _
" FROM ((Resources INNER JOIN ResourcesOwners ON Resources.[Resource ID] = ResourcesOwners.[Resource ID]) INNER JOIN Photo ON ResourcesOwners.[Owner ID] = Photo.[Personal ID]) INNER JOIN PersonalData ON Photo.[Personal ID] = PersonalData.[Personal ID]" & _
" WHERE (((Resources.ResourceString)=" & Chr(34) & strEmail & Chr(34) & ") AND ((Resources.ResourceType)=2) AND ((ResourcesOwners.OwnerType)=0));"

End Function


Пояснения:

EnumRecordsetFieldsOnly - выдаёт строку с перчислением полей таблицы. Второй аргумент - путь к базе:


Public Function EnumRecordsetFieldsOnly(tbName As String, _
Databasename As String) As String
Dim db As Database
Dim rc As Recordset
f$ = Databasename
Set db = OpenDatabase(f$)
Set rc = db.OpenRecordset(tbName)
fc = rc.Fields.Count
For i = 0 To fc - 1
EnumRecordsetFieldsOnly = EnumRecordsetFieldsOnly & "[" & tbName & "]" & "." & "[" & rc.Fields(i).Name & "]"
If i < (fc - 1) Then
EnumRecordsetFieldsOnly = EnumRecordsetFieldsOnly & ", "
Else
EnumRecordsetFieldsOnly = EnumRecordsetFieldsOnly & " "
End If
Next i


db.Close
End Function


Таблицы: Resources, ResourcesOwners, PersonalData, Photo

Поля таблиц:

Resources:
Resource ID - счётчик
ResourceString - текст
ResourceType - число
ResourceSubType - число

ResourcesOwners:
Resource ID
Owner ID -число
OwnerType - число

PersonalData:

Personal ID - число
FirstName - строка
MiddleName - строка
SurName - строка
FullName - строка

Photo:
Personal ID - число
Photo - OLE

У одного Personal ID может быть несколько фоток.
Что, собственно, меня не устраивает: В далнейшем выбирается одна из фоток - та, которая соответствует текущей записи запроса. Почему-то выбирается то первая, то последняя, то где-то всередине (относительно времени добавления фоток в базу).

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 20.04.2005 (Ср) 1:23

Если в таблице нет кластерного индекса, то ни о каком порядке выбора речь идти не может. Извините, но это азы. БД тем и отличаются от объектов клиентского программирования, что порядок записей не должен играть никакой роли.

Не нравится - пронумеруйте. Иначе вы все равно никогда не сможете гарантировать сохранение нужного вам порядка строк.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 20.04.2005 (Ср) 8:04

А жаль. Ну, наверное, будем ставить счётчик.


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

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

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

    TopList