На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Опять MS Acess + C#
    Народ! Помогите доделать прогу!
    На форме есть DataGridView (или DataGrid, неважно), и база ms access( в аттаче), с которой надо работать только из этой проги работать(вставка, удаление, измение, выборка). В голове у меня такая каша, что не могу ниче сообразить.
    ХЕЛП!

    PS Или ссылочку хоть подкиньте...
    Прикреплённый файлПрикреплённый файлnewInternetShop.rar (16.93 Кбайт, скачиваний: 206)
      Разнопоточный доступ к GUI - там кроме разнопоточности показана работа с Access
        Посмотри в книге Э.Троелсена. Там есть. А в чем проблема?
          Цитата СаняСаняСаня @
          Посмотри в книге Э.Троелсена. Там есть. А в чем проблема?

          Не видел я там этого. Как полное название книги и страница?

          Цитата PIL @
          Разнопоточный доступ к GUI - там кроме разнопоточности показана работа с Access

          Это лишь малая часть, что мне итак понятно.
            GRIENDERS Добрый вечер!

            А в чем собственно проблема? В том как написать запросы или в чем то другом?
              Эндрю Троелсен. C# и платформа .NET. Стр 673.
                Цитата СаняСаняСаня @
                Эндрю Троелсен. C# и платформа .NET. Стр 673.

                Скачал ее в архиве, а там пароль... Видно не судьба. Как нибудь, если найду, почитаю.

                Цитата RDAlex @
                А в чем собственно проблема? В том как написать запросы или в чем то другом?

                Я кое что начиркал, создал бд, в ней одну простенькую таблицу. Короче все вроде нормально, но как сделать так, чтобы при добавлении записи ключевое поле само заполнялось как в самом Access'e. Ведь можно добавлять можно хоть и уникальными записями, но идущими не по порядку или вообще отрицательные.

                Не могу понять логику работы операторов вставки, удаления и тд. Например
                ExpandedWrap disabled
                  string sql_update = "UPDATE TestTable1 SET field1_for_table1=?, field2_for_table1=?, field3_for_table1=? WHERE id_for_table1=?";

                Это что, в таблице обязательно должно быть ключевое поле ?
                А если просто в ней 3 поля и все текстовые и нет ключевого, тогда как ?
                  Цитата GRIENDERS @
                  Это что, в таблице обязательно должно быть ключевое поле ?
                  А если просто в ней 3 поля и все текстовые и нет ключевого, тогда как ?
                  - первичный ключ должен присутствовать в таблице однозначно, пусть это будет одно поле или несколько полей. Работая с отсоединенными данными при отсутствии первичного ключа нет возможности идентифицировать строку которую ты хочешь изменить-удалить. С такими же полями может оказаться несколько записей.
                  Почитай что-то о базах данных.
                    Цитата GRIENDERS @
                    Короче все вроде нормально, но как сделать так, чтобы при добавлении записи ключевое поле само заполнялось как в самом Access'e.
                    ИМХО автоинкрементные поля - зло. Не пользуюсь ими. Значения для ключа генерю сам из запроса чтонить типа
                    ExpandedWrap disabled
                      public int dbGetNextId(string tablename, string id_name)
                              {
                       
                                  string sql="select max(" + id_name + ") from " + tablename;
                                  try
                                  {
                                      object o=com.ExecuteScalar(sql);
                                      if (o is int)
                                      {
                                          return (Math.Max((int)o + 1, 1));
                                      }
                                  }
                                  catch{}
                                  return -1;
                              }
                      arbuzov, не учи плохому :)
                      между 2-мя запросами на выборку max и вставкой данных, в многопользовательском режиме может быть уже вставлено несколько записей, и при вставке записей ты получишь исключение о ограничении целостности. Так можно делать - если ты единственный клиент базы, и то - некрасиво.
                        Цитата PIL @
                        arbuzov, не учи плохому :)
                        между 2-мя запросами на выборку max и вставкой данных, в многопользовательском режиме может быть уже вставлено несколько записей, и при вставке записей ты получишь исключение о ограничении целостности. Так можно делать - если ты единственный клиент базы, и то - некрасиво.

                        Но ведь можно сделать блокировку, чтобы никто не имел доступа на запись в таблицу в это время. Это займёт не так много времени...
                          Цитата PIL @
                          первичный ключ должен присутствовать в таблице однозначно

                          А вот взляните-ка на базу в аттаче, в которой во всех таблицах (кроме первой) просто нельзя сделать поля ключевыми из-за повторяющихся значений записей. Как быть?

                          К этой же базе данных:
                          А как сделать так, чтобы между таблицами в моей проге установить "связи" ("схема данных"- в Access'e) ?
                          Причем в таблице ТОВАРЫ поле ЖАНРЫ заполняется с помощью раскрывающегося списка (подстановкой) из таблицы ЖАНРЫ. Тоже самое должно быть в моей проге.
                          arbuzov, спсибо, учту это.
                            Цитата PIL @
                            первичный ключ должен присутствовать в таблице однозначно

                            А вот взляните-ка на базу в аттаче, в которой во всех таблицах (кроме первой) просто нельзя сделать поля ключевыми из-за повторяющихся значений записей. Как быть?

                            К этой же базе данных:
                            А как сделать так, чтобы между таблицами в моей проге установить "связи" ("схема данных"- в Access'e) ?
                            Причем в таблице ТОВАРЫ поле ЖАНРЫ заполняется с помощью раскрывающегося списка (подстановкой) из таблицы ЖАНРЫ. Тоже самое должно быть в моей проге.
                            arbuzov, спасибо, учту это.

                            Кстати, я одним глазком видел, как делаются аналогичные проги в c++ builder - там там все это намного проще, даже писать ниче не пришлось, хотя технология доступа там ADO.
                            Где все преимущества ADO.NET?
                            Странно как-то получается!
                            Прикреплённый файлПрикреплённый файл________________.rar (17.42 Кбайт, скачиваний: 217)
                              Цитата GRIENDERS @
                              А вот взляните-ка на базу в аттаче, в которой во всех таблицах (кроме первой) просто нельзя сделать поля ключевыми из-за повторяющихся значений записей. Как быть?

                              - составной первичный ключ на несколько полей, или ввести еще одно поле которое будет первичным ключем, и сделать его счетчиком


                              Цитата GRIENDERS @
                              Причем в таблице ТОВАРЫ поле ЖАНРЫ заполняется с помощью раскрывающегося списка (подстановкой) из таблицы ЖАНРЫ. Тоже самое должно быть в моей проге.

                              - по моему грид умеет отображать дочерние записи
                                Вопрос практически решен - RDAlex помог.

                                Но еще вопросик
                                Цитата PIL @
                                по моему грид умеет отображать дочерние записи

                                Может быть, но сначало надо же установить связи между таблицами. Как?
                                  Я не знаю как ты работаешь с данными - обрати свой взор на System.Data.DataRelation - они агрегированы в DataSet
                                    Добавил в некоторые таблицы ключевые поля как советовал PIL.
                                    Создаю связи - те связи должны быть как на схеме данных в Access'e
                                    ExpandedWrap disabled
                                       for (int i = 1; i < ds.Tables.Count; i++)
                                                  {
                                                      ds.Relations.Add(ds.Tables[0].Columns[0], ds.Tables[i].Columns[0]);
                                                  }

                                    Но вылетает с ошибкой.
                                      Ну подскажите же!!!!!!!!!!!
                                        GRIENDERS, ты б выложил ошибку.
                                          Цитата MIF @
                                          GRIENDERS, ты б выложил ошибку.


                                          Цитата

                                          An unhandled exception of type 'System.ArgumentException' occurred in System.Data.dll

                                          Additional information: This constraint cannot be enabled as not all values have corresponding parent values.
                                            Не получается связь создать. Скорее всего, поле связи - не первое поле в одной из подчиненных таблиц. Хотя могут быть и друге причины.
                                              Народ, ну помогите пожалуйста создать связи. База в аттаче. Мож быть базу немного надо изменить.
                                              Пробовал писать
                                              ExpandedWrap disabled
                                                 for (int i = 1; i < ds.Tables.Count; i++)
                                                            {
                                                                ds.Relations.Add(ds.Tables[0].Columns[0], ds.Tables[i].Columns[1]);
                                                            }

                                              эффект тот же. Думаю все из-за ключевых полей.
                                              Прикреплённый файлПрикреплённый файл________________.rar (17.85 Кбайт, скачиваний: 172)
                                                Ауууууууууууууу! Ну помогите же - осталось только это.
                                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                0 пользователей:


                                                Рейтинг@Mail.ru
                                                [ Script execution time: 0,0726 ]   [ 16 queries used ]   [ Generated: 27.04.24, 05:26 GMT ]