XSQLDA index out of range ve Field not found.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

XSQLDA index out of range ve Field not found.

Mesaj gönderen palandoken »

Merhaba,
Bir tablo var.Tabloda IDNO,ADI,SOYADI,TELEFON alanları var.IDNO primary key integer.Diğerleri Varchar(25).

IBDatasetin bağlantıları tamam.SQL özellikleri tamam.Fakat aşağıdaki kodlar hata veriyor.
SORU 1:

Kod: Tümünü seç

 
With Veri.IBDataSet1 do
    begin
       InsertSQL.Clear;
       Prepare ;
       InsertSQL.Add('Insert Into DENEME');
       InsertSQL.Add( '(ADI, SOYADI, TELEFON)' );
       InsertSQL.Add(' values(:ADI, :SOYADI, :TELEFON ) ');
       ParamByName('ADI').Value := Edit1.Text;
       ParamByName('SOYADI').AsString := Edit2.Text;
       ParamByName('TELEFON').AsString := Edit3.Text;
       UnPrepare ;
       ExecSQL;
    end;
Yukarıdaki kodların verdiği hata

Field 'ADI'not found.
Halbuki ADI alanı var.Yukarıdaki kodda ADI alanının olduğu kod satırını siliyorum.Bu seferde SOYADI alanı için aynı hatayı veriyor.


SORU 2:

Kod: Tümünü seç

With Veri.IBDataSet1 do
    begin
       InsertSQL.Clear;
       Prepare ;
       InsertSQL.Add('Insert Into DENEME');
       InsertSQL.Add( '(ADI, SOYADI, TELEFON)' );
       InsertSQL.Add(' values(:ADI, :SOYADI, :TELEFON ) ');
       Params[1].Value := Edit1.Text;
       Params[2].Value := Edit1.Text;
       Params[3].Value := Edit1.Text;
       UnPrepare ;
       ExecSQL;
    end;
Yukarıdaki kodun verdiği hata ise

XSQLDA index out of range


Bu hataların nedeni ne olabilir.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

Kod: Tümünü seç

With Veri.IBDataSet1 do 
    begin 
       InsertSQL.Clear; 
       Prepare ; 
       InsertSQL.Add('Insert Into DENEME'); 
       InsertSQL.Add( '(ADI, SOYADI, TELEFON)' ); 
       InsertSQL.Add(' values(:ADI, :SOYADI, :TELEFON ) '); 
       ParamByName('ADI').AsInteger := StrToInt(Edit1.Text); 
       ParamByName('SOYADI').AsString := Edit2.Text; 
       ParamByName('TELEFON').AsString := Edit3.Text; 
       UnPrepare; 
       ExecSQL; 
    end; 
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

Kadir Bey Merhaba,

ADI alanı Integer değil ki VarChar bir alan.VT'de ilk önce IDNO alanı var.Bu alan Primary Key ve autoincrement alan olduğu için kodda değer atamadım.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kod: Tümünü seç

With Veri.IBDataSet1 do
    begin
       InsertSQL.Clear;
       InsertSQL.Add('Insert Into DENEME ');
       InsertSQL.Add( '(ADI, SOYADI, TELEFON) ' );
       InsertSQL.Add(' values(:ADI, :SOYADI, :TELEFON ) ');
       Prepare ;
       Params[0].AsString := Edit1.Text;
       Params[1].AsString := Edit2.Text;
       Params[2].AsString := Edit3.Text;
       ExecSQL;
    end; 
@kadirkurtoğlu' nun eli sürçmüş sanırım, ADI alanına sayısal bir değer atılmaz :wink:
Önceki mesajınızdaki Prepare ve UnPrepare kullanımınız hatalı. Ayrıca parametre geçirimini orada kullandığınız ParamByName('SOYADI').AsString := Edit2.Text; şekilde yapmanız en doğrusu. Sonraki mesajdaki Params[] ile kullanacaksanız, unutmayın ki delphide bütün diziler ve indeksleri aksi bir tanımlama yapılmadıkça '0' (sıfır) dan başlar. Yani ilk parametre Params[0] dadır. :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

