Anmelden

View Full Version : SQL Package



Seiten : 1 [2]

BenderD
08-10-03, 11:49
Hallo,

danke erst mal für die Treiber Infos, das könnte nochmal wichtig werden für eine Showcase Arie, da habe ich nämlich wenig Einfluss auf die SQL Statements.

Nach der Bemerkung mit dem CLI wird mir auch klar, warum das mit dem Package nichts gebracht hat. Ich denke in der Konstellation sind die stored Procedures eine Idee, wenn es denn funktioniert - da gibt es, meine ich, Einschränkungen für die nicht Java Welt.

mfg

Dieter Bender

Asti
29-10-07, 08:47
Den SQL definiere ich an den richtigen Stellen mit "?" und kann dann jederzeit mit "OpenRecodset" und den Parametern im Array (oder in einer Schleife gefüllt) das Command ausführen.

Kann ich an einen Parameter ein Array hängen? Arbeite bei INSERT nur noch mit ado command und wüsste gerne, ob man das noch beschleunigen kann, indem man nicht jede Zeile einzeln "abschickt" sondern ein array an jeden Parameter anhängt und dann einen ganzen Block überträgt. Habe das mit ODBC BLOCK INSERT probiert, funktioniert auch, möchte das aber lieber über ado realisieren. Gibt es eine Art BLOCK INSERT für ado (VB6)?

Gruß Andreas

Fuerchau
29-10-07, 11:48
Nun, das geht nur über ein Recordset, dass vorher per "SELECT ..." angelegt wurde, wichtig ist hierbei die Verwendung eine CLientCursers.

Per .AddNew-Methode können dann neue Sätze erst mal lokal hinzugefügt werden, vorhandene Sätze können direkt per ".Fields("Name")" bzw "!Name" geändert werden.

Zum Schluß ist dann die Methode .UpdateBatch aufzurufen, die nun alle Änderungen in die Zieltabelle überträgt.

Über den Filter ".adFilterPendingRecords" bzw. ".AdFilterConflictingRecords" können die nicht übertragenen bzw. fehlerhaften Sätze ausgefiltert werden.

UpdateBatch hat ggf. in Mehrbenutzerumgebeungen den Nachteil, dass Änderungen/Neuanlagen nicht sofort für alle verfügbar sind und Konflikte schwerer erkennbar werden.

Auch die Anzahl der Operationen (Speicherbedarf) ist da begrenzt.

Es funktioniert also auch folgendes:

Set MyRcd = MyConnect.Execute("Select * from MyTable where Key1=''"

' Erzwingen eines leeren Recordsets

for x=1 to 1000
MyRcd.AddNew
MyRcd!F1 = newval

if x mod 100 = 0 then
MyRcd.UpdateBatch
MyRcd.Requery
endif

next

' Update alle 100 Sätze
' Requery gibt wieder ein leeres Recordset