Автор: admin | 14.12.2007 в 2:14 |
Рубрики: BDE, Базы данных
IsBDEExist := (dbiInit(nil) = 0)
IsBDEExist := (dbiInit(nil) = 0)
Следующая функция получает структуру SysVersion и записывает результаты в stringlist.
uses dbierrs, DBTables;
function fDbiGetSysVersion(SysVerList: TStringList): SYSVersion;
var
Month, Day, iHour, iMin, iSec: Word;
Year: SmallInt;
begin
Check(DbiGetSysVersion(Result));
if (SysVerList <> nil) then
begin
with SysVerList do
begin
Clear;
Add(Format(’ENGINE VERSION=%d’, [Result.iVersion]));
Add(Format(’INTERFACE LEVEL=%d’, [Result.iIntfLevel]));
Check(DbiDateDecode(Result.dateVer, Month, Day, Year));
Add(Format(’VERSION DATE=%s’, [DateToStr(EncodeDate
(Year, Month, Day))]));
Check(DbiTimeDecode(Result.timeVer, iHour, iMin, iSec));
Add(Format(’VERSION TIME=%s’, [TimeToStr(EncodeTime
(iHour, iMin, iSec div 1000, iSec div 100))]));
end;
end;
end;
Вызов этой функции выглядит следующим образом:
var
hStrList: TStringList;
Ver: SYSVersion;
begin
hStrList:= TStringList.Create;
try
Ver := fDbiGetSysVersion(hStrList);
except
ShowMessage(’BDE not installed !’);
end;
ShowMessage(IntToStr(Ver.iVersion));
Memo1.Lines.Assign(hStrList);
hStrList.Destroy;
end;
Возможные резултаты (отображаемые в memo-поле):
ENGINE VERSION=500
INTERFACE LEVEL=500
VERSION DATE=09.06.98
VERSION TIME=17:06:13
…я так понимаю, что LocalShare относится к ситуации, когда другие не-IDAPI приложения могут одновременно иметь доступ к одним и тем же файлам…
Примерно на такие мысли наталкивает поставляемая документация… к сожалению это не так.
LOCALSHARE=False говорит BDE о том, что он должен сам решать при необходимости вопрос о блокировке таблицы/записи в типичных ситуациях, например, когда BDE ‘думает’ что таблица находится на локальном диске он выключает блокировку для увеличения скорости доступа. К сожалению, логические диски общего пользования в сетях ‘p-t-p’ программно идентифицируются как локальные с предсказуемо липовыми результатами. Установка LOCALSHARE=True заставляет блокирующий механизм ‘включаться’ для всех дисков и, следовательно, решает эту проблему.
Если два различных пользователя подключают два различных сетевых каталога (net control directories, NCD), но при этом пути к каталогам одинаковые (это не трудно при работе с сетью), BDE думает, что в этом случае используются одни и те же NCD. Это может привести к _огромным_ проблемам.
Если два пользователя подключают один и тот же NCD, но с разными путями, BDE думает что используются два различных NCD и не позволяет второму пользователю редактировать таблицу. Например, пользователь A подключил NCD по пути G:\DATA\BDENET. Пользователь B подключил NCD по пути H:\BDENET, где H: подключен по пути G:\DATA. В этом случае оба пользователя пытаются использовать один и тот же NCD, но BDE не знает об этом.
Читать полностью…
Если вы забыли напрочь свой парль для входа в UNIX То попробовать вам нужно подобрать его по буквам Если он не очень длинный, символов на 6, не больше То успеете наверно подобрать его при жизни….
// …..
// …..
public
{ Public declarations }
procedure Password(Sender: TObject; var Continue: Boolean);
// …
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
procedure TFormMain.Password(Sender: TObject; var Continue: Boolean);
var
Passwd: String[15];
begin
Passwd := ”;
FormPasswd := TFormPasswd.Create(Application); // Creating dialog
try
if (FormPasswd.ShowModal = ID_OK) then begin // If OK is pressed then get password from edit “edPassword”
Passwd := FormPasswd.edPasswd.Text
end
else begin // If Cancel is pressed then terminate application
Application.ShowMainForm := False;
Application.Terminate;
Exit;
end;
finally
FormPasswd.Free; // finally free password form
end;
Continue := (Passwd > ”);
Session.AddPassword(Passwd); // Add password typed to session
end;
procedure TFormMain.FormCreate(Sender: TObject);
begin
ClientDatabase.Session.RemoveAllPasswords; // Remove all typed passwords from session, so user need type password again in app start
// Undocument next row in debug mode. This is for debugging and testing only, so we don’t need typing password again and again …
// ClientDatabase.Session.AddPassword(’YOUR-PASSWORD’);
ClientDatabase.Session.OnPassword := Password; // Set OnPassword Event
end;