VB6 Recordset aktualisieren
Mir läuft ein vb6-Programm Durchlaufen Sie mehrere Datensätze in einer Datenbank-Tabelle und Eingabe eines Datums in ein Feld. Dies wird viele Stunden dauern zu laufen.
Ich bin zu bemerken, dass die Anzahl der Datensätze in der Tabelle steigt von 1 alle paar Sekunden, und dann die Verringerung um 1 (geht zurück auf die ursprüngliche Zählung). Gibt es einen Grund für dieses?
Ich bin mit einem VB6-recordset-und die update-Funktion, d.h. rs.update. Ich bin nicht einfügen neuer Datensätze.
Der code ist wie folgt:
rs.Open "select reference,value1,datefield from datetable where field1 = 'value1' " & _
"order by reference", objAuditCon.ActiveCon, adOpenStatic, adLockPessimistic
Do While Not rs.EOF
intReadCount = intReadCount + 1
DoEvents
If Not IsNull(rs("value1")) Then
testArray = Split(rs("value1"), ",")
rs2.Open "SELECT Date FROM TBL_TestTable WHERE Record_URN = '" & testArray(1) & "'", objSystemCon.ActiveCon, adOpenStatic, adLockReadOnly
If rs2.EOF Then
End If
If Not rs2.EOF Then
rs("DateField") = Format$(rs2("Date"), "dd mmm yy h:mm:ss")
rs.Update
intWriteCount = intWriteCount + 1
End If
rs2.Close
Else
End If
rs.MoveNext
Loop
rs.Close
- Ich kann keinen Grund sehen, die für die Anzahl der Datensätze zu vergrößern, aber einfach nur neugierig, warum nicht Sie ausführen von SQL-Anweisungen zur Aktualisierung der Informationen vs Schleife durch die Datensätze? Dann könnte man ein update Haufen auf einmal.
- Warum nicht erstellen Sie eine Gespeicherte Prozedur, und klicken Sie dann führen Sie es über den code? Dies sollte Sie verbessern die Prozess-Zeit ein wenig.
- Ich denke, dass könnte es sein eine zusätzliche Zeile für caching-Zwecke vielleicht?
- Wie sind Sie mit der Bestimmung, dass die Anzahl der Datensätze ändert?
- CraigJ, ich bin einfach der running count in der SQL Studio Manager also select count(*) from datetable? Drücken Sie die execute-Taste jede Sekunde, die Zählung gelegentlich erhöht, indem Sie einen Datensatz und dann sofort verringert, indem Sie einen Datensatz? Haben Sie irgendwelche Ideen? Danke.
- Was interessanter wäre ist, welche Daten in diese zusätzliche Zeile. In jedem Fall, die Quintessenz ist, dass, wenn es nicht tatsächlich verursacht ein problem für dich ist, dann Mach dir keine sorgen. Sie könnte informieren Sie Microsoft über das Problem und sehen, was Sie sagen. Sie sind dazu gedacht, um Unterstützung zu leisten.
- MS nicht unterstützen wahrscheinlich, da es mit einer VB 6 Anwendung. Sie stützen nicht mehr. Möglicherweise hängen von der Datenbank-version, aber wahrscheinlich würden Sie sich nicht berühren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut können Sie erheblich reduzieren Sie Ihre SQL-Arbeit hier.
Sind Sie im wesentlichen, sieht es für mich(ich habe nicht verwendet VB6 & ADO in 10 Jahren), laden Sie Ihre Aufzeichnung erste recordset, einen Wert überprüfen, und wenn dieser Wert nicht null läuft eine zweite auswählen, DANN aktualisieren des Recordsets....
Sie können tun, anstatt alles nur, erstellen Sie ein command-Objekt
Erklären Sie diese, bevor Sie Ihre loops
dim objComm
set objComm = Server.CreateObject("ADODB.Command")
Verwenden Sie diese in Ihrem Regelkreis
Anstatt 2. diskrete auszuwählen, ziehen Sie die Daten ein, dann mache ein update und drücken Sie es wieder heraus, drücken Sie einfach eine update-Anweisung. Dies beschleunigt die Bearbeitung Ihrer Datensätze.....Ich weiß, ich habe zu schreiben, Sachen in VB6 so aus lange Weile 🙂
Sodass Ihr code sollte jetzt Lesen sich wie
deine select-Anweisung ist immer noch da, wie Sie sehen können, es ist ein sub wählen Sie nun, mit dem Vorteil, riesig, du bist nicht zeichnen Datensätze an den server, der dann zu aktualisieren. Sie senden die server eine Anweisung zu tun, die Aktualisierung. Sie schneiden Ihre Ausflüge in die Hälfte.
Hoffe, dass dies Sinn machte.
Einfache Antwort: nehmen Sie die DoEvents-Anweisung. Wenn Sie Sie verwenden, um Bildschirm-refresh, das in regelmäßigen Abständen eine manuelle Aktualisierung der GUI nach, sagen wir, 1000 Iterationen der Schleife.
Der Grund, warum dies zu einem Problem führen wird, dass andere code, den Sie möglicherweise keine Kontrolle über die möglicherweise ausgeführt beim Aufruf von DoEvents.