Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 21

Связь Access между form1 и form2

23.06.2018, 14:15. Показов 1282. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу сообразить, как сделать зависимость. Есть форма1 (ввод логина и пароля). Если логин и пароль совпадает с базой, то открывается форма2. Мне нужно что бы в форме 2 выводились некоторые данные из строки бд access, в которой совпадает логин и пароль введенные в форме1. Я что то не могу найти по этому поводу информацию... дайте пожалуйста какой нибудь пример или ссылку на него...

Формы все готовые и все запросы работают, но я не знаю как сделать зависимость формы1 и формы2 к одной строке бд Access...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.06.2018, 14:15
Ответы с готовыми решениями:

Form1 связь с Form2!!!
Работа Form1 непосредственно взимосвязывает Form2 объясните:) начинающиму подробно разжуйте ??? немного объяснение как я хочу сделать...

Как передать данные между Form1 и Form2?
Есть клас Form1:Form. Надо передать значения в класс Form2 и назад. Как реализовать через get;set?

Через Form1 открывают Form2 там открывается Form3 которая меняет данные в Form1. Но они не меняются
В первой форме Main по нажатию кнопки вызываю другую форму private void Button_AddVetrina(object sender, EventArgs e) { ...

8
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
23.06.2018, 20:03
Не нужно этого делать. Т.е. зависимость форм в Вашем случае быть не должно. Должен быть отдельный класс с данными, что возвращает запрос. Вот к этому и идите.
1
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 21
24.06.2018, 13:29  [ТС]
Цитата Сообщение от hoolygan Посмотреть сообщение
Не нужно этого делать. Т.е. зависимость форм в Вашем случае быть не должно. Должен быть отдельный класс с данными, что возвращает запрос. Вот к этому и идите.
честно говоря какое то представление есть, но не знаю как реализовать) я еще только учусь всему, хотелось бы статейку почитать какую то...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18255 / 14180 / 5366
Регистрация: 17.03.2014
Сообщений: 28,869
Записей в блоге: 1
24.06.2018, 14:46
Nafanyatlt, смотри ответ 2.3 (Передача данных в конструктор Form2) и тему Архитектура ПО в WinForms (FAQ & HowTo)
1
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 21
26.06.2018, 22:02  [ТС]
Не хочу показаться тупым, но я не понимаю как мне сделать... функции логин и регистрацию сделал, а как подсчет не догоню...
вот отдельный класс:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
namespace Kurs
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
    class ConnectDB
    {
        OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Test1.mdb");
 
        public bool login(string login, string password, Form2 f2)
        {
            connection.Open();
            OleDbCommand cmd = new OleDbCommand("select * from Account where id and Login='" + login + "' and Password='" + password + "'", connection);
            OleDbDataReader dr = cmd.ExecuteReader();
            if (dr.Read())
            {
                f2.Text = dr[3].ToString();
                f2.Show();
                connection.Close();
                return true;
            }
            else
            {
                MessageBox.Show("Не правильный логин или пароль");
                connection.Close();
                return false;
            }
        }
 
        public bool registrations(string loginTextBox1, string passwordTextBox2, string passwordTextBox3, string NameTextBox4, string AgeTextBox5, string WeightTextBox6, string GrowthTextBox7)
        {
            if ((loginTextBox1.Equals("")) || (passwordTextBox2.Equals("")) || (passwordTextBox3.Equals("")) || (NameTextBox4.Equals("")) || (AgeTextBox5.Equals("")) || (WeightTextBox6.Equals("")) || (GrowthTextBox7.Equals("")))
            {
                MessageBox.Show("Вы не ввели все необходимые данные!!", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                return false;
            }
 
            try
            {
                connection.Open();
                OleDbCommand foundLogin = new OleDbCommand("SELECT * FROM Account where Login='" + loginTextBox1 + "'", connection);
                OleDbDataReader dr = foundLogin.ExecuteReader();
                if (dr.Read())
                {
                    if (loginTextBox1.Equals(dr[1].ToString()))
                    {
                        MessageBox.Show("Данный Login уже занят, придумайте другой");
                        connection.Close();
                    }
                    else
                        dr.Close();
                }
                else
                {
                    if (passwordTextBox2 != passwordTextBox3)
                    {
                        MessageBox.Show("Пароли не совпадают");
                    }
                    else
                    {
                        try
                        {
                            OleDbCommand cmd = new OleDbCommand("INSERT INTO [Account] ([Login], [Password], [Name], [Age], [Weight], [Growth]) VALUES (@Login, @Password, @Name, @Age, @Weigth, @Growth)", connection);
                            cmd.Parameters.AddWithValue("Login", loginTextBox1);
                            cmd.Parameters.AddWithValue("Password", passwordTextBox3);
                            cmd.Parameters.AddWithValue("Name", NameTextBox4);
                            cmd.Parameters.AddWithValue("Age", Convert.ToInt32(AgeTextBox5));
                            cmd.Parameters.AddWithValue("Weight", Convert.ToInt32(WeightTextBox6));
                            cmd.Parameters.AddWithValue("Growth", Convert.ToInt32(GrowthTextBox7));
                            cmd.ExecuteNonQuery();
                            MessageBox.Show("Данные добавлены!");
                            return true;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            connection.Close();
                        }
                        connection.Close();
                    }
                }
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
                connection.Close();
            }
            connection.Close();
            return true;
            
        }
        public double summa(string login)
        {
            connection.Open();
            OleDbCommand cmd = new OleDbCommand("select * from Account where id and Login='" + login + "'", connection);
            OleDbDataReader dr = cmd.ExecuteReader();
            dr.Read();
            double a = Convert.ToDouble(dr[4]); // возраст
            double b = Convert.ToDouble(dr[5]);// весс
            double c = Convert.ToDouble(dr[6]);// рост 
            double summa = ((99.9 * b) + (6.25 * c) - (4.29 * a) + 5);
            return summa;
        }
    }
}


