КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Подготовка и выполнение запросов
Добавление новой формы для работы с запросами Добавьте в приложение новую форму и положите на нее компонент Memo (закладка Standard), кнопку Button с надписью Выполнить запрос, сетку DbGrid и метки с соответствующими надписями, как показано на рис. 2.10. Дайте компоненту Memo имя MeSQL.
Командой File / Use Unit добавьте в список подключаемых модулей DatMod. На модуль dm положите компонент ADOQuery (закладка ADO) и источник DataSource, которому дайте имя dsQuery. Свяжите ADOQuery1 с ADOConnection1, какпоказанонарис. 2.11, свойство DataSet компонента dsQuery свяжитес ADOQuery1.
Перейдите к модулю Unit2 и свяжите сетку DbGrid1 с источником dsQuery1. Компонент MeSQL будем использовать для записи текста запроса, сформулированного на языке SQL. Рассмотрим простейший запрос с текстом select * from Инструменты Этот запрос дает инструкцию для выборки всех полей (символ "*") и не ставит условий относительно того, какие записи следует выбирать. Это означает, что должны быть выбраны все записи таблицы. Чтобы выполнить запрос будем использовать кнопку, по щелчку на которой запрос будет передан из MeSQL в ADOQuery1 и там выполнен. Создайте событие для щелчка на кнопке с таким кодом: procedure TForm2.bQueryClick(Sender: TObject); Действия, производимые этой процедурой, снабжены комментариями. После щелчка на кнопке по указанному выше запросу будет сформирован набор данных, который будет выведен в сетку:
Аналогично могут быть выполнены другие запросы. Более подробно вопросы подготовки и выполнения запросов были разобраны ранее при изучении материала по Теме № 2. С качестве справочного материала можно использовать тексты программных модулей: Unit1.pas, Unit2.pas, DatMod.pas. |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, DBCtrls, Mask, JPEG, KdnServ,
ComCtrls, Buttons, ExtDlgs;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
DBImage1: TDBImage;
GroupBox2: TGroupBox;
DBGrid3: TDBGrid;
Label2: TLabel;
DBImage2: TDBImage;
DBGrid4: TDBGrid;
Label1: TLabel;
sbInstAdd: TSpeedButton;
OpenPictureDialog1: TOpenPictureDialog;
sbPoverAdd: TSpeedButton;
GroupBox3: TGroupBox;
DBMemo1: TDBMemo;
GroupBox4: TGroupBox;
DBGrid2: TDBGrid;
DBGrid1: TDBGrid;
sbQuery: TSpeedButton;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure sbInstAddClick(Sender: TObject);
procedure sbPoverAddClick(Sender: TObject);
procedure sbQueryClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses DatMod, Unit2;
{$R *.dfm}
var FirstShow: boolean = true;
procedure TForm1.FormShow(Sender: TObject);
begin
if FirstShow then
begin
FirstShow:= false;
dm.TaList.Open;
dm.TaInst.Open;
dm.TaChar.Open;
dm.TaPover.Open;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
dm.TaPover.Close;
dm.TaChar.Close;
dm.TaInst.Close;
dm.TaList.Close;
end;
procedure PictureToGraphicField(F: TField);
var FileName: TFileName;
Bmp: TBitmap;
jpg: TJPEGImage;
D: TDataSet;
begin
With dm, Form1 do
begin
D:= F.DataSet;
if D.Active then // если таблица открыта, то
if D.RecordCount > 0 then // если в таблице есть записи, то
if OpenPictureDialog1.Execute then // если файл картинки выбран, то
begin
if not (D.State in [dsEdit]) then D.Edit; // перевод таблицы в режим редактирования
FileName:= OpenPictureDialog1.FileName; // имя файла с картинкой
try
Bmp:= TBitmap.Create; // создаем Bitmap в памяти
jpg:= TJPEGImage.Create; // создаем JPEG
jpg.CompressionQuality:= 100; // качество сжатия изображения
jpg.Compress; // сжатие
jpg.LoadFromFile(FileName); // загрузка
bmp.Assign(jpg); // передача из JPEG в BMP
F.Assign(bmp); // передача картинки из Bitmap в поле "Каринка"
except // в случае исключительной ситуции делать:
D.Post; // сохранение записи
ShowMessage('Не удалось загрузить картинку.'); // сообщение об ошибке
FreeAndNil(jpg); // освобождение памяти, занятой JPEG
FreeAndNil(bmp); // освобождение памяти Bitmap
end;
end;
end;
end;
procedure TForm1.sbInstAddClick(Sender: TObject);
begin
PictureToGraphicField(dm.TaInst.FieldByName('Картинка'));
end;
procedure TForm1.sbPoverAddClick(Sender: TObject);
begin
PictureToGraphicField(dm.TaPover.FieldByName('Фото'));
end;
procedure TForm1.sbQueryClick(Sender: TObject);
begin
Form2.Show;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls;
type
TForm2 = class(TForm)
Label1: TLabel;
MeSQL: TMemo;
DBGrid1: TDBGrid;
Label2: TLabel;
bQuery: TButton;
procedure bQueryClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses DatMod;
{$R *.dfm}
procedure TForm2.bQueryClick(Sender: TObject);
begin
With dm.ADOQuery1 do
try
Active:= false;
SQL.Assign(MeSQL.Lines);
Active:= true;
except
on e:Exception do
ShowMessage('Ошибкавыполнениязапроса.');
end;
end;
end.
unit DatMod;
interface
uses
SysUtils, Classes, DB, ADODB;
type
Tdm = class(TDataModule)
ADOConnection1: TADOConnection;
TaList: TADOTable;
ADOQuery1: TADOQuery;
dsList: TDataSource;
TaInst: TADOTable;
dsInst: TDataSource;
TaListId: TAutoIncField;
TaListDSDesigner: TWideStringField;
TaListDSDesigner2: TMemoField;
TaInstId: TAutoIncField;
TaInstListId: TIntegerField;
TaInstDSDesigner: TWideStringField;
TaInstDSDesigner2: TWideStringField;
TaInstDSDesigner3: TWideStringField;
TaInstDSDesigner4: TBlobField;
TaInstDSDesigner7: TBCDField;
TaChar: TADOTable;
dsChar: TDataSource;
TaCharId: TAutoIncField;
TaCharInstId: TIntegerField;
TaCharDSDesigner: TWideStringField;
TaCharDSDesigner2: TFloatField;
TaCharDSDesigner3: TWideStringField;
TaPover: TADOTable;
dsPover: TDataSource;
TaPoverId: TAutoIncField;
TaPoverInstId: TIntegerField;
TaPoverDSDesigner: TWideStringField;
TaPoverDSDesigner2: TDateTimeField;
TaPoverDSDesigner3: TBlobField;
TaPoverDSDesigner4: TWideStringField;
dsQuery: TDataSource;
TaInstDSDesigner5: TDateTimeField;
procedure TaInstBeforePost(DataSet: TDataSet);
procedure TaCharBeforePost(DataSet: TDataSet);
procedure TaPoverBeforePost(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
dm: Tdm;
implementation
{$R *.dfm}
procedure Tdm.TaInstBeforePost(DataSet: TDataSet);
begin
TaInstListId.Value:= TaListId.Value;
end;
procedure Tdm.TaCharBeforePost(DataSet: TDataSet);
begin
TaCharInstId.Value:= TaInstId.Value;
end;
procedure Tdm.TaPoverBeforePost(DataSet: TDataSet);
begin
TaPoverInstId.Value:= TaInstId.Value;
end;
end.
| |
Проект Delphi World © Выпуск 2002 - 2004 Автор проекта: ___Nikolay |
|
|
|
Дата добавления: 2015-05-09; Просмотров: 973; Нарушение авторских прав?; Мы поможем в написании вашей работы!
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет