Форум: "Базы";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
ВнизКак привести тип dbitblname Найти похожие ветки
← →
Зозуля Юрий (2003-08-18 10:32) [0]Переписываю процедуру восстановления индексов Парадокса.
Не получается присвоить NewIndex.szName т.к требуется только тип dbitblname, а имя индекса задано как string. Попытки перевести string в dbitblname ничего не дали.
В БДЕ dbitblname объявлен как CHAR[DBIMAXTBLNAMELEN+1], а я смутно представляю как с ним работать.
Вот код процедуры добавления вторичного индекса
procedure AddSecondary(iname:string;ifields:integer);
var icount,k : integer;
inames:dbitblname ;
NewIndex: IDXDesc;
fieldsstr:string;
begin
if iname="" then exit;
// *1* for k:=1 to length (iname) do inames[k]:=iname[k];
// *2* inames:=dbitblname (iname)
fieldsstr:=inttostr(ifields) ;
icount:=length(fieldsstr) ;
NewIndex.szName := inames;
// *3* NewIndex.szName := "index1";
NewIndex.iIndexId := 0;
NewIndex.bPrimary := False;
NewIndex.bUnique := false;
NewIndex.bDescending := false;
NewIndex.bMaintained := True;
NewIndex.bSubset := False;
NewIndex.bExpIdx := False;
NewIndex.iFldsInKey := icount;
for k:=0 to icount-1 do NewIndex.aiKeyFld[k]:= strtoint(fieldsstr[k+1]);
NewIndex.bCaseInsensitive := True;
try
Check(DbiAddIndex(table1.dbhandle, table1.handle, PChar(table1.TableName),
szParadox, NewIndex, nil));
ListBox1.Items.add( format("%s - індекс % створений",[table1.TableName,iname])) ;
except
ListBox1.Items.add( format("%s - помилка індекса %",[table1.TableName,iname])) ;
end ;
end;
Коментарии
1 - вылетает на Check, при отладке видно что inames состоит из 260 символов (случайных) .
2 - ругается компилятор
3 - первоначальный вариант процедуры, работал пару лет, но надо повторять код создания индекса несколько раз для каждого индекса меняя его имя, а сейчас надо, чтобы эта процедура могла создать индекс с любым именем.
← →
sniknik (2003-08-18 11:22) [1]> 1 - вылетает на Check, при отладке видно что inames состоит из 260 символов (случайных) .
так у тебя переменная неинициализирована, ты мусор присваиваеш, здесь
NewIndex.szName := inames;
(до нее нет inames:= чтото)
да и зачем она, вообще? лишняя переменная.
насколько понял iname нужно туда внести?
делай так
Move((iname+#0)[1], NewIndex.szName, length(iname)+1);
← →
Зозуля Юрий (2003-08-18 12:01) [2]Выкрутился так
inames:dbitblname ;
iname:string;
begin
for k:=1 to length (iname) do inames[k-1]:=iname[k];
inames[length (iname)]:=#0;
sniknik ©
в окончательный вариант наверное возьму твой код
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c