Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: VB and Acceess....Help Добавлено: 24.03.03 23:19  

Автор вопроса:  !DEN! | ICQ: 276572424 
 

Есть база, в ней две таблицы, где 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.

 

FRIEND                                 EMAIL

Id_user                                    id

User_name                              id_user1

                                               Email

 

Вопрос: каким образом в VB сделать так, чтобы, если у юзера больше одного мыла, то они выводились бы в столбик в ТЕХТ'е (или другом компоненте), а не все мыла всех юзеров. Понимаю, что проблема в запросе. Кто-нибудь поможет составить это долбаный запрос и куда его вставить? Заранее благодарю за пример.

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Gravity



Вопросов: 6
Ответов: 120
 Профиль | | #1 Добавлено: 25.03.03 00:06

Сделай лучше вот так:

FRIEND                         E-MAIL

Number---(1 ко многим)---N

User_Name                    User_Email

----------- - это связь ( получается у тебя 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 - номер юзверя которому принадлежит мыло)

Удачи .... :)  

Ответить

Номер ответа: 2
Автор ответа:
 !DEN!



ICQ: 276572424 

Вопросов: 7
Ответов: 33
 Профиль | | #2 Добавлено: 25.03.03 02:09

Gravity - Я не могу понять, у таблицы Frends поле  "nomer" как ты говариши должно быть связана с таблицей Email полем "N" но как, они ведь же счетчики, и получаеться "одни-к-одному"

Да и ещё почемуто ошибку выдает вот здесь "Compile error:"

Private Sub Data1_Reposition()
Data2.Recordset! = "select from e-mail were n= " & nemer
End Sub

Спасибо что Откликнулся!!!

 

Ответить

Номер ответа: 3
Автор ответа:
 Sergey M.



Вопросов: 9
Ответов: 68
 Профиль | | #3 Добавлено: 25.03.03 02:52

в саму суть не вникал, но между select и from нужно указать поля

которые выбираешь из таблицы или поставить звездочку, для

выбора всех полей, select * from mytable .......

Ответить

Номер ответа: 4
Автор ответа:
 hedgehog



ICQ: 175571327 

Вопросов: 15
Ответов: 207
 Web-сайт: ezh.ru
 Профиль | | #4
Добавлено: 25.03.03 11:44

Запрос необходимый тебе выглядит следующим образом:

SELECT EMAIL.Email FROM FRIEND INNER JOIN EMAIL ON FRIEND.Id_user = EMAIL.id_user1

WHERE FRIEND.User_name=[friend name]

Вернет только мейлы юзера [friend name], а что ты с ними делать будешь это уже по вкусу. Я обычно просто пользуюсь библиотеками ADO без всяких компонентов. Так что останется просто перебрать возвращенный рекордсет и вставить данные, отформатировав, туда куда тебе нужно.

Ответить

Номер ответа: 5
Автор ответа:
 Sergey M.



Вопросов: 9
Ответов: 68
 Профиль | | #5 Добавлено: 25.03.03 12:13

согласен с hedgehog, INNER JOIN  просто необходим при настроеных связях меж таблицами (если почеловечьи делать).

Ответить

Номер ответа: 6
Автор ответа:
 !DEN!



ICQ: 276572424 

Вопросов: 7
Ответов: 33
 Профиль | | #6 Добавлено: 25.03.03 18:48

hedgehog - а куда запрос в ставлять то?...если в ;Data.recordset! то

ошибку выдает...А пример не можишь прислать по ADO и DAO...

 

Ответить

Номер ответа: 7
Автор ответа:
 hedgehog



ICQ: 175571327 

Вопросов: 15
Ответов: 207
 Web-сайт: ezh.ru
 Профиль | | #7
Добавлено: 25.03.03 18:53

Вообще-то странно почему ошибка, напиши подробнее, что за базу ты используешь. И надеюсь ты заменил =[friend name] на нужную тебе строку?

Ответить

Номер ответа: 8
Автор ответа:
 !DEN!



ICQ: 276572424 

Вопросов: 7
Ответов: 33
 Профиль | | #8 Добавлено: 26.03.03 17:19

 hedgehog - А ты не можишь прислать на мыло пример по ADO and DAO?....если не влень...=)

Ответить

Номер ответа: 9
Автор ответа:
 !DEN!



ICQ: 276572424 

Вопросов: 7
Ответов: 33
 Профиль | | #9 Добавлено: 27.03.03 23:05

Так ктонить можит пример привести по DAO и ADO!!!

Ответить

Номер ответа: 10
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #10 Добавлено: 28.03.03 01:44

Дааа....

Что это такое? 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.Там вся моя писанина изложена в большем объеме...

Удачи...

 

Ответить

Номер ответа: 11
Автор ответа:
 hedgehog



ICQ: 175571327 

Вопросов: 15
Ответов: 207
 Web-сайт: ezh.ru
 Профиль | | #11
Добавлено: 28.03.03 11:15

ОК - пример с твоим запросом в плане ADO (DAO я давно забросил :)

Private Sub Form_Load()

Dim Conn As New ADODB.Connection

Dim RS As ADODB.Recordset

Dim ConnectionString As String

Dim SQL As String

Dim FriendName As String

FriendName = "Any Name"

ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\any path\file name.mdb;"

SQL = "SELECT " & _

"EMAIL.Email " & _

"FROM FRIEND INNER JOIN EMAIL ON FRIEND.Id_user = EMAIL.id_user1 " & _

"WHERE FRIEND.User_name='" & FriendName & "'"

Conn.Open ConnectionString

Set RS = New ADODB.Connection

RS.Open SQL, Conn

Do Until RS.EOF

Text1.Text = Text1.Text & RS("Email") & vbCrLf

Loop

RS.Close

Conn.Close

Set RS = Nothing

Set Conn = Nothing

End Sub

Ответить

Номер ответа: 12
Автор ответа:
 hedgehog



ICQ: 175571327 

Вопросов: 15
Ответов: 207
 Web-сайт: ezh.ru
 Профиль | | #12
Добавлено: 28.03.03 11:16

Если что не ясно спрашивай...

Ответить

Номер ответа: 13
Автор ответа:
 !DEN!



ICQ: 276572424 

Вопросов: 7
Ответов: 33
 Профиль | | #13 Добавлено: 28.03.03 23:21

EROS-Спасибо за пример...А насчет книги, по SQL, я уже читаю...=)

hedgehog-Спасибо за пример по ADO...тоже скоро буду читать...как закончу SQL.=)

Всем удачи!!!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам