ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
2549
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Willi_Kaiser ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    46
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
     
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    
    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
     

  2. #2
    Avatar von Yaslaw
    Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    7.046
    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.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements¨in PHP-Code kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit Code-Tags verwenden

  3. #3
    Willi_Kaiser ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    46
    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.
     

  4. #4
    Avatar von Yaslaw
    Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    7.046
    Du mischst da aber etwas. Ein Recordset ist ekin UPDATE oder INSERT
    Code vb:
    1
    2
    3
    4
    5
    
    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
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Dim sql As String
     
    sql = _
        "UPDATE myTable " & _
        "SET " & _
        "    [Feld1] = '" & myForm!var1 & "', " & _
        "    [FELD2] = '" & myForm!var2 & "' " & _
        "WHERE ID = " & myForm!id
     
    Call currentdb.Execute(sql)
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements¨in PHP-Code kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit Code-Tags verwenden

  5. #5
    Willi_Kaiser ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    46
    Hmm... jetzt wo du es sagst, leuchtet ein. Ich probiere es mal so umzuschreiben und sage dann wie es ausschaut.
     

  6. #6
    Willi_Kaiser ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    46
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    Dim sql As String
     
    sql = _
        "UPDATE myTable " & _
        "SET " & _
        "    [Feld1] = '" & myForm!var1 & "', " & _
        "    [FELD2] = '" & myForm!var2 & "' " & _
        "WHERE ID = " & myForm!id
     
    Call currentdb.Execute(sql)
     

  7. #7
    Willi_Kaiser ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    46
    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.

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    
    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 ?
     

  8. #8
    Avatar von Yaslaw
    Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    7.046
    Code sql:
    1
    
    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?

    Code sql:
    1
    2
    3
    
    INSERT INTO Tabelle 
    (Spalte,Spalte,Spalte,Spalte)
    VALUES(38857,20,10026,904757)
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements¨in PHP-Code kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit Code-Tags verwenden

  9. #9
    Willi_Kaiser ist offline Mitglied Bronze
    Registriert seit
    Oct 2010
    Beiträge
    46
    Entschuldigung in diesem Beispiel wird das Falsch dargestellt.
    Eigentlich werden die per "Select" herausgefunden.

    hier das Original:
    Code vb:
    1
    2
    
    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)
     

  10. #10
    Avatar von Yaslaw
    Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    7.046
    Wie gross sind die Tabellen?
    Hast du in der Tabelle Bestellung ein Index auf Katalog&Inter_Status?
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements¨in PHP-Code kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit Code-Tags verwenden

Ähnliche Themen

  1. db Update oder insert
    Von hups1803 im Forum PHP
    Antworten: 10
    Letzter Beitrag: 28.09.11, 12:01
  2. insert oder update (für MySQL)
    Von Steusi im Forum PHP
    Antworten: 17
    Letzter Beitrag: 08.04.09, 10:02
  3. Insert und/oder Update
    Von RedDevilGT im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 06.04.06, 08:45
  4. Antworten: 3
    Letzter Beitrag: 20.12.05, 11:56
  5. Antworten: 2
    Letzter Beitrag: 26.10.05, 16:24

Stichworte