unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
StdCtrls, Grids, ComCtrls, sqldb, pqconnection,
LCLType{for key code};
type
{ TForm1 }
TForm1 = class(TForm)
ListBox1: TListBox;
ListView1: TListView;
Memo1: TMemo;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure Memo1KeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
procedure show_data_in_list_string_grid(rs: TSQLQuery; StringGrid1: TStringGrid);
procedure show_data_in_list_view(rs: TSQLQuery; lv: TListView);
procedure run_sql(sql: string);
private
conn: TSQLConnection;
transaction: TSQLTransaction;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
self.conn := TPQConnection.Create(self);
self.conn.DatabaseName := 'dbname';
self.conn.HostName := '127.0.0.1';
self.conn.UserName := 'user';
self.conn.Password := 'password';
self.conn.Connected := True;
self.transaction := TSQLTransaction.Create(self.conn);
self.conn.Transaction := self.transaction;
self.Memo1.Clear;
end;
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
begin
if (ssCtrl in shift) and (key = VK_E) then
begin
if (self.Memo1.Lines.Text.Length = 0) then
begin
ShowMessage('No SQL provided');
Exit;
end;
self.run_sql(self.Memo1.Lines.Text);
end;
end;
procedure Tform1.run_sql(sql: string);
var
rs: TSQLQuery;
error: string;
is_ok: boolean;
begin
rs := TSQLQuery.Create(nil);
rs.DataBase := self.conn;
rs.SQL.Text := sql;
is_ok := True;
try
self.transaction.Active := True;
rs.Open;
rs.Last;
except
on A: EPQDatabaseError do
begin
error := A.Message;
is_ok := False;
self.transaction.Active := False;
end;
end;
if is_ok = False then
begin
ShowMessage('Error :' + error);
exit;
end;
self.show_data_in_list_view(rs, self.ListView1);
FreeAndNil(rs);
end;
procedure Tform1.show_data_in_list_view(rs: TSQLQuery; lv: TListView);
var
i, j: integer;
vNewItem: TListItem;
fc: integer;
begin
lv.BeginUpdate;
lv.Items.Clear;
lv.Clear;
lv.Columns.Clear;
lv.ViewStyle := TViewStyle.vsReport;
lv.ShowColumnHeaders := True;
fc := rs.FieldCount;
for i := 0 to fc - 1 do
begin
lv.Columns.Add;
lv.Columns[Lv.ColumnCount - 1].Caption := rs.Fields[i].FieldName;
lv.Columns[lv.ColumnCount - 1].AutoSize := True;
end;
rs.First;
while rs.EOF = False do
begin
vNewItem := lv.Items.Add;
vNewItem.Caption := rs.Fields[0].AsString;
for j := 1 to fc - 1 do
begin
vNewItem.SubItems.Add(rs.Fields[j].AsString);
end;
rs.Next;
end;
lv.EndUpdate;
self.ListBox1.Items.Add('Record Found : ' + IntToStr(lv.Items.Count));
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
conn.Close();
end;
end.