функция login и registrarion работают в первой форме, а функцию summa мне нужно её присвоить к leable в форме2. Как мне сделать что бы функция summa брала данный от пользователя который уже ввел правильно логин и пароль, и уже в открывшейся ему форме2 отражалась summa, я просто не догоняю...
Прошу мысль какую то...
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
27.06.2018, 08:18
Мысль - ок.
1. Не нужно привязываться к формам в классе-вычислителе. Какие Message-box-ы и/или контролы там могут быть? - Вообще никаких. Вы же понапихивали контролов каких только можно было бы. Весь функционал должен быть построен только на параметрах функций, с пробросом ошибки наверх в случае необходимости.
2. Создавайте объект такого класса в главной форме, и обращайтесь к нему, используя его методы и параметры.
3. Если так уж сильно хочеться запихнуть весь-весь функционал (жалко кода или классов?) в один класс - то создавайте там и свойства тоже, присваивайте нужные результаты свойствам, и оперируйте ими. Тут еще нужно помнить о потокобезопасности, если вдруг будете создавать разные екземпляры и работать с ними в потоках (любители есть).
1
0 / 0 / 0
Регистрация: 07.01.2018
Сообщений: 21
27.06.2018, 20:02  [ТС]
Цитата Сообщение от hoolygan Посмотреть сообщение
Мысль - ок.
1. Не нужно привязываться к формам в классе-вычислителе. Какие Message-box-ы и/или контролы там могут быть? - Вообще никаких. Вы же понапихивали контролов каких только можно было бы. Весь функционал должен быть построен только на параметрах функций, с пробросом ошибки наверх в случае необходимости.
2. Создавайте объект такого класса в главной форме, и обращайтесь к нему, используя его методы и параметры.
3. Если так уж сильно хочеться запихнуть весь-весь функционал (жалко кода или классов?) в один класс - то создавайте там и свойства тоже, присваивайте нужные результаты свойствам, и оперируйте ими. Тут еще нужно помнить о потокобезопасности, если вдруг будете создавать разные екземпляры и работать с ними в потоках (любители есть).
Я все равно не догоню как это делается... все мои идеи не работают, уже неделю сижу и не соображу, а сдавать уже в пятницу этот курсач)
Я просто не пойму как мне суммировать некоторые данные пользователя.... Все перепробовал:
"смотри ответ 2.3 (Передача данных в конструктор Form2) и тему Архитектура ПО в WinForms (FAQ & HowTo)"
0
360 / 287 / 76
Регистрация: 21.06.2016
Сообщений: 1,115
27.06.2018, 21:35
Я порой удивляюсь, чему сейчас учат. Как можно приступать к изучению форм, если не знать самых базовых и примитивных понятий и конструкций языка?
Начинайте учить понятия классы и объекты. Что это и зачем создаётся, и как использовать.
Вам дали уже уйму подсказок, что и как сделать. По ссылкам выше об архитектуре уже расписано практически всё. Если не можете этого понять - то лучше вообще закинуть это дело, толку много не будет.
Да и вряд ли тут сделают полностью курсовую за Вас (имеется в виду в разделе помощи).
По поводу суммы - язык sql запросов имеет в своём расположении математические операторы, коими тоже можно пользоваться.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18255 / 14180 / 5366
Регистрация: 17.03.2014
Сообщений: 28,869
Записей в блоге: 1
27.06.2018, 22:09
Лучший ответ Сообщение было отмечено Nafanyatlt как решение

