horizontaal sorteren

Status
Niet open voor verdere reacties.

combi

Gebruiker
Lid geworden
16 sep 2009
Berichten
41
Hoi , Zit hier met vervelend probleem , dit kan ik niet via vba
Zit met volgend record telkens maar 1record die hij selecteert
per 15000 databases die hij dagelijks aanmaakt
voorbeeld
kolom1,kolom2,kolom3,kolom5,kolom6,kolom7
1rij 11 15 116 123 130 112

Kolom 1 tot 6 staan opeenvolgend goed
Kolom 7 moet volgens sort tss geplaatst worden
Met volgend resultaat
kolom1,kolom2,kolom3,kolom5,kolom6,kolom7
1rij 11 15 112 116 123 130

Heb deze al via insert,vertikaal kunnen sorteren
Kolom
11
15
112
116
123
130

Hoe krijg je dit dan terug horizontaal via query in acces 2003
Vroeger deed ik dit in turbobasic,maar programma’s databases zoals hierboven
runnen automatisch via macro’s ,handmatig kan dit niet meer door groot aantal mdb;
grtz
combimaster
 
Voordat ik je kan helpen, mag je eerst uitleggen wat nu precies aan de hand is. Je hebt, neem ik aan, een tabel, met records met gegevens. De kolommen met die gegevens staan blijkbaar niet in de goede volgorde? En dat voor 15.000 databases die je dagelijks aanmaakt???
Maar, om je voorbeeld te doen, maak je een Record aan op basis van het eerste veld, en gebruik Bijwerkqueries om de volgende waarden steeds in een volgende kolom toe te voegen.
 
Die 15000 databases gaan automatisch ,project idee dateert van 1998
programma volledig automated in 2003 , met nadeel opslag en snelheid
(technologie en prijskaartje hobby zou ik 217 serverkes nodig hebben)
daar acces beperkt is tot 2 gb ,in juni 2009 overgeschakeld tot 64bit
en dit op 12 overclocked supernova beestjes,met resultaat dat we aan
inhaalbeweging zitten kwa rekenwerk al in 2007 met toekomstgericht
realtime analyse volgens situatie nu in febr 2010 realtime op de seconde
up to date.
vroeger door beperkt aantal mdb kon ik dit nog converteren via excel
of doske.
Maar gezien de impact /en download gegevens en verwerkingsanalyse
op basis van wiskunde,zit ik nu met dit probleem
dit ene record wordt na verwerking van 3 dagen als uitkomst
uit 444944588900 dit is al vereenvoudigd tot -3de macht.
gezien het niet mogelijk is om alle programmatie aan te passen,
heb in verleden overgeschakeld van off97 naar 2003 dit
heeft mij 3 maanden aan +- 6uur per dag gekost en voor
convertie.

To the point :
Komt er gewoon op neer dat ene record ,één enkele rij
van laag naar hoog horizontaal gesorteerd word.

Met vriendelijke groeten,
combimaster
 
Wat is nu precies je probleem in Jip en Janneke taal?

Grtz,

Tardis
 
Ik snap wel hoe je de waarden in de kolommen wilt hebben; ik ben op dit moment meer benieuwd naar hoeveel tabellen per db, hoeveel velden, hoeveel records etc. Kortom: wat moet er gebeuren per database (ik neem aan dat je voor alle 15000 db's hetzelfde probleem hebt?
 
Nee niet op alle 15000 , dit zijn tijdelijke databases
voor verwerking wiskunde formules,die om de +- 3.dagen
wanneer alles berekend is verwijderd worden met veel
data records per tabel ongeveer 48miljoen rec
die vervolgens door limietering 2gb mdb ,
terug nwe db aangemaakt wordt voor verder rekenwerk (automated)
na uitkomst 1 record moet deze horizontaal gesorteerd
worden voor foutopsporing 2de steekproefcontrole
ter voorkoming van zero tolerance (foutloos dus)
op al die gegevens.
Grtz
combimaster
 
Nee niet op alle 15000 , dit zijn tijdelijke databases
voor verwerking wiskunde formules,die om de +- 3.dagen
wanneer alles berekend is verwijderd worden met veel
data records per tabel ongeveer 48miljoen rec
die vervolgens door limietering 2gb mdb ,
terug nwe db aangemaakt wordt voor verder rekenwerk (automated)
na uitkomst 1 record moet deze horizontaal gesorteerd
worden voor foutopsporing 2de steekproefcontrole
ter voorkoming van zero tolerance (foutloos dus)
op al die gegevens.
Grtz
combimaster

Is zoiets als transponeren in excel
maar door aantal licenties van excel op
alle nova's te zetten/prijskaartje enkel
om dit probleem op te lossen is me een
beetje te veel.
Grtz
combi
 
Laatst bewerkt:
Kun je een voorbeeldje maken, dat we eens kunnen bekijken? Ik snap dat het voor jou gesneden koek is, maar ik snap er nog steeds geen hout van.... :( en dat terwijl ik zo'n jofele reputatie op het forum heb :cool:
 
bijlage

Ik heb alle macro ,formulier/timer eruitgehaald wegens te groot kb,
is enkel maar nodig voor auto openen inport en sluiten,next database
Grtz
combimaster
 

Bijlagen

Ik heb een nifty trucje ontdekt, waarmee het waarschijnlijk wel gaat lukken. Ben nu aan het testen, dus heb nog even geduld...
 
Bedankt , ik zal in toekomst ergens febr gans systeem
eens uitleggen posten
en dan de mogelijkheden bespreken
grtz
combimaster
 
Ik kan nu inderdaad horizontaal sorteren, dus dat gaat wel lukken, in combinatie met een Tabelmaak query. Ik zal de code vanavond nog in een net voorbeeldje zetten, en posten.
 
iets als dit

Is iets als dit dit werkt al , maar geen voorstander van vba
vroeger programma anders geschreven via query 's omdat
het in bepaalde database 48milj records gaat dit met vba
traag , met query wat omslachtiger maar quicker en
ieder seconde is te lang voor mij.
Je idee mag je gerust posten , misshien door aanpassingen
kan ik steekproeven buitenwege laten.


Dim INV As Recordset
Dim OUT As Recordset
Dim TEM As Recordset

DoCmd.RunSQL "DELETE * FROM Temp"
DoCmd.RunSQL "DELETE * FROM Uitvoer"

Set INV = CurrentDb.OpenRecordset("Invoer")
Set OUT = CurrentDb.OpenRecordset("Uitvoer")

While Not INV.EOF
DoCmd.RunSQL "INSERT INTO Temp(kolom) Values(" & INV!Kolom1 & ")"
DoCmd.RunSQL "INSERT INTO Temp(kolom) Values(" & INV!Kolom2 & ")"
DoCmd.RunSQL "INSERT INTO Temp(kolom) Values(" & INV!Kolom3 & ")"
DoCmd.RunSQL "INSERT INTO Temp(kolom) Values(" & INV!Kolom5 & ")"
DoCmd.RunSQL "INSERT INTO Temp(kolom) Values(" & INV!Kolom6 & ")"
DoCmd.RunSQL "INSERT INTO Temp(kolom) Values(" & INV!Kolom7 & ")"

Set TEM = CurrentDb.OpenRecordset("Select * FROM Temp ORDER BY Kolom")

OUT.AddNew
OUT!Kolom1 = TEM!Kolom
TEM.MoveNext
OUT!Kolom2 = TEM!Kolom
TEM.MoveNext
OUT!Kolom3 = TEM!Kolom
TEM.MoveNext
OUT!Kolom5 = TEM!Kolom
TEM.MoveNext
OUT!Kolom6 = TEM!Kolom
TEM.MoveNext
OUT!Kolom7 = TEM!Kolom
OUT.Update

TEM.Close
DoCmd.RunSQL "DELETE * FROM Temp"

INV.MoveNext
Wend

INV.Close
OUT.Close

MsgBox "Klaar", vbInformation, "Klaar"

Met vriendelijke groeten
combimaster
combimaster-project 1998-2003
combimaster-anayon-project 2003-2009
supernova eandis 2008-2009
Telenet-solutions 2003-2008
Electrabel Soho-Resi -Business 2007-2009
 
Mijn methode is gegarandeerd sneller, want niet half zo gecompliceerd werkend... Ik lees de complete record in, en gebruik een functie om de waarden te sorteren. Vervolgens wordt er één record weggeschreven.
Ben nog even een ander klusje aan het opknappen, maar mocht je er belangstelling voor hebben:

Hier heb je alvast de functie:

Code:
Public Function SortMe(ByVal varArray As Variant) As Variant
Dim N As Integer
Dim i As Integer
Dim J As Integer
Dim FoundAt As Integer
Dim varMin As Variant
Dim varOutput As Variant

varOutput = varArray
For N = UBound(varArray) To 0 Step -1
    varMin = varArray(0)
    FoundAt = 0
    For i = 1 To N
        If varArray(i) < varMin Then
            varMin = varArray(i)
            FoundAt = i
        End If
    Next i
    varOutput(UBound(varArray) - N) = varArray(FoundAt)
    For J = FoundAt To N - 1
        varArray(J) = varArray(J + 1)
    Next J
Next N
SortMe = varOutput

''When varList = Array("10", "2", "1") the output becomes:
''1 10 2

''When varList = Array(10, 2, 1) the output becomes:
''1 2 10
'End code behind the same form

End Function
 
sorteren

combi,

48 miljoen record om te sorteren is natuurlijk een klap, zag net de code van OctaFish en heb dat nog niet kunnen uittesten.

Zelf had ik een code gemaakt maar geen idee hoeveel tijd dit gebruikt, deze code vervangt en sorteerd in de bestaande tabel.

Kijk maar of je er wat mee kan.

Private Sub Knop20_Click()
Dim i As Integer
Dim v As Boolean
Dim j As Integer
Dim temp As Integer
Dim arr(7) As Integer
Dim db As Database, rst As Recordset

Set db = CurrentDb
Set rst = db.OpenRecordset("resultaatvoldaandatumBel20")
rst.MoveFirst
Do While Not rst.EOF

For i = 1 To 7
arr(i) = Me("kolom" & i)
Next

i = 1
v = True
Do While i < 7 And v = True
v = False
j = 1
Do While j <= 7 - i
If arr(j) > arr(j + 1) Then
temp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = temp
v = True
End If
j = j + 1
Loop
i = i + 1
Loop

rst.Edit
rst!kolom1 = arr(1)
rst!kolom2 = arr(2)
rst!kolom3 = arr(3)
rst!kolom4 = arr(4)
rst!kolom5 = arr(5)
rst!kolom6 = arr(6)
rst!kolom7 = arr(7)
rst.Update
rst.MoveNext
Loop
rst.Close
Me.Requery

End Sub

Groet, COr
 
ok 48miljoen is maar één van de mdb ,
peulschil tov geheel
Is nog vroeg ,bekijk het wel
grtz
yves
 
Heb volgende code getest
wat aangepast voor autorun
maar kan kolom1,2,3 etc niet vinden error
denk dat dit vlugger is ,maar ander code
vraagt 7maal bevestiging den trager ,nu op grote
db verwerking +- 3dagen zal uitkomst wel blijken
tempfile error kolom1,2,3

Private Sub Form_Load()
Knp_Start_Click
End Sub

Private Sub Knp_Start_Click()
On Error GoTo Err_Knp_Start_Click
Dim i As Integer
Dim v As Boolean
Dim j As Integer
Dim temp As Integer
Dim arr(7) As Integer
Dim db As Database, rst As Recordset







Set db = CurrentDb
Set rst = db.OpenRecordset("uitvoerbestaande")
rst.MoveFirst
Do While Not rst.EOF

For i = 1 To 7
arr(i) = Me("kolom" & i)
Next

i = 1
v = True
Do While i < 7 And v = True
v = False
j = 1
Do While j <= 7 - i
If arr(j) > arr(j + 1) Then
temp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = temp
v = True
End If
j = j + 1
Loop
i = i + 1
Loop

rst.Edit
rst!kolom1 = arr(1)
rst!kolom2 = arr(2)
rst!kolom3 = arr(3)
rst!kolom4 = arr(4)
rst!kolom5 = arr(5)
rst!kolom6 = arr(6)
rst!kolom7 = arr(7)
rst.Update
rst.MoveNext
Loop
rst.Close
Me.Requery
DoCmd.Close acForm, "sortbestaande"
Exit_Knp_Start_Click:
Exit Sub

Err_Knp_Start_Click:
'Resume Next
MsgBox Err.Description
Resume Next
Resume Exit_Knp_Start_Click

End Sub
 
sorteren

combi,

Zag een foutje van mijn kant,

Set db = CurrentDb
Set rst = db.OpenRecordset("uitvoerbestaande")
rst.MoveFirst
Do While Not rst.EOF

For i = 1 To 7
arr(i) = Me("kolom" & i)
Next


Het gedeelte

For i = 1 To 7
arr(i) = Me("kolom" & i)
Next

Moet worden

For ii = 1 To 7
arr(ii) = Me("kolom" & ii)
Next

Wel nog even een Dim maken voor ii

De fout kan ontstaan als de kolom namen niet voorkomen, dus kolom1, kolom2, etc.

Dan zal je arr() 1 t/m 7 moeten vullen met de juiste kolomnamen
 
Goedemorgen , zelfde probleem
kan veld kolom 1 2 3 enz niet vinden
toch zoals vorige functie worden kolom overschreven
met 0 kes
Grtz
combimaster
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan