[ASP SQL] Return data COM object

Pagina: 1
Acties:

  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Voor het afhandelen van database verkeer heb ik een aantal COM objecten gemaakt. Deze COM objecten geven ADODB.recordsets terug. Dat werkt prima behalve met het onderstaande SQL statement.
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
26
27
28
29
30
31
1 'this function adds a new user to the database
2 Public Function AddUser(Conn_str As String) As ADODB.Recordset
    
3 Dim oRs As New ADODB.Recordset
4 Dim oCmd As New ADODB.Command
5 Dim oConn As New ADODB.Connection
6 Dim SQL As String

7 oConn.Open Conn_str

8a 'SQL = "BEGIN TRANSACTION INSERT INTO table VALUES('bla','bla','bla','bla','bla','bla') 
COMMIT SELECT field_id FROM table WHERE field_login = 'bla'"

9 oCmd.CommandText = SQL
10 oCmd.CommandType = adCmdText
11 oRs.CursorLocation = adUseClient
12 Set oCmd.ActiveConnection = oConn

13 oRs.Open oCmd
    
14 Set AddUser = oRs

15 Set oRs.ActiveConnection = Nothing
16 oConn.Close

17 Set oRs = Nothing
18 Set oCmd = Nothing
19 Set oConn = Nothing

20 Exit Function
21 End Function

De foutmelding die IIS geeft is:
code:
1
2
3
4
Error Type:
ADODB.Recordset (0x800A0E7B)
Cannot change the ActiveConnection property of a 
Recordset object which has a Command object as its source.

Als ik dan regel 15 weglaat is die foutmelding weg maar komt er niets terug wat het SQL statement zou moeten returnen.

Ik heb de query in SQL query analyzer getest en daar werkt hij prima. Kan iemand mij uitleggen wat er fout gaat.

Andere functies in hetzelfde COM object kunnen wel gewoon recordsets terug geven. Ook wordt de INSERT data goed in de table ingevoerd. Alleen de data van het SELECT statement komt niet terug.

There is no place like 127.0.0.1


Verwijderd

Ik neem aan dat je het id wil terug halen van de record die je net heb ingevoerd.Als je toch SQL gebruikt dan kan je het beste een Stored Procedure gebruiken.

Dan kan je het volgende doen namelijk

-------------------------KOMTIE--------------
CREATE PROCEDURE [OWNER].[PROCEDURE NAME]
(
@bla VARCHAR(200),
@returnId INT OUTPUT
)
AS

INSERT .....en de rest
SET @returnID = @@IDENTITY
GO
-----------------------------------------------
Dat is alles

  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Toen ik de search raadpleegde kwam ik idd al die @@indentity tegen, maar ik dacht dat dit ook moest kunnen. Maar als dit makkelijker gaat is dat natuurlijk beter. Ik ga het gelijk eens proberen.:)

There is no place like 127.0.0.1


Verwijderd

:) Zal wel lukken denk ik

  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Kan ik die procedure gewoon met Visual Basic 6 in mijn COM object stoppen? Ik krijg namelijk veel foutmeldingen beginnend bij waar ik de owner ingevuld heb.

De owner is toch naam van de Class module?
En ik moet dan in mijn functie gebruik maken van deze procedure?

(ik ben zoals je merkt niet zo thuis in VB6, ik gebruik het alleen voor de objecten)

There is no place like 127.0.0.1


Verwijderd

Dit heeft niks te maken met VB6. Dit heeft alles te maken met SQL. Ik zal je ff helpen. Dit is een voorbeeldje:

CREATE PROCEDURE mijnTest
(
@returnID INT OUTPUT
)
AS

INSERT INTO adressen
(naam, adres, postcode, woonplaats)
VALUES ('....', '.....' , '....', '....')
SET @returnID = @@IDENTITY
GO

Hopen dat het nu lukt!

  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Sorry, ik was even weg naar lunchpauze.

Het lukt me helaas nog steeds niet om dit werkend te krijgen. VB blijft het rood weergeven, met allerlei syntax errors. Ik denk dat ik het stuk code helemaal verkeerd gebruik in mijn COM object.

Zou dit mijn vorige code moeten vervangen? Of moet het erin staan en erdoor aangesproken worden?

Als ik het in de query analyser run dan maakt het een stored procedure aan. Moet ik daar gebruik van maken?

Ik denk dat ik niet weet wat ik met je voorbeeld code moet.

There is no place like 127.0.0.1


  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Dit is een voorichtig schopje want ik zit nog steeds met het probleem dat ik het ID van de laatste toevoeging niet kan returnen uit mijn COM object.

Ik heb een SQL statement dat in de query analyzer prima werkt:
code:
1
2
INSERT INTO author VALUES('Achternaam,'Voornaam','telnr','user','pass',1)
SELECT @@IDENTITY AS 'Identity'

Ik krijg alleen dus het ID getal niet terug uit mijn COM obejct. Kan iemand me daarmee helpen? :?

There is no place like 127.0.0.1


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Probeer dit eens:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Function AddUser(Conn_str As String) As ADODB.Recordset
    
Dim oRs As New ADODB.Recordset
Dim oConn As New ADODB.Connection
Dim SQL As String

oConn.Open Conn_str

SQL = "INSERT INTO author VALUES('Achternaam,'Voornaam','telnr','user','pass',1)
oConn.Execute SQL

SQL = "SELECT @@IDENTITY AS 'Identity'"
oRs.Open SQL, oConn, 3, 1
    
Set AddUser = oRs

oRs.Close
oConn.Close
Set oRs = Nothing
Set oConn = Nothing

End Function

  • marcus22
  • Registratie: Juni 2001
  • Laatst online: 21-08 23:45
Bedankt robjanssen!

Ik heb het niet helemaal zo overgenomen maar je bedoeling was me duidelijk en het werkt nu! B-)
Bedankt.

There is no place like 127.0.0.1

Pagina: 1