Есть база, в ней две таблицы, где 1) FRIEND с полями: id_user, user_name 2) EMAIL, с полями: id, id_user1, email. В полях FRIEND – id_user – счетчик, user_name – фамилия. В EMAIL – id – счетчик, id_user1 – подстановка из счетчика id_user таблицы FRIEND, email – мыло юзера. Таблицы связаны связью "один-ко-многим", т.е. у одного юзера может быть несколько мыл. Итак, к id_user1подставляется поле id_user.
FRIENDEMAIL
Id_userid
User_nameid_user1
Email
Вопрос: каким образом в VB сделать так, чтобы, если у юзера больше одного мыла, то они выводились бы в столбик в ТЕХТ'е (или другом компоненте), а не все мыла всех юзеров. Понимаю, что проблема в запросе. Кто-нибудь поможет составить это долбаный запрос и куда его вставить? Заранее благодарю за пример.
----------- - это связь ( получается у тебя User_Name один, а E-Mail`ов у него много, вроде так ...) Размести на форме два объекта упр.данными (DAO или ADO). Я покажу на примере DAO, сначала введи свойства этих 2х объектов упр.данными:
data1.databasename = <Путь к файлу твоей базы данных>
data1.recordsource="FRIEND"
С первым объектом вроде закончили ...
data2.databasename = <Путь к файлу твоей базы данных>
data2.recordsource="E-MAIL"
А теперь сам запрос: data1_reposition ( ) - событие которое происходит при изменении позиции в базе данных, ну например щелкаешь по >| или > )
Private Sub Data1_Reposition() Data2.Recordset! = "SELECT FROM E-MAIL WHERE N = " & Number End Sub
по-русски это звучит так: "Выбрать из таблицы E-MAIL все записи где N = Number ... Number - это номер юзверя (при создании базы данных сделай так чтобы Number было единственным, это типа чтобы не было 2х юзверей с одинаковыми номерами), а N - номер юзверя которому принадлежит мыло)
Gravity - Я не могу понять, у таблицы Frends поле "nomer" как ты говариши должно быть связана с таблицей Email полем "N" но как, они ведь же счетчики, и получаеться "одни-к-одному"
Да и ещё почемуто ошибку выдает вот здесь "Compile error:"
Private Sub Data1_Reposition() Data2.Recordset! = "select from e-mail were n= " & nemer End Sub
Запрос необходимый тебе выглядит следующим образом:
SELECT EMAIL.Email FROM FRIEND INNER JOIN EMAIL ON FRIEND.Id_user = EMAIL.id_user1
WHERE FRIEND.User_name=[friend name]
Вернет только мейлы юзера [friend name], а что ты с ними делать будешь это уже по вкусу. Я обычно просто пользуюсь библиотеками ADO без всяких компонентов. Так что останется просто перебрать возвращенный рекордсет и вставить данные, отформатировав, туда куда тебе нужно.
Что это такое? Data2.Recordset! = "select from e-mail were n= " & nemer
Ты где видел такое???? Ты где видел чтобы объекту Recordset присваивали SQL запрос???
Прежде чем пред'являть претензии типа:"Так ктонить можит пример привести по DAO" Потрудись прочитать пару глав из любой книги про SQL!!!
Парни в ответах тебе правильно писали, просто они не могли представить, что ты запрос будешь присваивать набору записей!!!
Для справки: Recodset-это уже готовый набор записей.И ты не можешь присвоить ему SQL-запрос.А SQL присваивается свойству RecordSource элемента управления Data! И после вызова метода Refresh ты получаешь набор записей RecordSet созданный на основе твоего SQL-запроса...
Другими словами надо было писать так...
Data1.RecordSource="select e-mail.* from e-mail where n= " & nemer
Data1.Refresh
И вот только после этого в Data1.Recordset будут твои E-mail.Еще один момент... Если поле в базе данных с твоими E-mail имеет тип String, то верхний пример тоже вызовет ошибку, так в SQL стринговые переменные должны быть заключены в одиночные кавычки... Например:
Data1.RecordSource="select e-mail.* from e-mail where n= "'" & nemer & "'" Что-то типа этого...Хотя я не уверен в правильности данного запроса в твоем,конкретном, случае.Чтобы правильно написать запрос надовидет пример перед глазами.
Прежде чем приступать к решению таких(пускай и простеньких) задач прочти что нибудь на тему SQL & Data.Там вся моя писанина изложена в большем объеме...