![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как привести тип dbitblname [D5, Paradox]
Зозуля Юрий © (2003-08-18 10:32:00)
Переписываю процедуру восстановления индексов Парадокса.
Не получается присвоить 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 - первоначальный вариант процедуры, работал пару лет, но надо повторять код создания индекса несколько раз для каждого индекса меняя его имя, а сейчас надо, чтобы эта процедура могла создать индекс с любым именем.
Зозуля Юрий (2003-08-18 12:01:00) [1]
Выкрутился так
inames:dbitblname ;
iname:string;
begin
for k:=1 to length (iname) do inames[k-1]:=iname[k];
inames[length (iname)]:=#0;
sniknik ©
в окончательный вариант наверное возьму твой код
sniknik (2003-08-18 11:22:00) [2]
> 1 - вылетает на Check, при отладке видно что inames состоит из 260 символов (случайных) .
так у тебя переменная неинициализирована, ты мусор присваиваеш, здесь
NewIndex.szName := inames;
(до нее нет inames:= чтото)
да и зачем она, вообще? лишняя переменная.
насколько понял iname нужно туда внести?
делай так
Move((iname+#0)[1], NewIndex.szName, length(iname)+1);