Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
А вообще я 32bit дельфях в Vendor Init давно прописываю OCIW32.dll – он всегда для последней версии сервера с которым ты работаешь.
Это IMHO. Hо у меня Delphi3 и Delphi1 коннектятся как с Oracle 7.1 на Unix'е, так и с Personal Oracle 7.3
WindowsNT 4.0 + Delphi 2.01 C/S + Oracle Client 7.3 + Oracle Server 7.3. После логина в базу данных возникает `EExternalError 0xC0000008`. Что делать?
Nomadicкоротко отвечает:
A: (IA, SK): Снести Oracle Trace Collection Services.
Псевдонимы
Получение пути псевдонима и таблицы I
Delphi 1
Есть три способа сделать это… №1 годится только для постоянных псевдонимов BDE. №2 работает с BDE и локальными псевдонимами, и No3 работает с BDE и локальными псевдонимами, используя "тяжелый" путь, через вызовы DBI.
functionGetDBPath1(AliasName: string): TFileName;
varParamList: TStringList;
begin
ParamList := TStringList.Create;
withSession do try
GetAliasParams(AliasName,ParamList);
Result := UpperCase(ParamList.Values['PATH'])+'\';
finally
Paramlist.Free;
end;
end;
functionGetDBPath2(AliasName: string): TFileName;
var
ParamList: TStringList;
i: integer;
begin
ParamList := TStringList.Create;
withSession do try
try
GetAliasParams(AliasName,ParamList);
except
fori:=0 topred(DatabaseCount) do
if(Databases[i].DatabaseName = AliasName) then
ParamList.Assign(Databases[i].Params);
end;
Result := UpperCase(ParamList.Values['PATH'])+'\';
finally
Paramlist.Free;
end;
end;
functionGetDBPath3(ATable: TTable): TFileName;
var
TblProps: CURProps;
pTblName, pFullName: DBITblName;
begin
withATable do begin
AnsiToNative(Locale, TableName, pTblName, 255);
Check(DBIGetCursorProps(Handle, TblProps));
Check(DBIFormFullName(DBHandle,pTblName,TblProps.szTableType,pFullName));
Result := ExtractFilePath(StrPas(pFullName));
end;
end;
Reinhard Kalinke
Получение пути псевдонима и таблицы II
Вот маленький примерчик того, как в Delphi можно получить информацию о псевдонимах. Для начала создайте новый проект с ListBox и тремя метками (с именамиListBox1, Label1, Label2 и Label3). Затем создайте обработчик события формы OnCreate с примерно следующим кодом:
procedureTForm1.FormCreate(Sender: TObject);
begin
Session.GetAliasNames(ListBox1.Items);
end;
Теперь создайте обработчик OnClick для ListBox:
procedureTForm1.ListBox1Click(Sender: TObject);
var
tStr: array[0..100] ofchar;
Desc: DBDesc;
begin
ifListBox1.Items.Count = 0 thenexit;
StrPLCopy(tStr, ListBox1.Items.Strings[ListBox1.ItemIndex], High(tStr));
DbiGetDatabaseDesc(tStr, @Desc);
withDesc do begin
Label1.Caption := StrPas(Desc.szName);
Label2.Caption := StrPas(Desc.szPhyName);
Label3.Caption := StrPas(Desc.szDbType);
end;
end;
Добавьте следующие модули в секцию 'uses' в верхней части модуля:
DB, DBTables, DBITypes, DBIProcs;
Теперь вы можете увидеть путь для всех ваших стандартных псевдонимов (Paradox и dBase).
Получение пути псевдонима и таблицы III
Delphi 1
Используйте Session.GetAliasParams. В ответ вы получите объект Tstrings, откуда вы можете получить значение для переменной 'PATH". Для получения дополнительной информации обратитесь к электронной справке к разделу, описывающему TSession. Объект Session объявлен в модуле DB.
usesdb;
varaliaspath : string[128];
begin
aliaspath := Session.GetAliasParams['MyAlias'].values['PATH'];
end;
usesSysUtils,DbiProcs, DBiTypes;
...
functionGetDataBaseDir( constAlias : string): String;
(* Возвращает каталог базы данных, на которую
ссылается псевдним (без конечного обратного слеша) *)
var
sp : PChar;
Res : pDBDesc;
begin
try
New(Res);
sp := StrAlloc(length(Alias)+1);
StrPCopy(sp,Alias);
ifDbiGetDatabaseDesc(sp,Res) = 0 thenResult := StrPas(Res^.szPhyName)
elseResult := '';
finally
StrDispose(sp);
Dispose(Res);
end;
end;
Получение пути псевдонима и таблицы IV
Nomadicсоветует:
1. По таблице (фактически по Database) получить физическое местонахождение.
Примечание: Database можно создать явно, если нет, Дельфи сама его создаст, доступ к ней по Table(Query).Database
usesDbiProcs;
functionGetDirByDatabase(Database: TDatabase): string;
varpszDir: PChar;
begin
pszDir := StrAlloc(255);
try
DbiGetDirectory(Database.Handle, True, pszDir);
Result := StrPas(pszDir);
finally
StrDispose(pszDir);
end;
end;
2. По алиасу.
functionGetPhNameByAlias(sAlias: string): string;
var
Database: TDatabase;
pszDir: PChar;
begin
Database := TDatabase.Create( nil); {allocate memory}
pszDir := StrAlloc(255);
try
Database.AliasName := sAlias;
Database.DatabaseName := 'TEMP'; {requires a name – is ignored}
Database.Connected := True; {connect without opening any table}
DbiGetDirectory(Database.Handle, True, pszDir); {get the dir.}
Database.Connected := False; {disconnect}
Result := StrPas(pszDir); {convert to a string}
finally
Database.Free; {free memory}
StrDispose(pszDir);
end;
end;
Информация о псевдониме BDE
Delphi 1
varMyAliasPath: string;
constAliasName='MyAlias';
{**** Получаем из BDE путь MyAlias}
ParamsList:= TStringList.Create;
try
withSession do begin
Session.GetAliasNames(ParamsList);
Session.GetAliasParams(AliasName,ParamsList);
MyAliasPath:=Copy(ParamsList[0],6,50)+'\';
end;
finally
ParamsList.Free;
end;
usesDbiProcs, DBiTypes;
functionGetDataBaseDir( constAlias : string): String;
(* Возвращает каталог базы данных для псевдонима
(без завершающего обратного слеша) *)
var
sp : PChar;
Res : pDBDesc;
begin
try
New(Res);
sp := StrAlloc(length(Alias)+1);
StrPCopy(sp,Alias);
ifDbiGetDatabaseDesc(sp,Res) = 0 thenResult := StrPas(Res^.szPhyName)
elseResult:= '';
finally
StrDispose(sp);
Dispose(Res);
end;
end;
Изменение каталога псевдонима во время выполнения приложения
Delphi 1
Интервал:
Закладка: