|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.07.2008, 09:50 | #1 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Много переменных
Привет всем!
У меня такая ситуация: Короче есть рекод и в нём переменные, снасало все было ОК но потом я решил добавить несколько переменных. И что-же у меня стали прогисходить странные вещи. Как-то он их не так видит... Переставил их местми одна вроде исправилось, но с другой стороны вылезло! Я даже не знаю. Все переменные уникальные. Я прямо в шоке! Если у кого-то были такие-же проблемы, пожалуйсто скажите, что делать... |
17.07.2008, 10:11 | #2 |
кривокодер ;)
Форумчанин
Регистрация: 20.06.2008
Сообщений: 707
|
Пример кода хотябы приведи... а так тыкать пальцем со словами "гдето там не работает" бесполезно, так никто помочь не сможет
кстати очень часто вылазят ошибки если не указал размер рекорда... ну или из-за невнимательности, возможно гдето чтото пропустил
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид} Последний раз редактировалось Johnson; 17.07.2008 в 10:13. |
17.07.2008, 10:23 | #3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Altera, код в студию )
I'm learning to live...
|
17.07.2008, 11:57 | #4 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
Если идёт речь о полях в RECORD, то получается следующее:
изменняя типы, размерности полей, добавяя новые или удаляя определённые поля, меняется размер записи. При чтении и записи происходит забор данных из файла по размеры заданной RECORD. Простой пример: Код:
Поэтому поля могут несовпадать с содержимым. |
17.07.2008, 13:15 | #5 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Ну, я хотел переделать свой Клокер, а точнее его будильник в органайзер.
Для будильника, как для таймера и секундомера, у меня вуделена запись, котороя содержит в своих переменных все порамеры одного будильника: Код:
Короче вот такая история. Не знаю, может кто-то сталкивался с подобной проблемой, на мой взгляд, в alarms_rec правдо много переменных, но разве это должно влиять на работу? Могу ещё одно заметить: Когда я работал с цветом, RGB, то для R, G и B значений взял byte, т.к. у него диапозон от 0 до 255 и у R, G и B точно такой-же. Так хрен! он мне половину цветов срезал! И воодще было что-то ужасное. Потом я взял word, ситуатион стала лучше, но не на много. Потом взял integer и всё стало ОК. Что за юмор такой, не понимаю. Объясните плиз, может я что-то не знаю о типах данных? Вот здесь помойму всё ясно видно... Помогите плиз! |
17.07.2008, 13:42 | #6 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Ужас Оо
Ошибки наверняка в коде, а не в обявлении записи. Вообще, страшно неоптимальный подход, от кучи переменных можно запросто избавиться, например вместо days: array [1..7] of boolean days: byte и отмечать нужные дни установкой всего одного бита (00000001 - понедельник, 00010001 - понедельник и пятница ...) дату хранить в формате TDateTime и т.д.
пыщь
|
17.07.2008, 14:47 | #7 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
Как дополнение, в Record надо ограничить размер у String`а от 1 до 255, типа string[255].
|
17.07.2008, 16:07 | #8 | |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Цитата:
|
|
17.07.2008, 18:19 | #9 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Если явно указать string[255] или shortstring - одна такая запись будет занимать чуть ли не килобайт, а с ansistring динамическая память используется, хотя неизвестно что быстрее
Но если использовать ansistring (по умолчанию string = ansistring) в записях, то каждый "экземпляр" кажись нужно явно создавать/уничтожать через New/Dispose, видимо этого сделано не было (или заюзал GetMem и FreeMem, которые почему-то нифига не работают в таких конструкциях)
пыщь
|
17.07.2008, 19:43 | #10 |
кривокодер ;)
Форумчанин
Регистрация: 20.06.2008
Сообщений: 707
|
Возможно не указал размер массива, либо указал неправильно... я например обычно использую такую процедуру:
SetLength(massiv,1000); число обозначает длину массива
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид} |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вальс переменных | Иллидан | Общие вопросы Delphi | 9 | 27.01.2008 10:39 |
Замена переменных | NoName_emaNoN | Win Api | 4 | 18.01.2008 09:05 |
Ошибка в переменных | Maugli-rus | Общие вопросы Delphi | 2 | 24.12.2007 07:44 |
список переменных | krasivosleva | Microsoft Office Excel | 2 | 26.11.2007 19:32 |
Проверка переменных | *_ViruS_* | Общие вопросы C/C++ | 3 | 21.09.2007 21:33 |