Есть дополнительная форма для программы, в которой пытаюсь реализовать поиск программ по файлам и папкам по названию из SQLite, если результат истина, тогда отображаю сведения о программе из SQLite базы. Но это если коротко)))
Проблемы встретил две! Не могу разобраться с поиском, а также с использованием в данном случае компонента TSelectDirectoryDialog.
Лучше будет, если я приведу код всей формы, там кроме этого, ничего другого нет.
- Код: Выделить всё
unit RuchPoisk;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, sqlite3conn, sqldb, db, FileUtil, Forms, Controls,
Graphics, Dialogs, StdCtrls, DBGrids, StrUtils;
type
{ TfRuchPoisk }
TfRuchPoisk = class(TForm)
bRuchPoisk: TButton;
bUkazKatalog: TButton;
DataSource3: TDataSource;
DBGrid1: TDBGrid;
SelectDirectoryDialog1: TSelectDirectoryDialog;
SQLite3Connection1: TSQLite3Connection;
SQLQuery3: TSQLQuery;
SQLTransaction3: TSQLTransaction;
procedure bRuchPoiskClick(Sender: TObject);
procedure bUkazKatalogClick(Sender: TObject);
private
{ private declarations }
public
path : TSelectDirectoryDialog; // ввёл для извлечения пути, который будет выбран в TSelectDirectoryDialog
{ public declarations }
end;
var
fRuchPoisk: TfRuchPoisk;
implementation
{$R *.lfm}
{ TfRuchPoisk }
procedure TfRuchPoisk.bRuchPoiskClick(Sender: TObject); //кнопка поиска
Var
Info : TSearchRec; // используется для поиска
nameProg : String; // в данный момент не используется
put:string; // в неё хотел засунуть значение из path : TSelectDirectoryDialog
s : String; // используется для построения запроса SQL
i : integer; // используется как счетчик
MyListRuch: TStringList; // нужно для получения значений из SQLite
Begin
MyListRuch:=TStringList.Create;
SQLQuery3.SQL.Clear;
SQLQuery3.SQL.Text:='select name from program';
SQLQuery3.Open;
SQLQuery3.First;
MyListRuch.clear; // пытался из базы получать список прог
while not SQLQuery3.Eof do
begin
MyListRuch.Add(SQLQuery3.FieldByName('name').AsString);
SQLQuery3.Next;
end;
SQLQuery3.Close;
with MyListRuch.Create do
try
MyListRuch.StrictDelimiter := true;
s := '';
put := path.FileName;
showmessage(put);
for i := 0 to MyListRuch.Count - 1 do if Trim(MyListRuch.Strings[i]) <> '' then
s := MyListRuch.Strings[i];
// showmessage(nameProg);
If FindFirst(UTF8ToSys(put + s), faAnyFile or faDirectory, Info)= 0 then
begin
//showmessage('Работает поиск');
s := s + Format('%s(name LIKE "%s")', [IfThen(i = 0, '', ' OR '), MyListRuch.Strings[i]]);
s := 'SELECT * FROM program WHERE ' + s + ' ORDER BY id';
// showmessage(s);
end;
FindClose(Info);
finally
Free;
end;
SQLQuery3.Close;
SQLQuery3.Active:=false;
SQLQuery3.SQL.Clear;
SQLQuery3.SQL.Add(s);
SQLQuery3.Active:=true;
SQLQuery3.Open;
end;
procedure TfRuchPoisk.bUkazKatalogClick(Sender: TObject);
begin
// пытаюсь получить каталог
path := TSelectDirectoryDialog.Create(Application);
if path.Execute then fRuchPoisk.Caption:= path.FileName;
FreeAndNil(path);
// конец получения каталога
//showmessage(path.FileName);
end;
end.
А вот данные по компонентам на форме, точнее их настройкам!
- Код: Выделить всё
object fRuchPoisk: TfRuchPoisk
Left = 251
Height = 255
Top = 212
Width = 764
ClientHeight = 255
ClientWidth = 764
LCLVersion = '1.6.0.4'
object bRuchPoisk: TButton
Left = 240
Height = 25
Top = 8
Width = 75
Caption = 'Поиск'
OnClick = bRuchPoiskClick
TabOrder = 0
end
object DBGrid1: TDBGrid
Left = 0
Height = 219
Top = 40
Width = 764
Color = clWindow
Columns = <>
DataSource = DataSource3
TabOrder = 1
end
object bUkazKatalog: TButton
Left = 336
Height = 25
Top = 8
Width = 104
Caption = 'Указать каталог'
OnClick = bUkazKatalogClick
TabOrder = 2
end
object SQLite3Connection1: TSQLite3Connection
Connected = False
LoginPrompt = False
DatabaseName = 'Lpro.db'
KeepConnection = False
CharSet = 'UTF8'
Options = []
left = 520
top = 104
end
object SQLTransaction3: TSQLTransaction
Active = False
Database = fMian.SQLite3Connection1
Options = []
left = 624
top = 104
end
object DataSource3: TDataSource
DataSet = SQLQuery3
left = 520
top = 176
end
object SQLQuery3: TSQLQuery
FieldDefs = <>
Database = fMian.SQLite3Connection1
Transaction = fMian.SQLTransaction1
Options = []
Params = <>
left = 624
top = 184
end
object SelectDirectoryDialog1: TSelectDirectoryDialog
left = 664
end
end
Заранее благодарен за любую помощь!