Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.08;
Скачать: CL | DM;

Вниз

Как привести тип 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
14-24618
jack128
2003-08-20 00:34
2003.09.08
Именинники 20 августа


4-24744
Shluz
2003-07-02 12:24
2003.09.08
wm_SetText


1-24426
napil
2003-08-24 22:26
2003.09.08
массив


3-24322
SergeyV
2003-08-18 17:02
2003.09.08
Сложная выборка, прошу совета у Гуру


14-24666
wl
2003-08-20 10:34
2003.09.08
Странное поведение винчестера...(Win XP)