Abi dediğiniz gibi yaptım.Kodları düzenledim.Aynı hataları yine veriyor.

Kaydı Stored Procedure ve IBStoredProc ile yapıyorum.Ama Datasetle olmadı.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

InsertSQL i kod içinden oluşturmaktansa IBDataSet in sağ tuş "SQL Generator" ünden oluşturur musun? Kodun burasında

Kod: Tümünü seç

Veri.IBDataSet1.ParamByName('ADI').AsString := Edit1.Text; 
Veri.IBDataSet1.ParamByName('SOYADI').AsString := Edit2.Text; 
Veri.IBDataSet1.ParamByName('TELEFON').AsString := Edit3.Text; 
şeklinde sadece parametreleri geçir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

Abi denedim yine olmadı.

Kod: Tümünü seç

With Veri.IBDataSet1 do 
    begin 
       Prepare ;
       ParamByName('ADI').AsString := Edit1.Text;
       ParamByName('SOYADI').AsString := Edit2.Text;
       ParamByName('TELEFON').AsString := Edit3.Text;
       ExecSQL;
    end;
Yine Field ADI not found hatasını veriyor.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Generate SQL ile otomatik oluşturunca ADI diye bir alan ekliyor mu?
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

Evet Abi.
IDNO,ADI,SOYADI,TELEFON bu 4 alanıda ekliyor.

InsertSQL'i şöyle.

Kod: Tümünü seç

insert into DENEME
  (IDNO, ADI, SOYADI, TELEFON)
values
  (:IDNO, :ADI, :SOYADI, :TELEFON)
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

evet ben yanlış algıladım. value değeri ni tam yazayom derken. Integer gördüm veya öyle zannettim bir an.

neyse

sen IBQuery ile dene IBDataset te sorun yaşadığına göre.
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

Evet bende IBQuery kullanmaya ve kaydetme , silme , güncelleme gibi işlemleri Stored Procedurlerle yapmaya karar verdim.

Ama bu IBDataset neden olmadıki.Ben muhakkak bir yerde bir hata yapıyorum.Yoksa bu kadar çözüme rağmen niye olmasın ki?Sorun bende yani.

Sizi de yordum.Hakkınızı helal edin.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

ben FIBPlus kullanıyorum. incelediğimde Dataset Exec çalıştırmıyor. FIBplusta Table bileşeni yok...
Query ise sadece ve sadece Exec.. yani insert, update ve delete gibi kayıtlar üzerinde işlem yapan sql ler için geliştirilmiş bir bileşen. zaten Datasource ile de bağlantısı yok. IB bileşenlerinin durumunu bilemiyorum. IBDataset bu iş için uygun olmaya bilir..
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

Kadir kardeş kafam karma karışık. :oops:

Birde kafamı FIBPlus ile karıştırmayayım.Bana şimdilik IBQuery yeterde artar bile usta.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Mesaj gönderen cihan »

palandoken yazdı:Kadir kardeş kafam karma karışık. :oops:

Birde kafamı FIBPlus ile karıştırmayayım.Bana şimdilik IBQuery yeterde artar bile usta.
burdaki sorun anladığım kadarıyla IDNO alanı primarykey bir alan ve ilk değerini alamıyor.

kodunu aşağıdaki gibi değiştirip denermisin

insert into DENEME
(IDNO, ADI, SOYADI, TELEFON)
values
(gen_id(genaratoradı,1), :ADI, :SOYADI, :TELEFON)

daha sonra bu kodu denersen sanırım problem kalmayacak

Kod: Tümünü seç

With Veri.IBDataSet1 do 
    begin 
       Prepare ; 
       ParamByName('ADI').AsString := Edit1.Text; 
       ParamByName('SOYADI').AsString := Edit2.Text; 
       ParamByName('TELEFON').AsString := Edit3.Text; 
       ExecSQL; 
    end; 
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@cihan ın dediği gibi IDNO alanına da her yeni kayıt (INSERT) de değer atamak gerekir.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla