PDA

Vollständige Version anzeigen : ado AddNew Array, Array


bodo40
26.09.2003, 10:21
hi

wenn ich einer Tabelle einen Datensatz zufügen will müste das doch so klappen, oder?

Set DB = CurrentProject.AccessConnection
Set RS = New ADODB.Recordset
With RS
.ActiveConnection = DB
.Source = "EXCH_Contacts_master"
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Open
End With

.... hier werden die arrays meineFeldNamen(n) und SpaltenWerteArray(n) gefüllt....

With RS
.AddNew meineFeldNamen, SpaltenWerteArray
.Update
.Close
End With

wenn die FeldNamen in der tabelle existieren und die Werte vom Type her stimmen dann sollte das doch auch gehen, meine ich.

ist das so ?
bei mir gehts nicht

danke bodo40

jmc
26.09.2003, 13:20
Hi bodo

ja- das geht wohl kaum. Du musst doch dein Array abarbeiten und die Wert den Feldern zuweisen,also etwa so

for i = 1 to max
rs(meineFeldNamen(i)) = SpaltenWerteArray(i)
next i

Sascha Trowitzsch
26.09.2003, 14:13
@jmc: Er verwendet ADO!
@bodo: Was ist, wenn du's so machst:

With RS
.AddNew meineFeldNamen, SpaltenWerteArray
.Update meineFeldNamen, SpaltenWerteArray
.Close
End With

Bzw. welche Fehler tauchen überhaupt auf? Gibt's eine Fehlermeldung oder wird der DS einfach nicht gespeichert?

Ciao, Sascha

bodo40
29.09.2003, 15:38
hi

so wie sascha die lösung vorschlägt, so habe ich das bei ADO auch verstanden. die arrays brauchen blos mit komma getrennt angegeben zu werden und ADO macht das übrige.

die gleichen angeban beim .update habe ich nun auch übernommen.

die tabelle hat aber nicht einen neuen datensatz. Das kann ich mir nicht erklären. ich bekomme auch keine fehlermeldung.

(ich werde zum testen mal das recordset debuggen um zu schaun ob überhaupt werte drin sind. ich bin mir aber ziehhhmlich sicher, dass werte übernommen wurden.)

:confused: bodo40

Sascha Trowitzsch
29.09.2003, 22:52
Hi,

bei mir funktioniert folgendes Beispiel:

Dim rs As New ADODB.Recordset, arrF(1) As Variant, arrV(1) As Variant

rs.Open "Staaten", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
arrF(0) = "Staat": arrF(1) = "Kürzel"
arrV(0) = "Deutschland": arrV(1) = "DE"

rs.AddNew arrF, arrV
rs.Update
rs.Close

...und genauso diese Variante:

rs.AddNew
rs.Update arrF, arrV


Die Tabelle "Staaten" hat die Felder:
ID | Staat | Kürzel

Wichtig scheint dabei zu sein, dass die Arrays beide als Variant deklariert werden. Sonst gab's bei mir Fehlermeldungen.

Ciao, Sascha

bodo40
01.10.2003, 12:21
hi

bei mir funzt das auch was du da gepostet hast.

dann ist das problem vieleicht das mit dem als Variant deklarieren.

meine Arrays wurden in einer Prozedur gefüllt und dann an die andere Prozedur als parameter übergeben.

kann ich die Arrays auch mit Redim deklarieren? Ich weiss im grunde vorher nicht wie viele items ein Array haben wird.

help please

bodo40

Sascha Trowitzsch
01.10.2003, 14:08
Ohne es überprüft zu haben: Ich denke schon, das ein dynamiasches Array genauso geht.

Dim rs As New ADODB.Recordset, arrF() As Variant, arrV() As Variant

rs.Open "Staaten", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
ReDim arrF(1): ReDim arrV(1)
arrF(0) = "Staat": arrF(1) = "Kürzel"
arrV(0) = "Deutschland": arrV(1) = "DE"

rs.AddNew arrF, arrV
rs.Update
rs.Close
Ciao, Sascha