Toon posts:

[SQL/ASP] Verkrijgen van Autonummering

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hai,

Ik heb een pagina gemaakt waar een record wordt toegevoegd aan de database. In deze tabel is een veld met autonummering.
Nu wil ik alleen in deze zelfde pagina deze autonummering gebruiken voor andere toevoegingen.
Ik heb geprobeerd om deze gewoon op te vragen maar dat zegt ie:
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
Blijkbaar is hij dan dus nog niet goed toegevoegd. Is hier een oplossing voor? Dit is het gedeelte van mijn pagina:

Set RS = Server.CreateObject( "ADODB.Recordset" )
sqlString = "SELECT * FROM Kop WHERE 1<>1"
RS.ActiveConnection = oConn
RS.CursorType = adOpenDynamic
RS.lockType = adLockOptimistic
RS.Open sqlString
RS.AddNew
RS ( "kop" ) = fixQuotes( kop )
RS ( "toegevoegd_door" ) = fixQuotes( toegevoegd_door )
RS ( "toegevoegd_op" ) = fixQuotes( toegevoegd_op )
RS.Update
RS.Close
SET RS = nothing


sqlString= "SELECT * FROM Kop WHERE kop = '" & LCase(kop) & "' AND toegevoegd_op = #" & LCase(toegevoegd_op) & "# AND toegevoegd_door = " & LCase(toegevoegd_door) & ""
Set KopIDRS = Server.CreateObject( "ADODB.Recordset" )
KopIDRS.ActiveConnection = oConn
KopIDRS.open sqlString
Kop_Id = KopIDRS("Kop_Id")
KopIDRS.Close
SET KopIDRS = nothing


Kan iemand mij hierbij helpen?
Alvast bedankt!

Verwijderd

sqlString = "SELECT * FROM Kop WHERE 1<>1"
waar 1 geen 1 is
hier komt dus niks uit
sqlString = "SELECT * FROM Kop WHERE 1=1"
zo dus

Verwijderd

Topicstarter
Nee, dat is een methode om een record toe te voegen.

Bij de 2e selectstatement vraagt hij hem pas op.

Verwijderd

1. Je voegt iets toe
2. Je haalt het autonummering ID op
3. je voegt iets toe met dat ID

Ok zoiets moet je dus hebben:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%
Dim getID
Dim id

'Invoeren gegevens
conn.Execute("INSERT INTO [kop] ([toegevoegd_op],[toegevoegd_door]) VALUES('" & LCase(toegevoegd_op)  & "','" & LCase(toegevoegd_door)  & "')")

'Ophalen zojuist toegevoegd ID
Set getID = conn.Execute("SELECT [id] FROM [kop] WHERE [toegevoegd_op] = '" & LCase(toegevoegd_op) & "' AND [toegevoegd_door] = '" & LCase(toegevoegd_door) & "'")
id = ""
While id = ""
    If Not (getID.EOF Or getID.BOF) Then
        id = getID(0)
    End If
Wend

'Andere gegevens invoeren
conn.Execute("INSERT INTO [xxx] ([xxx]) VALUES(" & id  & ")")
%>

Je moet dan wel opletten dat toegevoegd_door en toegevoegd_op samen altijd uniek zijn.

[informatief]
Je probleem komt omdat ASP de query doorstuurd naar Access/SQL enz. ASP gaat vrolijk door met het verwerken van de pagina. Toevoegen gaat trager dan selecteren...go figure
[informatief]

  • joepP
  • Registratie: Juni 1999
  • Niet online
Als je SQL Server gebruikt:
code:
1
2
3
4
INSERT blabla (veld)
  VALUES ('jaja')

SELECT @@identity

Dus eerst invoegen, en dan binnen dezelfde query @@identity ophalen voor je auto-increment nummertje.

Hoe je dit met een Recordset doet weet ik niet.

Verwijderd

Op dinsdag 02 april 2002 17:17 schreef joepP het volgende:
Hoe je dit met een Recordset doet weet ik niet.
Kan helaas niet :'(. Echt zwaat klote.
Ik doe altijd een select MAX(Id) er direct na, maar da's natuurlijk een klote manier als er verschillende users tegelijk in een DB bezig kunnen zijn...

Verwijderd

Dan gebruik je mijn oplossing toch......

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Dit is wat je wil

http://www.kamath.com/tutorials/tut004_autonum.asp
code:
1
2
3
4
5
6
RS.Update

--> AUTO_ID = RS("auto_id_kolom")

RS.Close
Set RS = Nothing

SIZE does matter.
"You're go at throttle up!"


Verwijderd

Nice, jij hebt je ASP boek goed gelezen

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17

Skinny

DIRECT!

Op dinsdag 02 april 2002 19:52 schreef vanDee het volgende:
Nice, jij hebt je ASP boek goed gelezen
8-)

Maar helaas, http://www.google.com does the trick again

SIZE does matter.
"You're go at throttle up!"


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op dinsdag 02 april 2002 19:18 schreef KoenM het volgende:

[..]

Kan helaas niet :'(. Echt zwaat klote.
Ik doe altijd een select MAX(Id) er direct na, maar da's natuurlijk een klote manier als er verschillende users tegelijk in een DB bezig kunnen zijn...
natuurlijk kan dat wel:
code:
1
2
3
4
5
6
7
sql = "set nocount on;" _
    & "insert into blabla (veld) values ('jaja');" _
    & "select @@identity;"
    & "set nocount off;"

set rs = cn.execute(sql)
newId = rs(0)

btw. kijk voor sql2000 ook eens naar scope_identity() en ident_current()

Today's subliminal thought is:


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 03-09 23:48
Op dinsdag 02 april 2002 14:21 schreef SilverSurfer het volgende:

[..]

waar 1 geen 1 is
hier komt dus niks uit
sqlString = "SELECT * FROM Kop WHERE 1=1"
zo dus
of gewoon sqlString = "Kop". Werkt in ieder geval voor Access.
Pagina: 1