A2003: Wert suchen, Tabelle ergänzen

18/04/2008 - 20:10 von Peter Wenzel | Report spam
Hallo,

ich möchte aus einer Excel-Tabelle Werte auslesen, und in eine Tabelle schreiben.
In der Ziel-Tabelle ist das Feld des gesuchten Datensatzes mit dem Suchbegriff gefüllt,
es sollen nun noch die restlichen Felder mit Daten gefüllt werden.
Folgenden Code verwende ich hierfür:

Dim Conn As New ADODB.Connection
Dim DBS As ADODB.Recordset
Set Conn = CurrentProject.Connection
Set DBS = New ADODB.Recordset
DBS.Open "Lager", Conn, adOpenKeyset, adLockOptimistic
Do Until EXTab.sheets("Tabelle1").cells(i, 1) = ""
With EXTab.sheets("Tabelle1")
StreuDat = .cells(i, 1).Value
AuftrNr = .cells(i, 3).Value
Art = .cells(i, 4).Value
Version = .cells(i, 6).Value
LieferTag = .cells(i, 8).Value
LieferZeit = .cells(i, 9).Value
TeilKomp = .cells(i, 10).Value
GewMenge = .cells(1, 11).Value
LieferMenge = .cells(i, 12).Value
StGewicht = .cells(i, 15).Value
AnzPaletten = .cells(i, 17).Value
Druckerei = .cells(i, 20).Value
LieferGewicht = .cells(i, 21).Value
Palettierung = .cells(i, 22).Value
IntAuftrNr = StreuDat & AuftrNr
i = i + 1
.cells(i, 1).select
End With
DBS.Find "[Lag-IntAuftrNr] = " & IntAuftrNr, 0, adSearchForward, 1
DBS("Lag-LieferTag") = LieferTag
DBS("Lag-LieferZeit") = LieferZeit
DBS("Lag-LieferMenge") = LieferMenge
DBS("Lag-T / K") = TeilKomp
DBS("Lag-StGewicht") = StGewicht
DBS("Lag-AnzPaletten") = AnzPaletten
DBS("Lag-LieferGewicht") = LieferGewicht
DBS("Lag-Palettierung") = Palettierung
DBS("Lag-GewMenge") = GewMenge
DBS("Lag-Druckerei") = Druckerei
DBS.Update
Loop
DBS.Close
Set DBS = Nothing
Set Conn = Nothing
EXTab.Close

Die Variablen werden lt. Lokal-Fenster ordentlich mit Werten aus der Excel-Tabelle gefüllt.

Problem:
In der Tabelle "Lager" wird nichts eingetragen.
Kann mir bitte jemand meinen Fehler zeigen


Gruß
Peter

Bitte alle Antworten hier in die Newsgroup.
Mails nur nach Rücksprache zusenden.
 

Lesen sie die antworten

#1 Michel Fouquet
18/04/2008 - 21:02 | Warnen spam
Hallo,

Peter Wenzel schrieb:

Dim Conn As New ADODB.Connection
Dim DBS As ADODB.Recordset
Set Conn = CurrentProject.Connection
Set DBS = New ADODB.Recordset
DBS.Open "Lager", Conn, adOpenKeyset, adLockOptimistic
Do Until EXTab.sheets("Tabelle1").cells(i, 1) = ""
With EXTab.sheets("Tabelle1")
StreuDat = .cells(i, 1).Value
AuftrNr = .cells(i, 3).Value
LieferTag = .cells(i, 8).Value
IntAuftrNr = StreuDat & AuftrNr
i = i + 1
.cells(i, 1).select
End With

DBS.Find "[Lag-IntAuftrNr] = " & IntAuftrNr, 0, adSearchForward, 1
DBS("Lag-LieferTag") = LieferTag
DBS.Update
Loop
DBS.Close
Set DBS = Nothing
Set Conn = Nothing
EXTab.Close

Problem:
In der Tabelle "Lager" wird nichts eingetragen.
Kann mir bitte jemand meinen Fehler zeigen



ich verwende innerhalb von Access kein ADO, sondern DAO (und zum Zugriff
auf Excel "normale" Automation), da dies die für Jet angemessenste
Methode ist. Daher hier nur ein nebelstochernder Hinweis.

<zitat object reference>
ADO Find Method

The Find method searches for a record in a Recordset that satisfies a
specified criteria. If the search is successful, the record pointer will
point to the first found record.

Note: A current row position (like MoveFirst) must be set before calling
this method, otherwise an error will occur.
</zitat object reference>

Also evtl. nach DBS.Open ein MoveFirst einbauen? Abgesehen davon, dass
ggf. die Seek-Methode effizienter wàre (das Feld [Lag-IntAuftrNr] muss
dazu natürlich indiziert sein).

Hast du beim DBS.Find-Befehl mal einen Haltepunkt gesetzt und überprüft,
dass tatsàchlich ein Datensatz gefunden wird? Liefert IntAuftrNr
tatsàchlich eine Zahl oder einen String?

<exkurs1>
IIRC braucht man zum Auslesen der Zellwerte aus Excel die Zelle doch
nicht jedesmal explizit per .select zu aktivieren. Weglassen und
Performance gewinnen.
<exkurs1>

<exkurs2>
Die Benennung eines Recordset als "DBS" ist doch recht abenteuerlich.
"dbs" wird in der Regel für ein Database-Objekt verwendet, wàhrend "rst"
für ein Recordset-Objekt steht. Dass dann, der Symmetrie wegen (drei
Buchstaben) ein Connection-Objekt mit "con" bezeichnet wird, versteht
sich von selbst.
Ganz scheusslich: die Objektnamen mit eingeschlossenem Minuszeichen.
<exkurs2>

Gruß,
Michel

Ähnliche fragen