Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.44 MB
Время: 0.01 c
14-24681
GameBoy
2003-08-18 22:01
2003.09.08
Удаленная работа программиста. Миф или реальность?


7-24732
_Narayan_
2003-06-23 23:20
2003.09.08
реестр


8-24553
sd
2003-05-09 12:54
2003.09.08
windows media player


6-24600
ASTARD
2003-06-30 19:21
2003.09.08
Indy HTTP server


11-24398
mike.dld
2002-12-31 14:57
2003.09.08
Как





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский