computerhelferferdi
Goto Top

Visual Basic und MSflexgrid

Hallo
Hat jemand eine Ahnung ob es bei dem MSFlexgrid Steuerelement VB6 eine Begrenzung der Zeilen und Spalten gibt. Ich habe die
Erfahrung gemacht irgendwo bei 6000 Rows geht nichts mehr, bräuchte aber so ca 80000 Zeilen.

Ferdi Neuhaus

Content-ID: 81905

Url: https://administrator.de/contentid/81905

Ausgedruckt am: 25.11.2024 um 11:11 Uhr

misterdemeanor
misterdemeanor 28.02.2008 um 15:48:25 Uhr
Goto Top
Grüß Dich Ferdi,

laut Microsoft ist das MSFlexGrid auf 350.000 Zellen begrenzt KB191006. Wenn Du aber tatsächlich nur 6000 Zeilen ins Control bekommst, und nicht etwa knapp 60 Spalten hast, liegt es wohl am fehlenden RAM.

BG, Felix -misterdemeanor-
misterdemeanor
misterdemeanor 28.02.2008 um 16:09:24 Uhr
Goto Top
Wenn Du ein ADO RS verwendest hilft Dir vielleicht dieses Microsoft How-To weiter.

BG, Felix -misterdemeanor-
ComputerhelferFerdi
ComputerhelferFerdi 28.02.2008 um 17:46:56 Uhr
Goto Top
Na ja 2 GB Ram sollten ja wohl reichen. Dann werd ich mal woanders nach nem Fehler suchen.

Ferdi
misterdemeanor
misterdemeanor 28.02.2008 um 18:05:44 Uhr
Goto Top
Hi,

was für eine Datenquelle benutzt Du denn für das FlexGrid? Wird nur Text angezeigt oder auch Bilder?
ComputerhelferFerdi
ComputerhelferFerdi 28.02.2008 um 18:37:06 Uhr
Goto Top
Ich zapfe die DSN an.
Dort lege ich verschiedene Verbindungen an, dann brauch ich nur noch mit VB auf die DSN zuzugreifen. Ich habe eigendlich nur vor Inhalte von Tabellen auszulesen und da sind 2 dabei die halt einbisschen länger sind (ca 65000) Zeilen. Nach 6000 Zeilen sagt mir das Prog, es kann nicht mehr ins Flexgrid schreiben.

Ferdi
misterdemeanor
misterdemeanor 28.02.2008 um 19:02:17 Uhr
Goto Top
Ich zapfe die DSN an.

?? Wie jetzt?

Dort lege ich verschiedene Verbindungen an,

wo ist dort? Im ODBC Admin?

dann brauch ich nur noch mit VB auf die DSN
zuzugreifen.

In einer DataEnvironment? Rein vom Code aus? Über ein DataControl?

Ich habe eigendlich nur vor
Inhalte von Tabellen auszulesen

^^Dann sage bitte wie genau Du das momentan machst.

BG, Felix -misterdemeanor-
ComputerhelferFerdi
ComputerhelferFerdi 28.02.2008 um 19:22:18 Uhr
Goto Top
Morgen im Laufe des Vormittag schick ich mal den Quellcode den ich bis jetzt habe.

Muss jetzt gospeln gehen.

Ferdi
ComputerhelferFerdi
ComputerhelferFerdi 29.02.2008 um 06:47:40 Uhr
Goto Top
Moin
So sieht der Quellcode aus, bitte nicht an der Unordnung stören , bin halt noch am rumprobieren
Wenn ich bei diesem Gebilde eine Tabelle mit mehr als 6000 Zeilen einlesen, Anzahl der Spalten weiss ich nicht, gibts eine Fehlermeldung.


Ferdi

*
Public Sub Form_load()
Dim Conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Dim viel As Long
Dim vielzeilen As Long
Dim i As Long
Dim nRow As Long


Set Conn = New ADODB.Connection
Conn.Provider = "MSDASQL"
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient

Conn.Open "Provider=MSDASQL;DSN=????"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient

Set rs.ActiveConnection = Conn
rs.CursorType = adOpenForwardOnly
rs.LockType = adLockReadOnly

rs.Open "select distinct table_schema from information_schema.tables"

