Форум: "Базы";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
ВнизПочему не создаются таблицы? Найти похожие ветки
← →
ZHK (2003-11-24 16:28) [0]Фича следующая: Ложу на форму таблицу, вот такую:
object Table3: TTable
FieldDefs = <
item
Name = "Head"
DataType = ftString
Size = 1
end
item
Name = "na"
DataType = ftString
Size = 15
end
item
Name = "OSC"
DataType = ftString
Size = 2
end
item
Name = "ENo"
DataType = ftString
Size = 4
end
item
Name = "nb"
DataType = ftString
Size = 32
end
item
Name = "Y"
DataType = ftString
Size = 2
end
item
Name = "M"
DataType = ftString
Size = 2
end
item
Name = "D"
DataType = ftString
Size = 2
end
item
Name = "Hr"
DataType = ftString
Size = 2
end
item
Name = "Mn"
DataType = ftString
Size = 2
end
item
Name = "Scn"
DataType = ftString
Size = 2
end
item
Name = "DMin"
DataType = ftString
Size = 4
end
item
Name = "DSec"
DataType = ftString
Size = 2
end
item
Name = "IRN"
DataType = ftString
Size = 8
end
item
Name = "ICN"
DataType = ftString
Size = 4
end
item
Name = "ORN"
DataType = ftString
Size = 8
end
item
Name = "OCN"
DataType = ftString
Size = 4
end
item
Name = "CM"
DataType = ftString
Size = 7
end
item
Name = "MBI"
DataType = ftString
Size = 3
end
item
Name = "TR"
DataType = ftString
Size = 1
end
item
Name = "CT"
DataType = ftString
Size = 1
end
item
Name = "COUC"
DataType = ftString
Size = 2
end
item
Name = "SC"
DataType = ftString
Size = 2
end
item
Name = "BS"
DataType = ftString
Size = 1
end
item
Name = "TS"
DataType = ftString
Size = 2
end
item
Name = "ST"
DataType = ftString
Size = 1
end
item
Name = "Reserv"
DataType = ftString
Size = 12
end>
IndexDefs = <
item
Name = "Table3Index1"
Fields = "D;M;Y;Hr;Mn;Scn;na;nb;irn;icn;orn;ocn"
Options = [ixPrimary, ixUnique]
end>
StoreDefs = True
TableType = ttFoxPro
Left = 376
end
Далее в программе пытаюсь выполнить Table3.CreateTable. выскакивает ошибка. Если удаляю индексацию, то все нормально. Условия уникальности соблюдены только для этого набора полей. Если набор уменьшить - не будет уникальности, если увеличить - бессмысленное загромождение. Но это не важно. Кто сможет помочь в нахождении ошибки? Заранее всем премного благодарен.
← →
ZHK (2003-11-25 08:15) [1]Неужто все в затруднении?
← →
ЮЮ (2003-11-25 08:34) [2]Да уж, Primary Key по 12 текстовым полям с совокупной длиной 87 байт.
← →
mfender (2003-11-25 08:35) [3]А индексы разве через "
;
" перечисляются? Помоему через запятую....
← →
mfender (2003-11-25 08:37) [4]Прав ЮЮ © (25.11.03 08:34) [2] .
Ты ж почти все поля в один primary unique индекс пихаешь...
← →
ZHK (2003-11-25 09:12) [5]
> Прав ЮЮ © (25.11.03 08:34) [2] .
> Ты ж почти все поля в один primary unique индекс пихаешь...
А что делать? Иначе уникальности не добьешься...
← →
ЮЮ (2003-11-25 09:35) [6]Во-первых, уникальность не обязательно пихать в Primary Key.
Во-вторых, можно уменьшить число полей: D + M + Y = TDate; Hr + Mn + Scn = TTime
В-третьих, вмест длинные текстовые полей (na - 15, nb - 32, Reserv - 12) использовать целые ID_A, ID_B, ID_Reserv, а текст положить в отдельные таблицы, там обеспечив уникальность по одноиу полю Name.
В четвертых, полагаю, что и часть других полей будут целочисленными, и не стоит их хранить как строки
← →
Anatoly Podgoretsky (2003-11-25 09:40) [7]В dBase такой индекс невозможен. ФоксПро вероятнее всего тоже.
Укажи точные типы таблиц, версии
← →
ZHK (2003-11-25 14:11) [8]До меня уже, к сожалению поздно, дошло, что такой индекс действительно невозможен. Переводить поля в числа я тоже не могу - потеряется целостность данных, так как в полях с цифрами есть предшествующие нули. их число различно и они важны. FoxPro напрямую тоже такой индекс не тянет. Но вот что интересно. В Database Desktop есть возможность установки такого индекса, как я полагаю через поле IndexFiles, объекта TTable, но я не уверен. Если я все же прав, то может кто подскажет, как этот файл создавать?
← →
Anatoly Podgoretsky (2003-11-25 14:12) [9]Еще раз медленно и по буквам, указаные базы не могут создать такой индекс.
← →
ZHK (2003-11-25 15:01) [10]Хорошо, медленно и по буквам:
1) Запускаем Database Desktop.
2) Загружаем базу
3) Нажимаем Restructure Table
4) В Table properties выбираем Indexes
5) Давим Define
6) Нажимаем кнопку Expression Index
7) В поле Expression Index вводим всю мою индексную лобуду
8) Нажимаем Ok
9) Вводим название индекса, например MyFuckingIndex
10) Нажимаем Ok
11) Нажимаем Save Table
12) Ждем хренову кучу времени
Вот и все. Вы стали счастливам обладателем ИНДЕКСИРОВАННОЙ ТАБЛИЦЫ, запросы в которой, по сравнению с неиндексированной, выполняются примерно в 6 раз быстрее.
И это не выдумки, ибо я проделал сие над двумя базами вполне успешно. Правда дальше у меня почему-то стало Insufficient disk space. и я сильно удивился, с чего ж это вдруг 40Гб свободного пространства не могут справиться с базой, объемом 600Мб. Однако...
← →
Плохиш_ (2003-11-25 15:04) [11]>ZHK © (25.11.03 15:01) [10]
← →
Плохиш_ (2003-11-25 15:05) [12]
> Вот и все. Вы стали счастливам обладателем ИНДЕКСИРОВАННОЙ
> ТАБЛИЦЫ, запросы в которой, по сравнению с неиндексированной,
> выполняются примерно в 6 раз быстрее.
> И это не выдумки, ибо я проделал сие над двумя базами вполне
> успешно. Правда дальше у меня почему-то стало Insufficient
> disk space. и я сильно удивился, с чего ж это вдруг 40Гб
> свободного пространства не могут справиться с базой, объемом
> 600Мб. Однако...
А ты думаешь индексы где хранятся у соседа?
← →
ZHK (2003-11-25 15:11) [13]Я думаю, что индексы хранятся в файле MyFuckingTable.MDX, а данные, соответственно в файле MyFuckingTable.DBF
← →
Anatoly Podgoretsky (2003-11-25 15:20) [14]ZHK © (25.11.03 15:01) [10]
7) В поле Expression Index вводим всю мою индексную лобуду
Вот это не позволяет тебе сделать, не можно сделать эту "лобуду"!
Кроме того про ресурсы тебе сказали в самом начале.
← →
ZHK (2003-11-25 15:27) [15]А ресурсы тут при чем? Да, для заполненных баз они важны, а если я хочу создать просто пустую базу, но индексированную? Конечно, я могу просто привесить к своему проекту пару файлов и копировать их на диск при необходимости. Но это ж криво...
← →
ZHK (2003-11-25 16:50) [16]Ага, а у меня получилось. Если в описании таблицы (см.выше) сделать следующие изменения:
IndexDefs = <
item
Name = "Table3Index1"
Expression = "D;M;Y;Hr;Mn;Scn;na;nb;irn;icn;orn;ocn"
Options = [ixPrimary, ixUnique, ixExpression]
end>
То все получится. И почему никто не вспомнил про вычисляемые индексы???
← →
ZHK (2003-11-26 09:40) [17]Структура таблицы в полном объеме приведена вверху. Если TableType=ttDBase сделать, для меня ничего принципиально не изменится. Допустим, пусть будет так. Все, что я описал выше, работает в обоих версиях таблицы. Если открыть BDE Administrator, можно получить следующее. Драйвер DBase версия 4.0, уровень (LEVEL) 7. Пример запроса:
select * from myfuckingtable
where D="15" and Hr>="10" and Hr<="15"
order by D,M,Y,Hr,Mn,Scn
Что я от всего хочу получить: увеличить скорость выполнения запросов. Если сделать то, что я привел выше, скорость повышается раз в 6, но если я пытаюсь напильником выточить линзу для телескопа, то это плохо. Что-то надо делать и делать корректно. Что для этого надо, я в затруднении.
← →
Anatoly Podgoretsky (2003-11-26 09:52) [18]dBase не поддерживает составные индексы, а только простые идндексы и индексы по выражению, вот их и строй, с учетом ограничений на индексы, ограничения смотри в спецификации.
Приведеный синтаксис применим к Парадоксу.
То что он тебя не обругает, а попытается построить какую то лаюуду, по своему вкусу ничего не значит, это просто ошибки (недостатки) текущей версии движка. Вероятнее всего он посроит индекс по полю D, но это только предположение.
← →
Anatoly Podgoretsky (2003-11-26 09:56) [19]Да в заголовке упоминается еще и MySQL, про него не скажу, возможно для него данное индексное выражение допустимо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c