vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Zeilenzahl in Datentyp variant ermittel 
Autor: NMueller
Datum: 22.08.16 09:19

hallo, ich lese aus einer Datenbank felder aus und stelle diese in einen Datentyp variant mit der getrow Methode. Dazu setze ich den numerischen wer von Getrow auf 200.
Nun möchte ich den tatsächlich geladene Zeilenzahl ermitteln, finde aber keine passende Funktion.
Ubound zeigt den wert 2 bei ca 94 zeilen. Jeder über den geladenen WErt gemacht zugriff führt zum Fehler falscher Index
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilenzahl in Datentyp variant ermittel 
Autor: Blackbox
Datum: 22.08.16 09:57

Hallo,

Du bekommst durch GetRows immer eine mehrdimensionale Array zurück (wenn mehr als 1 Spalte vorhanden und
diese abgefragt wurden)

Array(Zeilen, Spalten) und dieses noch auf Null basierend.

NumRows = Ubound(Variant-of-GetRows, Anzahl-Spalten) + 1

Anzahl-Spalten ist optional und ist immer 1, wenn nichts angegeben wurde
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilenzahl in Datentyp variant ermittel 
Autor: NMueller
Datum: 22.08.16 10:52

danke für die schnelle Antwort.


Ubound (wie vorgeschlagen) erzeugt bei der zuweisung auf eine Variable den Fehler indexwert und den Wert 3
daten = typ variant
anz_for = UBound(daten, 3) + 1 = fehler indexwert
bei
anz_for = UBound(daten, 1) + 1 erhalte ich den wert 3
Statments:
Function get_vhb_forms(daten)
Dim anz_for As Long

dbfile = parampath & "\" & paramfile


Set db = Workspaces(0).OpenDatabase(dbfile, False, False)
Set formulare1 = db.OpenRecordset("Select formnr, eigner, form_art from formulare where eigner = 'VHB'")
anz_for = formulare1.RecordCount
' daten 0 =formular
' daten 1 = eigner
' daten 2 = druckort
While Not formulare1.EOF
daten = formulare1.GetRows(200)

Wend
anz_for = UBound(daten, 1) + 1
formulare1.Close
db.Close
End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilenzahl in Datentyp variant ermittel 
Autor: Rippler
Datum: 22.08.16 14:18

siehe hier


http://www.vbarchiv.net/forum/id13_i17962t17953_mdb-felder-auslesen-und-in-array-speichern.html
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilenzahl in Datentyp variant ermittel 
Autor: Blackbox
Datum: 22.08.16 18:46

Hallo,

Du erhälst ein auf Null basiertes Array, das heißt, wenn Du drei Spalten hast,
so musst Du als Spaltenwert 2 eintragen (0=1,1=2, 2=3).

Davon habe ich aber geschreiben ;)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilenzahl in Datentyp variant ermittel 
Autor: NMueller
Datum: 23.08.16 08:03

Besten Dank für den Hinweis, mit der Methode von Rippler funktioniert es
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeilenzahl in Datentyp variant ermittel 
Autor: Blackbox
Datum: 23.08.16 10:17

Hallo,

natürlich funktioniert das Beispiel von Rippler. Mich wundert es, warum das Beispiel von Microsoft bei Dir nicht funktioniert und habe es mit einer Northwind-DB (Office 2013) geprüft. Ich habe aus der Northwind die Tabelle Customer List in ein altes Excel-Format exportiert und das mit DAO in einen Recordset geladen. Die Excel-Tabelle habe ich vorher in MyTable umbenannt. (Das Datenbankformat
meiner NorthWind-DB ist für DAO nicht bekannt).

   Dim db As DAO.Database
   Dim rs As DAO.Recordset
   Dim ar As Variant
 
   Set db = DBEngine.OpenDatabase("C:\Users\Blacky\Desktop\Customer_List.xls", _
     False, False, "Excel 8.0")
   Set rs = db.OpenRecordset("MyTable$")
 
   ar = rs.GetRows(200) '200 = Maximum angenommener Zeilen
   Debug.Print UBound(ar, 2) + 1
Ergebnis ist 29 Zeilen; das ist korrekt. Der Unterschied im Beispiel von Rippler ist die
durch Rs.MoveLast/RS.MoveFirst verbrauchte Zeit.

            TB.MoveLast 
            Anzahl = TB.RecordCount
 
            TB.MoveFirst
 
            wert = TB.GetRows(Anzahl)
Mein Irrtum war, dass der zweite Parameter nicht die
Anzahl der Spalten bedeutet, sondern tatsächlich 2 sein muss, wie es MS vorgibt.

Bei ein paar Datensätzen merkt man den Unterschied der beiden Versionen nicht.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel