S. D. F.
Шрифт:
procedure TFMain.Memo1Click(Sender: TObject);
begin
Panel5.Caption := IntToStr( Memo1.SelStart );
end;
* Ну, ты загонял, то тут добавить, то там исправить.
– С моей точки зрения, это нормальная работа. Программа, как и живое существо, не рождается полностью функционирующей. Растем, развиваемся, главное, четко понимать, почему и для чего производятся эти
– Ну, что, теперь, твоя очередь тестировать программу.
– * -
– * -
– Ну, как успехи. Выходит?
* И входит, и выходит. Вообще-то мне нравится, но я обнаружил бревно в твоем глазу.
* Как-то раз вылезло такое сообщение:
“Cannot perform operation - DB is currently open”
– Так, так, в каких обстоятельствах появилась ошибка.
* Я отрывал базу.
– И чё сея строчка значит?
* Грит не может выполнять работу – база сейчас открыта.
– Объясни понятнее.
* Т.е. не может открыть базу, потому, что она уже открыта.
– Не обязательно она, но какая-то база открыта.
* Ну, и чего делать?
– Конечно, исправлять.
* Как?
– Думай.
* Ну, если какая-то база открыта, надо ее закрыть.
– Отлично, вот тебе две строчки, вставь их в двух местах… где сам найдешь.
if IBDatabase1.Connected then
IBDatabase1.Connected := false;
* Ты хочешь сказать, что все было запланировано?
– J
– Еще, есть целый ряд ситуаций в книге [1] которые формально не являются ошибкой, но…
* Ну-ка, ну-ка.
– Например такой запрос:
SELECT first.cname, second.cname, first.rating
FROM Customers first, Customers second
WHERE first.rating=second.rating;
* И в чем прикол?
– Попробуй.
* Останавливается на слове second.
– Я тоже не сразу понял, открой в книге [2] список зарезервированных слов.
* Да, не все йогурты одинаковы.
– Как и реализации SQL, но, все они полезны.
* Еще я заметил, что в некоторых случаях запросы выполняется, но порядок строк, не такой как в книге [1].
– Это, та же ситуация. Разные реализации SQL имеют разные установки (по умолчанию) для сортировки, т.е. если будет явно задан порядок, тогда таблица должны 100% совпасть.
* Так, что, задача выполнена?
– Нет, не совсем.
* И в чем дело, какие-то исправления?
– Поправки? Да, так, по мелочи, SetFocus для Memo1 при сбросах.
* И что дает?
– Попробуй, удобнее. Но как сказано это мелочь, а интереснее двигаться дальше.
* А куда дальше, мне кажется, что у меня появилось понимание SQL. Правда, хочется еще раз внимательно перечитать книгу [1].
– Это хорошо, но требуется еще понимание Firebird.
* ?
– Ну, вот сейчас, мы выяснили, что требуется знать зарезервированные слова Firebird. Но в этой системе есть и много вкусненького, что грех не использовать.
* Например?
– Мне очень нравится организация функции AutoIncrement.
– Часто в таблица нужно ключевое поле с уникальными значениями, проще всего его заполнять значениями счетчика.
– Знакомься:
CREATE GENERATOR gl;
SET GENERATOR gl TO 1;
CREATE TRIGGER Persons FOR Persons
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.P_Id IS NULL) THEN
NEW.P_Id = GEN_ID(gl, 1);
END
// (- * -) умножить примерно на 1024.
* Продолжение следует??
– Даже не знаю, что тебе ответить. Предыдущий текст я писал примерно год назад, затем запал спал, появились новые задачи, то да сё, сам понимаешь.
* Не отбрешешься!
– Да, помнится, были задумки, но чтобы продолжить надо опять сосредоточится в нужное состояние, лень! А стоит ли!
* А я?!
– Ну, давай прикинем, сколько это будет «я». Скачают, сей файл раз 100 – 200, если отфильтровать скачки по ошибке, удаленные по прочтении двух предложений, прочтенные, но не понятые, и тд и тп, то останется 0.75 читателя, пусть из вежливости будет 1.
Так вот, мой дорогой единственный читатель, ежели тебе, почему-то захотелось продолжения нашего общения, оставь отзыв на флибусте (flibusta.net) я там регулярно пасусь.
А пока, прощаюсь. Успехов!
W Cat.