ado.net nieuwe record in 2 tabellen (1 op meer relatie)

Pagina: 1
Acties:

  • R.A.
  • Registratie: Januari 2004
  • Niet online
Ik heb een vraagje betreft topic title.
Ik werk vaak met 1 op meer relaties en ook met autonummering. Ik doe nu alles op 2 soorten manier. De ene keer doe ik de autonummering vanuit code. En de andere keer laat ik access de autonummering doen. Ik zit alleen met het probleem wanneer ik meerdere tabellen wil vullen.
Bijvoorbeeld met een order die orderregels bevat met artikelen.
Nu is mijn vraag kan je vanuit je oledbcommand ook je autonum veld opvragen?
ik wil dus bijvoorbeeld: in tabel Order invoeren met artikelen. Nu kan ik gewoon insert into doen maar ik wil de autonummer opvragen die gegenereerd word (nu doe ik achter de insert into een select query met de ingevoerde waardes, kan nooit de bedoeling zijn denk ik).
Sorry voor het wazige verhaal. Hoop dat het duidelijk is. Kan het niet met goeie termen zeggen

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:30

TeeDee

CQB 241

Volgens mij wil je de IDENTITY hebben.
Er zijn meerdere varianten. SCOPE etc. etc.

Basis is:
code:
1
SELECT @@IDENTITY ...

[ Voor 25% gewijzigd door TeeDee op 14-01-2005 10:53 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • R.A.
  • Registratie: Januari 2004
  • Niet online
En dit moet waar? Gewoon na mijn insert statement laten uitvoeren? Ik laat mijn sql query uitvoeren door middel van oledbcommand.commandtext(sqlstatement) en oledbcommand.ExecuteNonQuery().

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:30

TeeDee

CQB 241

http://www.google.nl/sear...net+select+identity&hl=nl
Beetje verouderd.

Hier wat duidelijker.

Nogmaals, dit is 1 van de manieren.

[ Voor 31% gewijzigd door TeeDee op 14-01-2005 11:17 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Equator
  • Registratie: April 2001
  • Laatst online: 17:12

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Inderdaad na je insert statement:
code:
1
2
INSERT INTO Table1 SET x = 'y'
SELECT @@IDENTITY


Of voor MS SQL server

SELECT SCOPE_IDENTITY()

* Equator heeft een keer 30 minuten staan staren op SELECT SCOPE_INDENTITY() voordat ik zag dat er een N teveel in stond.. :(

  • R.A.
  • Registratie: Januari 2004
  • Niet online
Thanks voor de snelle reply's. Ik gaan er verder mee werken en verder googlen. Many thanks

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:38
@@identity werkt ook in Sql Server hoor;
echter, er is wel een subtiel verschil tussen scope_identity() en identity:
identity heeft het id terug van het laatst geinserte record binnen een sessie
(bv, als je een insert doet op een tabelA, en die tabelA heeft een insert-trigger die nog een record insert in tabel B, dan krijg je de identity waarde terug van het identity - field van tabel B [als tabel B dus een ident field heeft]).
scope_identity heeft het laatst geinserte record terug van de tabel die je opneemt in je from clause binnen de sessie.

https://fgheysels.github.io/


  • Equator
  • Registratie: April 2001
  • Laatst online: 17:12

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Oe, dan heb ik daar even overheen gelezen.. Ik hoef alleen maar het laatst geinserte record te weten binnen mijn eigen sessie, dus dan kan ik zo te lezen beter @@IDENTITY gebruiken..

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:38
CyberJ schreef op vrijdag 14 januari 2005 @ 11:37:
Oe, dan heb ik daar even overheen gelezen.. Ik hoef alleen maar het laatst geinserte record te weten binnen mijn eigen sessie, dus dan kan ik zo te lezen beter @@IDENTITY gebruiken..
Dat hangt er vanaf.....
Scope_Identity heeft je ook het laatste identity Id van het laatst geinserte record binnen jouw sessie; echter, als je scope_identity gebruikt ben je wel zeker van welke table dat id is. Bij @@identity niet.

https://fgheysels.github.io/


  • Equator
  • Registratie: April 2001
  • Laatst online: 17:12

Equator

Crew Council

🦺#Rodekruis #whisky #barista

Hmm,
Ik heb dit in een simpele StoredProcedure staan die alleen een record aanmaakt in een enkele table, en daarvan het gegenereerde ID dus teruggeeft.
Ik heb daar geen triggers aan hangen of wat dan ook.

Ik ga het e.e.a. nog eens even goed doornemen..

  • R.A.
  • Registratie: Januari 2004
  • Niet online
maar hoe doe je dit dan binnen msaccess? Neem aan dat Scope_Identity niet gebruikt kan worden dan. Oh wacht eens. volgens mij kan access niet triggeren.

Dan zit ook nog met een theorie. Wat nou als je dit in 2 statements doet (wat ik dus nu doe) en 2 gebruikers doen een dit uitvoeren. Stel dat de 1e statements bij beide gebruikers worden uitgevoerd en de 1e gebruiker vraagt nu de @identity op. Krijgt deze dan de autonum van de 2e gebruiker ?

Als ik "INSERT INTO table( test) Values ( 'testje' ); SELECT @@identity" doe krijg ik een foutmelding dus moet ze echt splitsen (foutmelding = "er zijn tekens aangetroffen aan het einde van de sql-instructie"

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:38
R.A. schreef op vrijdag 14 januari 2005 @ 12:04:
maar hoe doe je dit dan binnen msaccess? Neem aan dat Scope_Identity niet gebruikt kan worden dan. Oh wacht eens. volgens mij kan access niet triggeren.
Access == @@identity de enige mogelijk manier.
Dan zit ook nog met een theorie. Wat nou als je dit in 2 statements doet (wat ik dus nu doe) en 2 gebruikers doen een dit uitvoeren. Stel dat de 1e statements bij beide gebruikers worden uitgevoerd en de 1e gebruiker vraagt nu de @identity op. Krijgt deze dan de autonum van de 2e gebruiker ?
@@identity heeft het id terug van het record dat het laatst geinsert is binnen een sessie: dus, ja, iedere gebruiker krijgt het Id van het record dat hij zelf heeft geinserted.
Als ik "INSERT INTO table( test) Values ( 'testje' ); SELECT @@identity" doe krijg ik een foutmelding dus moet ze echt splitsen (foutmelding = "er zijn tekens aangetroffen aan het einde van de sql-instructie"
Mja, Access kan dat niet aan. Je zult dus 2x een query moeten doen (eerst je record inserten, dan een query die je identity ophaalt.

https://fgheysels.github.io/


  • R.A.
  • Registratie: Januari 2004
  • Niet online
@@identity heeft het id terug van het record dat het laatst geinsert is binnen een sessie: dus, ja, iedere gebruiker krijgt het Id van het record dat hij zelf heeft geinserted.
dus de 2 gebruikers hebben een eigen sessie en kunnen dus niet elkaars autonum veld krijgen (even voor zekerheid vragen)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:38
correctemundo.
Test het ff uit ?

https://fgheysels.github.io/


  • R.A.
  • Registratie: Januari 2004
  • Niet online
whoami schreef op vrijdag 14 januari 2005 @ 12:18:
correctemundo.
Test het ff uit ?
Ik heb het getest en het klopt inderdaad. Heb de situatie nageschets. Weliswaar op dezelfde computer maar ik voerde eerst met 1e programma de insert statement en vervolgens met 2 e programma de insert statement waarna ik met 1e programma de autonum opvroeg en kreeg keurig netjes de juiste autonum vwaarde. Hetzelfde voor het 2e programma.

nogmaals many thanks
Pagina: 1