|
||||
|
Du hast eine Access tabelle und willst in einer spalte nach einem bestimmten wert suchen? Warum nicht einfach eine SQL abfrage?
SELECT col1, col2, ... FROM tabelle WHERE col3 = wert Dann kannst du einfach mittels ResultSet auf die daten zugreiffen. /hc
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format." |
|
||||
|
Nein so einfach ist es doch nicht
![]() Also, ich habe ca. 15'000 Einträge in einer Tabelle, nun kommen durch einen Kanal auf einen Schlag nochmals 15'005 rein. Dabei sollten nur die neuen 5 angehängt werden. Damit es keine Doppelten gibt, muss ich eben vergleichen. |
|
||||
|
also, du willst nur das delta von der staging tabelle in die produktiv tabelle laden?
eine moeglichkeit: Code:
insert into prodTab (col1, col2, col3) select col1, col2, col3 from stageTab where (col1, col2, col3) not in ( select col1, col2, col3 from prodTab ); OK, ich spreche hier ueber Oracle syntaxt und verhalten, koennte aber auch auf Access zutreffen. Aber da bist du ja spezie, nicht ich...
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format." Geändert von hellcat (02.05.2008 um 09:34 Uhr) |
|
||||
|
eine andere moeglichkeit:
Code:
insert into prodTab (col1, col2, col3) select col1, col2, col3 from stageTab minus select col1, col2, col3 from prodTab gibt es in Access eigentlich auch eine LOG ERRORS klausel fuer INSERT-SELECT statments?
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format." Geändert von hellcat (02.05.2008 um 09:38 Uhr) |
|
||||
|
Ja, im Prinzip schon, nur die "Staging" Tabelle ist keine Tabelle, sondern ein Array, welches wie gesagt über einen anderen Kanal kommt, geladen wird und in halt eben in die Tabelle gespeichert. Das ganze soll sich dann so alle 5 sek refreshen...
Ich könnte natürlich jeweils alle Daten in eine neue Tabelle speichern und die dann mergen. Aber das dauert zu lange... Darum wollte ich die Produktive Tabelle auch in Array laden und die dann vergleichen. |
|
||||
|
Ah, jetzt verstehe ich das Problem...du hast dich aber auch lange zurueckgehalten mit informationen rausruecken...
welch schande bist du an Access gebunden, das waere ein 5 minuten job mit pl/sql table functions ;-) OK, zurueck zum eigentlichen problem...ich weiss nicht wie performant Access in gewissen situationen ist, aber evtl. waere es eine moeglichkeit, falls du einen unique key hast: mach einfach die inserts und fange constraint violations ab - somit ueberlasst du den check dem "RDBMS" (wenn man das bei Access so salop sagen darf)... wie gesagt, diese loesung hangt extrem von der performance der SQL engine ab...
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format." |
|
||||
|
Irgendwie... schnall' ich ned so ganz was du meinst...
|
|
||||
|
OK, erstmal kurze frage: das attribut das du pruefen willst, gehoert dies zum PK/UK?
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format." |
|
||||
|
Was ich prüfen will ist der Timestamp: 20080428140548.000000+120. Das ist das eindeutigste meiner bescheidenen Tabelle.
|
|
||||
|
also der "timestamp" ist dein eindeutiger schluessel, nun die frage, ist es primary key oder unique key?
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format." |
|
||||
|
da das frage-antwort spiel ein bisschen lange dauert, greife ich schon mal vor:
angenommen "timestamp" ist der PK/UK und du willst verhindern, dass datensaetze aus deinem VBA array in die tabellen gelangen, wenn ein datensatz mit dem exakt gleichen "timestamp" bereits in der tabelle existiert. was ich in meinem vorigen post versucht habe zu erklaeren ist: geh in einer schleife durchs array und mach die INSERTs. falls bereits ein datensatz mit dem gleichen "timestamp" existiert wird Access einen fehler zurueck geben (constraint violation), ignoriere diesen und mach mit dem naechsten datensatz aus dem array weiter. somit ueberlaesst du dem "RDBMS" das pruefen des "timestamp" attributes. wie gesagt, ob das performance maessig OK ist kann ich nicht sagen, da ich Access das letzte mal vor ca. 5 Jahren in der version MS Access 97 verwendet habe... hoffe das war ein bisschen verstaendlicher... /hc
__________________
"Text messaging being a modern technology that allows average people to display their functional illiteracy in a much more compact format." Geändert von hellcat (06.05.2008 um 13:40 Uhr) |
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|