Database update, insert ve delete aynı kod üzerinden yaptırma...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Database update, insert ve delete aynı kod üzerinden yaptırma...

Mesaj gönderen dogan »

Selam...

XMLden Sıranoya göre databaseye update, insert ve delete işlemlerini aynı kod üzerinden yaptırmak istiyorum,
kayıt varsa güncelleme yapılıyor, yok ise yeni kayıt oluşturuluyor, fakat databasede eski bir kayıt yani XML de olmayan bir kayıt varsa bunu databaseden nasıl sindirebilirim?.

Mantık hatası yapıyorum fakat hatayı bulamadım...

Kod: Tümünü seç

 
         Row := XMLNode.ChildNodes['row'].Text;
          Sil := FieldByName('SIRANO').AsInteger;
           if Not IsEmpty then
            begin
              Close;
              SQL.Clear;
              SQL.Add('Update HIZMET Set SIRANO=:SN, KAYITTARIHI=:KTR');
              SQL.Add('Where SIRANO =' + Row);
              ParamByName('SN').AsInteger := StrToInt(Row);
              ParamByName('KTR').AsDate := KTarih;
              ExecSQL;
            end
            else
            begin
              if IsEmpty then
              begin
                Close;
                SQL.Clear;
                SQL.Add('Insert Into HIZMET');
                SQL.Add('(SIRANO, KAYITTARIHI)');
                SQL.Add(' Values (:SN, :KTR)');
                ParamByName('SN').AsInteger := StrToInt(Row);
                ParamByName('KTR').AsDate := KTarih;
                ExecSQL;
              end
              else
              begin
                if Sil <> StrToInt(Row) then
                begin
                  Close;
                  SQL.Clear;
                  SQL.Add('Delete From HIZMET');
                  SQL.Add('Where SIRANO =' + Row);
                  ExecSQL;
                end;
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Database update, insert ve delete aynı kod üzerinden yaptırma...

Mesaj gönderen mkysoft »

Performanslı olması için şu şekilde yapmanı öneririm. Mevcut tablo ile yapısı birebir aynı olan bir temp table yarat veri tabanında. xml'deki kayıtları bu temp table'a insert et (SQL server ise bulk insert yapabilirsin).
Sonrasında çalıştıracağın sorgular daha kolay olacak;

DELETE FROM HIZMET WHERE SIRANO NOT IN (SELECT SIRANO FROM @TEMP)

UPDATE HIZMET SET SIRANO=@TEMP.SIRANO, KAYITTARIHI=@TEMP.KAYITTARIHI
FROM @TEMP

INSERT INTO HIZMET
SELECT * FROM @TEMP
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: Database update, insert ve delete aynı kod üzerinden yaptırma...

Mesaj gönderen dogan »

mkysoft yazdı:Performanslı olması için şu şekilde yapmanı öneririm. Mevcut tablo ile yapısı birebir aynı olan bir temp table yarat veri tabanında. xml'deki kayıtları bu temp table'a insert et (SQL server ise bulk insert yapabilirsin).
Sonrasında çalıştıracağın sorgular daha kolay olacak;

DELETE FROM HIZMET WHERE SIRANO NOT IN (SELECT SIRANO FROM @TEMP)

UPDATE HIZMET SET SIRANO=@TEMP.SIRANO, KAYITTARIHI=@TEMP.KAYITTARIHI
FROM @TEMP

INSERT INTO HIZMET
SELECT * FROM @TEMP

Hocam rica etsem biraz daha anlaşılır bir örnek verebilir misiniz?...
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Database update, insert ve delete aynı kod üzerinden yaptırma...

Mesaj gönderen mkysoft »

Temp table konusunu hakim değilsen konuyu araştırmalısın.
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Database update, insert ve delete aynı kod üzerinden yaptırma...

Mesaj gönderen hido »

mkysoft yazdı:Temp table konusunu hakim değilsen konuyu araştırmalısın.

Ben mi yanlış anladım hocam Temp table ne alakası var ki, bir buton ile update, delete ve inser işlemi halledilemez mi???
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Database update, insert ve delete aynı kod üzerinden yaptırma...

Mesaj gönderen xxxjedixxx »

Merhaba,

Eğer, xml'de olmayıp tabloda olan kayıtların bir geçerliliği yoksa, tablodaki kayıtların hepsini silip sadece xml'deki kayıtları eklemen daha mantıklı olacaktır.
delete * from table
insert into table ...
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Re: Database update, insert ve delete aynı kod üzerinden yaptırma...

Mesaj gönderen badkursat »

Bilmem işine yararmı ama XMLden veriyi dataset olarak deplhi ye alabilirsin. Bunun için internette şöyle bir fonksiyon var bir dene derim. Bu dataset üzerinden işlem yapman daha kolay olacaktır sanırım.

Kod: Tümünü seç

Function RecordsetFromXML(Const XML: String): _Recordset;
Var RS: Variant;
    Stream: TStringStream;
Begin
   Result := Nil;
   If XML <> '' Then
   Begin
      Try
         Stream := TStringStream.Create(XML);
         Stream.Position := 0;
         RS := CreateOleObject('ADODB.Recordset');
         RS.Open(TStreamAdapter.Create(Stream) As IUnknown);
         Result := IUnknown(RS) As _Recordset;
      Finally
         Stream.Free;
      End;
   End;
End;
Kullanımı

Kod: Tümünü seç

 ADOQuery1.Recordset := RecordsetFromXML(XML);
Cevapla