veritabanında kayıt düzenleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

veritabanında kayıt düzenleme

Mesaj gönderen mazhargemci »

veritabanında kayıtlı bilgiler- dbgride geliyor. dbgridte seçili olan satırda 11tane hücre 11 tane edit nesnesine aktarılıyor bunda bir sıkıntı yok.
edit nesnelerinde gerekli düzenlemeler yapıldıktan sonra kayıt edildiği zaman nedense yeni bir kayıtmış gibi algılıyor ve veritabanına yenisi kayıt ediliyor.benim istediğim yeni kayıt etmesin seçili olan satır üzerinde düzenlemeler yapsın ?
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: veritabanında kayıt düzenleme

Mesaj gönderen bulutsuzluk_35 »

dbedit nesnelerini kullan datasourcelarını dbgrid ile aynı yap ekstra bir kod yazmana gerek yok.

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: veritabanında kayıt düzenleme

Mesaj gönderen mazhargemci »

sedit kullanıldı değişiklik yapmam zor
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: veritabanında kayıt düzenleme

Mesaj gönderen bulutsuzluk_35 »

aktarma kodunu kayıt etme kodunu at bir bakalım.

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: veritabanında kayıt düzenleme

Mesaj gönderen mazhargemci »

yaptığım çalışma burda
bi incelerseniz

http://s5.dosya.tc/server2/duqvdp/program.rar.html
Kullanıcı avatarı
bulutsuzluk_35
Üye
Mesajlar: 124
Kayıt: 06 Eki 2007 04:14
Konum: İzmir-Ankara-İstanbul-Antalya
İletişim:

Re: veritabanında kayıt düzenleme

Mesaj gönderen bulutsuzluk_35 »

kodunu inceledim neresinden başlasam bilemedim :)
ama kısaca şöyle sölim
1-o a_kayno alanını da gridte görünmez bir alana alacan
2-speedbutton7'de yaptığın atamayı kayno içinde yine görünmez bir edite atacan
3-insert yaptığın kodun başına if kayno in benimtablo then update else insert şekline dönüştürcen.
bu bilgi sana yeter mi bilemiyorum.umudunu kırmak istemem ama kafan fena halde karışmış arkadaşım.

Kod: Tümünü seç

try
  try
    inc(Bilgi);
  except
    sabir;
  end;
finally
  inc(Mutluluk);
end;
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: veritabanında kayıt düzenleme

Mesaj gönderen Lord_Ares »

Bence sorununuz veritabanını edit mod ayarına almamaktan kaynaklı. Eğer seçtiğini bir bilgide değişiklik yapıp kaydetmek istiyorsanız veritabanını edit moda almalısınız. Siz ekleme moduna yani append moda alıp kaydediyorsunuz sanırım. Uygulamanızı indirip incelemek istedim fakat uygulamanız virüs uyarısı verdi bu yüzden bakamadım.
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: veritabanında kayıt düzenleme

Mesaj gönderen mazhargemci »

bi yanlışınız var uygulamayı yükledikten sonra indirdim hiç bir sıkıntısı yok
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: veritabanında kayıt düzenleme

Mesaj gönderen mrmarman »

Merhaba.

- Peşin peşin söylüyorum, kodda hata var vs. kabul etmiyorum.
- Bende SEdit bileşeni olmadığı için deneme şansım yok, şöyle gözle temsili bakabiliyorum.
- Kodu inceleyip anlamaya çalış. Yeterince açıklama ekledim. Neyi neden nasıl yaklaşımda bulunulması gerektiğini detayıca yazdım.
- Mantık hatası olabilir, onları kendi kod süzgecinden geçirip düzeltirsin böylece daha derinleşebilir kodlara anlam kazandırmış olursun.

Şimdi olaya gelelim :

- SpeedButton7 senin Kaydı EDIT etmek butonu değil mi ? Bunun TAG değerini, bu butona tıklandığında temsili bir rakama dönüştür. Mesela 0 olan TAG değeri yerine A_KayNo değerini ver. Bu sana ileride bir kaydı edit etmek üzere gösterdiğini ifade edecek.

Kod: Tümünü seç

     SpeedButton7.Tag := DBGrid1.DataSource.DataSet.FieldByName('A_KayNo').AsInteger;
- Kayıt alanlarına gerekli değişikliği yaptıktan sonra KAYDET butonuna basıyorsun ya, işte orada bu TAG değerinin (0) olup olmadığını kontrol edeceksin. Eğer (0) SIFIR ise normal yeni kayıt ekleme işlemi yapacaksın. Yok bu değer (0'dan büyük ise) o zaman kullanıcı bir kaydı seçmiş olduğunu ve bu değerin bir Kayıt ID değeri olduğunu, EDIT veya Kayıt Güncelle o butona sen ne diyorsan basılmış demektir. INSERT INTO kullanmayı bırakıp UPDATE içeren ilgili kaydı düzeltecek SQL'i çalıştıracaksın. Bu da basit bir CASE veya IF bloğuna bakar.

Kod: Tümünü seç

procedure TForm1.SpeedButton5Click(Sender: TObject);
var
  Bilgi : tBelgeBilgi;
  strDataKlasor : String;
  iSonKayıt : Integer;
begin
  if ( Trim( sEdit1.Text ) = '' ) AND ( Trim( sEdit2.Text ) = '' ) AND ( Trim( sEdit3.Text ) = '' ) AND ( Trim( sEdit4.Text ) = '' ) AND ( Trim( sEdit5.Text ) = '' ) AND ( Trim( sEdit6.Text ) = '' ) AND ( Trim( sEdit7.Text ) = '' ) AND ( Trim( sEdit8.Text ) = '' ) AND ( Trim( sEdit9.Text ) = '' ) AND ( Trim( sEdit10.Text ) = '' ) AND ( Trim( sEdit11.Text ) = '' )then
  begin
    MessageDlg('Kayıt ekleme için bir bilgi girişi yapmanız girmelisiniz...', mtWarning, [mbOk], 0);
    EXIT;
  end;

  if ( NOT FileExists( label1.Caption) )
    then
      if ( MessageDlg( 'Belge seçmemişsiniz, devam edelim mi ?', mtConfirmation, [mbNo, mbYes], 0 )= mrNo )
        then Exit;

  if not fileexists (label1.Caption)
    then image1.Picture.Graphic := Nil;

  if SpeedButton7.Tag > 0 then //Bayrağımız Edit Mode olduğunu söylüyor.
    begin
      iSonKayıt := SpeedButton7.Tag; // Kayıt nomuzu depo ettik...
      // İşi biten SpeedButton7.Tag için bayrağımızı eski normal haline döndürüyoruz...
      SpeedButton7.Tag := 0;
      With TAdoQuery.Create(nil) do
      begin
        Connection := ADOConnection1;
        SQL.Clear;
        SQL.Add( 'UPDATE ArsivTablo SET' );
        SQL.Add( '   DosyaNo      = :DosyaNo');
        SQL.Add( ' , SicilNo      = :SicilNo');
        SQL.Add( ' , AdiSoyadi    = :AdiSoyadi');
        SQL.Add( ' , TcKimlik     = :TcKimlik');
        SQL.Add( ' , Telefon      = :Telefon');
        SQL.Add( ' , isyeriMevkii = :isyeriMevkii');
        SQL.Add( ' , isyeriNo     = :isyeriNo');
        SQL.Add( ' , Metrekaresi  = :Metrekaresi');
        SQL.Add( ' , KiraBedeli   = :KiraBedeli');
        SQL.Add( ' , BaslaTar     = :BaslaTar');
        SQL.Add( ' , BitisTar     = :BitisTar');
        SQL.Add('WHERE A_KayNo    = :A_KayNo');
        Parameters.ParamByName('DosyaNo').Value       := sEdit1.Text;
        Parameters.ParamByName('SicilNo').Value       := sEdit2.Text;
        Parameters.ParamByName('AdiSoyadi').Value     := sEdit3.Text;
        Parameters.ParamByName('TcKimlik').Value      := sEdit4.Text;
        Parameters.ParamByName('Telefon').Value       := sEdit5.Text;
        Parameters.ParamByName('isyeriMevkii').Value  := sEdit6.Text;
        Parameters.ParamByName('isyeriNo').Value      := sEdit7.Text;
        Parameters.ParamByName('Metrekaresi').Value   := sEdit8.Text;
        Parameters.ParamByName('KiraBedeli').Value    := sEdit9.Text;
        Parameters.ParamByName('BaslaTar').Value      := sEdit10.Text;
        Parameters.ParamByName('BitisTar').Value      := sEdit11.Text;

        Parameters.ParamByName('A_KayNo').Value       := iSonKayıt;
        ExecSQL;

        if FileExists( Label1.Caption ) then
        begin // Belge varsa kaydını yapıcaz....
          strDataKlasor := ExtractFilePath(Application.Exename) + 'DATA\';

          Bilgi :=  BelgeSakla(  iSonKayıt, label1.Caption, strDataKlasor );
          if Bilgi.boolIslemTamam then
          begin // belgeyi DATA klasörüne alma ve ismi değiştirme işlemi başarılı...
            SQL.Clear;
            SQL.Add( 'UPDATE ArsivTablo SET' );
            SQL.Add( 'A_BelgeAdi = :A_BelgeAdi, A_BelgeTip = :A_BelgeTip' );
            SQL.Add( 'WHERE A_KayNo = :A_KayNO ');
            Parameters.ParamByName('A_BelgeAdi').Value := Bilgi.strBelgeYeniAdi;
            Parameters.ParamByName('A_BelgeTip').Value := Bilgi.strBelgeTipi;
            Parameters.ParamByName('A_KayNo').Value    := iSonKayıt;
            ExecSQL;
          end;
        end; // if file exists
        Free;
      end; // With TAdoQuery.Create(nil)
    end // TAG > 0 ise yani Edit Mode ise...
  else
    begin //Bayrağımız Yeni Kayıt Ekleme Modu olduğunu söylüyor.
      // Önce belge kaydı oluşturuyoruz...
      With TAdoQuery.Create(nil) do
      begin
        Connection := ADOConnection1;
        SQL.Clear;
        SQL.Add( 'INSERT INTO ArsivTablo' );
        SQL.Add( '( DosyaNo, SicilNo, AdiSoyadi, TcKimlik, Telefon, isyeriMevkii, isyeriNo, Metrekaresi, KiraBedeli, BaslaTar, BitisTar, A_BelgeAdi, A_BelgeTip )' );
        SQL.Add(' VALUES ');
        SQL.Add( '( :DosyaNo, :SicilNo, :AdiSoyadi, :TcKimlik, :Telefon, :isyeriMevkii, :isyeriNo, :Metrekaresi, :KiraBedeli, :BaslaTar, :BitisTar, :A_BelgeAdi, :A_BelgeTip )' );
        Parameters.ParamByName('DosyaNo').Value    := sEdit1.Text;
        Parameters.ParamByName('SicilNo').Value := sEdit2.Text;
        Parameters.ParamByName('AdiSoyadi').Value    := sEdit3.Text;
        Parameters.ParamByName('TcKimlik').Value    := sEdit4.Text;
        Parameters.ParamByName('Telefon').Value    := sEdit5.Text;
        Parameters.ParamByName('isyeriMevkii').Value    := sEdit6.Text;
        Parameters.ParamByName('isyeriNo').Value    := sEdit7.Text;
        Parameters.ParamByName('Metrekaresi').Value    := sEdit8.Text;
        Parameters.ParamByName('KiraBedeli').Value    := sEdit9.Text;
        Parameters.ParamByName('BaslaTar').Value    := sEdit10.Text;
        Parameters.ParamByName('BitisTar').Value    := sEdit11.Text;
        Parameters.ParamByName('A_BelgeAdi').Value := Null;
        Parameters.ParamByName('A_BelgeTip').Value := Null;
        ExecSQL;

        // Şimdi bu kayıt için verilen otomatik numarayı alıcaz...
        SQL.Clear; // Ters sırada en üstteki ilk kayıt girilen son kayıttır.
        SQL.Add( 'SELECT TOP 1 A_KayNo FROM ArsivTablo ORDER BY A_KayNo DESC' );
        Active := True;
          iSonKayıt := FieldByName('A_KayNo').AsInteger;
        Active := False;

        if FileExists( Label1.Caption ) then
        begin // Belge varsa kaydını yapıcaz....
          strDataKlasor := ExtractFilePath(Application.Exename) + 'DATA\';

          Bilgi :=  BelgeSakla(  iSonKayıt, label1.Caption, strDataKlasor );
          if Bilgi.boolIslemTamam then
          begin // belgeyi DATA klasörüne alma ve ismi değiştirme işlemi başarılı...
            SQL.Clear;
            SQL.Add( 'UPDATE ArsivTablo SET' );
            SQL.Add( 'A_BelgeAdi = :A_BelgeAdi, A_BelgeTip = :A_BelgeTip' );
            SQL.Add( 'WHERE A_KayNo = :A_KayNO ');
            Parameters.ParamByName('A_BelgeAdi').Value := Bilgi.strBelgeYeniAdi;
            Parameters.ParamByName('A_BelgeTip').Value := Bilgi.strBelgeTipi;
            Parameters.ParamByName('A_KayNo').Value    := iSonKayıt;
            ExecSQL;
          end;
        end; // if file exists
        Free;
      end; // With TAdoQuery.Create(nil)
    end; // TAG 0 ise
  ADOQuery1.Active := False;
  Sleep(1);
  Application.ProcessMessages;
  ADOQuery1.Active := True;
  // En son girilen kayda otomatik konumlanıyoruz ki kullanıcı sonucu görsün...
  ADOQuery1.Locate( 'A_KayNo', iSonKayıt, [] );
end;
Resim
Resim ....Resim
mazhargemci
Üye
Mesajlar: 101
Kayıt: 13 Şub 2015 09:32

Re: veritabanında kayıt düzenleme

Mesaj gönderen mazhargemci »

abi tek bişey soracam.
speedbutton7 nin tag değeri nereye yazacağız oarayı söyle ben hallederim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: veritabanında kayıt düzenleme

Mesaj gönderen mrmarman »

SpeedButon7'de OnClick olayında...

Kodu oku... :!: :!: :!:
Resim
Resim ....Resim
Cevapla