Ik heb in ASP een tabel die oa een tabel naam, een key uit die tabel en een andere waarde bevat.
Nu moet ik het record waar zo'n record naar wijst kopieren. Ik heb daarvoor de volgende code:
adoSORS is een ADO RecordSet dat verwijst naar het record dat de info bevat over welk record te kopieren. intevent_key is de key, inteventable de naam van de table, en er zijn nog velden sendoutmethod en interventiontype_key die ik moet kopieren. De types van die velden kloppen ook gewoon. Verder geeft GetNextKey(adoConn, sTable) me de volgende primary key voor een tabel, en de andere twee methods geven me ook waarden terug die geldig zijn.
Het probleem is alleen, als ik dit nu uitvoer, krijg ik de volgende foutmelding:
Regel 194 is "adoNewRS(sColumn) = 0". intstatuscount is van type int. Haal ik deze weg dan krijg ik weer van een ander veld dezelfde melding, en zo door. Zelfs "adoNewRS(sColumn) = adoField.Value" gaat fout, wat dus nooit zou mogen in mijn ogen.
Ik moet bijna alles weghalen voordat het werkt. Dan krijg ik natuurlijk wel een fout bij het updaten omdat teveel waarden missen.
Mijn vraag is nu: wat doe ik fout? Ik doe dit ook in Visual Basic en daar gaat het wel goed.
Nu moet ik het record waar zo'n record naar wijst kopieren. Ik heb daarvoor de volgende code:
ASP:
adoConn is een bestaande connectie1
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
| Public Function CopyEvent(ByRef adoConn, ByRef adoSORS) Dim adoRS, adoNewRS Dim adoField Dim sColumn Set adoRS = Server.CreateObject("ADODB.RecordSet") Set adoNewRS = Server.CreateObject("ADODB.RecordSet") sTable = adoSORS("inteventtable") adoRS.Open sTable, adoConn, 2, 3 adoRS.Find "pkey = " & adoSORS("intevent_key") ' Will find something, but check anyway If adoRS.EOF Then CopyEvent = False Else adoNewRS.Open sTable, adoConn, 2, 3 adoNewRS.AddNew For Each adoField In adoRS.Fields sColumn = adoField.Name Select Case sColumn Case "pkey" adoNewRS(sColumn) = GetNextKey(adoConn, sTable) Case "checkagent" adoNewRS(sColumn) = Null Case "checkdate" adoNewRS(sColumn) = Null Case "datecreated" adoNewRS(sColumn) = Now Case "intcount" adoNewRS(sColumn) = GetIntCount(adoConn, sTable, adoRS("intervention_key")) + 1 Case "intstatus" nStatus = GetEnumKey(adoConn, sTable, sColumn, "System") If nStatus = -1 Then adoNewRS(sColumn) = adoField.Value Else adoNewRS = nStatus End If Case "intstatuscount" ' Not important adoNewRS(sColumn) = 0 Case "interventiontype_key" adoNewRS(sColumn) = adoSORS("interventiontype_key") Case "sendout" adoNewRS(sColumn) = Now Case "sendoutmethod" adoNewRS(sColumn) = adoSORS("sendoutmethod") Case Else adoNewRS(sColumn) = adoField.Value End Select Next adoNewRS.Update CopyEvent = True adoNewRS.Close End If adoRS.Close Set adoRS = Nothing Set adoNewRS = Nothing End Function |
adoSORS is een ADO RecordSet dat verwijst naar het record dat de info bevat over welk record te kopieren. intevent_key is de key, inteventable de naam van de table, en er zijn nog velden sendoutmethod en interventiontype_key die ik moet kopieren. De types van die velden kloppen ook gewoon. Verder geeft GetNextKey(adoConn, sTable) me de volgende primary key voor een tabel, en de andere twee methods geven me ook waarden terug die geldig zijn.
Het probleem is alleen, als ik dit nu uitvoer, krijg ik de volgende foutmelding:
code:
1
2
3
4
| Error Type: Microsoft VBScript runtime (0x800A000D) Type mismatch: 'adoNewRS' File.asp, line 194 |
Regel 194 is "adoNewRS(sColumn) = 0". intstatuscount is van type int. Haal ik deze weg dan krijg ik weer van een ander veld dezelfde melding, en zo door. Zelfs "adoNewRS(sColumn) = adoField.Value" gaat fout, wat dus nooit zou mogen in mijn ogen.
Ik moet bijna alles weghalen voordat het werkt. Dan krijg ik natuurlijk wel een fout bij het updaten omdat teveel waarden missen.
Mijn vraag is nu: wat doe ik fout? Ik doe dit ook in Visual Basic en daar gaat het wel goed.
More than meets the eye
There is no I in TEAM... but there is ME
system specs