insert olayında hata

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

insert olayında hata

Mesaj gönderen dilruba »

merhaba arkadaslar ;

adoquery kullanarak insert işlemi yapmaya çalısıyorum. ancak aktardıgım verinin içerisinde 'B' yazılım tarzında veri varsa insert işlemi sonlanıyor. Sorunun tırnaktan kaynaklandıgını düşünüyorum ama bu sorunu nasıl halledebilirim bilmiyorum. yardımcı olur musunuz?
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

kodunu açık olarak yazarmısın? kodun üzerinde konuşsak daha ii olur ;)
kolay gelsin
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Veri girişi ve alanlarla ilgili biraz daha bilgi verebilir misiniz? Eğer gireceğiniz veri bir dosyada ise '' işaretini " " işaretiyle değiştirmeyi deneyin.

Veri ile ilgili bir kaç tane daha örnek verebilir misiniz?

Kolay gelsin.
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

Mesaj gönderen dilruba »

kod kısmı şu şekilde;

Kod: Tümünü seç

 while not qsecilentable.Eof do
        begin
        with yenitable do
        begin
           close;
                sql.Clear;
                sql.add('insert into  '+edit1.text+' ( stok_no  , stok_adi,katalog_kodu , ');
                sql.add('katalog_adi , kdvsiz_fiyat,para_birimi)');
                sql.add('values('''+qsecilentable.FieldValues['B']+''',');
                sql.add(''''+qsecilentable.FieldValues['F']+''',');
                sql.add(''''+qsecilentable.FieldValues['A']+''',');
                sql.add(''''+qsecilentable.FieldValues['A']+''',');
                sql.add(''''+qsecilentable.FieldValues['H']+''',');
                sql.Add(''''+qsecilentable.FieldValues['M']+''') ');
              //  sql.add(' '+qsecilentable.FieldValues['fiyat_degisim_tarihi']+')');
                ExecSQL;
        end;

        qsecilentable.Next;
      end;
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

anladığım kadarıyla bi yerden seçtiğin elemanları ekleme yaptırıyorsun.
qsecilentable tablosuna sağ tıklayıp elemanlarını ekle.

Kod: Tümünü seç

yenitable.insert;
yenitable.fieldbyname('A').asstring:=qsecilentableA.asstring;
yenitable.fieldbyname('B').asstring:=qsecilentableB.asstring;
....
....
yenitable.post;
şeklinde denermisin bide?

kolay gelsin
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Yeni tablodan girilen verilerle ilgili olarak da örnek verebilir misiniz.
Ayrıca

Kod: Tümünü seç

sql.add(''''+qsecilentable.FieldValues['A']+''','); 
kısmını fazla yazmamış mısınız.?
Kolay gelsin.
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

Mesaj gönderen dilruba »

yaptıgım işlem tam olarak şu ; c dizininde bulunan .dbf formattaki table'lı sql server da bi table oluşturup ihtiyacım olan verileri almak istiyorum. Aslında bu işlemi yapıyorum ancak cok zaman aldığı için sql kullanarak yapmak istedim , o zamanda (CIVATA 'B') gibi verilerde hata veriyor. ekleme yapmıyor.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,
Bir fonksiyon tanımlamanız lazım. mesela

Kod: Tümünü seç


Tirnaksil(qsecilentable.FieldValues['F']);
şeklinde kullanırsınız. Bu fonksiyonda ' veya " varsa silip yerine boşluk bıraksın.
Bu şekilde verinizi girebilirsiniz.
Kolay gelsin.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

anladığım kadarıyla tırnaklı ifadelerle yazılmış verilerin var. ve burda hata veriyo. aktarma işleminde önce tırnaklı ifadeleri

' şeklinden = > ` şekline dönüştür.

ondan sonra aktarma işlemi yap. o zaman hata vermez ;)
kolay gelsin
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Ayrıca kodunuzu parametreli kullanırsanız. Daha okunaklı olur. Mesela ben tırnaklarda karıştırıyorum. Ama aşağıdaki gibi kullanılırsa daha okunaklı olur.

Kod: Tümünü seç

        sql.Clear;
                sql.add('insert into  :dosya_adi ( stok_no  , stok_adi,katalog_kodu , ');
                sql.add('katalog_adi , kdvsiz_fiyat,para_birimi)');
                sql.add('values(:a_degeri,:b_degeri,:c_degeri,:d_degeri,:e_degeri');
                yenitable.Parameters.parambyname('dosya_adi').value:=edit1.text;
                yenitable.Parameters.parambyname('a_degeri').value:=qsecilentable.FieldValues['A'];
                yenitable.Parameters.parambyname('b_degeri').value:=qsecilentable.FieldValues['B'];
                yenitable.Parameters.parambyname('c_degeri').value:=qsecilentable.FieldValues['C'];
                yenitable.Parameters.parambyname('d_degeri').value:=qsecilentable.FieldValues['D'];
                yenitable.Parameters.parambyname('e_degeri').value:=qsecilentable.FieldValues['E'];

                ExecSQL;
        
İyi çalışmalar.
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

Mesaj gönderen dilruba »

yardımlarınız için teşekkürler.
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

sorununuzu çözdünüzmü? çözdüyseniz nasıl hallettiğinizi yazarmısınız?

kolay gelsin
ii çalışmalar
dilruba
Üye
Mesajlar: 39
Kayıt: 14 Oca 2005 05:06

Mesaj gönderen dilruba »

malesef yapamadım. pos fonksiyonunu kullanarak ' ları bulup ` ile değiştirmek istedim. Bu seferde pos fonksiyonunun ilk parametresi string oldugu için yine tırnak sorun oldu. mysqldeki string fonksiyonlarını da kullanamadıgım için ' ları delphi de karakter olarak nasıl belirtiriz açıkcası bilmiyorum. Başka nasıl yapabiliriz ?

İyi çalışmalar
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba
Pos ile kullanamıyorsanız dosyayı byte tabanlı olarak açtırıp baştan sona taratıp ' in kodu yerine diğerinin kodu vererek yapın.
Ama önce dosyanızın yedeğini alın. :lol:
Kolay gelsin.
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Mesaj gönderen ofenX »

Merhaba,

Sorununuz ' işaretinden değilmiş. Son bir kaç gündür diğer arkadaşların başına gelen sizin başınıza gelmiş. Ve ben de geç uyandım. Siz ' deyince ben de ona odaklandım.
Aşağıdaki kod ile denedim. Söylediğiniz türden de veriyi kolaylıkla alıyor.

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
begin
      while not qsecilentable.EOF do
        begin
               with yenitable do
                    begin
                        close;
                        sql.Clear;
//                      sql.add('insert into  DILRUBA (STOK_KODU,STOK_ADI)');
                        sql.add('insert into  DILRUBA (stok_kodu,stok_adi)');
                        sql.add('values( :ST_NO, :ST_AD )');
                       PARAMETERS.ParamByName('ST_NO').VALUE:=QSECILENTABLE.FieldValues['STOK_NO'];
                       PARAMETERS.ParamByName('ST_AD').VALUE:=QSECILENTABLE.FieldValues['STOK_ADI'];
              //      PARAMETERS.ParamByName('ST_NO').VALUE:=GSECILENTABLE.FIELDBYNAME('STOK_NO').ASSTRING;
               //     PARAMETERS.ParamByName('ST_AD').VALUE:=GSECILENTABLE.FIELDBYNAME('STOK_ADI').ASSTRING;

                ExecSQL;
        end;

        qsecilentable.Next;
      end;

with yenitable do
    begin
     close;
     sql.Clear;
     sql.add('select * from dILRUBA');
     open;
   end;
end;

Siz de diğer arkadaşlar gibi insert,update gibi komutlarda alan isimlerini küçük harfle yazmışsınız.

Kod: Tümünü seç

İnvalid column name 'stok_no' 
gibi bir hata alıyorsanız bundandır. Geçen günlerde bir iki arkadaşta da öyle olmuştu. Eklemiyor. Alan adınız stok_no ise bunu STOK_NO şeklinde yazmalısınız.
O hatadan mıdır diye bakmak için

Kod: Tümünü seç

  sql.add('insert into  DILRUBA (stok_kodu,stok_adi)');
şeklinde de denemiştim. hata verdi.
Diğer yandan dbf de
3 kg bingo 'B' kalite
şeklindeki stok adını sorunsuz. bir şekilde aldı.

Kolay gelsin.
Cevapla