Решение

Nafanyatlt, для начала переделываем метода login, чтобы он только проверял правильность логина/пароля и возвращал информацию о пользователе. Создание формы и вывод сообщений переносится тогда в первую форму.
Часть класса ConnectDB
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class ConnectDB
{
    const string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Test1.mdb";
 
    public static Account login(string login, string password)
    {
        Account account;
        using (OleDbConnection connection = new OleDbConnection())
        {
            OleDbCommand cmd = new OleDbCommand("select * from Account where Login=@Login and Password=@Password", connection);
            cmd.Parameters.AddWithValue("@Login", login);
            cmd.Parameters.AddWithValue("@Password", password);
            connection.Open();
            using (OleDbDataReader dr = cmd.ExecuteReader())
            {
                account = new Account(dr);
            }
        }
        return account;
   }
}

Класс Account
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Account
{
    public bool Authenticated { get; private set; }
    public string Login { get; private set; }
    public double Age { get; private set; }
    public double Height { get; private set; }
    public double Weight { get; private set; }
    public double Summa
    {
        get { return ((99.9 * Weight) + (6.25 * Height) - (4.29 * Age) + 5); }
    }
    
    public Account(IDataReader dataReader)
    {
        if (Authenticated = dataReader.Read())
        {
            Login = (string)dataReader["Login"];
            Age = Convert.ToDouble(dataReader[4]); // Индекс лучше заменить на имя колонки!
            Weight = Convert.ToDouble(dataReader[5]); // Индекс лучше заменить на имя колонки!
            Height = Convert.ToDouble(dataReader[6]); // Индекс лучше заменить на имя колонки!
        }
    }
}

Примерный код в первой форме
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
try
{
    Account account = ConnectDB.login(login, password);
    if (account.Authenticated)
    {
        Form2 f2 = new Form2(account);
        f2.Show();          
    }
    else
    {
        MessageBox.Show("Неправильный логин или пароль");
    }
}
catch (Exception ex)
{
    MessageBox.Show("Ошибка при выполнении запроса: " + ex.Message);
}

В конструкторе второй формы принимаем Account и выводим информацию из него или сохраняем на будущее.

Метод регистрации в ConnectDB советую переделать по аналогии с login.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2018, 22:09
Помогаю со студенческими работами здесь

Обратная связь Form2 к Form1
код Form1 в котором у нас по нажатию на button открывается Form2(Form1 остается открытым) Вот у на Form2. как обращаться...

Как написать функцию для Буттон1(Которая распол. на Form2) что бы возвращалась к Form1 от Form2
Коллеги подскажите как написать такю кнопку=)) Пробовал oid __fastcall TForm2::Button1Click(TObject *Sender) { Form1-&gt;ShowModal(); ...

Form1 и Form2
Привет. Скажите пожалуйста, как можно связать между собой формы? На Form1 у меня IdTCPServer1 На Form2 у меня Edit1 и Edit2 и Кнопка ...

form1 form2
В form1 использую класс var name:TClass1; В form2 использую кнопку с процедурой: procedure...

Form1 and Form2
В Form1 есть процедура в которой изменяются свойства формы можли ли сделать так чтоб при обращение к этой процедуре из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru