Sql Lite verilerini listviewe aktarıyorum fakat listviewden seçili olan kaydı
veritabanından nasıl silip Update edebilirim. bu şekilde sadece listviewin en alt satırdakini siliyor
procedure TForm1.Button1Click(Sender: TObject);
var
slDBpath: string;
sldb: TSQLiteDatabase;
sltb: TSQLIteTable;
sSQL,Path,Orjkonum: String;
begin
if FileExists(DosyaKonumu +'veriler.db') then
begin
slDBPath := DosyaKonumu +'veriler.db';
sldb := TSQLiteDatabase.Create(slDBPath);
sltb := slDb.GetTable('SELECT * FROM modeller');
Path := sltb.FieldByName['ID'];
Orjkonum := sltb.FieldByName['Plaka'];
begin
sSQL:='DELETE FROM modeller WHERE ID ='+inttostr(ListView1.Selected.Index)+';';
sldb.execsql(sSQL);
sltb.Free;
end;
end;
end;
procedure TSplitViewForm.BtnPrgSilClick(Sender: TObject);
begin
With QPGList, PGList do
begin
if SelCount > 0 then
begin
Cevap := Application.MessageBox('Silmek istediğinizden emin misiniz? ',
'Onay!', MB_YesNo or MB_ICONWARNING);
begin
if Cevap = MrYes then
begin
for Sil := Items.Count - 1 downto 0 do
begin
if Items[Sil].Selected then
begin
Connection := PGConnection;
Close;
SQL.Clear;
SQL.Add('Delete From PROGRAM Where PGID=:ID');
ParamByName('ID').Value := Items[Sil].SubItems[12];
ExecSQL;
Items.Delete(Sil);
AlertMesaj('Silme işlemi tamamlandı... ', 2);
end;
end;
end;
end;
end;
end;
QPGList.Close;
end;
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
sSQL:='DELETE FROM modeller WHERE ID ='+inttostr(ListView1.ItemIndex)+';';
Bununla birlikte, kullanıcının hiç birşey seçmemiş olma ihtimalini de düşünerek Buton tıklamasında aşağıdaki gibi bir kontrol yapmanızda fayda olduğunu düşünüyorum.
procedure TForm1.Button1Click(Sender: TObject);
var
slDBpath: string;
sldb: TSQLiteDatabase;
sltb: TSQLIteTable;
sSQL,Path,Orjkonum: String;
begin
if ListView1.ItemIndex < 0 then
begin
ShowMessage('Önce listeden seçim yapılmalıdır.');
Exit();
end;
// bu noktadan sonra sizin kendi kodunuz gelecektir.
procedure TForm1.Button1Click(Sender: TObject);
var
slDBpath: string;
sldb: TSQLiteDatabase;
sltb: TSQLIteTable;
sSQL,Path,Orjkonum: String;
i: integer;
begin
if FileExists(DosyaKonumu +'veriler.db') then
begin
slDBPath := DosyaKonumu +'veriler.db';
sldb := TSQLiteDatabase.Create(slDBPath);
sltb := slDb.GetTable('SELECT * FROM modeller');
Path := sltb.FieldByName['ID'];
Orjkonum := sltb.FieldByName['Plaka'];
for i := 0 to sltb.Count - 1 do
begin
sSQL:='DELETE FROM modeller WHERE ID ='+inttostr(ListView1.ItemIndex)+';'; // hep 0 dönüyor
sldb.execsql(sSQL);
sltb.Free;
end;
end;
end;
Kodunuzda "TListView1.ItemIndex" şeklinde aradığınız zaman değer değişikliğine sebep olabilecek yerleri incelemenizi önerebilirim. İhtimal, TListView olaylarından bir tanesi içinde Indeks değeri değiştiriliyor olabilir. Ya da yine TListView olaylarından bir tanesi başka bir olay zinciri çalıştırıp TListView.ItemIndex değerini değiştiriyor olabilir.