Combolist

Hallo,
ich bin aanfänger in vba und habe das folgende problem:

ich habe eine comboliste, deren inhalt ich von einer datenbank (oracle) abrufe. es klappt auch ganz gut. aber das problem ist es, wie kann ich den inhalt sortieren. habe verschiedene möglichkeiten versucht, aber habe leider nicht hingekriegt.
die datensätze schreibe ich von der Oracle-tabelle in ein array. weiß nicht, wo ich genau sortieren sollte. schon bei der tabelle oder bei dem array. falls jemand auch das gesamte programm hat (von datenbank daten lesen und in combolist anzeigen), wäre ich sehr dankbar für die vesendung.

ich danke ihnen im voraus.

R.

Hallo, Rezaei!

Bin zwar auch nicht die Überfliegerin (werde gleich auch ne Frage Posten :-") aber ich würde zum „ORDER BY“ greifen.
Das hat IMHO 2 Vorteile:

  1. Brauchst Du die Sortierung nicht zu programmieren
  2. Dürfte das DBMS die Sortierung schneller fertig haben als jede in VB(A) selbstprogrammierte Prozedur.

ich danke ihnen im voraus.

Darfst ruhig ‚Du‘ sagen, machen hier alle.

Vielleicht konnte ich Dir helfen.

Grüße, Ute

Hallo Ute,
danke für die schnelle Antwort. Wo kann ich aber Order by einbauen. Wie gesagt, bin ja erst seit einem Monat mit Visual Basic beschäftigt.so sieht mein programm aus:

*******************
Private Sub ComboBox1_Click()
Dim cnn1 As ADODB.Connection
Dim rstcountry As ADODB.Recordset
Dim country(255)
Dim anz As Integer
Dim i As Integer

Dim strCnn As String

Set cnn1 = New ADODB.Connection

’ Datenbank öffnen
With cnn1
.Provider = „MSDAORA.1“
.Open „Data Source=xxxx;User ID=batt;password=xxxxx“
End With

'Tabelle öffnen und Datensätze aufrufen

Set rstcountry = New ADODB.Recordset
rstcountry.CursorType = adOpenKeyset
rstcountry.LockType = adLockPessimistic
rstcountry.Open „tb_countries“, cnn1, , , adCmdTable

'Von der Tabelle (Oracle) in Array schreiben
For i = 1 To 205
country(i) = rstcountry!ctry_name_d
rstcountry.MoveNext

Next i

'Von Array in Combobox schreiben
For i = 1 To 205
ComboBox1.AddItem country(i)
Next

rstcountry.Close
cnn1.Close

End Sub
*************************

gruß

Rezaei

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Ute,
danke für die schnelle Antwort. Wo kann ich aber Order by
einbauen. Wie gesagt, bin ja erst seit einem Monat mit Visual
Basic beschäftigt.so sieht mein programm aus:

Die Zeile

rstcountry.Open "tb\_countries", cnn1, , , adCmdTable

verwirrt mich völlig, um die Worte „Keine Ahnung was Du da machst“ zu vermeiden. Das liegt im Zweifel aber an mir, nicht an Dir :smiley:

Wenn Du aber soetwas in der Art eingibst:

rstcountry.Open "Select Spalte1, Spalte2, Spalte3 FROM Tabellenname ORDER BY Spalte3" 

werden Dir die Daten nach Spalte3 sortiert ausgegeben.

Defaultwert ist aufsteigend, wenn ich mich recht erinnere.
Eine absteigende Sortierung ist mit „… ORDER BY Spaltenname DESC“ möglich.

Ich hoffe nur, ich lehne mich mit diesem Posting jetzt nicht zu weit aus dem Fenster.

Liebe Grüße,
Ute

Hallo Ute,

Hi,

danke für die schnelle Antwort. Wo kann ich aber Order by
einbauen. Wie gesagt, bin ja erst seit einem Monat mit Visual
Basic beschäftigt.so sieht mein programm aus:

*******************
Private Sub ComboBox1_Click()
Dim cnn1 As ADODB.Connection
Dim rstcountry As ADODB.Recordset
Dim country(255)
Dim anz As Integer
Dim i As Integer

Dim strCnn As String

Set cnn1 = New ADODB.Connection

’ Datenbank öffnen
With cnn1
.Provider = „MSDAORA.1“
.Open „Data Source=xxxx;User ID=batt;password=xxxxx“
End With

'Tabelle öffnen und Datensätze aufrufen

Set rstcountry = New ADODB.Recordset
rstcountry.CursorType = adOpenKeyset
rstcountry.LockType = adLockPessimistic

statt

rstcountry.Open „tb_countries“, cnn1, , , adCmdTable

nimmst du:
rstcountry.Open „SELECT * FROM tb_countries ORDER BY Id ASC“, cna, adOpenDynamic, adLockPessimistic
Statt Id musst du den Namen des Feldes eingeben, nach dem sortiert werden soll.
Wenn du absteigend sortieren möchtest, ersetzt du ASC durch DESC.
Gruß.Timo

'Von der Tabelle (Oracle) in Array schreiben
For i = 1 To 205
country(i) = rstcountry!ctry_name_d
rstcountry.MoveNext

Next i

'Von Array in Combobox schreiben
For i = 1 To 205
ComboBox1.AddItem country(i)
Next

rstcountry.Close
cnn1.Close

End Sub
*************************

gruß

Rezaei

Hallo, Rezaei!

Bin zwar auch nicht die Überfliegerin (werde gleich auch ne
Frage Posten :-") aber ich würde zum „ORDER BY“ greifen.
Das hat IMHO 2 Vorteile:

  1. Brauchst Du die Sortierung nicht zu programmieren
  2. Dürfte das DBMS die Sortierung schneller fertig haben als
    jede in VB(A) selbstprogrammierte Prozedur.

ich danke ihnen im voraus.

Darfst ruhig ‚Du‘ sagen, machen hier alle.

Vielleicht konnte ich Dir helfen.

Grüße, Ute

Hallo Ute,
die Zeile ist dafür da, daß ich eine Tabelle öffnen kann. Deine Schreinweise war fast richtig, aber hatte eine Fehlermeldung bekommen. Dann hatte ich einen Hinweis vom Timo (Danke Timo) und nun geht es.
So sollte die Zeile aussehen:
rstcountry.Open „SELECT * FROM tb_countries ORDER BY Id ASC“, cna, adOpenDynamic, adLockPessimistic

Danke

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]