народ, для компиляции нужен variants.dcu или variants.pas незнаю что за библиотека, но у меня ее нету:) киньте на freeart@cmail.info.kuzbass.net, если не жалко... очень надо...
Здравствуйте, Ландграф Павел! ===== Pro bono publico, no bloody panico! ===== Лови мылом... Вообще стандартный юнит... На диске с Дульфей смотреть надо было, если не поставился...
Ответ отправлен: 04.11.2002, 06:06 Отправитель: Idle Sign Отвечает Jadd
Приветствую Вас, Ландграф Павел! Наверное variant.dcu. Это файл из стандартной поставки, в противном случае ищи. Ответ отправлен: 06.11.2002, 02:54 Отправитель: Jadd
Вопрос № 254
Ув. Эксперты! Помогите пожалуйста! Это для меня первая серьезная программа, поэтому очень надеюсь на вашу помошь. Эта программа решает(по крайне мере пытается) квадратные уравнения, но она почему-то не работает(при нажатии на BinBtn1 ничего не происходит). Где я ошибся, и как исправить эти ошибки?!! Заранее благодарю!!! Исходник: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; BitBtn1: TBitBtn; BitBtn2: TBitBtn; procedure Edit1Change(Sender: TObject); procedure Edit2Change(Sender:
TObject); procedure Edit3Change(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Edit1Change(Sender: TObject); begin Tag := 1; end; procedure TForm1.Edit2Change(Sender: TObject); begin Tag := 1; end; procedure TForm1.Edit3Change(Sender: TObject); begin Tag := 1; end; procedure TForm1.BitBtn1Click(Sender: TObject); var A,B,C,X1,X2,D1,D : real; begin if Tag = 0 then begin ShowMessage('Неправильный ввод!!!') and exit; try A := StrToFloat(Trim(Edit1.Text)); Except ShowMessage('Неправильно введен операнд A'); try B := StrToFloat(Trim(Edit2.Text)); except ShowMessage('Неправильно введен операнд B'); try C := StrToFloat(Trim(Edit3.Text)); except ShowMessage('Неправильно
введен операнд C'); if CheckBox2.Checked then begin D1 := (sqrt((B*B)+ A*C)); X1 := (((-B)+D1)/A); X2 :=(((-B)-D1)/A) end else D := (sqrt((B*B) + 4*A*C)); X1 := (((-B)+d)/2*A); X2 := (((-B)-D)/2*A); end; if CheckBox1.Checked and CheckBox2.Checked then begin Memo1.Lines.Add('D1 = ' + FloatToStr(D1)); Memo1.Lines.ADD('X1 = ' + FloatToStr(round(X1))); Memo1.Lines.Add('X2 = ' + FloatTOStr(round(X2))); end; if CheckBox1.Checked and CheckBox2.Checked = false then begin Memo1.Lines.ADd('D = ' + FloatToStr(d)); Memo1.Lines.ADD('X1 = ' + FloatToStr(Round(x1))); Memo1.Lines.ADD('X2 = ' + FloatToStr(Round(X2))); end; if CheckBox1.Checked = false and CheckBox2.Checked = false then begin Memo1.Lines.Add('D = ' + FloatToStr(D)); Memo1.Lines.Add('X1 = ' + FloatToStr(X1)); Memo1.Lines.Add('X2 = ' + FloatToStr(X2)); end; if
CheckBox2.Checked then Memo1.Lines.Add('D1 = ' + FloatToStr(D1)); Memo1.Lines.Add('X1 = ' + FloatToStr(X1)); memo1.Lines.Add('X2 = ' + FloatToStr(x2)); end; end; end; end.
Доброе время суток, Elvis! ===== Pro bono publico, no bloody panico! ===== Куча ошибок, компилятор негодует... См. приложение (переписанная функция). ПиС: невнимательность вещь излечимая. ПиПиС: Специально для вписывания кода предусмотрено "ПРИЛОЖЕНИЕ".
Приложение: Ответ отправлен: 04.11.2002, 15:16 Отправитель: Idle Sign Отвечает Vladimir
Приветствую Вас, Elvis! Кусок твоего кода: if Tag = 0 then begin ShowMessage('Неправильный ввод!!!') and exit; try A := StrToFloat(Trim(Edit1.Text)); По-моему, перед try должно быть else, иначе этот кусок никогда не выполнится.
Ответ отправлен: 04.11.2002, 09:29 Отправитель: Vladimir Отвечает Jadd
Приветствую Вас, Elvis! Все просто. Проверяя Tag надо указывать объект, членом которого этот Tag является.Все и заработает, поверь. Ответ отправлен: 06.11.2002, 02:50 Отправитель: Jadd
Вопрос № 256
Здравствуйте, Скажите пожалуйста для чего нужен параметр Key при содании баз данных в Database Desktop? Заранее благодарен.
Доброе время суток, dude! Если тип поля 'Alpha', значек в этом параметре показывает, нужно-ли упорядочивать записи по этому полю.
Ответ отправлен: 04.11.2002, 17:00 Отправитель: Vladimir Отвечает Артём Шегеда
Доброе время суток, dude!
Key (англ. "ключ") - признак того, что данное поле является ключевым, т.е. приоритетным. В частности, поле, являющееся ключевым, при внесении записи в таблицу не может быть пустым и не может повторять ранее внесенные значения. Для таблиц Paradox (а может быть, для других типов) - синоним "primary index". Поиск по такому полю происходит быстрее, чем по вторичным индексам Ответ отправлен: 05.11.2002, 11:07 Отправитель: Артём Шегеда
Вопрос № 257
Я создал Paradox 7 Table на Database Desktop после чего первое поле(code) определил как (+)+- Autoincrement и установил key(*). Дальше я создал около 5 полей потом все сохранил и перешел в среду Delphi. После того как я ввел некоторое количество записей я все стер, затем начал опять вводить записи и тогда заметил что значения поля code не стерлись!!! А они продолжают постоянно рости. Скажите пожалуйста почему так? Для чего нужен key? Вообще Я хочу чтобы code указывал на номер записи в базе. Надеюсь Вы поняли. Спасибо!
Приветствую Вас, dude! Ай-яй-яй! Никогда не пиши базу данных, не изучив хотя бы немного теории! 100%, что без знания основ теории твоя база накроется в первую же неделю... Начну с key... Это - ключ таблицы. Он же - индекс. Объяснять не буду - это довольно долго, тебе либо другой кто-нибудь тут объяснит, либо лучше почитай книжки или справочники. Скажу лишь, что ключ в любой таблице лучше сделать. Он должен быть уникальным. Так, автоинкрементное поле подходит для этих целей, хотя некоторые типы таблиц (напр. InterBase) его не любят. Никаких операций с ключем таблицы лучше не производить, потому что в случае нарушения его уникальности вся твоя база рухнет. Порядковый номер? :( Плохая идея и вот почему... Понимаешь, база данных, или, как у тебя, простая таблица, предназначена для хранения данных, причем они могут постоянно обновляться
- добавляться, удаляться и пр... Когда база маленькая (меньше 100 записей) - ты еще можешь после каждой операции (в общем случае - транзакции) перенумеровать все записи, при, скажем, удалении записи откуда-нибудь из середины, но когда у тебя будет ок. 10000 записей (тоже не очень-то и большая база!), комп будет каждый раз очень эффектно тормозить. Это было только во-первых! Во-вторых, база данных предполагает, что данные редко будут отображаться на экране все сразу. Гораздо чаще (и обычно!) мы имеем дело с набором отфильтрованных по какому-то признаку данных. А если у тебя еще и сортировка есть по другому полю? В общем, этот твой порядковый номер не нужен. Если ты хочешь указать на конкретную запись в таблице - пользуйся ключевым полем (про него я уже упоминал) или просто делай Lookup, но все равно я не вижу ни одной причины для "порядкового номера". Так...
Еще спрашиваешь про то, что индексы растут постоянно... В общем, это одно из свойств ключа... Вернее это... ээ... В общем, я уже говорил, что каждая запись должна быть уникальна. А теперь представь, что у тебя есть две версии одной и той же таблицы. И надо их синхронизировать (ох, до чего жизненная задача!!). А ключ не всегда возрастает, а, например, если нет значения с номером 245, то он его и примет от балды, не замечая, что вообще-то был уже давно и номер 567... А во второй таблице - та же история... В общем,синхронизация превращается в нетривиальную задачу с красивым жужжанием диска... А если обе таблицы - по 100000 записей, расположены на серверах в разных частях света? Это ж они два Новых Года встретят за одно обновление! :) В общем, я тебя, конечно же пугаю - это не совсем так и страшно. И индексы сбросить в любое число тоже можно. Функцию я, правда, сейчас
не помню, но во-первых, попробуй применить операцию "pack table" в Database Desktop, а если это не поможет, то я видел точно такой же вопрос с ответом на форуме сайта www.delphi.mastak.ru (сорри, если адрес перепутал!)... В общем, удачи в написании баз данных (хотя от себя скажу - та-акой это геморрой эти базы!), если будут еще вопросы - пиши.
Ответ отправлен: 04.11.2002, 23:51 Отправитель: baldr Отвечает Painbringer
Доброе время суток, dude! так и должно быть! автоинкрементное поле назад не возвращается. и при удалении записи из середины таблицы у тебя нмер остается потеряным (собственно как и из конца таже). нафиг нада? предположим у тя есть две связаых по полю code таблицы: tovar.db + code a nazv n cena sklad.db i code n kolvo пусть пусть у тебя в tovar.db имелась запись: (3 - бананы - 10) а в sklad.db (3 - 100). допустим запись в tovar удаляется, а связананая с ней в sklad нет. потом добавляем в товар новую запись и твое code опять принимает значение 3. получаем лажу. в место того чтоб ругаться - нет соответствующей записи в tovar имеем полную хрень. key - это первичный ключ - по нему строиться главный индекс таблицы. Ответ отправлен: 05.11.2002, 00:09 Отправитель: Painbringer
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.