Ik heb momenteel een HEEL VAAG probleem.
Ik moet een applicatie maken die uit wat tabellen data ophaalt. So? What's the problem? Komt'ie
Door een hoop oude legacy werken we met dBase tabellen. Kun je in Delphi gewoon in een TTable gooien, dus geen probleem.
Nou heb ik echter een tabel, met indexen, waarvan hij iedere keer zijn indexen kwijt is.
Globale procedure aanmaken tabel:
Kan goed zijn dat ik wat dingen vergeet hierboven, maar het gaat dus om die IndexDefs.Add. Dit gaat bij 100 tabellen goed, maar hier niet... Bovenstaande komt hij overigens gewoon doorheen.
Dan doe ik in mijn applicatie:
Exception: Index niet gevonden... Wtf
Na wat gevogel heb ik dit bijgevoegd:
Dit lijkt een vage opzet, zeker met die deleteindex erbij, maar anders gaat hij nota bene bij addIndex zeuren dat de index al bestaat
Wat blijkt nou, de EERSTE keer dat ik irritanteIndexen aanroep, gaat hij zeiken dat de index niet bestaat. IEDERE keer dat ik de table opnieuw opvraag van de tablemanager. De andere indexen worden dan wel gevonden. De eerste keer die showmessages zijn er 0 (NUL) indexen
Daarna (dus na 1x een index te hebben toegevoegd, de rest levert bij de Find geen exception op) zijn het er opeens WEL 4?
Als ik de volgorde waaron ik IrritanteIndexen aanroep verander, dan is het een andere index die niet gevonden kan worden, iedere keer de bovenste...
Weet iemand hoe ik dit in 's hemelsnaam op kan lossen? Want iedere keer dat je het nodig hebt wachten tot de addindex klaar is (5 minuten wachten dus, mits het idnr is, die duurt het korste) is natuurlijk niet te doen.
In honderd andere tabellen gaat het goed, kun je naar hartelust indexen gebruiken, maar hier niet. Dit zijn overigens wel de enige tabellen van enig formaat. De overige komen niet boven de 10k records uit, deze zijn resp enkele 100k, en 16m records groot (probleem speelt bij, tot dusver, 2 tabellen, en misschien nog 2, maar daar heb ik het nog niet op getest).
Ik heb al bijna 10 arbeidsuren besteed aan dit probleem, je kunt dus begrijpen dat mijn baas daar niet erg gelukkig van word.
Oh ja, ik heb gezocht. zowel op google als op Got, met de keywords dbase, index, fout, kapot, not found, delphi en zowat alle mogelijke combinaties.
Wel verrot dat bijna iedereen database afkort naar dbase
Ik moet een applicatie maken die uit wat tabellen data ophaalt. So? What's the problem? Komt'ie
Door een hoop oude legacy werken we met dBase tabellen. Kun je in Delphi gewoon in een TTable gooien, dus geen probleem.
Nou heb ik echter een tabel, met indexen, waarvan hij iedere keer zijn indexen kwijt is.
Globale procedure aanmaken tabel:
code:
1
2
3
4
5
6
7
8
9
10
11
| var Table : TTable;
begin
Table := TTable.Create(Application);
Table.FieldDefs.Add('SubscriberId', ftInteger);
[.. nog wat FieldDefs.Add ..]
Table.FieldDefs.Add('StreetOverride', ftString, 19);
Table.IndexDefs.Add('IDNR', 'SubscriberId', []);
Table.IndexDefs.Add('POSTCODE', 'PostalCode', []);
Table.IndexDefs.Add('TELEFOON', 'Phone', []);
Table.IndexDefs.Add('ACHTERNAAM', 'Surname', []);
Table.CreateTable; |
Kan goed zijn dat ik wat dingen vergeet hierboven, maar het gaat dus om die IndexDefs.Add. Dit gaat bij 100 tabellen goed, maar hier niet... Bovenstaande komt hij overigens gewoon doorheen.
Dan doe ik in mijn applicatie:
code:
1
| Table.IndexName := 'TELEFOON'; |
Exception: Index niet gevonden... Wtf
code:
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
| procedure irritanteIndexen(const naam, veld : string);
begin
try
Table.IndexDefs.Find(naam);
except
Table.Active := false;
try
Table.DeleteIndex(naam);
except
end;
try
Table.AddIndex(naam, veld, []);
except
end;
Table.Active := true;
end;
end;
begin
Table := TableManager.GiveTable(TMCDFoonSubscriber);
Table.Active := true;
ShowMessage(IntToStr(table.IndexDefs.Count));
for i := 0 to table.IndexDefs.Count - 1 do
showMessage(table.IndexDefs.Items[i].Name);
irritanteIndexen('IDNR', 'SubscriberID');
irritanteIndexen('POSTCODE', 'PostalCode');
irritanteIndexen('TELEFOON', 'Phone');
irritanteIndexen('ACHTERNAAM', 'Surname');
ShowMessage(IntToStr(table.IndexDefs.Count));
for i := 0 to table.IndexDefs.Count - 1 do
showMessage(table.IndexDefs.Items[i].Name);
[..]
end; |
Dit lijkt een vage opzet, zeker met die deleteindex erbij, maar anders gaat hij nota bene bij addIndex zeuren dat de index al bestaat
Wat blijkt nou, de EERSTE keer dat ik irritanteIndexen aanroep, gaat hij zeiken dat de index niet bestaat. IEDERE keer dat ik de table opnieuw opvraag van de tablemanager. De andere indexen worden dan wel gevonden. De eerste keer die showmessages zijn er 0 (NUL) indexen
Als ik de volgorde waaron ik IrritanteIndexen aanroep verander, dan is het een andere index die niet gevonden kan worden, iedere keer de bovenste...
Weet iemand hoe ik dit in 's hemelsnaam op kan lossen? Want iedere keer dat je het nodig hebt wachten tot de addindex klaar is (5 minuten wachten dus, mits het idnr is, die duurt het korste) is natuurlijk niet te doen.
In honderd andere tabellen gaat het goed, kun je naar hartelust indexen gebruiken, maar hier niet. Dit zijn overigens wel de enige tabellen van enig formaat. De overige komen niet boven de 10k records uit, deze zijn resp enkele 100k, en 16m records groot (probleem speelt bij, tot dusver, 2 tabellen, en misschien nog 2, maar daar heb ik het nog niet op getest).
Ik heb al bijna 10 arbeidsuren besteed aan dit probleem, je kunt dus begrijpen dat mijn baas daar niet erg gelukkig van word.
Oh ja, ik heb gezocht. zowel op google als op Got, met de keywords dbase, index, fout, kapot, not found, delphi en zowat alle mogelijke combinaties.
Wel verrot dat bijna iedereen database afkort naar dbase
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock