iconAlle Zeitangaben in WEZ +1. Es ist jetzt 23:00 Uhr. | Welcome to Forum, please register to access all of our features.
  #1 (permalink)  
Alt 30.04.2008, 15:23
Benutzerbild von tschitscho
Registrierter Benutzer
 
Registriert seit: 05.2002
Ort: Züri
Beiträge: 586
Access und Arrays

Voraussetzung: MS ACCESS 2003
Problem: Ich habe eine Tabelle (temporär) die automatisch gefüllt wird (so bis 15'000 Einträge), da möchte ich per VBA eine Spalte davon auslesen und nach einem Wert durchsuchen

Versuch:
meinArray = Recorset.GetRows(, , 7)
meinSuchString = "WertXY"
Array.Indexof(meinArray,meinSuchString)

Leider funktioniert das irgendwie ned... Access kennt "Array" nicht... fehlt im eine Referenz? Wenn ja, welche? und wie bind' ich die ein?
Oder bin ich voll und ganz auf dem Holzweg?
Mit Zitat antworten
  #2 (permalink)  
Alt 01.05.2008, 09:08
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
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."
Mit Zitat antworten
  #3 (permalink)  
Alt 02.05.2008, 08:43
Benutzerbild von tschitscho
Registrierter Benutzer
 
Registriert seit: 05.2002
Ort: Züri
Beiträge: 586
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.
Mit Zitat antworten
  #4 (permalink)  
Alt 02.05.2008, 09:30
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
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
);
vorsicht mit NULLable spalten und NOT IN operator.
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)
Mit Zitat antworten
  #5 (permalink)  
Alt 02.05.2008, 09:35
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
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)
Mit Zitat antworten
  #6 (permalink)  
Alt 02.05.2008, 09:36
Benutzerbild von tschitscho
Registrierter Benutzer
 
Registriert seit: 05.2002
Ort: Züri
Beiträge: 586
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.
Mit Zitat antworten
  #7 (permalink)  
Alt 02.05.2008, 09:45
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
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."
Mit Zitat antworten
  #8 (permalink)  
Alt 05.05.2008, 09:23
Benutzerbild von tschitscho
Registrierter Benutzer
 
Registriert seit: 05.2002
Ort: Züri
Beiträge: 586
Irgendwie... schnall' ich ned so ganz was du meinst...
Mit Zitat antworten
  #9 (permalink)  
Alt 06.05.2008, 10:09
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
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."
Mit Zitat antworten
  #10 (permalink)  
Alt 06.05.2008, 11:53
Benutzerbild von tschitscho
Registrierter Benutzer
 
Registriert seit: 05.2002
Ort: Züri
Beiträge: 586
Was ich prüfen will ist der Timestamp: 20080428140548.000000+120. Das ist das eindeutigste meiner bescheidenen Tabelle.
Mit Zitat antworten
  #11 (permalink)  
Alt 06.05.2008, 13:28
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
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."
Mit Zitat antworten
  #12 (permalink)  
Alt 06.05.2008, 13:37
Benutzerbild von hellcat
Moderator
 
Registriert seit: 05.2002
Ort: Schweiz
Beiträge: 697
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)
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an




Search Engine Optimization by vBSEO 3.2.0