| Burhan_ast | 19.10.2004 - 11:36:30 |
| Arkadaslar merhaba,
Sql server 2000 kullaniyorum ve burda X databasimde TBL_Stok tablom var Bu tabloda yaklasik 40 000 kayit var, merkezden bana merkezin stok tablolari geliyor txt formatinda, simdi yapmam gereken su bu txt tablosundaki kayitlar eger TBL_stok tablomda var ise tum alanlari yeni gelen bilgileri koyup degistirmem eger yok isede yeni kayit ekleyerek bu bilgileri girmem lazim, Bunu delphi ile yaptim. Txt tablsoundaki kayit kadar bir dongu ve dongu icin kayit varsa duzenle yoksa ekle seklinde kontroller koydum, fakat performans cok dusuk kaliyor, tum tablolari yaklasik 2 saat icinde yapabiliyorum, Bunu acaba stored procedur ile yapabilirmiyim, yardimci olursaniz memnun olurum, kilit alan olarak Stok_kodu alanini kullaniyorum. Tsk, Burhan Cakmak | |
| aslangeri | 19.10.2004 - 11:44:42 |
| S.A.
Sp ile yapabilirsin temel mantık şu şekilde olacak 1.önce gelen kaydın olupolmadığını kontrol ettireceksin bu nun için select count(*) ..... şeklinde bir select yapıp sonucu bir değişkene aktarırsın. 2.eğer kayıt varsa update 3. else insert işlemi yapılacak. ben fb de yapıyorum. sqlserver kullanmadım ama mantık bu şekilde. kolay gelsin. | |
| Kuri_YJ | 19.10.2004 - 11:46:10 |
| Selam,
Source'unu görsek, sana daha iyi fikir verebiliriz sanıyorum. Bakalım ne kullanmışsın nasıl yazmışsın. Kolay Gelsin. | |
| Burhan_ast | 21.10.2004 - 07:38:25 |
| Merhaba,
Sayin aslangeri isin mantiginda ve calisma yontemini ben biliyorum, fakat daha once hic bir SP yazmadigim icin nasil kod yazacagimi bilmiyorum, bana kisa bir kod yazabilirseniz memnun olurum. Ayrica sayin Kuri_TLJ, kullandigim kod asagidaki sekilde ve problemsiz calisiyor ama, 150 tablo var yuzbinlerce satir olan tablolar bunlar, ayrica 20 sube ile carpinca her sube 3 saat suruyor buda cok fazla bir sure bunu delphi ile degilde SP tanimlayip, SP'ye parametre gondererek yapsam sure dusermi ve mumkunse bana basit bir SP kodu yazabilirse arkadaslar memnun olurum... Saygilar... Procedure Restoret1(Tableadi,Dosyadi:string); var i:longint; fields:widestring; aa1,ii:integer; aa:tfieldtype; alanturu,alanadi,header1:string; yuzde,yuzde1:real; str1:string[2]; sqlword:widestring; uz:integer; gecici:widestring; begin if islemvar=false then Begin deletefile(dosyadi); exit; end; probackup1.progressbar1.stepby(1); probackup1.progressbar1.stepit; probackup1.progressbar1.position:=ctstat; yuzde:=(ctstat/tablesayisi)*100; yuzde1:=round(yuzde); probackup1.label6.Caption:='% '+floattostr(yuzde1); probackup1.statusbar1.panels[0].text:=tableadi; application.ProcessMessages; // Table i dosya dan okuyoruz ... probackup1.adoquery1.SQL.Clear; probackup1.adoquery1.LoadfromFile(dosyadi); probackup1.adoquery1.Open; probackup1.adoquery1.First; for i:=0 to probackup1.adoquery1.RecordCount-1 do begin probackup1.adoquery2.SQL.Clear; probackup1.adoquery2.SQL.Add('select * from '+tableadi+' where LOGICALREF = '+probackup1.adoquery1.FieldByName('LOGICALREF').asstring); probackup1.adoquery2.open; if probackup1.adoquery2.RecordCount=0 then begin probackup1.adoquery2.Append; probackup1.adoquery2.edit;end else probackup1.adoquery2.edit; for ii:=0 to probackup1.adoquery1.fieldcount-1 do begin alanadi:=probackup1.adoquery1.Fields.Fields[ii].FullName; aa:=probackup1.adoquery1.FieldByName(alanadi).DataType; if aa=ftString then begin gecici:=probackup1.adoquery1.FieldByName(alanadi).asstring; for uz:=1 to length(gecici) do if gecici[uz]=#39 then gecici[uz]:=#34; sqlword:=sqlword+alanadi+'= '+#39+gecici+#39+', '; end else begin probackup1.adoquery2.FieldByName(alanadi).AsString:=probackup1.adoquery1.FieldByName(alanadi).asstring end; end; probackup1.adoquery2.Post; if sqlword <>'' then begin uz:=length(sqlword); if sqlword[uz-1]=',' then delete(sqlword,uz-1,1); sqlword:='update '+tableadi+' set ' + sqlword+' where LOGICALREF = '+probackup1.adoquery1.FieldByName('LOGICALREF').asstring; probackup1.adoquery3.SQL.Clear; probackup1.adoquery3.SQL.add(sqlword); probackup1.adoquery3.ExecSQL; probackup1.adoquery3.SQL.Clear;sqlword:=''; end; probackup1.adoquery1.Next; probackup1.adoquery2.Next; end; // dosyanin isi bitti sil deletefile(dosyadi); end; | |
| Kuri_YJ | 21.10.2004 - 08:52:18 |
| Selamlar,
Neden Replication denemiyorsun? Kolay Gelsin | |
| husonet | 21.10.2004 - 09:14:14 |
| Adnan Abi ve Arkadaşlar şu Replication nedir ne işe yarar? Nasıl yapılır? Bu kelime bana yabancı geliyor. Açıklama yaparsanız sevinirim.
Teşekkürler. | |
| Kuri_YJ | 21.10.2004 - 10:51:09 |
| Özetle,
Replication tekrarlama anlamında olup, RDBMS'lerde birbirinden bağımsız olarak oluşturulmuş database'lerdeki belirli tablelları veya tüm database'i tamamını kapsayacak şekilde eşlenik hale getirme anlamına gelir. Yani database'ler arasında oluşan kayıt ekleme düzeltme ve silme gibi bir çok işi otomatik olarak replication ile yapabilmektesin. Kolay Gelsin. | |
| aslangeri | 21.10.2004 - 11:35:40 |
| S.A.
fb de yapılmış örnek ama sqlserver syntax ına uyarmı bilmem CREATE PROCEDURE BIRIMLER_IU (
ID SMALLINT, BIRIMADI VARCHAR(5)) AS BEGIN IF (EXISTS(SELECT ID FROM BIRIMLER WHERE (ID = :ID))) THEN UPDATE BIRIMLER SET BIRIMADI = :BIRIMADI WHERE (ID = :ID); ELSE INSERT INTO BIRIMLER ( ID, BIRIMADI) VALUES ( :ID, :BIRIMADI); END Kolay Gelsin. | |
| Burhan_ast | 21.10.2004 - 12:33:10 |
| Sayin Aslangeri
Kod icin tsk, Fakat SQL Server 2000'de calistiramadim, Sql server kullanan arkadas var ise cevirebilirse memnun olurum. Replication kullanamam cunku bir cok kontrol yapmam lazim ayni zamanda program icinde, Saygilar. | |
| Anonymous | 25.10.2004 - 12:31:46 |
| SP içinde text dosyadan okuyabileceğini sanmıyorum ama. yine delphi ile text dosyadan okuyup bir temp table a kaydedip sgeri kalan kısmı sp ye bırakmayı düşünebilirsin. | |
| Kuri_YJ | 25.10.2004 - 18:54:01 |
| Selamlar,
Yanılmıyorsam MS-SQLServer SP'lerinde Text Dosya okuma yazma gibi bir takım fonksiyonlar var oradan da yararlanılabilir. Şu anda hatırımda değil ama biraz system SP'lerini kurcalamak lazım. Kolay Gelsin. | |