Jump to content

multidimensionaler Array und suche in dem Array


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

ich habe zwei Fragen:

 

Ich möchte aus einer Tabelle einer Oracledatenbank die Werte

MOTORWAY_ENTRANCE_ID , MOTORWAY_ENTRANCE_NO , NAME and DISTRICT_ID in einem multidimensionalen Array eintragen.

 

Meine Datenbankabfrage sieht wie folgt aus:

my query = "select MOTORWAY_ENTRANCE_ID,MOTORWAY_ENTRANCE_NO,NAME,DISTRICT_ID from MOTORWAY_ENTRANCE where DISTRICT_ID LIKE '09%' AND VERSION_NO = '0' AND Version_END IS NULL"

 

1. Wie definiere ich einen multidimensionalen Array und befülle Ihn dann mit

meinen Werten ?

 

 

Als nächsten Schritt möchte ich dann innerhalb des Array bestimmte Werte raussuchen und diese dann in eine Variable speichern.

Also ich hab zum Beispiel eine MOTORWAY_ENTRANCE_NO die 20 ist und eine

MOTORWAY_ENTRANCE_NO die 50 ist. Jeweils davor und danach sind noch diverse weitere Nummern vergeben.

Ich möchte jetzt alle Einträge, die zwischen der 20 und der 50 liegen in eine separate Variable speichern.

 

2. Wie kann ich diese Suche über den oben definierten multidimensionalen Array am besten umsetzen ?

 

Gruß und Dank

 

vsassenj

Link zu diesem Kommentar

Moin,

 

abgesehen von der ebenso naheliegenden wie berechtigten Frage nach der Skriptsprache wäre es evtl. interessant für dich, per ADO mit einem lokalen Recordset zu arbeiten statt mit einem Array. Das hat den Charme, dass du dann mit Datenbankmethoden arbeiten kannst.

 

Ein Beispiel findest du hier:

faq-o-matic.net » Mailadresse gezielt suchen

 

Gruß, Nils

Link zu diesem Kommentar

Moin,

 

hab ich ganz vergessen zu sagen.

Ich möchte das in VBA umsetzten.

 

Gruß

vsassenj

Noch ein nachtrag:

 

Der Zugriff auf die dB funktioniert einwandfrei.

Hier mal mein Skript:

Sub Main()

Dim wstemp As Workspace
Dim dbtemp As Database
Dim rstemp As Recordset
Dim myquery As String
Dim howmany As Variant
Dim Zaehler As Variant
Dim combo1 As Variant
Dim Anschlussstellevon As String
Dim Anschlussstellebis As String
Dim Autobahn As String
Dim AbfrageAutobahnabfahrt As String
Dim AbfrageAutobahnabschnitt As String
Dim AnschlussstellenBayernID(1000) As String
Dim Anschlusstellennummer(1000) As String
Dim AnschlussstellenDistrict(1000) As String
Dim AnschlussstellenName(1000) As String
Dim Ergebnis(100) As String
Dim x As Integer
Dim ListeAutobahnabfahrt(1000) As Autobahnabfahrt

'myquery = "select MOTORWAY_ENTRANCE_ID,MOTORWAY_ENTRANCE_NO,NAME,DISTRICT_ID from MOTORWAY_ENTRANCE where DISTRICT_ID LIKE '09%' AND VERSION_NO = '0' AND Version_END IS NULL"

'MsgBox myquery

Set wstemp = DBEngine.Workspaces(0)
Set dbtemp = wstemp.OpenDatabase("", False, false, "ODBC;DSN=xxx;USR=xxx;PWD=xxx")
Set rstemp = dbtemp.OpenRecordset(myquery, dbOpenDynaset, dbSQLPassThrough)
howmany = 0

Do Until rstemp.EOF

   'MsgBox rstemp(0)
   AnschlussstellenBayernID(howmany) = rstemp(0)
   rstemp.MoveNext
   howmany = howmany + 1

Loop

Zaehler = 0

For Zaehler = 0 To howmany - 1

'MsgBox AnschlussstellenBayernID(Zaehler)

Next

 

Ich bin soweit, das ich einzelner Werte in einen array einschreiben kann.

Da ich ja aber die Werte vergleichen muß, muß ich jetzt einen Weg finden, mit dem ich die Werte vergleichen kann.

 

Gruß

 

Jan von Sassen

Link zu diesem Kommentar

Moin,

 

wie gesagt, ein eleganter Weg ist ein lokales Recordset.

Vielleicht ist es für dich aber auch noch einfacher, wenn du einfach nur die Werte aus der Datenbank ausliest, die dich interessieren. Je nachdem, was du dann mit den Daten vorhast, sparst du dir dann das Zwischenspeichern. Die Datenbank erledigt das Filtern in jedem Fall effizienter.

 

Gruß, Nils

Link zu diesem Kommentar

Du benutzt ja bereit eh Recordsets

Set rstemp = dbtemp.OpenRecordset(myquery, dbOpenDynaset, dbSQLPassThrough)

 

Daher wäre auch mein Vorschlag, gleich entspr. Query's zu definieren.

Für dein obiges Beispiel z.B. in die WHERE-Klausel noch ein

MOTORWAY_ENTRANCE_NO Between 20 AND 50

 

Zum Thema Arrays:

Folgendes wäre z.B. denkbar

Mit einem DIM varMeinArr(1000,10) z.B. ein zweidimensionales Array definieren

Dann die erste Dimension z.B. für die Zeile und die zweite Dimension für das Feld.

Angenommen du nimmst in der 2.Dim. die 1 für das Feld ..ENTRANCE_NO und die 2 für NAME könnte eine Schleife so aussehen:

for i = 0 to varZeilen
 if varMeinArr(i,1) >=20 and varMeinArr(i,1) <=50 then
   ' aus varMeinArr(i,2) nun den Namen auslesen...
 end if
next

Link zu diesem Kommentar

Moin NilsK,

 

Moin,

 

wie gesagt, ein eleganter Weg ist ein lokales Recordset.

Vielleicht ist es für dich aber auch noch einfacher, wenn du einfach nur die Werte aus der Datenbank ausliest, die dich interessieren. Je nachdem, was du dann mit den Daten vorhast, sparst du dir dann das Zwischenspeichern. Die Datenbank erledigt das Filtern in jedem Fall effizienter.

 

Gruß, Nils

 

die beschriebene Suche ist der erste Schritt. Im nächsten Schritt muss ich mit dem so rausgefunden District_ID's wieder in der Datenbank nach Einträgen suchen, die dem Distict_ID zugeordnet sind.

 

Gruß

Jan

Moin Cybquest,

 

vielen Dank für den Ansatz, werde das gleich mal ausprobieren.

 

Gruß

Jan

 

Du benutzt ja bereit eh Recordsets

 

 

Daher wäre auch mein Vorschlag, gleich entspr. Query's zu definieren.

Für dein obiges Beispiel z.B. in die WHERE-Klausel noch ein

MOTORWAY_ENTRANCE_NO Between 20 AND 50

 

Zum Thema Arrays:

Folgendes wäre z.B. denkbar

Mit einem DIM varMeinArr(1000,10) z.B. ein zweidimensionales Array definieren

Dann die erste Dimension z.B. für die Zeile und die zweite Dimension für das Feld.

Angenommen du nimmst in der 2.Dim. die 1 für das Feld ..ENTRANCE_NO und die 2 für NAME könnte eine Schleife so aussehen:

for i = 0 to varZeilen
 if varMeinArr(i,1) >=20 and varMeinArr(i,1) <=50 then
   ' aus varMeinArr(i,2) nun den Namen auslesen...
 end if
next

Link zu diesem Kommentar

Moin,

 

die beschriebene Suche ist der erste Schritt. Im nächsten Schritt muss ich mit dem so rausgefunden District_ID's wieder in der Datenbank nach Einträgen suchen, die dem Distict_ID zugeordnet sind.

 

das hört sich für mich so an, als wärest du mit einer SQL-Query mit JOIN am besten bedient. Lass doch die Datenbank die Arbeit machen, dafür ist sie ja da.

 

Gruß, Nils

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...