Microsoft MVPs inside





 MCSEboard.de MCSE Forum zu Windows XP / 2003 / 2008 Server & Windows Vista / Windows 7
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

Windows Forum — Scripting


Alles zum Thema System Administration Scripting — Q & A zum Thema Scripting: Batch, VBS, WMI, PowerShell


Antwort
     
Themen-Optionen
Alt 14.08.2008, 10:32   #1
Newbie
 
Offline
Registriert seit: 07-2004
Beiträge: 4
multidimensionaler Array und suche in dem Array

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
    Mit Zitat antworten
Alt 14.08.2008, 10:48   #2
Expert Member
 
Benutzerbild von phoenixcp
 
Offline
Registriert seit: 02-2004
Ort: Radebeul
Beiträge: 5.464
1. Wie definiere ich einen multidimensionalen Array und befülle Ihn dann mit
meinen Werten ?
Spannende Gegenfrage: Mit was willst du denn skripten / programmieren? Die Programmiersprache wäre da schon entscheidend.

Signatur
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

    Mit Zitat antworten
Alt 14.08.2008, 11:01   #3
Moderator
 
Offline
Registriert seit: 11-2002
Beiträge: 6.541
prinzipiell kannst du mal nach "jagged array" oder "multidimensional array" googeln. Dazu noch die bevorzugte Sprache als Stichwort, dann bekommst du reichlich Treffer

cu
blub

Signatur
www.powershellpraxis.de

Nec Cupias, Nec Metuas

    Mit Zitat antworten
Alt 14.08.2008, 11:08   #4
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.173
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

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Alt 14.08.2008, 11:46   #5
Newbie
 
Offline
Registriert seit: 07-2004
Beiträge: 4
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:
Code:
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

Geändert von jan von sassen (14.08.2008 um 11:57 Uhr). Grund: –––– Doppelpost – Automerge –––
    Mit Zitat antworten
Alt 14.08.2008, 12:16   #6
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.173
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

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Alt 14.08.2008, 13:03   #7
Expert Member
 
Benutzerbild von Cybquest
 
Offline
Registriert seit: 12-2006
Ort: Weinsberg
Beiträge: 1.510
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:
Code:
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

Signatur
My name is Frank, you can say you to me.

    Mit Zitat antworten
Alt 15.08.2008, 12:04   #8
Newbie
 
Offline
Registriert seit: 07-2004
Beiträge: 4
Moin NilsK,

Zitat von NilsK Beitrag anzeigen
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

Zitat von Cybquest Beitrag anzeigen
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:
Code:
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

Geändert von jan von sassen (15.08.2008 um 12:06 Uhr). Grund: –––– Doppelpost – Automerge –––
    Mit Zitat antworten
Alt 16.08.2008, 15:08   #9
Expert Member
 
Benutzerbild von NilsK
 
Offline
Registriert seit: 06-2008
Ort: Hannover
Beiträge: 7.173
Moin,

Zitat von jan von sassen Beitrag anzeigen
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

Signatur
Nils Kaczenski

MVP Directory Services: Architecture
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!

    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ACU: Array Expand BTadov Windows Server Forum 9 16.02.2010 10:48
WSH Array auslesen BlackShadow Windows Forum — Scripting 2 27.10.2008 11:11
Array wiederherstellen wiwa Windows Forum — Allgemein 4 17.11.2006 17:37
Raid Array 10 sysiphos Windows Forum — Allgemein 7 17.01.2006 12:34
VBS - dynamsiches Array? Butterbrot Windows Forum — Allgemein 1 19.02.2004 12:30


Alle Zeitangaben in MEZ/CET. Es ist jetzt 06:15 Uhr. Seite generiert in 0,076 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang