intro
Ik ben momenteel bezig met het maken van een synchronisatie module voor een multitier klantenbeheerprogramma. Alles is in principe klaar en werkend op 1 ding na: een bug die optreed bij het refreshen van 3 van de 40 tabellen, in alleen de synchronisatiemodule. Met dat laatste bedoel ik dat als er nog helemaal geen gegevens zijn, ik een verbinding maak met de server dan probeer de gegevens binnen te halen, het dan wel goed gaat, mits de probleemtabellen de eersten zijn die worden opgehaald.
Van de 3 tabellen betreffen er 2 een master/detail relationship voor een agenda en de derde heeft er ook betrekking op. De enige opvallende gelijkenis die deze 3 uit de andere tabellen kan lichten is dat ze alle 3 uit een andere database worden gevoed dan de andere 37. (De server heeft 2 databases, 1 voor klantgegevens en een voor 'internetgegevens', de agenda zit bij de laatste). Het is voor zover ik kan zien echter niet zo (ik zou niet weten hoe ik dat kan testen)
De verbinding zelf: zoals hierboven gezegd multitier, that is, we hebben 2 databases, een server waar ze instaan met betreffende tabellen en providers via (DCOM) en een programma dat via DCOM een verbinding legt met de serverapplicatie en daar de data vandaan haalt. In dat laatste programma ('client') worden de gegevens als xml of cds bestand opgeslagen.
Zodra ik begin met synchroniseren vanuit een lopend programma ('currentTable.refresh;') krijg ik de volgende foutmeldingen:
1) een exception 'EDBClient' met melding: 'Operation not applicable.'.
2) een exception 'EVariantArrayLockedError' met melding 'Variant or safe array is locked.'
(Beiden op dezelfde regel, dus het gaat om 2 'interne' statements binnen de client')
probleem
Ik kan op beide foutmeldingen geen zinnige informatie vinden op google. Experts-exchange geeft nog ergens een vage referentie naar een beschadigde midas.dll. Ik heb op een tweede computer delphi geinstalleerd om dat uit te sluiten, maar het probleem blijft bestaan. Daarna heb ik de update naar versie 7.1 gevonden en deze ook bij beide computers geinstalleerd en getest, maar het probleem blijft onveranderd.
De volgorde veranderen zoals bij het ophalen van gegevens tijdens het starten van het programma hielp hier ook niet. Ik kom gewoon niet om die fout heen en de agenda is toch wel enigszins cruciaal voor het programma.
Wie weet raad?
appendix
het wordt al een heel boekwerk dit 
procedure voor updaten als er nog geen bestanden aanwezig zijn:
procedure voor updaten vanuit het programma:
Ik ben momenteel bezig met het maken van een synchronisatie module voor een multitier klantenbeheerprogramma. Alles is in principe klaar en werkend op 1 ding na: een bug die optreed bij het refreshen van 3 van de 40 tabellen, in alleen de synchronisatiemodule. Met dat laatste bedoel ik dat als er nog helemaal geen gegevens zijn, ik een verbinding maak met de server dan probeer de gegevens binnen te halen, het dan wel goed gaat, mits de probleemtabellen de eersten zijn die worden opgehaald.
Van de 3 tabellen betreffen er 2 een master/detail relationship voor een agenda en de derde heeft er ook betrekking op. De enige opvallende gelijkenis die deze 3 uit de andere tabellen kan lichten is dat ze alle 3 uit een andere database worden gevoed dan de andere 37. (De server heeft 2 databases, 1 voor klantgegevens en een voor 'internetgegevens', de agenda zit bij de laatste). Het is voor zover ik kan zien echter niet zo (ik zou niet weten hoe ik dat kan testen)
De verbinding zelf: zoals hierboven gezegd multitier, that is, we hebben 2 databases, een server waar ze instaan met betreffende tabellen en providers via (DCOM) en een programma dat via DCOM een verbinding legt met de serverapplicatie en daar de data vandaan haalt. In dat laatste programma ('client') worden de gegevens als xml of cds bestand opgeslagen.
Zodra ik begin met synchroniseren vanuit een lopend programma ('currentTable.refresh;') krijg ik de volgende foutmeldingen:
1) een exception 'EDBClient' met melding: 'Operation not applicable.'.
2) een exception 'EVariantArrayLockedError' met melding 'Variant or safe array is locked.'
(Beiden op dezelfde regel, dus het gaat om 2 'interne' statements binnen de client')
probleem
Ik kan op beide foutmeldingen geen zinnige informatie vinden op google. Experts-exchange geeft nog ergens een vage referentie naar een beschadigde midas.dll. Ik heb op een tweede computer delphi geinstalleerd om dat uit te sluiten, maar het probleem blijft bestaan. Daarna heb ik de update naar versie 7.1 gevonden en deze ook bij beide computers geinstalleerd en getest, maar het probleem blijft onveranderd.
De volgorde veranderen zoals bij het ophalen van gegevens tijdens het starten van het programma hielp hier ook niet. Ik kom gewoon niet om die fout heen en de agenda is toch wel enigszins cruciaal voor het programma.
Wie weet raad?
appendix
procedure voor updaten als er nog geen bestanden aanwezig zijn:
code:
1
2
3
| currentTable.Active := True ; currentTable.LogChanges := true; currentTable.saveToFile; |
procedure voor updaten vanuit het programma:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| currentTable.active := true;
MSource := currenttable.MasterSource;
currentTable.MasterSource := Nil;
MFields := currentTable.MasterFields;
currentTable.MasterFields := '';
try
currentTable.refresh;
except
On E: Exception do
begin
memo1.lines.add(' ' + currentTable.name + ': ' + E.ClassName+ ' / ' + E.Message);
end;
end;
currenttable.MasterSource := MSource;
currentTable.MasterFields := MFields;
currenttable.active := false; |
Localhost is where the heart is