Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

rs.update und SQL-Server verknüpfte Tabellen

154 views
Skip to first unread message

WGH

unread,
Jan 7, 2014, 11:40:08 AM1/7/14
to
Hallo, ich brauche mal Eure Hilfe.

Ich will Daten per VBA in eine Tabelle einf�gen und erg�nzen. Das ganze
geht, solange ich die Tabelle von einem SQL-Server improtiere. Stelle ich
aber nur eine Verkn�pfung zu der Tabelle her, erhalte ich eine
Fehlermeldung bei rs.update. Leider steck ich nicht so tief in der Materie.
Habt ihr Tipps f�r mich?

Ich arbeite mit Officce2010 und SQL Server 2012.

Danke

Hier mal ein Codeschnipsel?


Set db = CurrentDb()
Set irec = db.OpenRecordset("A_Adressen_neu", dbOpenDynaset)
Set orec1 = db.OpenRecordset("dbo_AdressDaten", dbOpenDynaset,
dbSeeChanges)

keyid1 = 624
adrzonr = 1
irec.MoveFirst
While Not irec.EOF

orec1.AddNew
orec1!keyid = keyid1
orec1!Firma = 0
orec1!KeyRefAnschrStr = 0
orec1!KeyRefAnschrPF = 0
orec1!AdressNr = adrzonr
orec1!MatchCode = Left(UCase(irec!Nachname), 10)
orec1.Update


adrzonr = adrzonr + 1
keyid1 = keyid1 + 1

irec.MoveNext
Wend
db.Close
End Sub

Winfried Sonntag

unread,
Jan 7, 2014, 12:11:22 PM1/7/14
to
Am 07.01.2014 schrieb WGH:

> Ich will Daten per VBA in eine Tabelle einfᅵgen und ergᅵnzen. Das ganze
> geht, solange ich die Tabelle von einem SQL-Server improtiere. Stelle ich
> aber nur eine Verknᅵpfung zu der Tabelle her, erhalte ich eine
> Fehlermeldung bei rs.update.

Wenn die Fehlermeldung nicht geheim ist, dann poste sie *vollstᅵndig*
hier.

> Set db = CurrentDb()
> Set irec = db.OpenRecordset("A_Adressen_neu", dbOpenDynaset)
> Set orec1 = db.OpenRecordset("dbo_AdressDaten", dbOpenDynaset,
> dbSeeChanges)
>
> keyid1 = 624
> adrzonr = 1
> irec.MoveFirst

Was bezweckst Du mit MoveFirst? An den Anfang moven? Wozu brauchst Du
das?

> While Not irec.EOF

Ich persᅵnlich nimm lieber Do until irec.EOF

> orec1.AddNew
> orec1!keyid = keyid1
> orec1!Firma = 0
> orec1!KeyRefAnschrStr = 0
> orec1!KeyRefAnschrPF = 0
> orec1!AdressNr = adrzonr
> orec1!MatchCode = Left(UCase(irec!Nachname), 10)
> orec1.Update
>
>
> adrzonr = adrzonr + 1
> keyid1 = keyid1 + 1
>
> irec.MoveNext
> Wend

Anstatt Wend dann Loop

> db.Close

Und wenn dann vorher irec.close und orec1.close.
Aber ohne Fehlermeldung ist das Spekulation.

Servus
Winfried
--
Access-FAQ: http://www.donkarl.com/AccessFAQ.htm
Access-Stammtisch: http://www.access-muenchen.de
NNTP-Bridge fᅵr MS-Foren: http://communitybridge.codeplex.com/

WGH

unread,
Jan 8, 2014, 1:53:41 AM1/8/14
to
Am Tue, 7 Jan 2014 18:11:22 +0100 schrieb Winfried Sonntag:

> Am 07.01.2014 schrieb WGH:
>
>> Ich will Daten per VBA in eine Tabelle einf锟絞en und erg锟絥zen. Das ganze
>> geht, solange ich die Tabelle von einem SQL-Server improtiere. Stelle ich
>> aber nur eine Verkn锟絧fung zu der Tabelle her, erhalte ich eine
>> Fehlermeldung bei rs.update.
>
> Wenn die Fehlermeldung nicht geheim ist, dann poste sie *vollst锟絥dig*
> hier.

Laufzeitfehler 3146 - ODBC-Aufruf fehlgeschlagen
>
>> Set db = CurrentDb()
>> Set irec = db.OpenRecordset("A_Adressen_neu", dbOpenDynaset)
>> Set orec1 = db.OpenRecordset("dbo_AdressDaten", dbOpenDynaset,
>> dbSeeChanges)
>>
>> keyid1 = 624
>> adrzonr = 1
>> irec.MoveFirst
>
> Was bezweckst Du mit MoveFirst? An den Anfang moven? Wozu brauchst Du
> das?

Weil ich die Tabelle von Anfang an durchlaufen will

>
>> While Not irec.EOF
>
> Ich pers锟絥lich nimm lieber Do until irec.EOF
>
>> orec1.AddNew
>> orec1!keyid = keyid1
>> orec1!Firma = 0
>> orec1!KeyRefAnschrStr = 0
>> orec1!KeyRefAnschrPF = 0
>> orec1!AdressNr = adrzonr
>> orec1!MatchCode = Left(UCase(irec!Nachname), 10)
>> orec1.Update

Hier beim update tritt der Fehler auf

>>
>>
>> adrzonr = adrzonr + 1
>> keyid1 = keyid1 + 1
>>
>> irec.MoveNext
>> Wend
>
> Anstatt Wend dann Loop
>
>> db.Close
>
> Und wenn dann vorher irec.close und orec1.close.
Stimmt, hat aber nichts mit dem Problem zu tun.

Lutz

unread,
Jan 8, 2014, 4:08:43 AM1/8/14
to
Hast du in der verkn�pften Tabelle einen Prim�rschl�ssel?

Benutzt du in der Tabelle irgendwelche ungew�hnlichen Datentypen?

Kannst du evtl in der Tabelle mal ein Timestamp-Feld anlegen und dann
neu verkn�pfen und deinen Code erneut ausprobieren?

Ansonsten k�mpfe dich mal durch die SQL-FAQ zum Thema Access und
SQL-Server http://sqlfaq.de/blog/?cat=9

Lutz

WGH

unread,
Jan 8, 2014, 6:34:57 AM1/8/14
to
Am Tue, 7 Jan 2014 17:40:08 +0100 schrieb WGH:
Das Problem ist zwar nicht gel�st, aber ich habe eine andere M�glichkeit
gefunden.

Es geht �ber DoCmd.RunSql("insert into ...")

Aber trotzdem f�r weitere Hinweise dankbar.

Lutz

unread,
Jan 8, 2014, 11:28:17 AM1/8/14
to
Am 08.01.2014 12:34, schrieb WGH:
> Am Tue, 7 Jan 2014 17:40:08 +0100 schrieb WGH:
> Das Problem ist zwar nicht gel�st, aber ich habe eine andere M�glichkeit
> gefunden.
>
> Es geht �ber DoCmd.RunSql("insert into ...")
>
> Aber trotzdem f�r weitere Hinweise dankbar.

Ich vermute weiterhin, da� deine verkn�pfte Tabelle nicht updatebar ist.

Kannst du die Tabelle direkt im Access �ffnen und darin Daten �ndern?

Winfried Sonntag

unread,
Jan 8, 2014, 1:18:51 PM1/8/14
to
Am 08.01.2014 schrieb WGH:

> Am Tue, 7 Jan 2014 18:11:22 +0100 schrieb Winfried Sonntag:
>
>> Am 07.01.2014 schrieb WGH:
>>
>>> Ich will Daten per VBA in eine Tabelle einfᅵgen und ergᅵnzen. Das ganze
>>> geht, solange ich die Tabelle von einem SQL-Server improtiere. Stelle ich
>>> aber nur eine Verknᅵpfung zu der Tabelle her, erhalte ich eine
>>> Fehlermeldung bei rs.update.
>>
>> Wenn die Fehlermeldung nicht geheim ist, dann poste sie *vollstᅵndig*
>> hier.
>
> Laufzeitfehler 3146 - ODBC-Aufruf fehlgeschlagen

Du muᅵt in diesem Fall die Error Collection durchlaufen, dann erhᅵltst
Du auch eine ordentliche Fehlermeldung.

For I = 0 To Errors.Count -1
strMsg = strMsg & Errors(I)
strMsg = strMsg & vbCrLf
Next I
MsgBox strMsg

Servus
Winfried
--
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

wgh

unread,
Jan 8, 2014, 3:18:06 PM1/8/14
to
Am Wed, 08 Jan 2014 17:28:17 +0100 schrieb Lutz:

> Am 08.01.2014 12:34, schrieb WGH:
>> Am Tue, 7 Jan 2014 17:40:08 +0100 schrieb WGH:
>> Das Problem ist zwar nicht gel�st, aber ich habe eine andere M�glichkeit
>> gefunden.
>>
>> Es geht �ber DoCmd.RunSql("insert into ...")
>>
>> Aber trotzdem f�r weitere Hinweise dankbar.
>
> Ich vermute weiterhin, da� deine verkn�pfte Tabelle nicht updatebar ist.

Ja aber warum?
>
> Kannst du die Tabelle direkt im Access �ffnen und darin Daten �ndern?

Muss ich morgen gleich mal probieren. Ich melde mich.
Bin erst mal froh, dass ich meine Daten �berhaupt r�berkriege. Was mich
auch wundert, das keyid eigentlich autowert ist und ich den schreiben
kann/darf.

Viele Gr�

Siegfried Schmidt

unread,
Jan 8, 2014, 4:48:13 PM1/8/14
to
wgh schrieb:

> Ja aber warum?

Weil du wahrscheinlich einen Datentyp in der Tabelle hast, der in Access
nicht verlustfrei abgebildet werden kann.

Erstelle stattdessen eine Abfrage, die nur die zu ᅵndernden Felder enthᅵlt.

Ist diese ᅵmderbar?

> Muss ich morgen gleich mal probieren. Ich melde mich.
> Bin erst mal froh, dass ich meine Daten ᅵberhaupt rᅵberkriege. Was
> mich auch wundert, das keyid eigentlich autowert ist und ich den
> schreiben kann/darf.

Was ist daran verwunderlich?

Siegfried


--
Diese Nachricht kann zukunftsgerichtete Aussagen beinhalten, diese sind mit
Risiken und Ungewissheiten verbunden und basieren auf gegenwᅵrtigen
Erwartungen. Die tatsᅵchlichen Ereignisse kᅵnnen daher wesentlich von den
Darstellungen abweichen.

WGH

unread,
Jan 9, 2014, 7:30:08 AM1/9/14
to
Am Wed, 8 Jan 2014 21:48:13 +0000 (UTC) schrieb Siegfried Schmidt:

> wgh schrieb:
>
>> Ja aber warum?
>
> Weil du wahrscheinlich einen Datentyp in der Tabelle hast, der in Access
> nicht verlustfrei abgebildet werden kann.
>
> Erstelle stattdessen eine Abfrage, die nur die zu �ndernden Felder enth�lt.
>
> Ist diese �mderbar?

Ja, ich kann Daten in die Tabelle schreiben, aber nur in vorhandenen
Datens�tzen. Ich kann keinen neuen Datensatz anf�gen.

>
>> Muss ich morgen gleich mal probieren. Ich melde mich.
>> Bin erst mal froh, dass ich meine Daten �berhaupt r�berkriege. Was
>> mich auch wundert, das keyid eigentlich autowert ist und ich den
>> schreiben kann/darf.
>
> Was ist daran verwunderlich?
Weil der sich doch eigentlich aus nem Trigger selbst erzeugt in SQL, wenn
ich mich noch recht erinnere.

Mario
>
> Siegfried

Lutz

unread,
Jan 9, 2014, 8:26:37 AM1/9/14
to
Kannst du mal die Definiton der Tabelle aus dem SQL-Server posten und
wie die Definition der verkn�pften Tabelle im Access aussieht?

WGH

unread,
Jan 9, 2014, 8:45:41 AM1/9/14
to
Am Thu, 09 Jan 2014 14:26:37 +0100 schrieb Lutz:
Bitte:

SQL-Server: http://www.fotos-hochladen.net/view/tabsqlh12pol05s6.jpg
Access: http://www.fotos-hochladen.net/view/tabacczjmtp3wkf8.jpg

Mario

Lutz

unread,
Jan 9, 2014, 9:24:18 AM1/9/14
to
Erster Tipp:

Du f�llst in deinem Code-Beispiel beim Anf�gen "InternetAdresse" nicht!

Ist auf dem SQL-Server aber als NOT NULL definiert. Wenn du keinen
Default-Wert oder Trigger im Hintergrund hast, m��te das einen Fehler
werfen!


WGH

unread,
Jan 9, 2014, 10:49:07 AM1/9/14
to
Am Thu, 09 Jan 2014 15:24:18 +0100 schrieb Lutz:

Doch, ich habe nicht alle Zeilen kopiert :-(

Lutz

unread,
Jan 9, 2014, 11:24:03 AM1/9/14
to
Am 09.01.2014 16:49, schrieb WGH:
> Am Thu, 09 Jan 2014 15:24:18 +0100 schrieb Lutz:
>
> Doch, ich habe nicht alle Zeilen kopiert :-(

Ok, dann hol dir mal die genaue Fehlermeldung aus der Error Collection,
so wie von Winfried vorgeschlagen.
Das sollte bei der Suche weiterhelfen ...

0 new messages