вы бы привели весь код... а то, допустим, мне ничего не говорит то, что они глобальны. Мы тут даже не знаем как определен объект
Полные версии
umain.pasКод: Выделить всё
unit uMain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
ComCtrls, StdCtrls, Buttons, ActnList, uClasses;
type
{ TForm1 }
TForm1 = class(TForm)
ClearIdeaDetaisFieldsA: TAction;
ActionList1: TActionList;
OKBB: TBitBtn;
BitBtn2: TBitBtn;
CreateBB: TBitBtn;
Label1: TLabel;
TitleLE: TLabeledEdit;
ListView1: TListView;
DescriptionM: TMemo;
Panel1: TPanel;
Panel2: TPanel;
procedure OKBBClick(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure ClearIdeaDetaisFieldsAExecute(Sender: TObject);
procedure CreateBBClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ListView1Click(Sender: TObject);
procedure ListView1Deletion(Sender: TObject; Item: TListItem);
private
{ private declarations }
public
{ public declarations }
end;
const
ModeEdit = false;
ModeCreate = true;
var
Form1: TForm1;
IdeasList : TIdeasList;
Mode : Boolean;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormShow(Sender: TObject);
begin
IdeasList := TIdeasList.Create(@ListView1);
IdeasList.LoadIdeasList();
ClearIdeaDetaisFieldsA.Execute;
end;
procedure TForm1.CreateBBClick(Sender: TObject);
begin
ClearIdeaDetaisFieldsA.Execute;
end;
procedure TForm1.OKBBClick(Sender: TObject);
var
Idea : ^TIdea;
begin
if Mode = ModeCreate then begin
// New(Idea);
Idea^ := TIdea.Create;
Idea^.Title:= TitleLE.Text;
Idea^.Description:= DescriptionM.Text;
IdeasList.AddNewIdea(Idea);
Idea^.Save;
end
else
if ListView1.SelCount = 1 then begin
Idea := ListView1.Selected.Data;
Idea^.Title:= TitleLE.Text;
Idea^.Description:= DescriptionM.Text;
Idea^.Save;
end;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if ListView1.SelCount = 1 then begin
//событие по клику мыши на элементе списка
end
else begin
//очистка формы
end;
end;
procedure TForm1.ClearIdeaDetaisFieldsAExecute(Sender: TObject);
begin
if ListView1.SelCount > 0 then ListView1.Selected.Selected:=false;
TitleLE.Text:='';
DescriptionM.Text:='';
Mode:= ModeCreate;
end;
procedure TForm1.ListView1Click(Sender: TObject);
var
Idea : ^TIdea;
begin
if (ListView1.SelCount = 1) then begin
Idea := ListView1.Selected.Data;
Idea^.LoadIdeaDetails;
TitleLE.Text:= Idea^.Title;
DescriptionM.Text:= Idea^.Description;
Mode:=ModeEdit;
end;
end;
procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
var
Idea : ^TIdea;
begin
try
Idea := Item.Data;
Idea^.Free;
except
MessageDlg('asdfasdf', mtConfirmation,[mbOK],-1);
end;
end;
end.
uClasses.pasКод: Выделить всё
unit uClasses;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, uDBComponents, ComCtrls;
type
PTListView = ^TListView;
PTIdea = ^TIdea;
{ TIdeasList }
TIdeasList = class
public
IdeasListViewer : PTListView;
constructor Create(IListViewer : PTListView);
function LoadIdeasList : Boolean;
procedure AddNewIdea( Idea : PTIdea );
end;
TIdea = class
private
ID : Cardinal;
public
Title : String;
Description : String;
constructor Create;
function GetID : Cardinal;
procedure LoadIdeaDetails;
procedure Save;
end;
implementation
{ TIdea }
constructor TIdea.Create;
begin
inherited Create;
ID := 0;
end;
function TIdea.GetID: Cardinal;
begin
Result := ID;
end;
procedure TIdea.LoadIdeaDetails;
begin
with DB_DataModule do begin
if not MySQL56Connection1.Connected then MySQL56Connection1.Open;
if MySQL56Connection1.Connected then begin
SQLQuery1.Close;
SQLQuery1.SQL.Text := 'SELECT `description` FROM `ideas` WHERE `id` = ' + IntToStr(ID)+';';
SQLQuery1.Open;
Description:=SQLQuery1.FieldByName('description').AsString;
SQLQuery1.Close;
end;
end;
end;
procedure TIdea.Save;
var
Query : string;
begin
with DB_DataModule do begin
if not MySQL56Connection1.Connected then MySQL56Connection1.Open;
if MySQL56Connection1.Connected then begin
//формируем запрос
if ID <> 0
then Query := 'UPDATE `ideas` SET `title` = '
+ #39 + Title + #39 +
', `description` = '
+ #39 + Description + #39 +
' where id = ' + IntToStr(ID) +';'
else Query := 'INSERT INTO `ideas` (`title`, `description`) VALUES ('
+ #39 + Title + #39 + ', '
+ #39 + Description + #39 + ');';
//выполняем запрос
SQLQuery1.Close;
SQLQuery1.SQL.Text:= Query;
SQLQuery1.ExecSQL;
SQLTransaction1.Commit;
//SQLQuery1.RowsAffected;
SQLQuery1.Close;
end;
end;
end;
{ TIdeasList }
constructor TIdeasList.Create(IListViewer: PTListView);
begin
IdeasListViewer:= iListViewer;
end;
function TIdeasList.LoadIdeasList: Boolean;
var
tmpIdea : ^TIdea;
begin
with DB_DataModule do begin
if not MySQL56Connection1.Connected then MySQL56Connection1.Open;
if MySQL56Connection1.Connected then begin
SQLQuery1.Close;
SQLQuery1.SQL.Text:= 'SELECT `id`, `title` FROM `ideas`;';
SQLQuery1.Open;
IdeasListViewer^.BeginUpdate;
IdeasListViewer^.Clear;
while not SQLQuery1.EOF do begin
tmpIdea^ := TIdea.Create;
tmpIdea^.ID:= SQLQuery1.FieldByName('ID').AsLongint;
tmpIdea^.Title:= SQLQuery1.FieldByName('title').AsString;
IdeasListViewer^.AddItem(tmpIdea^.Title, nil);
IdeasListViewer^.Items.Item[IdeasListViewer^.Items.Count-1].Data := tmpIdea;
SQLQuery1.Next;
end;
SQLQuery1.Close;
IdeasListViewer^.EndUpdate;
end;
end;
Result := true;
end;
procedure TIdeasList.AddNewIdea(Idea: PTIdea);
begin
IdeasListViewer^.AddItem(Idea^.Title, nil);
IdeasListViewer^.Items[IdeasListViewer^.Items.Count-1].Data:= Idea;
end;
end.