vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 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

Fortgeschrittene Programmierung
List box Einträge > 30000 
Autor: seb-software
Datum: 18.01.18 03:35

Hallo, guten Abend
Ist nicht so lange her, da wurde mir sehr gut geholfen: "Stefan und Franki Danke"
Nun ein neues Problem. Mein Programm VB 6.0 beinhaltet eine ListBox, die mit ca 78.000 Einträgen
gefüttert werden soll. Es läuft eigentlich Problemlos, Nur...
Das auslesen des ListIndex bis 32766 alles ok. Die ausgelesenen Werte sind identisch. Ab ListIndex
größer als 32766 geht der ListIndex in`s Minus über. Also -32767. Von da an rückwärts -32766, -32756
usw bis ListIndex 0 (Null). Dann beginnt der ListIndex wieder bei Plus (+1) usw.
Beim Auslesen des Textes ist auch genau wieder der 1. Eintrag zu lesen obwohl in der Listbox alle
78.000 Einträge eingelesen wurden.

Beispiel:
ListIndex.
1 - Eintrag 1
2 - Eintrag 2
3... - Eintrag 3
32766 - Eintrag 32766
-32767 - Eintrag 32767
-32766 - Eintrag 32768
-32765... - Eintrag 32769
0 (Null) - Eintrag 68950
1 - Eintrag 68951
2 - Eintrag 68952
3... usw
der letzte ist dann wirklich Eintrag 78.000

Vielen Dank für eine Antwort und Hilfe.
Gruss seb- Dieter

Beitrag wurde zuletzt am 18.01.18 um 03:50:58 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: stefan220273
Datum: 18.01.18 11:47

Das hat etwas mit dem Datentyp Integer zu tun.
Unter VB6 hat der Integer 2 bytes und einen Wertebereich von -32.768 to 32.767.

Vielleicht kannst du hiermit etwas anfangen.
http://www.vbforums.com/showthread.php?408041-Whats-the-max-items-you-can-have-in-a-listbox



Gruss Stefan
Egal wie oft etwas gelöscht wird, das Internet vergisst nie und Menschen lassen sich nicht dauerhaft täuschen!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: Zardoz
Datum: 18.01.18 12:49

Hallo seb-Dieter,
die Listbox wurde ursprünglich nur für 2^15 Einträge
entworfen. Der Rückgabewert für den Listindex ist
daher vom Typ Integer (2 Bytes). Mit Api-Funktionen
lassen sich auch Listindex-Werte > 2^15 auslesen.
Probier' mal dies:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
  hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
Const LB_GETCURSEL = &H188
 
Private Sub List1_Click()
 
  Dim Idx As Long
 
  Idx = SendMessage(List1.hWnd, LB_GETCURSEL, 0, 0)
  MsgBox CStr(Idx)
 
End Sub

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: seb-software
Datum: 18.01.18 16:03

Vielen Dank stefan und zardoz
Werde ich mich heute abend mal beimachen und dann berichten.
Gruss Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: seb-software
Datum: 18.01.18 16:42

Hallo, das funktioniert Super. Ich bekomme nun als idx z.B. 51500
Nun möchte ich aber den Eintrag 51500 aus der List1 Box auslesen:

file1 = form4.list1.list(form4.list1.listindex) und das funktioniert so nicht.
wie bekomme ich dort idx=51500 unter ?

Vielen Dank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: Blackbox
Datum: 18.01.18 16:44

Hallo Zardoz

die Listbox in VB6.0 ist ein COM (ActiveX)-Wrapper der dementsprechenden WinAPI-Listbox der Common-Controls. MS hat auch diese Listbox auf Integer festgelegt was meint, das bei 32678 das Ende der Fahnenstange erreicht ist.
Die Listbox-Items haben aber auch die DATA-Methode ... oder?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: Blackbox
Datum: 18.01.18 17:08

Hallo Dieter,
es ist "gefühlt unanständig" eine primitive Listbox mit derart vielen Werten zu füllen. Wer wühlt sich durch soviele Einträge durch? UI-technisch würde ich schon mal einen Filter vorsetzen. Lassen sich diese Daten nicht in irgendwelche Kategorien verwalten?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: Rippler
Datum: 18.01.18 17:19

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
  hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
Const LB_GETTEXTLEN = &H18A
Const LB_GETTEXT = &H189
 
Private Sub Command1_Click()
  Dim lIndex As Long
  lIndex = 51500
  MsgBox HoleText(Text1.Text)
End Sub
 
Private Function HoleText(i As Long) As String
   Dim lenText As Long
   Dim Buffer As String
   lenText = SendMessage(List1.hWnd, LB_GETTEXTLEN, i, 0)
   If lenText > 0 Then
      Buffer = String(lenText, vbNull)
      lenText = SendMessage(List1.hWnd, LB_GETTEXT, i, ByVal Buffer)
      HoleText = Buffer
   End If
End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: seb-software
Datum: 18.01.18 17:19

Das sind alles Musiktitel. Wenn die alle in einer Listbox alph. sortiert sind, sehe ich sofort die doppelten Einträge. Klar habe ich die ganzen Titel nach Interpret sortiert und sind separat abrufbereit. Allerdings artet es in Arbeit aus, wenn ich über 1600 Ordner nach doppelten Einträgen durchforsten will.
Gruss Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: Rippler
Datum: 18.01.18 17:23

sry

aufruf ist:
MsgBox HoleText(lIndex)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: Manfred X
Datum: 18.01.18 19:15

Hallo!

Und warum schreibst Du diese "Items" nicht
sortiert zeilenweise in eine Textdatei ???
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: Franki
Datum: 20.01.18 04:19

Hallo Dieter,

na ja, ca. 78K Titel auf doppelte Einträge zu überprüfen ist nicht so einfach, selbst wenn dau das optisch reduzierst und doppelte Einträge sehen kannst ist das eine Mammutaufgabe wirklich doppelte Einträge ausfiltern zu können.

Denn was ist denn wirklich doppelt? Nur der Dateiname, der Name des Interprten plus Titel oder was sonst. Wenn du identische Dateien ausfiltern möchtest, dann müsstes du das auf Dateiebene machen per Vergleich.

Aber wie auch immer, selbst wenn es Aufwand ist und dein Rechner ein paar Stunden rödelt, dann ist die Aufgabe erledigt. Danach sollstest du dafür sorgen, dass es gar nicht erst zu doppelten Einträgen kommen kann.

Ich habe in Sachen Musiktitel schon vor über 15 Jahren eine Anwendung geschrieben wo die Titel und deren Zusatzinformationen in einen Datenbank stehen. Die Anwendung läuft heute noch und es gibt diverse Suchfunktionen (Über SQL auf die DB) womit sehr schnell der gewünschte Titel geladen bzw. abgewspielt werden kann.

"Alle Titel anzeigen" ist bei meiner Anwendung nicht notwendig, denn das wird nur bei der Inventur einmal jährlich benötigt für die GEMA. Aber da kann das auch ruhig ein paar Minuten dauern (Inkl. Aufbereitung mit Details für den Bericht).

Also wo genau líegt deine Anforderung? Die Menge der Titel ist eher nicht das Problem für eine DB.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: seb-software
Datum: 20.01.18 20:06

Hallo, Rippler
Ja, das habe ich nach ca 30 Minuten rausgefunden. Wollte hier schon schreiben wo da wohl ein Fehler sein kann. Hatte mich über die Text.Box gewundert. Aber ist gefunden und es läuft alles Problemlos. Nochmals vielen Dank
Gruss Dieter
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: List box Einträge > 30000 
Autor: seb-software
Datum: 20.01.18 20:09

Ja, eine Data Methode haben sie. Aber da hatte ich wieder das Problem, dass ich ja einen Wert von z.B. 62000 nicht in die ItemData reinschreiben kann (Überlauf) eben. Aber wie ich schon (siehe Rippler) geschrieben habe, das Problem ist mit seiner Routine bewältigt.

Nochmals allen vielen Dank für die sicherlich interessanten Anregungen, und Hilfestellungen nebst Code-Beispiele.
In diesem Sinne - einen schönen Abend noch
Gruss Seb - Dieter
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