Excel2Access

11/06/2010 - 12:07 von JDorn | Report spam
hallo NG

mit einem makro schreibe ich ein Recordset in meine Access db.

dim rst as recordset
Dim FFPrjdef, FFPrjnam, FFPrjdescr As String
Dim db As DAO.Database
Set db = DBEngine.OpenDatabase("c:\db2.mdb")


Set rst = db.OpenRecordset("tabellenname")
FFPrjdef = ActiveCell.Value
FFPrjnam = ActiveCell.Offset(0, 1).Value
FFPrjdescr = ActiveCell.Offset(0, 2).Value

rst.AddNew

rst(0) = FFPrjdef
rst(1) = FFPrjnam
rst(2) = FFPrjdescr
rst.update
db.Close
Set rst = Nothing
Set db = Nothing
ActiveWorkbook.Close


Wie kann ich bei einem nochmaligen start der einleseaction verhindern, dass
ich den gleichen datensatz nicht noch einmal in meine db schreiben lasse.


liebe grüsse aus Österreich und für die lösung dankbar

Johann Dorner
 

Lesen sie die antworten

#1 Andreas Killer
14/06/2010 - 12:02 | Warnen spam
On 11 Jun., 12:07, "JDorn" wrote:

mit einem makro schreibe ich ein Recordset in meine Access db.


...
Wie kann ich bei einem nochmaligen start der einleseaction verhindern, dass
ich den gleichen datensatz nicht noch einmal in meine db schreiben lasse.


Naja, schau halt nach ob er schon drin steht. .-)

Andreas.

Option Explicit

Sub Test()
Dim rst As Recordset
Dim FFPrjdef, FFPrjnam, FFPrjdescr As String
Dim db As DAO.Database

Dim FindString As String
Dim I As Integer

Set db = DBEngine.OpenDatabase("c:\temp\db1.mdb")

'Ohne dbOpenDynaset kann man nicht suchen
Set rst = db.OpenRecordset("tabellenname", dbOpenDynaset)
FFPrjdef = ActiveCell.Value
FFPrjnam = ActiveCell.Offset(0, 1).Value
FFPrjdescr = ActiveCell.Offset(0, 2).Value

'Generiere Suchstring
FindString = _
MakeFindString(rst.Fields(0), FFPrjdef)
FindString = FindString & " and " & _
MakeFindString(rst.Fields(1), FFPrjnam)
FindString = FindString & " and " & _
MakeFindString(rst.Fields(2), FFPrjdescr)

'Suche erstes Vorkommen
rst.FindFirst FindString

'Gefunden?
If rst.NoMatch Then
'Nein, hinzufügen
rst.AddNew
rst(0) = FFPrjdef
rst(1) = FFPrjnam
rst(2) = FFPrjdescr
rst.Update
' Else
' 'Gefundene Records auflisten
' Do Until rst.NoMatch
' For I = 1 To rst.Fields.Count
' Debug.Print rst.Fields(I - 1).Value
' Next
' rst.FindNext FindString
' Loop
End If
db.Close
End Sub

Function MakeFindString( _
ByVal Feld As DAO.Field, ByVal Wert As Variant) As String
'Generiert "[Feldname] = Wert"
MakeFindString = "[" & Feld.Name & "] = "
Select Case Feld.Type
Case dbInteger, dbLong
'Zahlen
MakeFindString = MakeFindString & Wert
Case dbText
'Texte
MakeFindString = MakeFindString & "'" & Wert & "'"
Case Else
Debug.Print Feld.Name, Feld.Type
Stop
End Select
End Function

Ähnliche fragen