Zuweisung zu Spalten in Datenbank dauerd sehr lang

Hi
also ich bin echt am verzweifeln.
Also das Problem ist einfach, das ich in der DB unterschiedliche Spalten
habe, nach denen ich sortieren möchte.
Da das nicht immer sauber funktioniert (zB negative Zahlen, unterschiedliche
Länge des Inhaltes), schreibe ich die Daten vorn mit Nullen aufgefüllt in
eine eigene Spalte und danach kann ich dann sortieren.

Nur das Schreiben dauerd ewig, warum keine Ahnung.
Gibts dafür ne andere Idee einfachere Lösung oder was weiss ich.
Aber ich muß es so machen (das mit Nullen auffüllen) sonst klappt das nicht,
in den Daten dürfen die Nullen aber nicht sein, daher trenne ich das strikt!

Ich habe den Teil mal beigefügt.
X ist der längste Wert der Spalte, damit alle gleich lang sind
Y ist die Spalte nach der ich sortieren möchte, die Daten schreibe ich in
Spalte 17 und danach kann ich dann sortieren.

With Rst
Do While Not .EOF
Vorkomma = „“
Vorkomma = .Fields(Y)
'für Profilabstand und Achsabstand gelten besondere
Sortierroutinen wegen dem -Zeichen
If Y = 9 Or Y = 10 Then
If .Fields(Y) = „“ Then
.Fields(17) = „-1000000000“
Else
.Fields(17) = Str(LTrim$(RTrim$(.Fields(Y))))
End If
Else
If Val(.Fields(Y)) 0 Then
Nullen = „00000000000000“
Vorkomma = Left$(Nullen, X - Len(Vorkomma)) &
Vorkomma
.Fields(17) = Str(Vorkomma)
Else
.Fields(17) = Str(.Fields(Y))
End If
End If

'Status der Fortschrittsleiste erhöhen
pbrBearbeitung.Value = pbrBearbeitung.Value + 1

.MoveNext
Loop
End If
End With

Mfg Werner

Ergänzung: ab 10000 Datensätze meine ich zB. oT

Hi,
was für ein Typ haben denn die Felder 9 und 10 deiner DB?
Gruß.Timo

Hallo Werner,

also ich bin echt am verzweifeln.
Also das Problem ist einfach, das ich in der DB
unterschiedliche Spalten
habe, nach denen ich sortieren möchte.
Da das nicht immer sauber funktioniert (zB negative Zahlen,
unterschiedliche
Länge des Inhaltes), schreibe ich die Daten vorn mit Nullen
aufgefüllt in
eine eigene Spalte und danach kann ich dann sortieren.

Nur das Schreiben dauerd ewig, warum keine Ahnung.
Gibts dafür ne andere Idee einfachere Lösung oder was weiss
ich.
Aber ich muß es so machen (das mit Nullen auffüllen) sonst
klappt das nicht,
in den Daten dürfen die Nullen aber nicht sein, daher trenne
ich das strikt!

in dem Feld können doch nur Zahlen auftreten? Warum sind die Daten dann als String abgelegt? Die Sortierung erübrigt sich, wenn Du das Feld als Double deklarierst und Zahlen ablegst. Selbst für die Felder, die sowohl Strings als auch Zahlen enthalten können, wäre es zu überlegen, ob es da nicht sinnvoller wäre, zwei Felder zu verwenden.

Gruß, Rainer
PS. Wenn Du Quellcode postest, verwende bitte den pre-Tag, dann ist das besser lesbar.

alles Texte
Hi
ich habe in meiner DB alles als Texte definiert obwohl zugegeben nahezu fast alle Spalten mit Zahlen belegt sind, es kann aber eben auch sein, das die Zahlen mit Buchstaben zB 100a versehen sind, daher die Belegung als Texte.
Dies hat auch mit der Ausgabe zu tun, weil ich hier ja Stringteile aus den Zahlen zusammensetzen muß.

Dies nur am Rande.

Also ich habe nun verschiedene Knöpfe, mit denen man nach Spalte 1, 2, 3 usw. sortieren kann, geht auch alles.

