|
Тема
|
Daite savet
|
|
Автор | lmmanuel (Нерегистриран) |
Публикувано | 01.06.02 00:09 |
|
Niamam pretenciite da sum programist i da poznavam v detaili vazmojnostite na Delphi za tova vi molia za suvet. Stava vapros za informacionna systema realizirana s Delphi 4.0 na osnovata na bazi danni Access. Problema e 4e pri funkciuniraneto na s-mata se izvejdat suob6tenia za gre6ki kasae6ti dublirane na informacia v purvi4nite klu4ove na bazata danni, sled koeto ne e vazmojno da se prodalji rabota s neia. Za da se otstrani problema izpolzvame komandata Repair Database v Access, koeto e mnogo neprakti4no. Celta e da se napi6e programa koita da moje da pravi tezi popravki, samo 4e ne mi e mnogo iasno kak moje da stane pod Delphi, vav Visual Basic ima specialen metod koito pravi tova no nesznam dali ima podoben i v Delphi.
Molia ako niakoi ot vas e imal podoben problem ili e naiasno s nego da dade savet. Thanks !
| |
|
Ако е възможно опишете малко по-подробно проблема.
Няколко въпроса и предположения :
1. Първичните ключове Auto Increment ли са? Ако са такива и имате въсможност за доработки в управляващата програма - направете ги да не са Auto Increment а програмата да се грижи за уникалността им.
2. Този проблем само при работа в мрежа ли възниква?
3. Изначално ли го има или се появи в последствие и ако е така след кое събитие?
4.Проблемът е генерален за цялата база данни или само за някои таблици?
.......
----------
По склона към връх Фудзи плахо пълзи охлюв към самото небе.
| |
|
Има няколко начина да се направи "Compact and Repair" na Access-ка база от Delphi(От значение е каква версия е Аccessa).
Ето един пример как да стане:
1. Пускаш Delphi-то и отиваш в менюто: Project=>Import Type Library, намираш в списъка с библиотеки "Microsoft Jet and Replication Objects 2.5 Library" и натискаш Install; После я добави в някой пакет(може и нов) и го прекомпилирай(компилирай);
2. В програмата която ще прави "Compact and Repair" добавяш след "uses" JRO_TLB;
3. Примерен код:
procedure TForm1.Button1Click(Sender: TObject);
var
JET: JetEngine;
strProvider: string
begin
strProvider:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
try
JET:=CoJetEngine.Create;
JET.CompactDatabase(strProvider+'c:\FileForRepair.mdb',
strProvider+'c:\RepairedFile.mdb');
finally
JET:=nil;
end;
end;
Това е
Видях да язди през реки, те седем са на брой...
| |
|
Колегата е показал как се прави Compact&Repair на базата. Неприятния момент е, че подобни грешки с уникални идентификатори са белег за неправилно проектирана база или кьопаво изпълнение на програмата.
Лично аз трудно бих се доверил на сметките, които подобна програма би дала - просто не е ясно дали смята с правилно попълнени данни.
Друга възможна причина е невъзможност за програмата да заключи базата докато попълва полета. Това е от приоритетите на администратора - нужно е всички копия /ако е peer-to-peer/ или на сървърната част /ако е client-server/ да имат пълни права за четене/запис до базата, както и права да създават файлове - за да може да се създаде заключващия файл.
чети и дишай по-леко
| |
|
|
|
|