Toon posts:

VB 2005 transactie en access database

Pagina: 1
Acties:

Verwijderd

Topicstarter
Tweakers,

Ik ben Visual Basic 2005 aan het verkennen en nu wil ik een programmatje maken dat data lees en schrijft naar een Access database.
Tot nu toe ging alles zéér vlot maar ik ben tegen een obstakel aangelopen:
Ik moet 2 records opvullen, adresgegevens (straat, gemeenten,...) en persoonsgegevens (naam, ...).
Beide records hebben ook een autonummeringsveld ID. In het records van de personen is er ook een veld AdresID voorzien.
Met andere woorden, vooraleer ik mijn persoonsrecord mag toevoegen of updaten moet ik eerst het adresrecord afwerken.

Daarom had ik dit graag met een transactie gedaan maar alle voorbeelden die ik tegenkom in de help werken niet met Access. Hoe los ik mijn probleem dan op?

PS: ik selecteer, update, delete en insert de records via mijn tableAdapter en het liefst behoud ik dit...

Verwijderd

Access ondersteunt geen transacties ... dus dat gaat niet werken.

Verwijderd

Verwijderd schreef op zaterdag 27 augustus 2005 @ 22:35:
Access ondersteunt geen transacties ... dus dat gaat niet werken.
Access geen transacties ? goh, dan moet ik mijn programma's toch eens gaan herschrijven !
Oftewel, Access kent WEL transacties. in ieder geval wel in mijn VB6 applicaties die gebruik maken van ADO : http://msdn.microsoft.com...0/htm/mdmthbegintrans.asp

[ Voor 4% gewijzigd door Verwijderd op 27-08-2005 22:53 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:54
Access ondersteunt zeker transacties.

waarom moet je eerst je adres-gegevens toevoegen voordat je je persoonsgegevens toevoegt ?
Het adres behoort toch tot een persoon, en jouw tabel adres, zal toch een foreign key naar persoon bevatten ?

Geef eens wat relevante code.

Als je met een data-adapter werkt, dan zal je dus ook met een dataset werken ? Hoe ziet die dataset er uit ? Bevat die 2 data-tables met een data-relation daartussen ?
Heb je ook de Insert- UpdateCommand gezet ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Allereerst ga ik mijn database even verduidelijken:
Er zijn twee tabellen:
  • Adres - Bevat een adres dat door één of meerdere personen gebruikt kan worden. Indien er niemand het adres zou gebruiken dan wordt het uit de tabel verwijdert
  • Persoon - Bevat de persoonsinformatie (naam, voornaam, geboortedatum, ...) en een verwijzing naar deze persoon zijn huidig adres.
De dataset:
Afbeeldingslocatie: http://users.pandora.be/taranis/testdb_dataset.jpg

De relatie tussen de twee tabellen:
Afbeeldingslocatie: http://users.pandora.be/taranis/testdb_dataset_relatie.jpg

Voor beide datatables (zie ook figuur 1) zijn de Select, Insert, Update en Delete commands automatisch gegenereerd.

Hier mijn huidige code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim transactionScope As New System.Transactions.TransactionScope
        Dim returnVal As Boolean = False

        Using transactionScope
            Try
                returnVal = Me.AdresTableAdapter.Insert(txtStraat.Text, txtPostcode.Text)
                returnVal = Me.PersoonTableAdapter.Insert(txtNaam.Text, returnVal)
                MessageBox.Show(returnVal)
                'Dim newID As Integer = Me.AdresTableAdapter.RetrieveAdresID()
                'returnVal = Me.PersoonTableAdapter.Insert(txtNaam.Text, newID)
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString())
            End Try
        End Using

Bijkomend probleem is nog om de autonummeringswaardes terug te krijgen van de ID's uit beide toegevoegde records. Het zou moeten kunnen met @@identity maar mij is het nog niet gelukt ism query builder

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:54
Mja, eigenlijk werk ik zelf vrijwel nooit op die manier; da's gewoon sleur en pleur werk, en eigenlijk niet meer programmeren.

Ik zou zelf rechtstreeks met IDbCommands werken.

Waarom voeg je trouwens de records niet toe aan je DataSet, en roep je dan de Update() method van de dataAdapters aan ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op zondag 28 augustus 2005 @ 09:34:
Waarom voeg je trouwens de records niet toe aan je DataSet, en roep je dan de Update() method van de dataAdapters aan ?
Ik heb je suggestie gevolgd en er is nog één probleem dat niet opgelost geraakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'declaraties
Dim dtAdressen As DataTable = DbDataSet.Tables("Adressen")
Dim dtPersonen As DataTable = DbDataSet.Tables("Personen")
Dim newAdres As DataRow = dtAdressen.NewRow()
Dim newPersoon As DataRow = dtPersonen.NewRow()

'opvullen van de data...
'...

'opslaan van de records in de datatablees
dtAdressen.Rows.Add(newAdres)
dtPersonen.Rows.Add(newPersoon)

'klaarmaken om db up te daten
Me.AdressenBindingSource.EndEdit()
Me.PersonenBindingSource.EndEdit()

Try
            Me.AdressenTableAdapter.Update(Me.DbDataSet.Adressen)
            Me.PersonenTableAdapter.Update(Me.DbDataSet.Personen)
            Me.DbDataSet.Adressen.AcceptChanges()
            Me.DbDataSet.Personen.AcceptChanges()
        Catch ex As Exception
            MessageBox.Show(ex.ToString())
        End Try


Ik krijg geen foutmeldingen en mijn database bevat de nieuwe records niet.
Wat doe ik verkeerd?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:54
Ik weet het niet.
Debug je applicatie eens.
Wat is de RowState van de toegevoegde rijen net voordat je de update() method van de data-adapter aanroept.
Heb je een InsertCommand/UpdateCommand aan die data-adapters hangen ?
Hoe ziet de SQL-commando's eruit van die insert- en update commands ?

Maw: je zult ff je code moeten debuggen.

https://fgheysels.github.io/

Pagina: 1