Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

VBA Array mit mehr als 100 Feldern

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich habe beim Auslesen und Schreiben des Inhaltes einer Textdatei in ein Array daß Problem, daß bis zum Feld 99 des Arrays alles klappt - beim Abfragen von Feldern größer/gleich 100 passiert nichts - es erscheint weder eine Fehlermeldung noch werden die Feldinhalte abgelegt:

Daß Problem liegt an dieser Zeile:

Select Case MyArray(61)

Sobald hier ein Wert >99 steht, funktioniert nichts mehr !

Dim MyArray() As String

Dim Temptabelle As Variant

Dim Tempstring As String

Dim Freie_Datei As Integer

Dim AnzahlZeichenInString, AnzahlZeichenInArray As Integer

Dim i, k, j As Integer

Dim sql As String

Dim Konservennummer_Var As String

Dim GGT_Var As Integer

Dim GOT_Var As Integer

Dim GPT_Var As Integer

Dim CHOL_Var As Integer

Dim TRIG_Var As Integer

Dim ALB_Var As Integer

Dim KREA_Var As Integer

Dim GLUC_Var As Integer

Freie_Datei = FreeFile

AnzahlZeichenInArray = 0

k = 0

Open "C:\MODULAR\MODULAR_05544.txt" For Input As #Freie_Datei

While Not EOF(Freie_Datei)

'Schreibt alles was in eine Zeile steht (Datei) in variable (Tempstring)

Input #Freie_Datei, Tempstring

'Speichert in Variant (Temptabelle) von variable (Tempstring) ohne Trennzeichen

Temptabelle = Split(Tempstring, "|")

'Zählt die Anzahl von Zeichen in Variant (Temptabelle)

AnzahlZeichenInString = UBound(Temptabelle)

'Endwert (die letzte Position im Array)

AnzahlZeichenInArray = k + AnzahlZeichenInString

'Position von Daten in Temptabelle (jeden Schleifengang fähngt von 0)

j = 0

ReDim Preserve MyArray(AnzahlZeichenInArray)

For i = k To AnzahlZeichenInArray

'Schreibt Element an die richtige Position im Array

MyArray(i) = Temptabelle(j)

j = j + 1

Next i

'Startwert (die erste Position im Array)

k = AnzahlZeichenInArray + 1

Wend

Close Freie_Datei

Konservennummer_Var = MyArray(30)

' Abfrage des ersten Ergebnisses

Select Case MyArray(61)

Case "^^^219/": GGT_Var = Val(MyArray(62))

sql = "UPDATE dbo.SpendenTestergeb SET GGT = " & GGT_Var & " "

sql = sql & " WHERE (Konservennummer = " & Konservennummer_Var & ");"

DoCmd.RunSQL sql

Case "^^^684/": GPT_Var = Val(MyArray(62))

sql = "UPDATE dbo.SpendenTestergeb SET GPT = " & GPT_Var & " "

sql = sql & " WHERE (Konservennummer = " & Konservennummer_Var & ");"

DoCmd.RunSQL sql

Case "^^^686/": GOT_Var = Val(MyArray(62))

sql = "UPDATE dbo.SpendenTestergeb SET GOT = " & GOT_Var & " "

sql = sql & " WHERE (Konservennummer = " & Konservennummer_Var & ");"

DoCmd.RunSQL sql

Case "^^^413/": ALB_Var = Val(MyArray(62))

sql = "UPDATE dbo.SpendenTestergeb SET Albumin = " & ALB_Var & " "

sql = sql & " WHERE (Konservennummer = " & Konservennummer_Var & ");"

DoCmd.RunSQL sql

Case "^^^433/": CHOL_Var = Val(MyArray(62))

sql = "UPDATE dbo.SpendenTestergeb SET Cholesterin = " & CHOL_Var & " "

sql = sql & " WHERE (Konservennummer = " & Konservennummer_Var & ");"

DoCmd.RunSQL sql

Case "^^^773/": KREA_Var = Val(MyArray(62))

sql = "UPDATE dbo.SpendenTestergeb SET Kreatinin = " & KREA_Var & " "

sql = sql & " WHERE (Konservennummer = " & Konservennummer_Var & ");"

DoCmd.RunSQL sql

Case "^^^668/": GLUC_Var = Val(MyArray(62))

sql = "UPDATE dbo.SpendenTestergeb SET Gesamteiweiß = " & GLUC_Var & " "

sql = sql & " WHERE (Konservennummer = " & Konservennummer_Var & ");"

DoCmd.RunSQL sql

Case "^^^781/": TRIG_Var = Val(MyArray(62))

sql = "UPDATE dbo.SpendenTestergeb SET Triglyceride = " & TRIG_Var & " "

sql = sql & " WHERE (Konservennummer = " & Konservennummer_Var & ");"

DoCmd.RunSQL sql

Besten Dank im Vorfeld für Eure Unterstützung !

wie viele Elemente hat dein Array?

Ist variabel - im aktuelen Beispiel ca. 200 Felder.

wenn du debuggst, welchen Inhalt hat da MyArray(100)?

Genau den Inhalt, den er haben sollte (in diesem Fall die Zahl 25.6) - ich lasse mir parallel zum Tabellenupdate den Inhalt auch in einer MsgBox anzeigen - daher weiß ich es. Vielleicht nochmal kurz zum Verständnis: Die entsprechenden case-Fälle tragen bestimmte Werte in eine SQL-Tabelle ein - solange daß Array-element unter 100 liegt, werden sie auch korrekt eingetragen - ....

dann vermute ich, dass die Spalte "Triglyceride" nur einen falschen Datentyp hat.

Lasse dir das SQL-Statement ausgeben und führe diesen manuell im DMS aus.

Diese Spalte hat den selben Datentyp wie alle anderen - wie kommst Du darauf ?

Sorry, hab da was verwechselt.

Wenn du das Programm bei >100 debuggst, wird das SQL-Statement ausgeführt? Hast du mal probiert das Statement im Debug-modus dir auszugeben und über DMS auszuführen?

Nein, bei einem Wert >100 wird daß SQl-Statement nicht ausgeführt - soweit kommt er nicht..

dann trifft für die Variable MyArray(100) keins der Case-Bedingungen zu.

Der Wert ist ja 25.6 und in deinen Bedingung, die du gepostet hast sehe ich keine passende Case-Bedingung dafür.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.