Update/Insert Via addnew oder Sql Statment/Schleife

Willi_Kaiser

Mitglied
Hallo liebe Community,

ich habe mal eine Frage. Ich habe eine Benutzeroberfläche in Access.
Dort werden per Abfrage Datensätze aus einer Datenbank selektiert und in Textfelder reinkopiert. Nun sollte ich an den Textfeldern Änderungen machen und dann die Datensätze updaten. Jetzt mein Problem:

Hatte es mit einer Schleife gemacht, dort waren 1 Update Abfrage und 2 Insert Abfragen drinne. (Ist für die Bearbeitung notwendig)
Das ganze dauerte aber für 5 oder 20 Datensätze ca. 26 Sekunden.
Und das ist viel zu lang. So ich habe im Internet gelesen, dass man es per addnew und update machen kann/soll. Ich habe es angewendet, aber es dauert teilweise noch länger.
Ich weiß jetzt nicht direkt, wo mein Fehler ist. Ich poste mal meine Daten vielleicht wisst ihr das ja.

Ich benutze Access 2007 auf Windows 7 Home Premium, 4 Gb Ram und einer schnellen Internet Leitung.


Nun zum Code:

Code:
Set Conn = CurrentProject.Connection
Set DBS = New ADODB.Recordset
    
DBS.Open "Tabelle", Conn, adOpenKeyset, adLockOptimistic
                
                
DBS.AddNew
DBS.Fields("Feld1") = Inhalt
DBS.Fields("Feld2") = Inhalt
DBS.Fields("Feld3") = Inhalt
DBS.Fields("Feld4") = Inhalt

DBS.Update
DBS.Close


Code:
Do While Not rs.EOF
'rec.Open "UPDATE Tabelle SET XXX = XXXX , cnn, adOpenStatic, adLockBatchOptimistic

'rec.Open "INSERT Tabelle (XXXXXX) cnn, adOpenStatic, adLockBatchOptimistic

'rec.Open "insert into Tabelle (XXXXXXX), cnn, adOpenStatic, adLockBatchOptimistic
'
 Loop

So sieht es ungefähr aus, an den Update Befehlen ansich könnte es eigentlich nicht liegen, da ich an derer Stelle die selben Befehle benutze, nur ohne Schleife.
Eigentlich habe ich die Frage fast selbst beantwortet würden jetzt einige sagen, aber ich weiß einfach nicht was an der schleife sein könnte.

Danke fürs lesen und eure Tipps
 
item: im zweiten code. Was ist rs? Greift das auf dieselbe Tabelle zu die du Updaten willst?

item: Ebenfalls im Zweiten. Was ist Rec?

item: Immer noch zum 2. Das sind ganz komische Statements die du da auskommentiert hast. Keiens davon scheint mir sauber zu sein.
 
rec ist definiert als recordset:
Dim rec As ADODB.Recordset
Set rec = New ADODB.Recordset

und rs, da habe ich mich verguckt, es war eine andere Sache. eigentlich steht da eine For schleife die bis 5 geht.
 
Du mischst da aber etwas. Ein Recordset ist ekin UPDATE oder INSERT
Visual Basic:
Do While Not rs.EOF
     'rec.Open "UPDATE Tabelle SET XXX = XXXX , cnn, adOpenStatic, adLockBatchOptimistic
     'rec.Open "INSERT Tabelle (XXXXXX) cnn, adOpenStatic, adLockBatchOptimistic
     'rec.Open "insert into Tabelle (XXXXXXX), cnn, adOpenStatic, adLockBatchOptimistic
 Loop
Was willst du damit?

Ein Update würde so aussehen
Visual Basic:
Dim sql As String

sql = _
    "UPDATE myTable " & _
    "SET " & _
    "    [Feld1] = '" & myForm!var1 & "', " & _
    "    [FELD2] = '" & myForm!var2 & "' " & _
    "WHERE ID = " & myForm!id

Call currentdb.Execute(sql)
 
Wow ich habe es so umgesetzt, wie du es gesagt hast und nun habe ich die abfrage die vorher für 5 Datensätze 26 Sekunden gedauert hat nur 5 Sekunden gedauert und für 20 Datensätze nur 15 Sekunden. Vielen vielen Dank!

Habe alles jetzt so wie du oben geschrieben hast umgesetzt.

Code:
Dim sql As String
 
sql = _
    "UPDATE myTable " & _
    "SET " & _
    "    [Feld1] = '" & myForm!var1 & "', " & _
    "    [FELD2] = '" & myForm!var2 & "' " & _
    "WHERE ID = " & myForm!id
 
Call currentdb.Execute(sql)
 
Hallo nochmal,

ich bins noch mal.
Das Thema will einfach nicht locker lassen. Ich habe eine Schleife die bis zu 5 mal durchlaufen wird, das dauert ca. 5 Sekunden, was irgendwie ziemlich lang ist. Ich habe hier 3 Statements die jeweil beim durchlaufen ausgeführt werden. Die Schleife ist eine For Schleife.

Visual Basic:
sql = "UPDATE Tabelle SET Spalte = 20, Spalte = 125,Spalte=now() WHERE Spalte = 38857"
Call CurrentDb.Execute(sql)

sql = "INSERT INTO Tabelle (Spalte,Spalte,Spalte,Spalte)SELECT 38857,20,10026,904757 FROM  Bestellung Where Spalte = 38857"
Call CurrentDb.Execute(sql)

sql = "insert into Tabelle (Spalte,Spalte,Spalte,Spalte)SELECT 38857,10026,125,904757 FROM  Bestellung Where Spalte = 38857"
Call CurrentDb.Execute(sql)

Je nachdem wie oft er die schleife durchläuft dauert es bei 20 Durchgängen bis zu 25 Sekunden.
an was könnte das den liegen ?
 
SQL:
INSERT INTO Tabelle (Spalte,Spalte,Spalte,Spalte)SELECT 38857,20,10026,904757 FROM  Bestellung Where Spalte = 38857
Warum ein SELECT wenn du nur Werte ahst?

SQL:
INSERT INTO Tabelle 
(Spalte,Spalte,Spalte,Spalte)
VALUES(38857,20,10026,904757)
 
Zuletzt bearbeitet von einem Moderator:
Entschuldigung in diesem Beispiel wird das Falsch dargestellt.
Eigentlich werden die per "Select" herausgefunden.

hier das Original:
Visual Basic:
Sql = "insert INTO log_inter (Artikel_ID,Operator,Inter_Status,Artikelnummer)SELECT Artikel_ID,'" & Forms!Anmeldung!Tf_PIN & "',125,Artikelnummer FROM  Bestellung Where Katalog='H&M' and Inter_Status=120 "
Call CurrentDb.Execute(Sql)
 
Wie gross sind die Tabellen?
Hast du in der Tabelle Bestellung ein Index auf Katalog&Inter_Status?
 
Zurück