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 может быть несколько фоток.
Что, собственно, меня не устраивает: В далнейшем выбирается одна из фоток - та, которая соответствует текущей записи запроса. Почему-то выбирается то первая, то последняя, то где-то всередине (относительно времени добавления фоток в базу).