Problem ist nur, das die Sortierung nicht sauber geht, wenn die Inhalte der Spalten unterschiedliche Längen haben zb 100, 101, 1000 sortiert als Text kommt 100, 1000 und dann 101 zb raus.
Ich hoffe es ist verständlich so, daher muß ich mit Nullen auffüllen, doch das möchte ich nicht in meinen Originaldaten, weil ich die noch brauche, daher die Sonderspalte für die Sortierfunktion.

Hier kann ich die die Daten vorher so reinschreiben das die Sortierung sauber klappt. Scheint wohl ein Trugschluß zu sein.

Für Rainer speziell:

Also
.Fields(17) = Format(CDbl(.Fields(Y)), „000000000000.000“)

funktioniert schon mal nicht, es kommt die Fehlermeldung Erwartet Array.

Mfg Werner

Hi Werner,

.Fields(17) = Format(CDbl(.Fields(Y)), „000000000000.000“)

funktioniert schon mal nicht, es kommt die Fehlermeldung
Erwartet Array.

die Arrays ‚.Fields(17)‘ und ‚.Fileds(y)‘ habe ich aus Deinem Quellcode. Der Befehl lautet ja …

Stringvariable = Format(Zahl,Beschreibung)
in der Beschreibung legst Du fest, wie der String aussehen muß. … „000.000“ … sagt: Vor dem Komme immer drei Stellen, nach dem Komma auch drei stellen, bei Bedarf noch ein Vorzeichen.
Allerdings bekommst Du Probleme, wenn der Wert 345a umgewandelt wird, mit CDbl(Wert) bist Du das ‚a‘ los. ;-(
… Mail kommt … :wink:

Gruß, Rainer

Ergänzung: Order by
Hi
vielleicht sollte ich dazu sagen, das die Sortierung im Moment bei

ORDER BY CLNG(leer)

angestossen wird, sonst gibts wieder Probleme mit langen Zahlen usw. (nerv!)

Also ums nochmal deutlich zu machen:

  • Schreiben der Formatierung mit 0en vorndran in eine eExtraspalte für die
    Sortierung dauerd sehr lange (Betonung liegt auf Schreiben!)
  • Formatierung ist notwendig, da sonst fehlerhafte Sortierung
  • Daten in den Originalspalten sollen nicht verändert werden

Das kriege ich wohl nicht alles unter einem Hut, oder???

Hallo,

vielleicht sollte ich dazu sagen, das die Sortierung im Moment
bei

ORDER BY CLNG(leer)

angestossen wird, sonst gibts wieder Probleme mit langen
Zahlen usw. (nerv!)

Also ums nochmal deutlich zu machen:

  • Schreiben der Formatierung mit 0en vorndran in eine
    eExtraspalte für die
    Sortierung dauerd sehr lange (Betonung liegt auf Schreiben!)
  • Formatierung ist notwendig, da sonst fehlerhafte Sortierung
  • Daten in den Originalspalten sollen nicht verändert werden

Das kriege ich wohl nicht alles unter einem Hut, oder???

Ach, die neue Spalte ist ‚nur‘ für die Sortierung da?
Dann sortiert doch mal (zum Verständnis) 102, 102a, 103. Richtig?
Wenn Du das in 102.0, 102.1, 103 umwandelst, stimmt die Sortierung auch. Dann bist Du auch die Probleme mit der Sortierung der negativen Zahlen los.
Wenn die Werte in dem Feld nicht verarbeitet werden, sondern nur der Sortierung dienen, sehe ich keine Grund, daß du Dir den Stress mit der Sortierung von Strings machen mußt.

Gruß, Rainer

Hallo

Super Idee von Rainer

An nirwarna
Wenn ich das ganze richtig verstanden habe erstellst Du ein neues
Feld in der Datenbank. Dann ist es richtig das das Zeit braucht.
Falls Du die Daten über einem ListView aus gibst, würde ich das ganze
im ListView selbst machen. Geht auf jeden Fall schneller als mit der
Datenbank zu arbeiten.

Jürgen

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