chyba zápisu databáze Access   otázka

VB.NET

Dobrý den,

převádím txt soubor do databáze v Accesu a část do Excelu. Vše proběhne vpořádku. DataSet naplním ale při da.update to vyplivne chybu zápisu: Syntaktická chyba v příkazu INSERT INTO.

Je to moje první práce s databázi ve VB. Jsem v koncích a vůbec nevím co je špatně. Prosím zkušenější a znalé o pomoc. Děkuji moc. Access i jeho engine mám nainstalován. Pokud použiji DataGridView, nemám s ukládáním problém. Musím to ale plnit z txt, jedná se o tisíce řádků...

 
' ---------------Spojení databáze -------------------
Dim con As New OleDbConnection
Dim dbProvider As String
Dim dbSource As String
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
        
dbProvider = "Provider=Microsoft.ACE.OLEDB.12.0;"
dbSource = "Data Source = C:\DataDatalog\MDB\DatalogDBF.accdb"

con.ConnectionString = dbProvider & dbSource
con.Open()
da = New OleDb.OleDbDataAdapter("SELECT * FROM int_kwr", con)
 'natáhnu z databáze schéma včetně primárního klíče
da.MissingSchemaAction = MissingSchemaAction.AddWithKey
da.Fill(ds, "dsTab")
con.Close()
' MsgBox("uzavření databáze")


Dim cb As New OleDb.OleDbCommandBuilder(da)
Dim dsNewRow As DataRow

While Not r2.EndOfStream   ' ukládání dat z txt do DataSetu    

         radek = r2.ReadLine()
         poleřádku = radek.Split(";")
          'vytvoř nový řádek do datasetu
            dsNewRow = ds.Tables("dsTAB").NewRow()
          'naplním dsNewRow 
            dsNewRow.Item("Anlage") = anlageStr
            dsNewRow.Item("Datum") = DenStahovaniStr
            dsNewRow.Item("Cas") = poleřádku(0)
            dsNewRow.Item("Interval-s") = poleřádku(1)
            dsNewRow.Item("Adresse") = poleřádku(2)
            dsNewRow.Item("KPC") = poleřádku(3)

              'přidám řádek do datasetu
              ds.Tables("dsTab").Rows.Add(dsNewRow)
        End While

        ' zápis do databáze
        Try
            da.Update(ds, "dsTab")
        Catch ex As Exception
            MsgBox("chyba zápisu databáze : " & ex.Message)
        End Try
        

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

Dobrý den,

pořád nad tím bádám a nedaří se mi najít chybu. I když vytvořím jen jediný prázdný záznam pouze s ID , který je klíč a má nastaveno autoinkrement, tak mi to na da.Update havaruje. Prosím,jak funguje ukládání, v případě, že při ukládání se narazí na duplicity? Ošetřuje si to dataadaptér sám? Databáze má 5 tabulek, jak da pozná kam to má zapsat? Při psaní kódu jsem postupoval dle www.homeandlearn.co.uk/NET/nets12p5.html

Děkuji za pomoc.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nie som si istý, ale zdá sa, že databáza je uzavretá už pred príkazom update. Con.close().

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

Dělal jsem to podle toho tutoriálu, nemám s tím zkušenost. Také mě to napadlo a když jsem dal před update příkaz con.open() tak se to chovalo stejně...

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

Zdá sa mi to podivné. Napríklad, kde je zadefinované r2, čo je to za databáza DatalogDBF.accdb. Oporúčam ešte raz preštudovať tento tutorial, alebo vyhľadať iný... Mimochodom r2 vyzerá ako StreamReader, len ho treba nadefinovať.

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

To jsme dva. Co se týká kódu dal jsem sem pouze kód co souvisí s převodem do databáze. r2 je definován dříve. Nadefinováno to je. Proběhne i správné naplnění DataSetu. Ten se následně nepodaří uložit. DatalogDbf.accdb jsem vytvořil v Accessu. Pokud s tou databázi pracuji přes dataGrid vše pracuje, můžu i zapisovat po jednotlivých záznamech. Potřebuji ale nalít do databáze spoustu řádku z txt souboru. Databáze obsahuje 5 tabulek. Tady načítám jednu, doplním do datasetu řádky z txt a Dataset pak nejde uložit.

  Try
                r2 = New IO.StreamReader(CestaHD & FileName2, System.Text.Encoding.Default)
            Catch ex As Exception
                MessageBox.Show("Chyba při otevírání souboru: " & FileName2 & " > " & ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Sub
            End Try

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