Sql Lite seçili kaydı silmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Sql Lite seçili kaydı silmek

Mesaj gönderen carsoft »

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

Kod: Tümünü seç

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;
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Sql Lite seçili kaydı silmek

Mesaj gönderen brs »

var
sil: Integer;

Kod: Tümünü seç

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...
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Sql Lite seçili kaydı silmek

Mesaj gönderen ertank »

Merhaba,

TListView içindeki seçili kaydı TListView.ItemIndex değeri ile alabilirsiniz. Örnek kod içindeki şu satırı;

Kod: Tümünü seç

    sSQL:='DELETE FROM modeller WHERE ID ='+inttostr(ListView1.Selected.Index)+';';
aşağıdaki şekilde değiştirdiğiniz zaman sorununuzun çözülmesi gerekli

Kod: Tümünü seç

    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.

Kod: Tümünü seç

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. 
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Re: Sql Lite seçili kaydı silmek

Mesaj gönderen carsoft »

seçili onalı silmiyor TListView.ItemIndex değeri hep 0 dönüyor.

Kod: Tümünü seç

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;
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Sql Lite seçili kaydı silmek

Mesaj gönderen ertank »

Merhaba,

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.
Cevapla