Mijn programma leest een database in, maar i kwam erachter dat hij dat in een andere volgorde doet dan de volgorde die de database heeft als ik hem open met Access. De volgorde is voor 99% hetzelfde, maar op een gegeven moment wisselt hij een paar rijen om.
De tabel uit de database die hij inleest ziet er als volgt uit:
Hij leest alles goed in totdat hij bij regel 22 komt, hij springt daarna naar regel 25 en vervolgens naar 23 dan 24 en vervolgens gaat hij verder bij regel 26 en vanaf dan gaat alles weer goed.
Dit is de code die ik gebruik om de tabel in de database uit te lezen. Deze code zet nog niks in het geheugen, omdat ik eerst wat dingen moet vaststellen, maar bij het daadwerkelijk inlezen gaat hij op dezelfde manier de fout in zoals hij hier al doet:
De tabel uit de database die hij inleest ziet er als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| Id ProdOrder ArtNr VolgNr ... .... 1 1 1 10 2 1 1 20 3 1 1 30 4 1 1 40 5 2 2 10 . . . 20 4 4 40 21 5 5 10 22 5 5 20 23 5 5 30 24 5 5 40 25 5 5 50 26 6 6 10 27 6 6 20 28 6 6 30 . . . |
Hij leest alles goed in totdat hij bij regel 22 komt, hij springt daarna naar regel 25 en vervolgens naar 23 dan 24 en vervolgens gaat hij verder bij regel 26 en vanaf dan gaat alles weer goed.
Dit is de code die ik gebruik om de tabel in de database uit te lezen. Deze code zet nog niks in het geheugen, omdat ik eerst wat dingen moet vaststellen, maar bij het daadwerkelijk inlezen gaat hij op dezelfde manier de fout in zoals hij hier al doet:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| Function TForm1.BepaalMaxAantalMachines(locatie: string):integer; var Aantalbewerkingen: integer; VorigeArt: String; VorigeVolgnr: Integer; i,j: integer; begin ADOTable1.Close; ADOTable1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+LocatieInputFile+';Mode=ReadWrite;Persist Security Info=False'; ADOTable1.TableName:='TBL_Productie_Gegevens'; try ADOTable1.Active:=True; except FreeAndNil(FrStatus); Screen.Cursor := crDefault; btnStart.Caption:='&Start'; ShowMessage('Please select another database, which has the correct layout'); abort; end; Result:=0; AantalBewerkingen:=1; MaxAantalBewerkingen:=1; AantalArtikelen:=1; { Lees eerste regel in } ADOTable1.FindFirst; VorigeArt:=ADOTable1.FieldByName('ArtNr').AsString; j:=ADOTable1.RecordCount; for i:=1 to j-1 do begin frStatus.pgbStatus.Position:=Round(((i/j)*100)/2); application.ProcessMessages; VorigeVolgNr:=ADOTable1.FieldByName('VolgNr').AsInteger; ADOTable1.FindNext; if (ADOTable1.FieldByName('ArtNr').AsString=VorigeArt) AND (ADOTable1.FieldByName('VolgNr').AsInteger > VorigeVolgNr) then AantalBewerkingen:=AantalBewerkingen+1 else begin VorigeArt:=ADOTable1.FieldByName('ArtNr').AsString; AantalArtikelen:=AantalArtikelen+1; if Aantalbewerkingen>MaxAantalbewerkingen then MaxAantalBewerkingen:=Aantalbewerkingen; AantalBewerkingen:=1; end; if ADOTable1.FieldByName('MachineNummer').AsInteger>Result then Result:=ADOTable1.FieldByName('MachineNummer').AsInteger; end; if Aantalbewerkingen>MaxAantalbewerkingen then MaxAantalBewerkingen:=Aantalbewerkingen; end; |