Pierwszy program w Visual Studio z bazą danych

Witam wszystkich programistów,

Mam problem, mianowicie chcę napisać program w VS z użyciem bazy danych z Accessa.

Jestem początkującym … programista to za duże słowo … userem próbujacym napisać własny program.

Kilka lat temu coś tam robiłem w Delphi, ale to było dawno i programik nie opierał się o bazę danych, natomiast ten który chcę napisać opiera się i to nie o pierwszą lepsza baz danych, tylko bardziej skomplikowaną (przynajmniej dla mnie).

Otóż nie potrafię zbudować bazy danych (lub obrałem zły tok myślenia jak taką bazę stworzyć) w której będzie kilka-kilkanaście formularzy. Na każdy formularz składa się jedno ID osoby (wybierane z bazy Osoby) oraz kilka rekordów pobieranych z drugiej bazy (Rzeczy). To co sworzyłem wygląda tak:

Baza Osoby - zawiera dane osób

Baza Rzeczy - zawiera różne notatki (ale nie są to wartości jednokomorkowe, tylko mają kilka kolumn, podobnie jak baza osób)

i trzecia baza: Karty i co mam zrobić żeby do karty nr 1 przyporządkować osobę np. która np jest na przedostatnim miejscu w tabeli Osoby oraz przyporządkować 2 pierwsze lepsze notki.

Nie wiem czy te informacje będą potrzebne, ale chciałbym potem mieć możliwość dodawania i edycji poszczególnych danych w programie, ale tak żeby się one zapamiętywały, ponieważ zrobiłem prosty program oparty tylko na bazie Osoby, włączyłem w DataGridView (podgląd lokalnej bazy danych) możliwość dodawania, edycji i usuwania rekordów, jednak przy dodawaniu rekordow ID osób było ujemne: -1,-2,-3,-4… i po wyjściu i ponownym uruchomieniu programu dodane rekordy w tabelach zniknęły.

Z góry wielkie dzięki za pomoc :slight_smile:

Edit: Używam Accessa 2010 PL w wersji testowej + Visual Studio 2010 Ultimate ENG z MSDNAA + polską nakladkę na wersję Pro - dlatego jest spolszczony tylko w części

Baza ma tabele, tabele mają kolumny i rekordy.

Co Ty nazywasz bazą? Tabelę?

Myślę, że powinieneś mieć mniej więcej takie tabele:

Osoba: Id, Imię, Nazwisko, Płeć

Rzeczy: Id, Nazwa, Opis

Karty: Id, Nazwa, IdOsoby, IdRzeczy1, IdRzeczy2

Ale jeśli jedna Karta ma być powiązana z kilkoma Osobami lub Rzeczami, to trzeba będzie użyć tabel pośrednich.

Dane po restarcie programu zniknęły zapewne dlatego, że przy każdej kompilacji Twój plik Accessa jest kopiowany do katalogu Debug i nadpisuje starą wersję. Spróbuj zmienić we właściwościach pliku w Solution Explorer, żeby nie był tam kopiowany.

sorry, źle opisałem: mam 1 plik bazy danych z 3 tabelami tak jak napisałeś:

Trzecią zaplanowałem podobnie, bo; Karty: Id, IdOsoby, IdRzeczy; bez Nazwa oraz IdRzeczy2

jak mam to zrobić? grzebałem w relacjach tabel, jedyne co znalazłem to “Podarkusz danych” i myślę czy dałoby się zrobić coś takiego, że do każdego rekordu w tabeli “Karta” podpiąć 2 podarkusze danych - jeden od “Osoby” - tu znajdowalby się 1 rekord z tabeli “Osoba”, a drugi podarkusz zawierałby rekordy z tabeli “Rzeczy” - tylko w ostatecznej wersji po podczepieniu bazy danych do programiku chciałbym żeby w formularz przy liście wyskakiwały podpowiedzi, czyli jeśli dobrze myślę, to podarkusze musiałby mieć jakieś powiązanie z tabelami “Osoba” i “Rzeczy”

Wiem że to bardzo skomplikowane ale coś takiego sobie wymyśliłem - w ekstremalnej sytuacji poszukam kogoś kto mógby mi po w miarę niskiej cenie pomóc napisać taki program.

Nie znam się na Accessie, nie wiem co to “Podarkusz danych”. Ale w Twoim problemie nie ma nic skomplikowanego. Jeśli jedna Karta ma być powiązana z nieznaną liczbą Rzeczy, to trzeba zrobić tabelę RzeczyKarty: Id, IdRzeczy, IdKarty i każde takie powiązanie zapisać jako oddzielny rekord w tej tabeli. Dzięki temu może ich być 0, 1 lub wiele. Tak to się rozwiązuje bez względu na rodzaj używanej bazy danych. Ale jeśli wiesz, że jedna Karta ma zawsze dwie Rzeczy to w tabeli Karta zrobiłbym dwie kolumny na IdRzeczy.

ok, tylko wtedy każda dodana rzecz dodaje nowe ID - nie wiem co zrobić żeby to ID pozostało niezmienne przy dodawaniu kilku rekordów. Przypuśćmy, że obok kolumn płeć, (gdzie będzie 1 wartość), mam też kolumnę “cechy charakteru” i jedna osoba ma kilka cech. Chyba że chodzi ci o umieszczenie kilku wartości w jednym rekordzie, bo coś takiego w Accessie wykryłem. Z poziomu “przeglądarki” bazy danych nie wygląda to zbyt czytelnie (i jest to dla mnie oczywiste), natomiast nie wiem czy w końcowej fazie (w programie) będzie to czytelne - chciałbym żeby wartości (których może być >2) były w formie tabeli tak jak np. tu: http://www.blogiseverything.com/files/p … anager.gif , natomiast rekordy z jedną wartością (Imię, nazwisko, płeć i inne pojedyncze wartości byłby wyświetlane w innej formie - myślę nad pojedynczymi komórkami tekstowymi - nie wiem czy dobrze określiłem, w każdym razie nie będą wizualnie połączone z tabelą)

W takim razie potrzebujesz oddzielnej tabeli na cechy charakteru osób, w której będzie IdWpisu, IdOsoby i np. NazwaCechy. Wówczas jedna osoba będzie mogła mieć 0 lub wiele cech.

Inventer89 , nazwij proszę temat konkretnie, bez zbędnych równań w tytule. Inaczej wyciągnę konsekwencje. Przeczytaj proszę ten temat. viewtopic.php?f=16&t=394978