S. D. F. - [6]
- Как видишь, на экран выдается название таблицы, а затем таблица с описанием полей.
* Погоди! А что это в 280 строке?
- О, кота то я, и не заметил.
function FieadType(n:integer):string;
begin
case n of
7 : result := 'smallint';
8 : result := 'integer';
9 : result := 'quad';
10 : result := 'float';
11 : result := 'd_float';
12 : result := 'date';
13 : result := 'time';
14 : result := 'char';
27 : result := 'double';
35 : result := 'date';
37 : result := 'varchar';
261 : result := 'blob';
else result := IntToStr(n)+' ?';
end; // case
end;
В результате отобразится, нечто такое:
- * -
- Ну, и чего так долго, конечно, пива много не бывает, но…
* В общем-то, получилось, но никак не могу скопировать получившееся.
- Да, есть такая задача. Вставь в самом конце (перед end.) в файле Unit1:
initialization
OleInitialize(nil);
finalization
OleUninitialize;
А в самом начале этого файла вставь ActiveX в разделе uses.
* Так, просто! Да что же это такое. Просто хочется рвать и метать!!
- Это Windows.
* Ну, что теперь отображаем данные?
- Нет, не к спеху, да и отображать еще нечего, давай отдохни, а я подготовлюсь к последнему рывку.
«Продолжение следует»
Последний? Рывок к ББД
- Предлагаю вернуться к выполнению SQL запроса.
- Бывают запросы SELECT и все остальные. Результат выполнения SELECT – будем выдавать в закладку result, а остальные просто выполнять.
- Переделываем Button1Click:
010 procedure TFMain.Button1Click(Sender: TObject);
020 begin // кнопка run SQL
030 RunSQL(MakeSQL); // выполение команды SQL
040 end;
- Пойдем дальше.
- Теперь можно заняться кнопочкой «Show Data»
010 procedure TFMain.Button5Click(Sender: TObject);
020 var
030 i : integer;
040 S : string;
050 begin // Show Data
060 with CheckListBox1 do
070 begin // составляем список полей
080 if Items.Count = 0 then exit; // если список пуст - уходим
090 S := 'SELECT ';
100 for i := 0 to Items.Count - 1 do // список полей вставляем в запрос
110 if Checked[i] then
120 S := S + LowerCase(Items[i]) + ', ';
130 end; // with CheckListBox1
140 delete(S, length(S)-1, 2);
150 Memo1.Clear;
160 Memo1.Lines.Add(S);
170 S := 'FROM '+ LowerCase( ListBox1.Items[ ListBox1.ItemIndex] );
180 Memo1.Lines.Add(S);
190 RunSQL( MakeSQL);
200 end;
- Тут все должно быть ясно: кнопка вырабатывает команду SELECT для полей отмеченных галочкой и распечатывает результат.
* Ну, как теперь-то все готово.
- Вот же шило в одном месте. Ладно, следующий пункт:
Тестирование
- Как ты помнишь, тренироваться мы будем по книге Мартина Грубера «Понимание SQL»[1], при потребности будем поглядывать в «Firebird. Руководство разработчика баз данных» Хелен Борри[2].
* Ну и в интернете найдется масса материала.
- Для нашей игры понадобится база с определенными таблицами, полюбуйся на них приложении к [1].
* Не сказать, что 3 таблицы это очень много, но…
- Я так понимаю, что тебе лень, а лень двигатель прогресса.
- В данном случае, я тебе помогу…
- На закладке SQL ставим еще одну кнопку «Run SQL by List».
- Будут выполнятся запросы записанные в текстовом файле.
- Каждый запрос должен заканчиваться «;», допускается перенос запроса на несколько строк, не допускается несколько запросов в одной строке.
- Не отображается результат запросов SELECT
- При ошибочном запросе, выполнение списка прекращается.
010 procedure TFMain.Button6Click(Sender: TObject);
020 var
030 i : integer;
040 L : TStringList;
050 S : string;
060 begin // Run SQL by List
070 with OpenDialog1 do
080 begin // подготавливаем диалог
090 Filter := 'File with SQL|*.txt';
100 DefaultExt := 'txt';
110 if Execute then
120 with DataModule2 do
130 begin
140 L := TStringList.Create;
150 L.LoadFromFile(FileName); // открываем файл
160 His.Lines.Add('Run SQL by List '+FileName);// запись в историю
170 S := '';
180 for i := 0 to L.Count - 1 do
190 begin
200 S := S + ' ' + L[i]; // складываем строки
210 if pos(';', S) > 0 then // пока в строке не появится ';'
220 begin
230 S := trim(S); // ??
240 His.Lines.Add(S); // записываем запрос в историю
250 if RunSQL(S) then break; // если запрос не выполнился выходим.
260 S := '';
270 end; // if
280 end; // for
290 L.Free;
300 end; // if Execute
310 end; // OpenDialog1
320 end;
* В общем все понятно…
* Что за безобразие, хочу чтобы SELECT тоже выполнялись списком.
- Надо подумать. Минуточку. «Раз, два... Меркурий во втором доме... луна ушла... шесть – несчастье... вечер – семь...»
- Готово – сделать можно, даже несколько вариантов, т.е. я имею в виду из уже готовых элементов кода с минимальными добавлениями, а значит, я ничего подсказывать не буду, уж изволь сделать сам.
* Да?!
- Да.
- Возвращаюсь к нашей теме.
- Сейчас я тебе дам пару файлов. Желательно, чтобы ты поступил так:
- 1. Создай новую базу.
- 2. Сделай из нижеследующего файл и выполни его.
«начало кода»
CREATE TABLE Salespeople
( snum integer,
sname char (10),
city char (10),
comm decimal );
CREATE TABLE Customers
![Задачник по программированию для школы](/storage/book-covers/61/616ec53a107ad4719031fe73920c6823143d0f2f.jpg)
Задачи для школьника, должны быть веселы!На наших занятиях, запрещена фраза "мы это не проходили" - если это надо для решения задачи - "пройди", источников море, учитель подскажет.Не получается? Возможно, ты выбрал задачу не по силам, ничего - это тоже опыт, отложи, попробуй следующую. Мало решить задачу, придумай свою...Ученик должен уметь: (поставить задачу + решить задачу + учиться) * n ...
![Система Диофанта](/build/oblozhka.dc6e36b8.jpg)
Если вы хотите поразить одноклассников молниеносным решением квадратных уравнений [КУ], давайте развлечемся.
![Чаша цикуты](/storage/book-covers/fa/fa8e87f2b6977c57e0edfd557fb7a895ae7e6862.jpg)
Слово «цикута» издавна стало обозначением одного из самых опасных ядов, известных человеку. Но справедливо ли это? Ведь в действительности растение цикута ядовито не более чем картофель или черный перец. Более того, оказывается, во многих областях цикута даже полезна… И Сократ тут совсем ни при чем.
![47 Большой Медведицы](/storage/book-covers/e7/e709b4e2a7b3f59d8c791b5c1b42700a7bd6fde1.jpg)
Фантастический роман «47 Большой Медведицы» рассказывает, как в результате пересечения интересов внеземных цивилизаций на Земле происходит техногенная катастрофа, формирующая Уникальный Заповедник «Необъяснимый Аномальный Лес». Присматривать за аномальной зоной Космическая Иерархия поручает Альгу Чара Дею. Герой сочиняет отчет по вымышленному проекту «Космошаманизм и прикладная техномагия». После этого и начинаются его приключения на Земле, в космосе и в антимире…
![Опасные желания](/storage/book-covers/56/56b355156bcbbf7442e00bfae280bd65cce54060.jpg)
Даниэль — девушка, которая верит в то, что мир наполнен сверхъестественными вещами. Шон — охотник на эти вещи. Его цель — сила. Что будет, если судьба сведет этих людей вместе, в мистическом городе Роудхелл — городе, где паранормальная энергия зашкаливает? Что же такого особенного в этом месте? Почему с каждым годом сверхъестественных существ, проживающих там, становится все больше и больше? И самое главное — что ожидает горожан, когда создания ночи решат дать знать о своем присутствии?..
![Советия](/storage/book-covers/f2/f24ccde9d054e3419292fe1097550e6c4e6eb5fe.jpg)
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
![Словоплёт](/storage/book-covers/f3/f364fd2a37977a6c67b80f06f3e0f12bb07995ff.jpg)
Сантинали с тоской смотрела на проносящиеся мимо пейзажи. Последние несколько дней они ехали куда-то всё глубже в горы. Всё больше ущелий и грохочущих горных потоков попадалось им на пути, всё реже встречались города и патрули на дорогах. Они давно свернули с наезженных торговых трактов, и теперь впереди их ждали только деревни, отары, и сотни километров обрывов и бесконечных лесов. Отец не мог так поступить с ней. Но вот она, трясётся в экипаже навстречу своему приговору…