|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как передавать данные из listbox
Здравствуйте! вот таким образом заполняется listbox
Код:
procedure TForm1.AddToMemoCb(AFileName,Atrib:String; ASize,Aid,Arews:Integer); begin listbox1.Items.Add(Format('id: %d; File: %s; Size: %d; Reviews: %d; Attribute: %s',[Aid,AFileName,ASize,Arews,Atrib])); end; Код:
procedure TForm1.Button2Click(Sender: TObject); begin FileImg('G:\leon\delphis\delphi64\sql2\05\Win32\Debug\db\',AddToMemoCb); end; Код:
procedure TForm1.AddToDbCb(AFileName,Atrib:String; ASize,Aid,Arews: Integer); begin SqlConnection1.Open; try SqlQuery1.SQL.Text := 'INSERT INTO test1 (id, name, reviews, size, attribute) VALUES (:id, :name, :reviews, :size, :attribute)'; {INSERT INTO Info (id,Cost,city) VALUES (1,200, 'Pune'), (2, 150,'USA'), (3,345, 'France'); } SqlQuery1.ParamByName('id').AsInteger := Aid; SqlQuery1.ParamByName('name').AsString := AFileName; SqlQuery1.ParamByName('reviews').AsInteger := random(5);// Arews; SqlQuery1.ParamByName('size').AsInteger := ASize; //inttostr(imgsize); SqlQuery1.ParamByName('attribute').AsString := 'fff'; SQLQuery1.ExecSQL; Memo1.Lines.Add('Запись_добавлена='+inttostr(Aid)+Afilename+inttostr(ASize)); finally //PachImage; //добавка в listbox5 SqlConnection1.Close; end; //Application.ProcessMessages; end; |
#2
|
|||
|
|||
screen
listbox1a.jpg
на скрине видно что строка разделена точкой с запятой. можно ли передавать их? пр: label1:=id; label2:=file; label3:=size; тогда станет понятней (мне). вообще такое возможно? через листбокс |
#3
|
|||
|
|||
Ну можено парсить обратно. Но я бы просто создал бы объектики и привязал их к итемам листбокса (через AddObject).
Код:
type TFileItemData = class FileName : String; Atrib : String; Size : Integer; id : Integer; rews:Integer; function toString : String; end; function TFileItemData.toString : String begin Format('id: %d; File: %s; Size: %d; Reviews: %d; Attribute: %s',[id,FileName,Size,rews,Atrib]); end; Код:
procedure TForm1.AddToMemoCb(AFileName,Atrib:String; ASize,Aid,Arews:Integer); var obj : TFileItemData; begin obj := TFileItemData.Create; obj.id = aid; obj.FileName := AFileName; obj.Size := ASize; obj.rews := Arews; obj.Atrib := Atrib; listbox1.Items.AddObject(obj.toString,obj); end; Код:
obj := ListBox1.Items.Objects[0]; // Здесь индекс элемента AddToDbCb(obj.FileName,obj.Atrib, obj.Size, obj.id, obj.rews); |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
leon2009 (13.10.2023)
|
#4
|
|||
|
|||
застрял
ругается
Код:
procedure TForm1.Button3Click(Sender: TObject); var i,j,k:integer; obj : TFileItemData; begin obj.id:=1111; obj.FileName := '222222'; obj.Size := 333333; obj:=listbox1.Items.Objects[1]; AddToMemoCb2(obj.FileName,obj.Size,obj.id); end; Код:
obj:=listbox1.Items.Objects[1]; |
#5
|
|||
|
|||
картинка
error1a.jpg
скрин на всякий |
#6
|
|||
|
|||
я про
я про в общем:
Код:
obj:=ListBox1.Items.Objects[ListBox1.ItemIndex] as TFileItemData; Код:
obj:=ListBox1.Items.Objects[1] as TFileItemData; Последний раз редактировалось leon2009, 14.10.2023 в 20:58. |
#7
|
|||
|
|||
Да, забыл, приведение типов надо (as TFileItemData).
А вообще-то все работает. Т.е. ты в своем коде что-то делаешь не так: Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; Button1: TButton; procedure Button1Click(Sender: TObject); procedure ListBox1DblClick(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} type TFileItemData = class FileName : String; Atrib : String; Size : Integer; id : Integer; rews:Integer; function toString : String; end; function TFileItemData.toString : String; begin Result := Format('id: %d; File: %s; Size: %d; Reviews: %d; Attribute: %s',[id,FileName,Size,rews,Atrib]); end; procedure TForm1.Button1Click(Sender: TObject); var I : Integer; obj : TFileItemData; begin for I := 1 to 5 do begin obj := TFileItemData.Create; obj.FileName := Format('filename-%d',[i]); obj.Atrib := 'R'; obj.Size := Random(1000000); obj.id := i; obj.rews := i; ListBox1.Items.AddObject(obj.toString,obj) end; end; procedure TForm1.FormDestroy(Sender: TObject); var I : Integer; obj : TFileItemData; begin for I := 0 to ListBox1.Items.Count-1 do begin obj := ListBox1.Items.Objects[i] As TFileItemData; obj.Free; end; end; procedure TForm1.ListBox1DblClick(Sender: TObject); var obj : TFileItemData; begin if ListBox1.ItemIndex > -1 then begin obj := ListBox1.Items.Objects[ListBox1.ItemIndex] As TFileItemData; ShowMessage(obj.toString); end; end; end. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
leon2009 (16.10.2023)
|
#8
|
|||
|
|||
понял как объяснить
когда все значение заполнены , то все хорошо!
но когда значение вытаскиваются = здесь ругается т.е. ругается: Код:
procedure TForm1.Button2Click(Sender: TObject); var obj : TFileItemData; begin obj := ListBox1.Items.Objects[2] As TFileItemData; supertest(obj.Value1,obj.Value2, obj.Value3, obj.Value4, obj.Value5); end; Код:
procedure TForm1.Button2Click(Sender: TObject); begin supertest('1111','2222',333,444,555); end; и весь код: Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; ListBox2: TListBox; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); type TInsertImageToDbCallBack = procedure(AFileName,Atrib: String; ASize1, Aid, Arews: Integer) of object; private { Private declarations } public procedure FileImg(const dirName:string; ACallBack : TInsertImageToDbCallBack); procedure AddToMemoCb(AFileName,Atrib: String; ASize,Aid,Arews: Integer); procedure supertest(FileName2,trib2: String; id2,Size2,rews2: Integer); { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} type TFileItemData = class Value1 : String; Value2 : String; Value3 : Integer; Value4 : Integer; Value5 : Integer; function toString : String; end; function TFileItemData.toString : String; begin Result := Format('Value1: %s; Value2: %s; Value3: %d; Value4: %d; Value5: %d',[Value1,Value2,Value3,Value4,Value5]); end; procedure TForm1.Button1Click(Sender: TObject); begin FileImg('G:\leon\delphis\delphi64\sql2\06\Win32\Debug\db\',AddToMemoCb); end; procedure TForm1.supertest(FileName2,trib2:String; id2,Size2,rews2:Integer); var obj : TFileItemData; begin obj := TFileItemData.Create; obj.Value1 := FileName2; obj.Value2 := trib2; obj.Value3 := id2; obj.Value4 := Size2; obj.Value5 := rews2; ListBox2.Items.AddObject(obj.toString,obj); // listbox2.Items.Add(Format('id: %d; File: %s; Size: %d',[id2,FileName2,Size2,rews2,trib2])); end; procedure TForm1.Button2Click(Sender: TObject); var obj : TFileItemData; begin //obj := ListBox1.Items.Objects[ListBox1.ItemIndex] As TFileItemData; obj := ListBox1.Items.Objects[2] As TFileItemData; supertest(obj.Value1,obj.Value2, obj.Value3, obj.Value4, obj.Value5); //supertest('1111','2222',333,444,555); end; procedure TForm1.FileImg(const dirName:string; ACallBack : TInsertImageToDbCallBack); var searchResult: TSearchRec; x,x1:integer; st:string; begin x:=0; x1:=1; st:='111'; if FindFirst(dirName+'\*', faAnyFile, searchResult)=0 then begin try repeat if (searchResult.Attr and faDirectory)=0 then begin if SameText(ExtractFileExt(searchResult.Name), '.jpg') then begin inc(x,1); ACallBack(IncludeTrailingBackSlash(dirName)+searchResult.Name,st,searchResult.Size,x,x1); end; end else if (searchResult.Name<>'.') and (searchResult.Name<>'..') then begin FileImg(IncludeTrailingBackSlash(dirName)+searchResult.Name,AddToMemoCb); end; until FindNext(searchResult)<>0 finally FindClose(searchResult); end; end; end; procedure TForm1.AddToMemoCb(AFileName,Atrib:String; ASize,Aid,Arews:Integer); begin listbox1.Items.Add(Format('id: %d; File: %s; Size: %d; Reviews: %d; Attribute: %s',[Aid,AFileName,ASize,Arews,Atrib])); end; end. |
#9
|
|||
|
|||
сократил код
Код:
type TFileItemData = class AFileName : String; ASize : String; function toString : String; end; function TFileItemData.toString : String; begin Result := Format('Value1: %s; Value2: %d',[AFileName,ASize]); end; procedure TForm1.AddToMemoCb(AFileName:String;ASize:integer); begin listbox1.Items.Add(Format('Filename: %s; Size: %d',[AFileName,ASize])); end; procedure TForm1.Button1Click(Sender: TObject); begin FileImg('G:\leon\delphis\delphi64\sql2\06\Win32\Debug\db\',AddToMemoCb); end; procedure TForm1.FileImg(const dirName:string; ACallBack : TInsertImageToDbCallBack); var searchResult: TSearchRec; begin if FindFirst(dirName+'\*', faAnyFile, searchResult)=0 then begin try repeat if (searchResult.Attr and faDirectory)=0 then begin if SameText(ExtractFileExt(searchResult.Name), '.jpg') then ACallBack(IncludeTrailingBackSlash(dirName)+searchResult.Name,searchResult.Size); end else if (searchResult.Name<>'.') and (searchResult.Name<>'..') then begin FileImg(IncludeTrailingBackSlash(dirName)+searchResult.Name,AddToMemoCb); end; until FindNext(searchResult)<>0 finally FindClose(searchResult); end; end; end; procedure TForm1.FormDestroy(Sender: TObject); var I : Integer; obj : TFileItemData; begin for I := 0 to ListBox1.Items.Count-1 do begin obj := ListBox1.Items.Objects[i] As TFileItemData; obj.Free; end; end; procedure TForm1.ListBox1Click(Sender: TObject); var obj : TFileItemData; begin if ListBox1.ItemIndex > -1 then begin obj := ListBox1.Items.Objects[ListBox1.ItemIndex] As TFileItemData; ShowMessage(obj.toString); end; end; когда делаешь с LISTBOX2 (уже заполненным ) = проблем нет. НО в listbox1 значение берутся с поиска, и здесь глюк |
#10
|
|||
|
|||
эксперементы
Код:
procedure TForm1.AddToMemoCb(AFileName:String; ASize:Integer); var obj : TFileItemData; begin listbox1.Items.Add(Format('File: %s; Size: %d',[AFileName,ASize])); obj := TFileItemData.Create; obj.AFileName := AFileName; obj.ASize := ASize; ListBox2.Items.AddObject(obj.toString,obj); end; Код:
obj := ListBox1.Items.Objects[ListBox1.ItemIndex] As TFileItemData; ShowMessage(obj.toString); а в listbox2 = все хорошо! Код:
obj := ListBox2.Items.Objects[ListBox2.ItemIndex] As TFileItemData; ShowMessage(obj.toString); понял: а) listbox1.Items.Add(Format = это listbox. b) ListBox2.Items.AddObject( = это obj верно?! Последний раз редактировалось leon2009, 16.10.2023 в 21:54. |
#11
|
|||
|
|||
остатки
осталось как по этап но в базу передать?
т.е. сначала одну строку отправил за ней следующию :? если просто через FOR то будет просто тормозить все |
#12
|
|||
|
|||
что на уме
Код:
procedure TForm1.AddToDbCb(AFileName:String; ASize: Integer); begin SqlConnection1.Open; try SqlQuery1.SQL.Text := 'INSERT INTO test1 (id, name, reviews, size, attribute) VALUES (:id, :name, :reviews, :size, :attribute)'; SqlQuery1.ParamByName('id').AsInteger := 1; SqlQuery1.ParamByName('name').AsString := AFileName; SqlQuery1.ParamByName('reviews').AsInteger := random(5);// Arews; SqlQuery1.ParamByName('size').AsInteger := ASize; //inttostr(imgsize); SqlQuery1.ParamByName('attribute').AsString := 'gggggg'; SQLQuery1.ExecSQL; Memo1.Lines.Add('Запись_добавлена='+Afilename+inttostr(ASize)); finally SqlConnection1.Close; end; //Application.ProcessMessages; end; procedure TForm1.Button3Click(Sender: TObject); var obj : TFileItemData; i:integer; begin if ListBox2.Count =14 then begin for i := 0 to ListBox2.Count-1 do begin obj := ListBox2.Items.Objects[i] As TFileItemData; AddToDbCb(obj.AFileName,obj.ASize); progressbar1.Position:=i; end; end; end; Последний раз редактировалось leon2009, 17.10.2023 в 18:31. |
#13
|
|||
|
|||
Тут надо понимать общую архитектуру приложения.
Например, можно список картинок засовывать в очередь, а отдельный поток будет из очереди их брать и загружать в БД. А юзер тем временем может дальше работать. |
#14
|
|||
|
|||
чажко
я не могу это понять
вернее сначала отправляю пр: первую строку -> когда она отправилась отправляем вторую строку и.т.д. (эт понятно), но что MySql не скажет что принял и записал картинку, что бы начать отправлять вторую картинку |
#15
|
|||
|
|||
пример
Код:
TMyThread = class(TThread) SQLConnection1: TSQLConnection; SQLTable1: TSQLTable; DataSetProvider1: TDataSetProvider; ClientDataSet1: TClientDataSet; DataSource1: TDataSource; SQLQuery1: TSQLQuery; Memo1: TMemo; private { Private declarations } protected procedure Execute; override; procedure AddToDbCb(AFileName: String; ASize: Integer); end; Код:
procedure TMyThread.AddToDbCb(AFileName:String; ASize: Integer); begin SqlConnection1.Open; try SqlQuery1.SQL.Text := 'INSERT INTO test1 (id, name, reviews, size, attribute) VALUES (:id, :name, :reviews, :size, :attribute)'; SqlQuery1.ParamByName('id').AsInteger := 1; SqlQuery1.ParamByName('name').AsString := AFileName; SqlQuery1.ParamByName('reviews').AsInteger := random(5);// Arews; SqlQuery1.ParamByName('size').AsInteger := ASize; //inttostr(imgsize); SqlQuery1.ParamByName('attribute').AsString := 'gggggg'; SQLQuery1.ExecSQL; Memo1.Lines.Add('Запись_добавлена='+Afilename+inttostr(ASize)); finally SqlConnection1.Close; end; end; Код:
procedure TForm1.Button3Click(Sender: TObject); var obj : TFileItemData; i:integer; begin if ListBox2.Count =14 then begin for i := 0 to ListBox2.Count-1 do begin obj := ListBox2.Items.Objects[i] As TFileItemData; TMyThread.AddToDbCb(obj.AFileName,obj.ASize); progressbar1.Position:=i; end; end; end; Код:
TMyThread.AddToDbCb(obj.AFileName,obj.ASize); |