…теперь можно фетчить записи. Работает шустро и классно. Меня радует. Особенно радуют серверные курсоры.
Проверялось на Delphi 3.02 + ADO 1.5 + MS SQL 6.5 sp4. Пашет как зверь.
Из вкусностей ADO – их легко можно использовать во всяких многопоточных приложениях, где BDE порой сбоит, если, конечно, ODBC драйвер грамотно сделан…
Ну и еще можно использовать для доступа к данным всяких там «нестандартных» баз типа MS Index Server или MS Active Directory Services.
В Delphi (как минимум в 4 версии) существует «константа» EmptyParam, которую можно подставлять в качестве пустого параметра.
Как засунуть в качестве паpаметpа хpанимой пpоцедуpы стpоку длиной более 255 символов? И вообще, как использовать паpаметpы SP, если они BLOB?
Nomadic отвечает:
«Засунуть» длинную строку можно было и раньше, если написать редактируемый запрос, и воспользоваться операциями Insert/Edit.
Однако это не относится к хранимым процедурам.
В Delphi 3.0 появился новый тип параметра (TBlobField вроде) и соответственно его поддержка в BDE.
Если просто взять BDE 4.01 и выше, то работать все-равно не будет – нужна соотв. версия VCL (из Delphi 3.0 или выше).
Дублирование набора записей
Delphi 1
Вы можете воспользоваться вторым объектом TTable, подключенным к той же таблице, или можете вызвать метод объект TTable DisableControls, сделать изменения, и вызвать EnableControls. Для сохранения той же позиции вы можете попробовать воспользоваться закладкой. Например, так:
procedure TMyForm.MakeChanges;
var
aBookmark: TBookmark;
begin
Table1.DisableControls;
aBookmark := Table.GetBookmark;
try
{ваш код}
finally
Table1.GotoBookmark(aBookmark);
Table1.FreeBookmark(aBookmark);
Table1.EnableControls;
end;
end;
Как программно изменить LangDriver для таблиц dBase и Paradox?
Nomadic отвечает:
Откpываешь help и смотpишь:
……
var list:tstrings;
……
BEGIN
…….
List.Add ( 'LANGDRIVER=db866ru0 ');
……
Session.ModifyDriver( 'DBASE', List );
……
END;
Это действие я пpовожy пеpед откpытием таблицы
Ivan Sboev
(2:5049/36.15)
Это о «русификации» таблицы. В таблицах dBase и Paradox имеется байт, который определяет CodePage содержимого таблицы. Раньше он не использовался и был зарезервирован. Тебе нужно его правильно установить. Это делается через DBD Restructure table. Если хочешь программно, можешь воспользоваться следующей процедурой:
uses DbiTypes, DbiProcs, DbiErrs, DB, WinProcs, SysUtils;
procedure ChangeLangDriver( DatabaseName, TableName, LDName: string );
var
TblExt: string;
Database: TDatabase;
TblDesc: CRTblDesc;
OptDesc: FLDDesc;
OptData: array [0..250] of Char;
Cur: hDBICur;
Rec: CFGDesc;
begin
if (TableName='') or (LDName='') then raise Exception.Create('Unknown TableName or LDName');
Database:=Session.OpenDatabase(DatabaseName);
try
if Database.IsSQLBased then raise Exception.Create('Function ChangeLangDriver working only with dBase or Paradox tables');
FillChar(OptDesc, SizeOf(OptDesc), #0);
FillChar(TblDesc, SizeOf(TblDesc), #0);
StrCopy(OptDesc.szName, 'LANGDRIVER');
OptDesc.iLen := Length(LDName) + 1;
with TblDesc do
begin
StrPCopy(szTblName, TableName);
TblExt := UpperCase(ExtractFileExt(TableName));
if TblExt = 'DBF' then StrCopy(szTblType, szDbase)
else if TblExt = '.DB' then StrCopy(szTblType, szParadox)
else
begin
AnsiToOEM(StrPCopy(OptData, DatabaseName), OptData);