İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

MSSQL'den Çoklu Kayıt Silme Nasıl Yapılır.

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
MSSQL Server'da 70000 kayıttan oluşan yabancı sarki sözü arşivimden bitişik (satır satır olmayan) şarkı sözlerini aşağıdaki kodla silmek istedim. server timeout mesajı verdi. Kod da bir hata mı yaptım bilemiyorum yardımcı olabilecek arkadaşa teşekkürler....

<!--#INCLUDE FILE="baglan.asp"-->
<%

set xs=NC.Execute("Select * from yabanci where (id >1 and id < 70000) ")

Do While Not xs.EOF

id=xs("id")

soz=xs ("sarki_sozu")
soz1=soz
soz=Replace (soz,chr(13),"<br/>")

if soz=soz1 and id<>Empty then
set xs = NC.Execute ("DELETE yabanci where id='"&id&"'")
end if

xs.Movenext

Loop

nc.close
set nc=nothing

%>
 

Mp3Powers.Com

0
İyinet Üyesi
Katılım
27 Nisan 2005
Mesajlar
136
Reaction score
0
gerekmeyen kodlar kullanmışsın, silmek istiyorum demişsin fakat replace falan ettiriyosun ayrıca if soz=soz1 and id<>Empty then satırında id nin neden boş olup olmadığını kontrol ettiriyorsun anlamadım, sonuçta id de bir değer mutlaka vardır kayıt girildiğine göre.Aşağıdaki kod seninkine göre biraz daha iyi, denemende fayda var :)

'// Eğer sözün içinde </br> karakteri yoksa sil

<!--#INCLUDE FILE="baglan.asp"-->
<%
set xs=NC.Execute("Select * from yabanci")
For i = 1 to 7000
soz=xs("sarki_sozu")
no=xs("id")
if InStr(soz,"</br>") = 0 Then
set sil = NC.Execute ("DELETE From yabanci where id="&no&"")
Else
xs.Movenext:Next
End if

xc.close:set xs=nothing
nc.close:set nc=nothing

%>
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
Teşekkür ediyorum. Haklısın ilk bölümde zaten değer var InStr kullanmak gerekirdi. Senin verdiğin koda göre çalıştırdım şöyle bir hata aldım.

Microsoft VBScript compilation error '800a041f'

Unexpected 'Next'

/delete900.asp, line 19

xs.Movenext:Next
------------^
 

TRinsanRehberi

0
İyinet Üyesi
Katılım
21 Ağustos 2005
Mesajlar
1,845
Reaction score
0
delete from yabanci where sarki_sozu not like '%<br/>%'

bu sql direk dene
ama sana tavsiyem bunu gerçek database de yapma (kendi çalışma ortamında yap)

kolay gelsin

<br/> ifadesini <br> yada bir başka türlü yazabilirsin bu senin veri tabanında <br> lerin nasıl olduğuna bağlı
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
Son değişikliklerden sonra kod aşağıdaki gibi oldu. Test etmek için sadece 20 kayıt silmek istedim. Yine "Timeout" hatası verdi.

Hatanın oluştuğu satır : set xs = nc.Execute("delete from yabanci where sarki_sozu not like '%<br/>%' ")


Kod

<!--#INCLUDE FILE="baglan.asp"-->
<%

set xs=nc.Execute("Select * from yabanci where (id >69975 and id < 70000) ")

For i = 1 to 20

set xs = nc.Execute("delete from yabanci where sarki_sozu not like '%<br/>%'")

xs.Movenext
Next

Response.Write("Kayıtlar Silindi")

xs.close:set xs=nothing
nc.close:set nc=nothing

%>



Hata Mesajı

Microsoft OLE DB Provider for ODBC Drivers error '80040e31'

[Microsoft][ODBC SQL Server Driver]Timeout expired

/delete901.asp, line 8
 

TRinsanRehberi

0
İyinet Üyesi
Katılım
21 Ağustos 2005
Mesajlar
1,845
Reaction score
0
<!--#INCLUDE FILE="baglan.asp"-->
<%
baslangic = Request.QueryString("sayac")

bitis = baslangic + 10

set xs = nc.Execute("delete from yabanci where sarki_sozu not like '%<br/>%' and id >"& baslangic &" and id <= "& bitis &"")

%>

<script language="javascript">
window.setTimeout("window.open('toplu_sil.asp?sayac=<%=bitis%>','toplusil','')", 1 * 20000);
</script>

_______________
yukarıdaki kodu aynen çalıştır bakalım
1 * 20000 <<< ikinci kez sayfanın ne kadar süre sonra çalışacağını belirler.
bitis = baslangic + 10 <<< bir seferde kaç kayıt silineceğini belirler buradaki 10 değeri arttırılırsa bir seferde silinecek kayıt artar.
haa bu arada buradaki toplu_sil.asp yukarıdaki kodu yazdığın sayfanın adıdır.
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
Aynen yazdığın gibi çalıştırdım. Aşağıdaki hata mesajını aldım.



Microsoft OLE DB Provider for ODBC Drivers error '80040e31'

[Microsoft][ODBC SQL Server Driver]Timeout expired

/delete902.asp, line 4



4 nolu satır : set xs = nc.Execute("delete from yabanci where sarki_sozu not like '%<br/>%'")
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
Enterprise Manager ile veritabanına erişiyorum. Şuana kadar hiç index tanımlamadım. Kod çalıştırarak tanımlanabilir mi ?
 

LuGeLaS

0
İyinet Üyesi
Katılım
3 Haziran 2006
Mesajlar
947
Reaction score
0
Konum
Türkiye
Onun yerine şöyle bişey yapabilirsin.

Tabloda x diye bir alan aç türünü bit yap.

Daha sonra x alanın hepsini 0 olarak update et.

Sql sorgusunda set xs=NC.Execute("Select top 50 * from yabanci where x=0")

Daha sonra döngü kur ve işlemi yap bu arada işlem yaptığın kaydın x alanını 1 yap. Bu sorguda 50 kayıt birden gelecektir. Ve 50 kayıtta işlem yaptıktan sonra durur. Sürekli işlem yapması için sayfanın başına bunu ekle
<meta http-equiv="refresh" content="1;url=?">

Bunu ekleyince işlem her bittiğinde sayfa yenilecek ve işlem yapılmayan kayıtlar x alanına göre alınıp işlenecektir.

Ben hep bu yöntemi kullanıyorum. Biraz uzun sürer ama timeout vermez. Verirsede top 50 yeni top 20 - 30 olarak kullanabilirsin
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
Çok teşekkür ediyorum LuGeLas dediğini uygulayacağım. Şuan işyerindeyim akşam evde olurum sonucunu yarın sana bildiririm.

Bu arada bana yardımcı olmak için uğraşan TRinsanRehberi ile Mp3Powers.Com'a da ayrı ayrı teşekkürlerimi iletiyorum.
 

TRinsanRehberi

0
İyinet Üyesi
Katılım
21 Ağustos 2005
Mesajlar
1,845
Reaction score
0
Enterprise Manager ile veritabanına erişiyorum. Şuana kadar hiç index tanımlamadım. Kod çalıştırarak tanımlanabilir mi ?

ALTER TABLE `yabanci` ADD INDEX `indexsoz` ( `sarki_sozu` )

yukardaki şekilde indeks tanımlayabilirsin

bu arada tekrar uyarıyorum: gerçek veri tabanında değil çalışma alanında uygulamanı öneriyorum.
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
LuGelas, dediklerini yaptım. tabloda local hostta bit türünden x diye bir alan açtım. Daha sonra bu alanları 0 olarak update ettim. Enterprise Manager'dan baktım tüm x alanının 0 olduğunu gördüm. Daha sonra aşağıdaki kodu çalıştırdım.

<meta http-equiv="refresh" content="1;url=?">
<!--#INCLUDE FILE="baglan.asp"-->
<%

set xs=nc.Execute("Select top 20 * from yabanci where x=0")

for i=1 to 20

set xs = nc.Execute("delete from yabanci where sarki_sozu not like '%<br/>%' ")
set xs = nc.Execute ("UPDATE yabanci SET x=1 ")

xs.movenext
Next

nc.close
set nc=nothing

%>

Yine timeout hatası verdi

Hata Tipi:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E31)
[Microsoft][ODBC SQL Server Driver]Zaman aşımı doldu
/delete902.asp, line 9


Birde kodu aşağıdaki şekle çevirip denedim


<meta http-equiv="refresh" content="1;url=?">
<!--#INCLUDE FILE="baglan.asp"-->
<%

set xs=nc.Execute("Select top 20 * from yabanci where x=0")

set xs = nc.Execute("delete from yabanci where sarki_sozu not like '%<br/>%' ")
set xs = nc.Execute ("UPDATE yabanci SET x=1 ")

nc.close
set nc=nothing

%>

Yine aynı hatayı verdi.

Hata Tipi:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E31)
[Microsoft][ODBC SQL Server Driver]Zaman aşımı doldu
/delete902.asp, line 7
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
TRinsanRehberi, local mssql host da aşağıdaki kod ile index tanımlamaya çalıştım.

<!--#INCLUDE FILE="baglan.asp"-->
<%

set xs=nc.Execute("ALTER TABLE yabanci ADD INDEX indexsoz ( sarki_sozu )")


nc.close
set nc=nothing

%>

Ancak aşağıdaki hatayı verdi.

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'INDEX'.
/key.asp, line 4

Enterprise Manager ile index tanımlamak istedim o da olmadı.
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
<!--#INCLUDE FILE="baglan.asp"-->
<%
baslangic = Request.QueryString("sayac")

bitis = baslangic + 10

set xs = nc.Execute("delete from yabanci where sarki_sozu not like '%<br/>%' and id >"& baslangic &" and id <= "& bitis &"")

%>

<script language="javascript">
window.setTimeout("window.open('toplu_sil.asp?sayac=<%=bitis%>','toplusil','')", 1 * 20000);
</script>

_______________
yukarıdaki kodu aynen çalıştır bakalım
1 * 20000 <<< ikinci kez sayfanın ne kadar süre sonra çalışacağını belirler.
bitis = baslangic + 10 <<< bir seferde kaç kayıt silineceğini belirler buradaki 10 değeri arttırılırsa bir seferde silinecek kayıt artar.
haa bu arada buradaki toplu_sil.asp yukarıdaki kodu yazdığın sayfanın adıdır.

TRinsanRehberi, öncelikle vakit ayırıp kod yazdığın için teşekkür ederim. Yukarıdaki kodu, MSSQL localhost'da denedim. Ancak aşağıdaki hatayı verdi.

Hata Tipi:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'and'.
/toplu_sil.asp, line 7
 

TRinsanRehberi

0
İyinet Üyesi
Katılım
21 Ağustos 2005
Mesajlar
1,845
Reaction score
0
TRinsanRehberi, öncelikle vakit ayırıp kod yazdığın için teşekkür ederim. Yukarıdaki kodu, MSSQL localhost'da denedim. Ancak aşağıdaki hatayı verdi.

Hata Tipi:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'and'.
/toplu_sil.asp, line 7


dosyayı direk istemeyip aşağıdaki gibi parametre vererek ister misin?

toplu_sil.asp?sayac=0
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
Şuan localhostta timeout vermeden çalışıyor ancak aşağıdaki tipteki dosyaları bırakıyor ancak içinde <br/> kodları bulunanları silmemesi gerekirken siliyor.

silmediği veriler:

<td align="left" valign="top">

</font>
<a target="_blank" style="text-decoration: none" href="yabanci_sarki_sozleri.asp?idsoz=6594">
<b><font face="Arial" font color=#FF0000 style="font-size: 10pt">
Song = Sphinx (The Guardian)<br><br> Album = Seventh Star </font>
<br><br><font face="Arial" font color=#0000FF style="font-size: 8pt">

 </font></td>

sildiği veriler


<br/>
Tomorrow may come<br/>
Tomorrow may never come again<br/>
Can't you hear Jamie cryin?<br/>
She's runnin' with the devil<br/>
<br/>
I bought Women and Children First<br/>
Fair Warning and Van Halen II<br/>
Dance the night away<br/>
1984 my favorite record yeah I wore it down<br/>
Might as well jump [x2]<br/>
<br/>
Tomorrow may come<br/>
Tomorrow may never come again<br/>
Can't you hear Jamie cryin?<br/>
She's runnin' with the devil<br/>
<br/>
 

TRinsanRehberi

0
İyinet Üyesi
Katılım
21 Ağustos 2005
Mesajlar
1,845
Reaction score
0
Şuan localhostta timeout vermeden çalışıyor ancak aşağıdaki tipteki dosyaları bırakıyor ancak içinde <br/> kodları bulunanları silmemesi gerekirken siliyor.

silmediği veriler:

<td align="left" valign="top">

</font>
<a target="_blank" style="text-decoration: none" href="yabanci_sarki_sozleri.asp?idsoz=6594">
<b><font face="Arial" font color=#FF0000 style="font-size: 10pt">
Song = Sphinx (The Guardian)<br><br> Album = Seventh Star </font>
<br><br><font face="Arial" font color=#0000FF style="font-size: 8pt">

 </font></td>

sildiği veriler


<br/>
Tomorrow may come<br/>
Tomorrow may never come again<br/>
Can't you hear Jamie cryin?<br/>
She's runnin' with the devil<br/>
<br/>
I bought Women and Children First<br/>
Fair Warning and Van Halen II<br/>
Dance the night away<br/>
1984 my favorite record yeah I wore it down<br/>
Might as well jump [x2]<br/>
<br/>
Tomorrow may come<br/>
Tomorrow may never come again<br/>
Can't you hear Jamie cryin?<br/>
She's runnin' with the devil<br/>
<br/>


<br/> <<<< içinde bu olmayan satırları silmiş olması lazım.
eğer <br> şeklinde satır varsa onlar silinir.
kimi satır <br/> kimisi de <br> şeklindeyse
sql cümlesine bir ilave daha yapar mısın?

.....where sarki_sozu not like '%<br>%' and sarki_sozu not like '%<br/>%' ......

yukarıdaki ilavey yapıp öyle çalıştırabilirsin.
 

qwerty

0
İyinet Üyesi
Katılım
11 Şubat 2005
Mesajlar
170
Reaction score
0
TRinsanRehberi, sayende timeout probleminden kurtulduk. Ancak ben şunu tespit ettim yukarıdaki <br/> ifadesini ben database'i sayfaya yazdırırken kendim oluşturduğum için silinmiyor. Sayfayı yazdırırken Replace (soz,chr(13),"<br/>") satırı buna sebep oluyor. Kısaca database'in içinde <br/> yerine chr(13) karakteri bulunuyor.

sarki_sozu not like '%<br/>%' ifadesindeki %<br/>% yerine chr(13)'ü kullanmaya çalıştım sözdizimi hatası verdi.
 

TRinsanRehberi

0
İyinet Üyesi
Katılım
21 Ağustos 2005
Mesajlar
1,845
Reaction score
0
TRinsanRehberi, sayende timeout probleminden kurtulduk. Ancak ben şunu tespit ettim yukarıdaki <br/> ifadesini ben database'i sayfaya yazdırırken kendim oluşturduğum için silinmiyor. Sayfayı yazdırırken Replace (soz,chr(13),"<br/>") satırı buna sebep oluyor. Kısaca database'in içinde <br/> yerine chr(13) karakteri bulunuyor.

sarki_sozu not like '%<br/>%' ifadesindeki %<br/>% yerine chr(13)'ü kullanmaya çalıştım sözdizimi hatası verdi.

ilgili karakteri {chr(13) ü} databaseden kopyalayıp sql cümlesine yazabilirsin (bunu deneyebilirsin)

veya

chr(13) leri <br/> ye dönüştüren bir modülle değiştirip ardından silebilirsin.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst