Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-62168
mesmer
2003-10-21 14:17
2003.12.19
Проверка связи


7-62308
Darkwing
2003-10-13 22:07
2003.12.19
Как вывести в LPT данные (WinXP) ?


1-62072
KommandorDi
2003-12-09 15:09
2003.12.19
Как отловить Виндовые сообщения об ошибках


7-62305
SKing
2003-10-14 14:10
2003.12.19
INI файл - ограничения


14-62217
ИдиотЪ
2003-11-26 10:10
2003.12.19
книги





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский