Автор работы: Пользователь скрыл имя, 23 Октября 2012 в 09:16, курсовая работа
Целью данной курсовой работы является разработка программы, способной на основе отношений строить запросы на извлечение информации посредством визуального построителя запросов.
На современном этапе развития информационных технологий, базы данных, а также умение пользователей получать нужную информацию приобретает всё большее значение.
Введение………………………………………………………………………..…5
Постановка задачи………………………………………………………………..6
Реализация поставленной задачи…………………………………………….….8
Алгоритм построения запроса………………………………………….……….16
Тестирование и пример работы программы…………………………………...18
Заключение……………………………………………………………………….20
Список литературы………………………………………………………………21
Приложение……………………………………………………………………....22
else s1:=s1+s[i];
tables[0].name:=inttostr(c);
//формируем для каждой
s1:='';
c:=0;
for i:= 1 to strtoint(tables[0].name)do
begin
s:=GetListAttr(tables[i].name)
for j:= 1 to length(s) do
begin
if s[j]=#13 then begin
inc(c);
tables[i].atribs[c].name:=s1;
tables[i].atribs[c].typ:=
s1:=''
end
else s1:=s1+s[j];
tables[i].atribs[0].name:=
end;
c:=0;
end;
usetables[0].name:='0';
end;
procedure Tform1.InitCombo;
var i,j,k:integer;
begin
for i:=1 to StringGrid2.colcount do
for j:= 0 to 2 do
begin
Combo[i,j]:=TComboBox.Create(
Combo[i,j].BoundsRect := StringGrid2.CellRect(i,j);
Combo[i,j].Top:=combo[i,j].Top + StringGrid2.Top + 2;
Combo[i,j].Left:=combo[i,j].
Combo[i,j].Visible:=false;
Combo[i,j].Parent:=Form1;
Combo[i,j].Tag:=i;
Combo[i,j].OnChange:=form1.
case j of
2: begin
Combo[i,j].Items.Add('по возрастанию');
Combo[i,j].Items.Add('по убыванию');
end;
end;
end;
for i:=1 to StringGrid2.colcount do
begin
Check[i]:=TCheckBox.Create(
Check[i].BoundsRect := StringGrid2.CellRect(i,3);
Check[i].Top:= Check[i].Top + StringGrid2.Top + 2;
Check[i].Left:= Check[i].Left + StringGrid2.Left + 2;
check[i].Caption:=inttostr(i);
Check[i].Parent:=Form1;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OpenSysCatFiles;
CreateTableList(Tables);
InitTable;
InitCombo;
ListTables;
end;
procedure tform1.ListTables;
var s,a,cur,tem:string;row,i,j:
begin
cur:='';tem:='';Row:=2;
s:=GetListTable;
for i:=1 to Length(s) do
if s[i]=#13 then
begin
StringGrid1.RowCount:=Row;
StringGrid1.Cells[0,Row-1]:=
a:=GetListAttr(cur);
for j:=1 to Length(a) do
if a[j]=#13 then
begin
StringGrid1.Cells[1,Row-1]:=
StringGrid1.Cells[2,Row-1]:=
if IsPrimaryKey(cur,tem) then
StringGrid1.Cells[3,Row-1]:='
StringGrid1.Cells[4,Row-1]:=
inc(Row); StringGrid1.RowCount:=Row;
tem:='';
end else tem:=tem+a[j];
cur:='';
end else cur:=cur+s[i];
end;
procedure TForm1.StringGrid2SelectCell(
ARow: Integer; var CanSelect: Boolean);
begin
if ARow<3 then
begin
//показываем соответствующий combo
Combo[ACol,ARow].BoundsRect := StringGrid2.CellRect(ACol,
Combo[ACol,ARow].Top:=combo[
Combo[ACol,ARow].Left:=combo[
combo[ACol,ARow].Visible:=
end;
if ARow=4 then begin
//загружаем образ формы в
i:=ACol;
form3.Edit1.Text:=unit3.frm[i]
form3.Edit2.Text:=unit3.frm[i]
form3.Edit3.Text:=unit3.frm[i]
form3.Edit4.Text:=unit3.frm[i]
case unit3.frm[i].IndexRadio of
1: form3.RadioButton1.Checked:=
2: form3.RadioButton2.Checked:=
3: form3.RadioButton3.Checked:=
else begin
form3.RadioButton1.Checked:=
form3.RadioButton2.Checked:=
form3.RadioButton3.Checked:=
end;
end;
form3.ComboBox1.Text:=unit3.
form3.ComboBox2.Text:=unit3.
form3.ComboBox3.Text:=unit3.
form3.setindex(ACol);
form3.visible:=true;
end;
form1.caption:='Acol '+inttostr(acol)+' Arow '+inttostr(Arow);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form2.Edit1.Clear;
form2.Button2.Enabled:=false;
form2.Button3.Enabled:=false;
form2.ComboBox1.Text:='';
form2.Visible:=true;
end;
procedure TForm1.ListBox1DblClick(
begin
form2.ComboBox1.Enabled:=
form2.Button2.Enabled:=True;
form2.Button1.Enabled:=false;
form2.Button3.Enabled:=true;
form2.ComboBox1.Text:=
form2.Edit1.Text:=usetables[
form2.Visible:=true;
end;
procedure AddForCom(var str:string);
//добавление внешних ключей
function GetName(s:string; var s1:string):string;
var i:integer;
begin
result:='';
i:=1;
while s[i]<>'.' do
begin
result:=result+s[i];
inc(i);
end;
s1:=copy(s,i,length(s));
end;
var s,s1:string;
j,i,k:integer;
begin
for i:= 1 to strtoint(usetables[0].name) do
begin
s1:='';
for j := 1 to strtoint(usetables[i].atribs[
begin
s:=getforeignkey(usetables[i].
if s<>''
then
for k:= 1 to strtoint(usetables[0].name)do
if GetName(s,s1)=usetables[k].
begin
if usetables[i].psevdo<>''
then str:=str+'('+usetables[i].
if usetables[k].psevdo<>''
then str:=str+usetables[k].psevdo+
end;
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
function Dif:boolean;
var i,j:integer;
begin
Result:=false;
for i:= 1 to strtoint(UseTAbles[0].name) do
for j:= 1 to strtoint(UseTAbles[0].name) do
if (Usetables[i].name<>UseTables[
end;
var select,from,where,orderby, query:string;
i,j:integer;
m:set of byte;
count:byte;
f,join:boolean;
begin
m:=[];
select:='select ';
where:='';
orderby:='';
if checkbox1.Checked then select:=select+'distinct ';
count:=0;
for i:= 1 to 20 do if ((combo[i,0].text<>'')and(
f:=false;
if (strtoint(usetables[0].name)=
for i:=1 to 20 do
begin
if check[i].Checked then select:=select + combo[i,0].Text+'.'+combo[i,1]
if (combo[i,2].Text<>'')and(
if combo[i,2].text='по возрастанию' then
orderby:=orderby+combo[i,0].
if (combo[i,0].text<>'')and(
end;
for i:= 1 to StrToint(UseTAbles[0].name)do
if f
then
begin
if usetables[i].psevdo<>'' then from:=from+' '+usetables[i].name+' as '+usetables[i].psevdo+' '
if join then begin
from:=from+'full outer join';
join:=false;
end;
end
else
if usetables[i].psevdo<>'' then from:=from+usetables[i].name+' as '+usetables[i].psevdo+', '
else from:=from+usetables[i].name+'
select:=copy(select,1,length(
from:='from '+copy(from,1,length(from)-2)+
addforcom(where);
if where <>'' then
if f then where:='on '+copy(where,1,length(where)-
else where:='where '+copy(where,1,length(where)-
if orderby<>'' then orderby:='order by'+copy(orderby,1,length(
query:=select+from+where+
memo1.Clear;
memo1.Lines.Add(query);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Lines.Add(
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, unit1;
type
TForm2 = class(TForm)
ComboBox1: TComboBox;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
prev:string;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
var i,k:integer;
begin
k:=strtoint(unit1.Tables[0].
for i:= 1 to k do
combobox1.Items.Add(unit1.
end;
procedure TForm2.Button1Click(Sender: TObject);
var k,i,j:integer;
f:boolean;
begin
//Добавление в UseTAble
f:=true;
k:=strtoint(unit1.UseTables[0]
j:=form1.findTable_n(
for i:= 1 to strtoint(usetables[0].name)do
begin
if (usetables[i].name=combobox1.
if (usetables[i].psevdo=edit1.
if ((edit1.Text='')and(usetables[
begin
showmessage('псевдоним не уникален');
f:=false;
end;
end;
if f then //если добалвен уникальный псевдоним
begin
inc(k);
unit1.UseTables[k]:=unit1.
unit1.UseTables[k].psevdo:=
unit1.UseTables[0].name:=
form1.ListBox1.Items.Add(
for i:= 1 to 20 do
if edit1.Text='' then unit1.combo[i,0].items.add(
else unit1.combo[i,0].items.add(
form2.Visible:=false;
end;
end;
procedure TForm2.FormActivate(Sender: TObject);
begin
prev:=edit1.Text;
Информация о работе Визуальный построитель запросов на извлечение