W Cat - S. D. F.

Тут можно читать онлайн W Cat - S. D. F. - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-db. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    S. D. F.
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

W Cat - S. D. F. краткое содержание

S. D. F. - описание и краткое содержание, автор W Cat, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

S. D. F. - читать онлайн бесплатно полную версию (весь текст целиком)

S. D. F. - читать книгу онлайн бесплатно, автор W Cat
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

* Да?!

- Да.

- Возвращаюсь к нашей теме.

- Сейчас я тебе дам пару файлов. Желательно, чтобы ты поступил так:

- 1. Создай новую базу.

- 2. Сделай из нижеследующего файл и выполни его.

«начало кода»

CREATE TABLE Salespeople

( snum integer,

sname char (10),

city char (10),

comm decimal );

CREATE TABLE Customers

( cnum integer,

cname char (10),

city char (10),

rating integer,

snum integer );

CREATE TABLE Orders

( onum integer,

amt decimal,

odate date,

cnum integer,

snum integer );

«конец кода»

- 3. Тут есть нюанс, который я еще не понял, но после создания таблицы, она не активна!?! Потом попробуешь, и возможно найдешь красивое решение. А пока закрой программу, затем запусти ее вновь и открой свою базу. Этого достаточно.

- 4. Сделай следующий файл и выполни:

«начало кода»

INSERT INTO Salespeople (snum,sname,city ,comm)

VALUES (1001,'Peel','London',.12);

INSERT INTO Salespeople (snum,sname,city ,comm)

VALUES (1002,'Serres','San Jose',.13);

INSERT INTO Salespeople (snum,sname,city ,comm)

VALUES (1004,'Motika','London',.11);

INSERT INTO Salespeople (snum,sname,city ,comm)

VALUES (1007,'Rifkin','Barcelona',.15);

INSERT INTO Salespeople (snum,sname,city ,comm)

VALUES (1003,'Axelrod','New York',.10);

INSERT INTO Customers (cnum,cname,city,rating,snum)

VALUES (2001,'Hoffman','London',100,1001);

INSERT INTO Customers (cnum,cname,city,rating,snum)

VALUES (2002,'Giovanni','Rome',200,1003);

INSERT INTO Customers (cnum,cname,city,rating,snum)

VALUES (2003,'Liu','San Jose',200,1002);

INSERT INTO Customers (cnum,cname,city,rating,snum)

VALUES (2004,'Grass','Berlin',300,1002);

INSERT INTO Customers (cnum,cname,city,rating,snum)

VALUES (2006,'Clemens','London',100,1001);

INSERT INTO Customers (cnum,cname,city,rating,snum)

VALUES (2008,'Cisneros','San Jose',300,1007);

INSERT INTO Customers (cnum,cname,city,rating,snum)

VALUES (2007,'Pereira','Rome',100,1004);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3001,18.69,'10/03/1990',2008,1007);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3003,767.19,'10/03/1990',2001,1001);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3002,1900.10,'10/03/1990',2007,1004);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3005,5160.45,'10/03/1990',2003,1002);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3006,1098.16,'10/03/1990',2008,1007);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3009,1713.23,'10/04/1990',2002,1003);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3007,75.75,'10/04/1990',2004,1002);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3008,4723.00,'10/05/1990',2006,1001);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3010,1309.95,'10/06/1990',2004,1002);

INSERT INTO Orders (onum,amt,odate,cnum,snum)

VALUES (3011,9891.88,'10/06/1990',2006,1001);

«конец кода»

- Все должно пройти хорошо.

* Брюки превращаются, превращаются брюки… в элегантную базу данных. Все ОК.

- Теперь заготовка базы у нас есть, и мы можем выполнять запросы из книги [1] выполнятся будут 3 задачи:

- 1. Самообучение SQL.

- 2. Вычитывание книги (с исправлением опечаток)

- 3. Тестирование программы.

* Значит теперь, со всеми переделками, программа сможет выполнить любой запрос?

- Это предстоит проверить.

Прошло три дня.

- Нет, ребята, пулемета я вам не дам.

- В книге оказалось, очень много ошибок. Ну, оченьмного ошибок, и все они полезные.

* Догадываюсь, задумано издевательство.

- Точно! Мне так понравилась идея с ошибками, что я задумался, не наделать их и в этом тексте.

* Вот этого, не надо!

- Хорошо, но ошибки неизбежны, где-то что-то я упущу, в этом случае я сделаю вид, что все так и задумано…

* Ну, ты и жук!

- Учись, студент. Учись, как сдавать программу заказчику, главное держать невозмутимое выражение морды лица: “Как, при запуске программы включилось форматирование диска? Ну, это у вас устаревший 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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


W Cat читать все книги автора по порядку

W Cat - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




S. D. F. отзывы


Отзывы читателей о книге S. D. F., автор: W Cat. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x