SQL ile toplu kayıt girme..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

SQL ile toplu kayıt girme..

Mesaj gönderen berken »

arkadaslar boyle bir kod var mı bilmiyorum ama serverdaki bir tabloya birden fazla kayıt girmem gerekiyor..

bir dongu ile yapıyorum.. yani bildiğimiz append , post ile.
ama bir seferde bazen üç bin kayıt girmem gerekebiliyor..
yanı döngu 3bin defa dönüyor.. durum boyle olunca server bazen bunu saldırı olarak görüp ip yi banlıyor..
ve program donuyor.. sadece bir veya iki kayıt eklemiş oluyor ..

bir defada toplu kayıt silme veya süzenleme gibi , ekleme de oluyor mu acaba ..
İnsanca.... Pek insanca....
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba..

- Benim başıma böyle bişey gelse, aklıma ilk gelen iş, local bir veritabanına bu 3000 kaydı döngü ile girip, sonra INSERT INTO ile server'daki veritabanına bir hamlede tüm tabloyu insert etmek şeklinde bir çözüm olurdu. :idea:

- Bu cevabı, Text, Excel benzeri bir ortamdan veri aldığını farzederek yazdım. Eğer hali hazırda bir local veritabanından ise direkt Insert Into ile seçilmiş tablo server'a bir çırpıda atılabilir.
Resim
Resim ....Resim
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

bir tabloyu baska bir tabloya insert etmek ??
İnsanca.... Pek insanca....
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Genellikle veritabanı aktarma işlemleri için kullandığım bir tekniktir.

- Ado ile örnekleyim kendine rota çizersin...

Kod: Tümünü seç

Var
  KaynakTablo : String;
begin
  KaynakTablo := ExtractFilePath(Application.Exename) + 'Kaynak.MDB';
  With AdoQuery.Create(Nil) do begin
    Connection := AdoConnection1;
    SQL.Clear;
    SQL.Add('INSERT INTO Tablo1 ( KaySiraNo, TCKimlik, Adi, Soyadi )');
    SQL.Add('SELECT xKaySiraNo, xTCKimlik, xAdi, xSoyadi ');
    SQL.Add('FROM Tablo2 IN ""[;DATABASE='+ KaynakTablo + ';PWD=' + Password +'];');
    ExecSQL;
    Free;
  end;
- Tablo2'deki bilgilier Tablo1'e aktarıldı... Bu localde yapacağın işlem.

- Tablo2 ile Tablo1 aynı türden veritabanı olmak zorunda değil. Paradox'dan MSAccess'e veya başkasına bile yapabilirsin.
Resim
Resim ....Resim
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

ilginize teşekkurler

Tablo2 ile Tablo1 aynı türden veritabanı olmak zorunda değil. Paradox'dan MSAccess'e veya başkasına bile yapabilirsin...


hocam benım istediğim bu..
serverda ki mysql in bir tablosunda belli kayıtlar (SQL ile çekilen )
pc imde bulunan bir acces veritabanına aktarmak istiyorum..
... uğrastım yapamadım.. aradım bulamadım :)..
İnsanca.... Pek insanca....
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

arkadaslar aynı veritabanında iki tabloda o olayı hallettim..
ustalar bilirler ben yine de bilmeyenlere yardım olsun diye yazayım..
yapmak istediğim ve yazdığım kod şu şekilde..

şimdi benim a ve b diye iki tablom var..
a daki kayıtları b ye aktarmam gerekiyor..
ama hepsini değil

a tablsu

kod___________isim
100 01 ________Ali
100 02 ________Ahmet
100 03 ________mehmet
100 04 ________Can

şeklinde ise ben b tablosuna
kod___________A_________B
100 01 ________50________0
800 01_________0_______50
100 02 ________50________0
800 01_________0_______50
100 03 ________50________0
800 01_________0_______50
100 04 ________50________0

şeklinde eklemek istiyordum.. bu durumda a tablsoundaki her bir kayıt için b tablosunda bir birinden faklı iki kayıt eklemem gerekiyordu..
ben de bir tempc taplosu tanımlayıp içine iki kayıt yazdım..
eğer ilk kayıtta ise bunu yaz ikide ise bunu diye ..
kod ise boyle tempc = adat


Kod: Tümünü seç

Insert into fisler (tarih,hesapkodu,aciklama,borc,alacak)

 Select "2006.12.12",
 case when a.konu ="1" then u.hesapno else "800 01" end, 
" OCAK-2006 Dönem Aidati"
 , case when a.konu ="1" then 50  else "0" end  , 
case when a.konu ="1" then "0" else 50 end
  
 from adat as a, uyeler as u  where u.durum = True 
umarım birilerinin işi düşer de bı kod işini görür..
İnsanca.... Pek insanca....
Cevapla