Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как привести тип 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);


Наверх

Титульная страница Поиск, карта сайта Написать письмо