lurnette » 06 июн 2013, 22:38
Всем доброго времени суток
Пишу курсовую, завтра сдавать, а преподаватель в последний момент потребовал все переделать
Смысл такой: есть БД в Access, в ней 7 связанных таблиц, и программа на Delphi 7, через ADO все подключается, на форме выводятся через ADOQuery частично записи из всех таблиц
Нужно реализовать сортировку записей по выбранным полям, а также возможность добавления новой записи, при чем добавляться, я так понимаю, запись должна сразу во все связанные таблицы
Ниже представлен код
Очень надеюсь на вашу помощь
Код: Выделить всё
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, StdCtrls,
RpRenderPDF, RpRenderHTML, RpRenderRTF, RpRender, RpRenderText, RpBase,
RpFiler, RpCon, RpConDS, RpDefine, RpRave;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Memo1: TMemo;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
DBNavigator1: TDBNavigator;
RvProject1: TRvProject;
RvDataSetConnection1: TRvDataSetConnection;
RvRenderPDF1: TRvRenderPDF;
RvRenderHTML1: TRvRenderHTML;
RvRenderRTF1: TRvRenderRTF;
RvRenderText1: TRvRenderText;
Label2: TLabel;
DBGrid1: TDBGrid;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public tb:TGraphicField;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var field:string;
fieldlocate:string;
begin
if ADOQuery1.Locate('Название',variant(edit1.Text),[])
then Dbgrid1.SetFocus;
if ADOQuery1.Locate('Имя',variant(edit2.Text),[])
then Dbgrid1.SetFocus;
if ADOQuery1.Locate('Фамилия',variant(edit3.Text),[])
then Dbgrid1.SetFocus;
if ADOQuery1.Locate('Жанр',variant(edit4.Text),[])
then Dbgrid1.SetFocus;
if ADOQuery1.Locate('Издательство',variant(edit5.Text),[])
then Dbgrid1.SetFocus;
if checkbox1.Checked then
begin
field:='Название'; fieldlocate:='edit1.text'
end
else if checkbox2.Checked then
begin
field:='Имя'; fieldlocate:='edit2.text';
end
else if checkbox3.Checked then
begin
field:='Фамилия'; fieldlocate:='edit3.text';
end
else if checkbox3.Checked then
begin
field:='Жанр'; fieldlocate:='edit4.text';
end
else if checkbox3.Checked then
field:='Издательство'; fieldlocate:='edit5.text';
if ADOQuery1.Locate(field,variant(fieldlocate),[])
then Dbgrid1.SetFocus;
end;
procedure TForm1.Button2Click(Sender: TObject);
var LookupResult:variant;
i:integer;
begin
memo1.Lines.Add('');
LookupResult:=ADOQuery1.Lookup(
'Название',variant(edit6.Text),'Имя;Фамилия;Жанр;Издание;');
if VarType(LookupResult)=varNull then
showMessage('Запись не найдена! ' +edit6.Text)
else if varIsArray(LookupResult) then
begin
for I := 0 to 3 do
memo1.Lines.Add(lookupresult[I]);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form2.show
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
RvProject1.SetProjectFile(ExtractFilePath(Application.ExeName)+'Project1.rav');
RvProject1.ExecuteReport('Report1');
RvProject1.Close;
end;
procedure TForm1.Button5Click(Sender: TObject); // как видите, здесь я уже попыталась осуществить сортировку, только вот при нажатии на кнопку ничего не происходит
begin
if radiobutton1.Checked then
begin ADOQuery1.SQL.Add('order by ID'); ADOQuery1.Open;
end;
if radiobutton2.Checked then
begin ADOQuery1.SQL.Add('order by Название'); ADOQuery1.Open;
end;
if radiobutton3.Checked then
begin ADOQuery1.SQL.Add('order by Имя'); ADOQuery1.Open;
end;
if radiobutton4.Checked then
begin ADOQuery1.SQL.Add('order by Фамилия'); ADOQuery1.Open;
end;
end;
end.
Всем доброго времени суток
Пишу курсовую, завтра сдавать, а преподаватель в последний момент потребовал все переделать
Смысл такой: есть БД в Access, в ней 7 связанных таблиц, и программа на Delphi 7, через ADO все подключается, на форме выводятся через ADOQuery частично записи из всех таблиц
Нужно реализовать сортировку записей по выбранным полям, а также возможность добавления новой записи, при чем добавляться, я так понимаю, запись должна сразу во все связанные таблицы
Ниже представлен код
Очень надеюсь на вашу помощь
[code]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, StdCtrls,
RpRenderPDF, RpRenderHTML, RpRenderRTF, RpRender, RpRenderText, RpBase,
RpFiler, RpCon, RpConDS, RpDefine, RpRave;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
DataSource1: TDataSource;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Memo1: TMemo;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
DBNavigator1: TDBNavigator;
RvProject1: TRvProject;
RvDataSetConnection1: TRvDataSetConnection;
RvRenderPDF1: TRvRenderPDF;
RvRenderHTML1: TRvRenderHTML;
RvRenderRTF1: TRvRenderRTF;
RvRenderText1: TRvRenderText;
Label2: TLabel;
DBGrid1: TDBGrid;
ADOQuery1: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public tb:TGraphicField;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var field:string;
fieldlocate:string;
begin
if ADOQuery1.Locate('Название',variant(edit1.Text),[])
then Dbgrid1.SetFocus;
if ADOQuery1.Locate('Имя',variant(edit2.Text),[])
then Dbgrid1.SetFocus;
if ADOQuery1.Locate('Фамилия',variant(edit3.Text),[])
then Dbgrid1.SetFocus;
if ADOQuery1.Locate('Жанр',variant(edit4.Text),[])
then Dbgrid1.SetFocus;
if ADOQuery1.Locate('Издательство',variant(edit5.Text),[])
then Dbgrid1.SetFocus;
if checkbox1.Checked then
begin
field:='Название'; fieldlocate:='edit1.text'
end
else if checkbox2.Checked then
begin
field:='Имя'; fieldlocate:='edit2.text';
end
else if checkbox3.Checked then
begin
field:='Фамилия'; fieldlocate:='edit3.text';
end
else if checkbox3.Checked then
begin
field:='Жанр'; fieldlocate:='edit4.text';
end
else if checkbox3.Checked then
field:='Издательство'; fieldlocate:='edit5.text';
if ADOQuery1.Locate(field,variant(fieldlocate),[])
then Dbgrid1.SetFocus;
end;
procedure TForm1.Button2Click(Sender: TObject);
var LookupResult:variant;
i:integer;
begin
memo1.Lines.Add('');
LookupResult:=ADOQuery1.Lookup(
'Название',variant(edit6.Text),'Имя;Фамилия;Жанр;Издание;');
if VarType(LookupResult)=varNull then
showMessage('Запись не найдена! ' +edit6.Text)
else if varIsArray(LookupResult) then
begin
for I := 0 to 3 do
memo1.Lines.Add(lookupresult[I]);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form2.show
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
RvProject1.SetProjectFile(ExtractFilePath(Application.ExeName)+'Project1.rav');
RvProject1.ExecuteReport('Report1');
RvProject1.Close;
end;
procedure TForm1.Button5Click(Sender: TObject); // как видите, здесь я уже попыталась осуществить сортировку, только вот при нажатии на кнопку ничего не происходит
begin
if radiobutton1.Checked then
begin ADOQuery1.SQL.Add('order by ID'); ADOQuery1.Open;
end;
if radiobutton2.Checked then
begin ADOQuery1.SQL.Add('order by Название'); ADOQuery1.Open;
end;
if radiobutton3.Checked then
begin ADOQuery1.SQL.Add('order by Имя'); ADOQuery1.Open;
end;
if radiobutton4.Checked then
begin ADOQuery1.SQL.Add('order by Фамилия'); ADOQuery1.Open;
end;
end;
end.
[/code]