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

0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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

%>
 
0
Onaylı Üye
Üye
Katılım
26 Nisan 2005
Mesajlar
136
Tepki puanı
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

%>
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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
------------^
 
0
Onaylı Üye
Üye
Katılım
21 Ağustos 2005
Mesajlar
1,845
Tepki puanı
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ı
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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
 
0
Onaylı Üye
Üye
Katılım
21 Ağustos 2005
Mesajlar
1,845
Tepki puanı
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.
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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/>%'")
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
0
Enterprise Manager ile veritabanına erişiyorum. Şuana kadar hiç index tanımlamadım. Kod çalıştırarak tanımlanabilir mi ?
 
0
Onaylı Üye
Üye
Katılım
3 Haziran 2006
Mesajlar
947
Tepki puanı
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
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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.
 
0
Onaylı Üye
Üye
Katılım
21 Ağustos 2005
Mesajlar
1,845
Tepki puanı
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.
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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ı.
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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
 
0
Onaylı Üye
Üye
Katılım
21 Ağustos 2005
Mesajlar
1,845
Tepki puanı
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
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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/>
 
0
Onaylı Üye
Üye
Katılım
21 Ağustos 2005
Mesajlar
1,845
Tepki puanı
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.
 
0
Onaylı Üye
Üye
Katılım
11 Şubat 2005
Mesajlar
170
Tepki puanı
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.
 
0
Onaylı Üye
Üye
Katılım
21 Ağustos 2005
Mesajlar
1,845
Tepki puanı
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.
 
Geri
Üst