Библиотека knigago >> Компьютеры: Разработка ПО >> Программирование: прочее >> S. D. F.


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1535, книга: Нелинованный блокнот
автор: Роман Шмельков

Недавно прочитала крутую книжку "Нелинованный блокнот". Это сборник рассказов, которые, на первый взгляд, кажутся выдуманными историями. Но потом понимаешь, что это про нашу жизнь, про таких же простых людей, как я и ты. Автор пишет так легко и просто, что читается, как будто он с тобой разговаривает. Рассказы короткие, но очень емкие, заставляют задуматься о важных вещах. О любви, о дружбе, о смысле жизни. Правда, иногда стиль автора кажется немножко рваным, но, может, это только...

W Cat - S. D. F.

S. D. F.
Книга - S. D. F..  W Cat  - прочитать полностью в библиотеке КнигаГо
Название:
S. D. F.
W Cat

Жанр:

Базы данных, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, Pascal, Delphi, Lazarus и т.п.

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "S. D. F."

Если вам интересен SQL, и знаком Delphi, давайте поразвлекаемся программированием.

Читаем онлайн "S. D. F.". [Страница - 8]

это у вас устаревший Windows, давайте я его переставлю, это будет стоить… что, при этом утеряны данные за 3 года работы. Но, это же хорошо (хорошо-то хорошо, да ничего хорошего – что бы еще соврать) – Слава, Богу, это был только сон…”

* Хе-хе, ну у тебя и шуточки. Давай все-таки вернемся к книге [1].

- Да! Как я уже раньше думал сказать, если бы все примеры в книге были бы без ошибок, пользы от нее было бы намного меньше. Копируй запросы, выполняй, проверяй результат… скучно. А тут, наполненная описками жизнь бурлит и хлещет.

* И какие там ошибки?

- Например:

SELECT sname, sity

FROM Salespeople;

WHERE city=LONDON;

или еще:

SELECT * FROM Order WHERE NOT

((odate=10/03/1990 AND cnum < > 1002)OR amt > 2000.00);

- Тут пару ошибок достаточно очевидны (лишний символ “;” и нет апострофов вокруг даты ну и прочее, и прочее.

- В процессе поиска ошибок, возникла потребность изменить программу. А именно, при ошибке выводится сообщение, и часто там указывается на какой строке, и в какой позиции найдена ошибка. Проблема в том, что на исполнение мы даем запрос одной строкой, и соотнести место ошибки, с тем, что на экране…

- Посему, изменяем RunSQL

В разделе переменных добавляем:

LPos : integer;  // позиция ошибки

- Между строками 330 и 340 добавляем текст:

330   begin // была ошибка

331  Memo1.Clear;

332  Memo1.Lines.Add(S); // перезапись запроса одной строкой

333  LPos := GetSelStart(Mistake); // поиск места ошибки

334  if LPos > -1 then  begin

335     Memo1.SelStart := LPos-1; // вкл индикатора

336     Memo1.SelLength := 1;

337     Memo1.SetFocus;

338      Panel5.Caption := IntToStr(LPos); // дополнительная информ.

339     end;

340  ShowMessage(Mistake); // сообщение об ошибке

- Как видишь, GetSelStart получает строку с описанием ошибки и пытается найти там информация о ее позиции:

function GetSelStart(S: string):integer;

var

 i, n : integer;

 ss : string;

begin

 result := -1;

 n := pos('column ',S);

 if n > 0

  then begin

         delete(S,1,n+6);

         ss := '';

         for i := 1 to length(s) do

           if S[i] in ['0'..'9']

            then ss := ss + s[i]

            else break;

          if ss <> '' then

           result := StrToInt(ss);

        // ShowMessage(S);

       end;

end;

- Согласись, тут все довольно просто. Но результат, впечатляет.

- Да, как всегда, что-то да упустишь, во-первых, в компоненте Memo1 измени свойство HideSelection на false – очень помогает, и второе под этим Memo поставь панельку (у меня это Panel5), которая будет показывать текущее положение курсора в строке, для этого вставь обработчик:

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 при сбросах.

* И что дает?

- Попробуй, удобнее. Но как сказано это --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.