'Datenbank auswählen und Connection ändern

i = 0
For i = 0 To rs.Fields.Count - 1
Text1.Text = rs.Fields(i).Value
Next i


'Flexgrid füllen
viel = rs.Fields.Count
With MSFlexGrid1

' Zählvariable für die aktuelle Zeile
nRow = 0
.Rows = rs.RecordCount + 1
While Not rs.EOF
nRow = nRow + 1
i = 0
For i = 0 To rs.Fields.Count - 1
' ' Aktuellen Wert ins FlexGrid kopieren
.TextMatrix(nRow, i) = rs.Fields(i).Value
.Col = i 'Spalte zuweisen
Next i
' auch hier gibt es ein "MoveNext" face-smile
rs.MoveNext
Wend

If .Row > 0 Then .Row = 1
.Enabled = (.Rows > 1)

End With

'Recordset schließen
rs.Close
Set rs = Nothing

'Connection schließen
Conn.Close
Set Conn = Nothing

End Sub
misterdemeanor
misterdemeanor 29.02.2008 um 10:32:07 Uhr
Goto Top
Hallo Ferdi,

als erstes mal ein Hinweis auf die Formatierungen in den Beiträgen face-wink



Wenn ich bei diesem Gebilde

Gebilde ist das richtige Wort.

eine Tabelle mit mehr als 6000 Zeilen einlesen,

6000 Databases (Schemata) [oder doch sogar 65000 wie vorher mal angedeutet] auf einem einzigen MySQL-Server?


Anzahl der Spalten weiss ich nicht,
...
rs.Open "select distinct table_schema from information_schema.tables"

Vielleicht nochmal genau hinschauen, dann weißt Du wie viele Spalten.

gibts eine Fehlermeldung.

Die Du uns warum vorenthältst?


BTW

rs.CursorType = adOpenForwardOnly

Wenn ich mich nicht irre hat die [Recordset].RecordCount-Prop bei einem ADO Recordset mit Vorwärtscursor standardmäßig den Wert -1

[MSFlexGrid1].Rows = rs.RecordCount + 1

könnte somit auch schon einen Fehler auslösen.

Naja, zum restlichen Gebilde sage ich besser auch nichts *g

BG, Error---Username not specified----Refill Coffee
ComputerhelferFerdi
ComputerhelferFerdi 29.02.2008 um 10:59:18 Uhr
Goto Top
Hier die Fehlermeldung:

Laufzeitfehler '30006'
Reservieren von Speicher für Flex Tabelle nicht möglich


.Rows = rs.RecordCount + 1

Wenn ich mit der Maus über "rs.RecordCount" gehe zeigt mir das Kontextmenue 75606 an
aber wie gesagt die Meldung kommt auch schon bei einem Wert von 8000


Das ich nicht soviel Tabellen weis ich selbst, hatte nur bei dem Quellcode eine andere SQL-Abfrage aktiv, das ist aber doch nebensächlich da ihr ja auch nicht die Datenbank habt.


Ferdi
misterdemeanor
misterdemeanor 29.02.2008 um 11:22:47 Uhr
Goto Top
Hier die Fehlermeldung:

Laufzeitfehler '30006'
Reservieren von Speicher für Flex
Tabelle nicht möglich

Was in dem KB-Artikel behandelt wird den ich im ersten Post schon verlinkt habe.

Wenn Zeilen*Spalten größer als 350.000 dann Reservieren von Speicher für Flex Tabelle nicht möglich

Entweder Du beschränkst Dich im SELECT auf die relevanten Daten, nutzt den TIPP den ich im zweiten Post bereits verlinkt hatte, oder erwägst mal das MS DataGrid Control zu verwenden.
ComputerhelferFerdi
ComputerhelferFerdi 29.02.2008 um 12:12:22 Uhr
Goto Top
Ich muss gestehen ich hatte das * zwischen den Zahlen nicht geshen, nachdem ich das aber bemerkt habe erschliest sich auch mir die Problematik, multiplizieren von Spalten und Zeilen ergibt den Vaktor der nicht über 350000 sein darf. Na da werd ich doch mal das MS DataGrid versuchen.

Besten Dank bis hier
Werde das mal Anfang der Woche versuchen, am Wochenende ist das so müssig


Ferdi