Здравствуйте. Опять вопрос по БД (блин, как надоели БД, то ли дело - системное программирование, никогда не надоедает....). В Interbase6 нет типа BOOLEAN. Как замутить что-нибудь заместо этого (желательно пример) и чтобы с этим нормально работали Checkbox-компоненты, такие как станд. DBCheckBox, DBCheckBoxEh из EHLIB и остальные?
Добрый день, Marouder! Tip varchar(2) kotoriy prinimayet i pokazivayet 2 tipa strok (napr. 'y' i 'n') zadaniye v svoystvay DBCheckBox Ответ отправлен: 11.02.2004, 16:27 Отправитель: THE_PRO Отвечает sir henry
Добрый день, Marouder! Можно пользоваться 0 и 1. Будет соответственно False и True. Ответ отправлен: 11.02.2004, 09:11 Отправитель: sir henry
Вопрос № 1327
>>1. А Вы не ошиблись? :)) >>IBQuery.FindFirst; >>IBQuery.FindNext; Нет я не ошибся - попробуйте сами : это не работает на IBquery, а в query - работает ------ >>Я бы Вам посоветовал приобрести книжку по созданию и >>использованию БД в Дельфи, например Фаронов >>"Дельфи. Руководство разработчика баз данных". Поверьте, >>это будет куда полезнее, чем посылать вопросы >>типа "Я не знаю как работать с IB пришлите свои >>комментарии" :)). Ну поскольку вы назвались "Экспертом", то и отвечать вам нужно более подробно, а не отнекиваться типа : купи книжку, так и я могу. Я не прошу рассказать мне теорию Дельфи в картинках, конкретный вопрос требует конретного ответа, а не можете ответить по существу - лучше не отвечайте вовсе. А так мы все умные.
Добрый день, jiny! Slushay, kto tebe skazal pro FindFirst... blinnn... Pishish v IBQuery.SQL:TStrings zapros, potom IBQuery.Open I VSE...
Ответ отправлен: 11.02.2004, 16:26 Отправитель: THE_PRO Отвечает sir henry
Приветствую Вас, jiny! :)) Без, почему-то, нелюбимой Вами теории не обойтись :). Я бы, честно говоря и картинки привел, но Вы запретили :)). Я немножко покопался в исходниках и на сайте фирмы Борланд и выяснилось, что методы TIBQuery, типа FindFirst и FindNext они и не собирались реализовывать. У объекта-предка они есть (виртуальные), но для IBQuery (и вообще для любого набора данных IB) они просто ничего не делают. Давайте подойдем к этому со стороны теории. Что такое Query? Это данные, выбраные по определенному признаку. А если дополнительно ввести к уже полученному набору еще один признак? У SELECT есть специальные функции MIN() и MAX(), которые и помогут нам в этом деле. По крайней мере FindFirst и FindLast с помощью них можно реализовать. У каждой таблицы по каждому значащему полю у Вас есть индексы (я надеюсь :), следовательно, добавив к оператору
SELECT сортировку ORDER BY, Вы получаете набор данных в которой первая запись это минимальное значение по выбранному Вами критерию сортировки (функция MIX()), а максимальное значение будет последней записью (функция MAX()). Теперь представим такую ситуацию. Вы получили набор данных с определенными свойствами и Вам надо вести обработку каждой полученой записи по отдельности. В этом случае можно не городя огород воспользоваться старыми добрыми методами First, Last, Next и Prior. Для IBQuery они работают :)). Как видите, Ваше более чем пренебрежительное отношение к теории и особенно к книгам Вас подвело. В любой книге об этом написано едва ли не на первом месте :)). Ответ отправлен: 12.02.2004, 07:48 Отправитель: sir henry
Вопрос № 1328
Здравствуйте Эксперты. Кто что знает про TMetaFile и TMetaFilePicture? Поделитесь знаниями, пожалуйста! Может кто советом поможет: Существуют некие файлы - специфические файлы рисунков. Сам файл - это координаты точек (х,у), которые должны быть соединены линиями. Линии могут пересекаться, ложится друг на друга... Рисунок получается при прорисовке всех линий от точки к точке. Часто рисунок разделен на несколько частей. Цвета частей могут быть одинаковыми... Посоветуйте, как лучше реализовать работу с таким рисунком? А именно - как организовать быструю смену цвета отдельной части? т.е. я кликаю мышкой по кусочку, программа должна определить что это за кусочек и задать для него новый цвет. (для удобства отдельные куски разложены по отдельным массивам.) Перебирать все эл-ты в поисках нужной точки - мне кажется это слишком не рациональный подход. Тем
более, по закону подлости, мышка может попасть аккурат между двумя линиями одной части... Но как-то ведь люди это делают. Может несколько TImage накладывать друг на друга, устанавливать прозрачность в true... Чтобы было совсем понятно - файлы рисунков - это файлы вышивки. Координаты (х,у) - место укола иглы. Жду Ваших советов, рекомендаций, идей.
Здравствуйте, Vitally! Что-то конкретное посоветовать сложно, однако несомненно то, что это должен быть не рисунок, а файл описания объектов (т.е. линия, окружность, квадрат и т.п.). Когда файл грузиться с диска, создаются объекты и размещаются на какой-то поверхности. Естественно, в состав объектов должны входить их координаты (и уровень слоя, если они лежат друг на друге :) тогда, при щелчке мышью, если совпали координаты мыши и объекта, объект выделяется, становиться текущим и с ним производятся разные манипуляции. После всех необходимых обработок объекта, файл можно записать в виде рисунка, например перерисовать его на TImage с помощью стандартных операторов LineTo, Rectangle и т.д.. Ответ отправлен: 11.02.2004, 15:40 Отправитель: sir henry Отвечает Boriss
Здравствуйте, Vitally! 1) Мышка между линиями - до определить область захвата и проверять точка + окрестность (хотя бы квадрат) 2) Проверять придется - тут уж никак :((, а для ускорения разве что сортировать, а лучше индексировать массивы периодически - по максимальным и минимальным координтатам отрезков. Так чтоб сразу определить, стоит ли проверять данный отрезок или нет. Иначе придется рассчитывать расстояние до линии. Хотя тут возможны упрощения "правильных" формул до оценочных - не искользующих квадратов, например
Приложение: Ответ отправлен: 11.02.2004, 15:16 Отправитель: Boriss Отвечает Pawel
Добрый день, Vitally! Нужно работать послойно, с использованием массива.(или нескольких). Но вообщето задача серьёзная и ресурсоёмкая. Ответ отправлен: 12.02.2004, 14:15 Отправитель: Pawel
Вопрос № 1329
Спасибо за ответ на вопрос 1320! Хочу уточнить одну вещь: понятно, что и try...except и if then использовать надо. Я хотел узнать, что лучше или выгоднее или правельннее использовать там, где две эти вещи могут взаимозаменить одна другую. Например деление на ноль - можно просто вставить код деления в блок try...except, а можно не доводить до исключительной ситуации, а проверять значение делителя: if делитель <>0 then делим. Так вот, что выгоднее, полезнее. (не скажу разумнее, потому что ИМХО разумнее все-таки не доводить программу до исключительных ситуаций). :)
Здравствуйте, Vitally! По-моему, в данном конкретном случае - без разницы, тут уж кому как нравится. Хотя, вроде бы, If экономичнее... Но согласись, что далеко не всегда есть возможность предугать возникновение исключительной ситуации, а бывают ситуации, что спасти может только try..except. Ответ отправлен: 13.02.2004, 11:59 Отправитель: samum2000
Вопрос № 1330
Уважаемые эксперты, спасибо за последний ответ Sir Henry, признаю, что в войне принципов я по большей части был неправ. Следующий вопрос : Почему функция UPPER, внутри SELECT upper(name) from orgs Кириллические символы выдает также, без изменений, а с английскими все работает ? Диалект базы : 1, набор символов Win1251
Доброе время суток, jiny! Не могу Вам достоверно сказать, что это такое, но у Борланда всегда были проблемы с национальными кодировками. Дельфи не стал исключением. Если бы не было аналогичных функций WinAPI (или, ранее, досовских прерываний), то не знаю, что и делать. Самому только эти функции писать :)). У меня вместо InterBase стоит FireBird 1.5. В нем такой проблемы нет (вдобавок полнофункциональный и бесплатный сервер :). Т.е., если создать базу данных: CREATE DATABASE my_gdb.gdb DEFAULT CHARACTER SET WIN1251; То и русские и английские символы обрабатываются одинаково успешно. Ответ отправлен: 14.02.2004, 10:38 Отправитель: sir henry
Вопрос № 1331
Здравствуйте эксперты!!! Как мне в PopUp menu можно сделать разделитель??? можно просто дать имя: "-" но мне надо что бы разделитель был с надписью, например: Menu1 --Separator-- Menu2 Menu3
Ответ отправлен: 12.02.2004, 17:31 Отправитель: Boriss Отвечает CJ
Доброе время суток, snake! Так и напиши --Separator-- Ответ отправлен: 14.02.2004, 21:56 Отправитель: CJ
Вопрос № 1332
Занялся недавно изучением Delphi 7 (буквально 2 дня назад), и естественно появились проблемы, а заключаются они в следующем: В приложении представлена процедура обработки нажатия на клавишу "=" моего калькулятора, я думаю обработка ошибок сдесь должна работать, но при неправильном вводе числа вылазит окно с ругательством, после "согласия" с тем что написано в окне, программа продолжает работу, как ни в чем ни бывало, даже не думая выполнять действия прописанные в блоке except..end. Заранее благодарен за помошь.
Здравствуйте, Pavel! 1. Попробуйте запустить программу не в IDE, а отдельно и посмотреть, что будет :). Видимо у Вас IDE перехватывает ошибки. 2. Вполне возможно, что Ваша ошибка не EConvertError, попробуйте закомментировать. 3. Неплохо было бы привести текст ругательства в окне :). Ответ отправлен: 13.02.2004, 11:02 Отправитель: sir henry Отвечает Boriss
Доброе время суток, Pavel! Написано излишне сложно, и не ясно "согласия" с чем? Вот как проще (а чем проще, тем меньше ошибок :)) ): 1) Эта процедура не должна содержать никаких циклов, 2) при возникновении ошибки - выдается информация и передается фокус в окно ввода, содержащего ошибку 3) И последнее, следует писать: UNTIL NOT error; Это же булевская переменная, зачем ее использовать еще в одном логическом выражении?
Ответ отправлен: 12.02.2004, 18:31 Отправитель: Boriss Отвечает Pawel
Добрый день, Pavel! Чересчур накрученный код. Try и except должны быть за пределами цикла. Проше будет установаит глобальный обработчик. компонент ApplicationEvents procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception); begin end; Ответ отправлен: 12.02.2004, 18:53 Отправитель: Pawel Отвечает Trubler
Доброе время суток, Pavel! Можно убрать из текста программы EConvertError, тогда все будет выполняться.
Приложение: Ответ отправлен: 12.02.2004, 21:18 Отправитель: Trubler Отвечает samum2000
Добрый день, Pavel! Странно, но у меня программа работает корректно. Единственная, на мой взгляд, ошибка это то, что при неправильном вводе числа (например, если я запишу текст) программа зацикливается: при ошибке Error устанавливается в true, и цикл repeat начинает очередное повторение, но ведь содержимое в edtab теперь точно неправильное - 'Ошибка ввода, повторите ввод' - и все начинается заново, а пользователь уже никогда не сможет изменить то, что там написано. Придется немного изменить структуру программы, но это уже другой вопрос. Однако, блок except..end честно выполняется программой. Ответ отправлен: 14.02.2004, 08:42 Отправитель: samum2000
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.