Access a VB2005 autoincrement problém   otázka

VB.NET, Databáze, Office

Dobrý den,

potřebuji vyřešit následující problém:

Mám DB vytvořenou v Accessu (mdb). V tabulce plní první pole funkci ID a má nastavenou vlastnost Automatické číslo (v Accessu), resp. Autoincrement v VB.

Ve VB je DataGridView, ve kterém při přidávání položek roste hodnota ID (správně). Pak všechny položky tabulky smažu a DB uložím pomocí TableAdapter.Update. Form s DatagridViewem znovu otevřu a mám prázdnou tabulku (správně). Při přidávánní nových položek se ID čísluje znovu od nuly! DB uložím stejým způsobem a EJHLE! všechna pole ID nejsou od nuly, ale od poslední hodnoty, která byla v Accessu pře výmazem všech položek (v zásadě je to asi správné). Ale všechna pole, která jsou svázána relacemi mají odkazy na špatné ID, která se ukládala při editaci a nic tak nefunguje.

Neví někdo, jak dostat aktuální hodnotu automatického čísla z databáze mdb do parametru VB? bylo by pak možné ji dosadit jako Autoincrementseed (číslo,od kterého se začíná připočítávat) a bylo by po problému (možná). Nebo má někdo nějaký jiný nápad? Předem moc díky za pomoc. Venca M.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V DataTable se v Column da nastavit vlastnost AutoincrementSeed, ale moc bych to nedoporučoval, protože v případě, že vám to Acces přečísluje tak tu relaci stejně ztratíte. Musíte nejdřív uložit hlavní tabulku potom si zjisti pod jakým primárním klíčem byla uložena a tento klíč potom přiřadit do relačních tabulek. A nebo to udělat přes DataSet a poskládat jednotlivé relace v DataSetu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já to dělám tak, že všechny potřebné data do databáze updatuji, a pak si je načtu hned zpět. Není to sice elegantní ale funguje to. Pokud by byla databáze obsáhlá, tak bych si načetl tčeba jen ID řádku, případně jen největší ze sloupce ID a pokračoval bych v řadě.

Public strconn As String = My.Settings.DCS
Public myConnection As OleDbConnection = New OleDbConnection(strconn)

Dim myDatatable As New DataTable
Dim myStringQuery As String = "SELECT * FROM NejakaTabulka"
Dim mydatadapter As OleDbDataAdapter = New OleDbDataAdapter(myStringQuery, myConnection)
Dim cmd As OleDbCommandBuilder = New OleDbCommandBuilder(mydatadapter)

...
mydatable.Rows.Add(mydatable.Columns("ID").AutoIncrement,DataForColumn1,......)
mydatadapter.Update(mydatable)
mydatable.AcceptChanges()
mydatable.Clear()
mydatadapter.Fill(mydatable)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback