Tablodan tabloya insert into yardım..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Tablodan tabloya insert into yardım..

Mesaj gönderen Gk_imptob »

Sevgili arkadaşlar,
FB SQL editorde TABLO1'den TABLO2'ye KIMLIKNO'su 1 olanları gönderdiğim SQL satırını Delphide IBQUERY le çalıştıramadım.Bu konuda sizlerden yardım rica ediyorum.Kod örnekleri aşşağıdaki gibidir.

FB'de yazdığım komut.(Bu düzgün çalışıyor)
insert into TABLO2 ("ADI","SOYADI","KIMLIKNO") SELECT "ADI","SOYADI", "KIMLIKNO" TABLO1 WHERE KIMLIKNO=1 bu şekilde SQL cümleciğini yazdığım zaman TABLO1 deki kimlikno su 1 olanları tablo2 ye gönderiyor.

Delphide yazdığım komut satırı.(Bu çalımadı)
procedure TDENEME.Button1Click(Sender: TObject);
var
KIMLIKNO:integer;
ADI,SOYADI:String;
begin
KIMLIKNO:=IBDataSet1.FieldByName('KIMLIKNO').AsInteger;
ADI:=IBDataSet1.FieldByName('ADI').AsString;
SOYADI:=IBDataSet1.FieldByName('SOYADI').AsString;
IBQuery1.Close;
IBQuery1.UnPrepare;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('insert into TABLO2');
IBQuery1.SQL.Add('(ADI,SOYADI,KIMLIKNO)values');
IBQuery1.SQL.Add('(:ADI,:SOYADI,:KIMLIKNO)');
//IBQuery1.SQL.Add('select * from Technical_PR_Tbl_2 WHERE PO_CREATE="1"'); Buraya böyle bir komut satırı yazdım fakat çalışmadı
IBQuery2.Prepare;
IBQuery1.ParamByName('KIMLIKNO').AsInteger:=KIMLIKNO;
IBQuery1.ParamByName('ADI').AsString:=ADI;
IBQuery1.ParamByName('SOYADI').AsString:=SOYADI;
IBQuery1.ExecSQL;
end;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen conari »

Gk_imptob yazdı: //IBQuery1.SQL.Add('select * from Technical_PR_Tbl_2 WHERE PO_CREATE="1"'); Buraya böyle bir komut satırı yazdım fakat çalışmadı
Çalışmadı da ne hata verdi. :?:
Çalışmaması normal iç içe select gibi olmuş bu anlaşılan. :idea:
ayrıca degerleri IBDataSet1 den alıyorsun where nereye çekiyorsunuz :idea:

IBDataSet1. e where ile kısıt ver.
Inserti While not eof ile döngüye sokarak yaz.

Birde Field adları ile Parametreleri aynı isimde vermez isek daha iyi olur diye biliyorum.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen Gk_imptob »

Sayın Conari cevabınız için teşekkürler.
1nci sorunuz ("Çalışmadı ne hata verdi") demişsiniz.Ben butona bastığım zaman hiç bir hata vermedi.İstediğim dataları yani kimliknosu 1 olanları diğer tabloya göndermedi.Birşey yapmadı yani...

3ncü sorunuza cevap.Ben tablomu IBQUERY bağlamıştım.Onunda SQL stringi select * from Tablo1

siz insert while not eof döngüsü deyince ben birden durdum.Nasıl yapcam diye düşünmeye başladım.

Birde siz "Field adları ile Parametreleri aynı isimde vermezsek daha iyi olur" demişsiniz.Tam bu kısmı da anlayamadım.Forumda bir çok örnekte herkes böyle yapmış diye bende böyle yapdım.

Teşekkürler.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen conari »

Pardon ben birden fazla kayıt döner diye While döngüsü ile insert et dedim ama TC no tek olacağı için sanırım tek kayıt dönecek.

Kod: Tümünü seç

begin
KIMLIKNO:=IBDataSet1.FieldByName('KIMLIKNO').AsInteger;
ADI:=IBDataSet1.FieldByName('ADI').AsString;
SOYADI:=IBDataSet1.FieldByName('SOYADI').AsString;
buradan önce IBdataset1 SELECT "ADI","SOYADI", "KIMLIKNO" TABLO1 WHERE KIMLIKNO=1 bunun ile aynı sonucu döndürüyormu? döndürüyor ise ;

Kod: Tümünü seç

IBQuery1.Close;
IBQuery1.UnPrepare;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('insert into TABLO2');
IBQuery1.SQL.Add('(ADI,SOYADI,KIMLIKNO)values');
IBQuery1.SQL.Add('(:ADI,:SOYADI,:KIMLIKNO)');
IBQuery1.Prepare;
IBQuery1.ParamByName('KIMLIKNO').AsInteger:=KIMLIKNO;
IBQuery1.ParamByName('ADI').AsString:=ADI;
IBQuery1.ParamByName('SOYADI').AsString:=SOYADI;
IBQuery1.ExecSQL;
end;
bu kod işlemi yapmalı.
Parametre tiplerini kontrol edebilirsin.
Field ile parametre isimleri aynı olmasın diye duymuş veya okumuştum. Şuan kaynak hatırlamıyorum aklıma gelirse veya bulabilirsem burada yazarım.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen Gk_imptob »

Sayın Conari dediğinizi yaptım fakat olmadı.

Galiba ben eksit anlatıyorum.KimlikNo, TCKimlikNO değil.Bu konuda özür.Bunu güvenlikte giriş, çıkış yapan kişilerin kimlikno gibi düşünün.Yani aynı kimlik no bu önemli birden fazla kişiye verilebiliyor.Amaçta bu zaten.Örneğin 2 nolu kimlik nosunu kimler almışsa bunları TABLO2 ye gönder gibi.

Formumda 1 ad. cxgrid var. Ben bunu IBDATASET1, DAtasourcele bütün kayıtları gösterecek şekilde ayarladım.Inser into işlemini yapmak için formuma birtane IBQUERY koydum.Onun SQL stringine dediğiniz gibi select "adı","soyadı" from tablo" where kimlikno=1 yazdım fakat istediğim kayıtları select edemedim diğer tabloya gönderme yapamadım.

Teşekkürler.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen conari »

Bu şekilde alabilmeniz lazım. IBQuery1 hangi vt ye bağlı onu kontrol edin.

Kod: Tümünü seç

IBQueryDeneme.SQL.clear;
IBQueryDeneme.SQL.Add('SELECT ADI,SOYADI, KIMLIKNO from TABLO1 WHERE KIMLIKNO=1');
IBQueryDeneme.open;
//bunun istediğimiz listeyi vermesi gerekmekte...
//Ondan sonra her kayıt için döngü
while not(IBQueryDeneme.Eof) do
begin
KIMLIKNO:=IBQueryDeneme.FieldByName('KIMLIKNO').AsInteger;
ADI:=IBQueryDeneme.FieldByName('ADI').AsString;
SOYADI:=IBQueryDeneme.FieldByName('SOYADI').AsString;
//değişkenleri ata----------------------
IBQuery1.Close;
IBQuery1.UnPrepare;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('insert into TABLO2');
IBQuery1.SQL.Add('(ADI,SOYADI,KIMLIKNO)values');
IBQuery1.SQL.Add('(:ADI,:SOYADI,:KIMLIKNO)');
IBQuery1.Prepare;
IBQuery1.ParamByName('KIMLIKNO').AsInteger:=KIMLIKNO;
IBQuery1.ParamByName('ADI').AsString:=ADI;
IBQuery1.ParamByName('SOYADI').AsString:=SOYADI;
IBQuery1.ExecSQL;
end;
IBQueryDeneme.Next;
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen Gk_imptob »

Sevgili conari vermiş olduğun kodları kendi programıma çok basit bir şekilde düzenledim.Fakat kafayı yemek üzereyim tablo1 den tablo2 ye insert işlemi yapamıyorum.Sıyırdım gitti hatadada vermiyor.Gidiyorum tablo 2ye bakıyorum hiç bir şey kopyalamamış.

düzenlediğim komut aşşağıdaki gibidir.

procedure TForm2.Button2Click(Sender: TObject);
var
description:string;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select DESCRIPTION from technical_pr_tbl_2 where po_create=1');
IBQuery1.Open;
IBQuery1.First;
while not IBQuery1.eof do
begin
description:=IBQuery1.fieldbyname('description').AsString;
IBQuery2.Close;
ibquery2.SQL.Clear;
ibquery2.SQL.Add('insert into Technical_PO_Tbl_2');
ibquery2.SQL.Add('(description)values');
IBQuery2.SQL.Add('(:description)');
ibquery2.ParamByName('description').AsString:=description;
IBQuery1.Next;
ibquery2.ExecSQL;

end;

end;
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen conari »

IBQuery1.Open;
dediğinizde
IBQuery1.recordcount ile kayıt sayısına bir bakarmısınız kayıt varmı?

Parametreli gönderimde birde problem olabilir parametresiz kullanıp deneyin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen Gk_imptob »

Sevgili conari kodlarımı hiç değiştirmeden sadece IBQuery1.Open; dan sonra
IBQuery1.recordcount koydum.Bana kaçtane aktarmak istediğim kayıt sayısını getirdi ve ondan sonra seçili kayıtları aktardı kod çalıştı :bravo: .iki gündür sürekli aynı kodlarla çalışıyorum ve bir türlü diğer tabloya kayıt atamıyor kafayı yiyordum.recourdcount dan sonra kayıtlar gitmeye başladı.Çok ilginç şaştım kaldım anlayamadım.

Yardımlarından dolayı sana sonsuz teşekkür ederim.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Tablodan tabloya insert into yardım..

Mesaj gönderen conari »

:?:
İlginç bir anlam veremedim. :idea:
İyi çalışmalar.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla