Usuwanie wiersza, ktory nie posiada kolumny PRIMARY

0

Witam.

Mam dużą bazę danych (ok. 15000 rekordów), problem w tym, że nie mam kolumny ID, przez co nie moge usunąć danego wiersza. Bazę ładuje do DataGridView i chce usunąć z bazy zaznaczony wiersz. Usuwanie z tabeli mam, problem w tym, że nie wiem jakie zapytanie napisać, aby usunąć zaznaczony wiersz.

0

To co jest kluczem głównym tej tabeli?

0

Nie mam zielonego pojęcia. Są to pliki .DBF które po załadowaniu do Accessa przerzucam do OLEDB (c#) i na nich operuje. Przejrzałem kod źródłowy bazy, nigdzie nie ma jakiejś kolumny z autoinkrementacją. Jedyne wyjście w usuwaniu widzę tylko w podaniu imienia i nazwiska i usunięcia, bo nie wiem, jak zrobić usuwanie zaznaczonego wiersza.

0

W najgorszym przypadku potraktuj wszystkie kolumny jako unikalny identyfikator rekordu, czyli delete from Tab where col1= ? and col2 = ? and col3 = ? ...
Trochę to słabe, ale jeśli nie wiesz co jest kluczem, bo samo imie+nazwisko wg mnie raczej nie.
Albo na swoje potrzeby po załadowaniu do access dodaj kolumnę id.

0

Tak też chciałem zrobić - dodać nową kolumnę ID w Accessie, ale nie mam zablokowane wszystkie takie opcje dla plików .DBF po wrzuceniu do Accessa. Nie da się nic zmienić...
Jest to stara baza używana kiedyś w programie napisanym pod DOS, tam można normalnie usuwać wiersz (tak jak ja bym chciał w swojej wersji), nie wiem jednak na jakiej podstawie to działa.
@massther--> to usuwanie po kolumnach, to nie wiem jak zrobić, że jeśli dana komórka jest zaznaczona to ją usuń. Problem podobny do tego, co chce osiągnąć - nie wiem jak skonstruować zapytanie do bazy, które usunie aktualnie zaznaczone komórki z Database.

0
  1. W tabelach DBF istniej pojęcie aktualnego rekordu. Polecenia delete (update) działają na tym rekordzie, nie jest konieczna klauzula FOR.
  2. Spróbuj otworzyć w Excelu.
0

Jakie komórki? Chyba wiersze (rekordy)?
Rekord składa się z jakiejś liczby wartości, powiedzmy w uproszczeniu kolumn. Więc jeśli nie potrafisz ustalić unikalnego identyfikatora rekordu, to zakładasz że wszystkie kolumny są nim.

Przykład:

kol1 kol2 kol3 kol4
1 A zzz 3
3 A zzz 6
1 A ddd 8
1 B zzz 2
żeby usunąć rekord nr 3

delete from tab
where kol1=1 and kol2='A' and kol3='ddd' and kol4=8

wiem że to masakra i normalnie sam palną bym się w łeb za to

Inne rozwiązanie to zaimportować dane np. do MS SQL Server 2008 express edition, tam na pewno będziesz mógł dodać kolumnę id, później możesz dane z ms sql wyeksportować do access jeśli chcesz go bardzo używać. Ja accessa ostatnio widziałem chyba 10 lat temu i nie mam go nigdzie dostępnego, więc nie wiem w czym dokładnie masz problem z utworzeniem kolumny w access. Opisz może dokładniej jaki masz problem z utworzeniem kolumny autoincrement w access.
Może najpierw dodaj kolumnę integer, która dopuszcza null, później wpisz tam kolejne wartości, dopiero ustaw ją na autoincrement.
Lub stwórz drugą tabelę pomocniczą z autoincrement id i pozostałymi kolumnami. Do drugiej tabeli wstaw wszystkie rekordy z pierwszej i usuń pierwszą.

0

Zrobiłem, jak powiedział bo - otworzyłem bazę w excelu i dodałem nową kolumnę, po czym wszystko zaimportowałem do OleDb w programie. Także mam teraz kolumnęez ID więc powinno pójść z górki :).

@massther --> Chodzi mi o usunięcie wiersza zaznaczonego w datagridview. Jak chcesz przenieść dane z zaznaczonego wiersza na Twój sposób? Rozumiem, co napisałeś, ale to by było strasznie mozolne usuwanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1