XSQLDA index out of range Hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
altunway
Üye
Mesajlar: 217
Kayıt: 11 Haz 2003 09:16
Konum: İstanbul
İletişim:

XSQLDA index out of range Hatası

Mesaj gönderen altunway »

S.A. Arkadaşlar benim sorunum 'XSQLDA index out of range' hatası.

Aşagıdaki kod işlediği zaman hatayı veriyor


IBdataset1.Close;
IBdataset1.UnPrepare;
IBdataset1.insertSQL.Clear;
IBdataset1.insertSQL.Add('INSERT INTO STOKTANIM(KODU,ACIKLAMA)');
IBdataset1.insertSQL.Add('VALUES(:A1,:A2)');
IBdataset1.Prepare;
IBdataset1.Params[0].AsString:=Edit14.Text;
IBdataset1.Params[1].AsString:=Edit15.Text;
IBdataset1.ExecSQL;



veri tabanımın yapısından kaynaklanabilir mi ??

veri tabanım ise şu

CREATE TABLE "STOKTANIM"
(
"KODU" VARCHAR(15),
"ACIKLAMA" VARCHAR(100),
"OZELKODU" VARCHAR(15),
"FIRMAKODU" VARCHAR(15),
"ANABIRIM" VARCHAR(15),
"IKIBIRIM" VARCHAR(15),
"UCBIRIM" VARCHAR(15),
"KDV" VARCHAR(20),
"INDIRIMS" VARCHAR(20),
"INDIRIMA" VARCHAR(20),
"BARKOD" VARCHAR(30),
"BARKODTURU" VARCHAR(20),
"STOKCINSI" VARCHAR(15),
"STOKADI" VARCHAR(20),
"STOKAMBARI" VARCHAR(20),
"ISDATE" VARCHAR(11),
"ISPERSON" VARCHAR(15)
);
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Kod: Tümünü seç

IBdataset1.Paramcheck:=False;

ile bir deneyin.
Kullanıcı avatarı
altunway
Üye
Mesajlar: 217
Kayıt: 11 Haz 2003 09:16
Konum: İstanbul
İletişim:

Mesaj gönderen altunway »

S.A
Fahrettin Abi Çok Sağol Ama Bu Kod ile çalıştırdıgımda da aynı hatayı veriyor.Bir Türlü çıkamadım işin içinden Çok Teşekkürler...

Bu Kod ile denedim..

IBtable1.Close;
IBtable1.UnPrepare;
IBtable1.insertSQL.Clear;
IBtable1.insertSQL.Add('INSERT INTO STOKTANIM(kodu,ozelkodu,firmakodu,stokadi,stokcinsi,stokambari,aciklama,anabirim,ikibirim,ucbirim,indirims,indirima,kdv,barkodturu,barkod)');
IBtable1.insertSQL.Add('VALUES(:A1,:A2,:A3,:A4,:A5,:A6,:A7,:A8,:A9,:A10,:A11,:A12,:A13,:A14,:A15)');
IBtable1.Prepare;
IBtable1.Params[0].AsString:=edit14.Text;
IBtable1.Params[1].AsString:=edit16.Text;
IBtable1.Params[2].AsString:=edit17.Text;
IBtable1.Params[3].AsString:=edit28.Text;
IBtable1.Params[4].AsString:=combobox1.Text;
IBtable1.Params[5].AsString:=combobox2.Text;
IBtable1.Params[6].AsString:=edit15.Text;
IBtable1.Params[7].AsString:=combobox5.Text;
IBtable1.Params[8].AsString:=combobox6.Text;
IBtable1.Params[9].AsString:=combobox7.Text;
IBtable1.Params[10].AsString:=ovcnumberedit2.Text;
IBtable1.Params[11].AsString:=ovcnumberedit3.Text;
IBtable1.Params[12].AsString:=ovcnumberedit1.Text;
IBtable1.Params[13].AsString:=combobox8.Text;
IBtable1.Params[14].AsString:=ovcnumberedit4.Text;
ibtable1.Paramcheck:=False;
IBtable1.ExecSQL;


Çok Teşekkürler..Kolay Gelsin.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7587
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

yapıyı tam olarak denemedim ama şöyle yapabilirsin. SQL_Cumlesi diye string bir değişken tanımla. Bunda Insert ifadesi oluştur ve öyle ekle.

Kod: Tümünü seç

SQL_Cumlesi := '';
SQL_Cumlesi := ''INSERT INTO STOKTANIM';
SQL_Cumlesi := SQL_Cumlesi + ' (kodu,ozelkodu,firmakodu,stokadi,stokcinsi,stokambari,'+ 
'aciklama,anabirim,ikibirim,ucbirim,indirims,indirima,kdv,barkodturu,barkod)';
SQL_Cumlesi := SQL_Cumlesi + 'VALUES (' + Edit14.Text + ',' + Edit16.Text + ',' ......+')';
daha sonra bunu ekleyip, ExecSQL ile çalıştır.

Kolay gelsin.
Kullanıcı avatarı
altunway
Üye
Mesajlar: 217
Kayıt: 11 Haz 2003 09:16
Konum: İstanbul
İletişim:

Mesaj gönderen altunway »

S.A ;

SQL_Cumlesi := '';
SQL_Cumlesi := 'INSERT INTO STOKTANIM';
SQL_Cumlesi := SQL_Cumlesi+ '(kodu,ozelkodu,firmakodu,stokadi,stokcinsi,stokambari,aciklama,anabirim,ikibirim,ucbirim,indirims,indirima,kdv,barkodturu,barkod)';
SQL_Cumlesi := SQL_Cumlesi + 'VALUES('+ Edit14.Text + '","' + Edit16.Text + ','+ edit17.Text + ',' + edit28.Text + ',' + combobox1.Text + ',' + combobox2.Text + ',' + edit15.Text + ',' + combobox5.Text + ',' + combobox6.Text + ',' + combobox7.Text + ',' + ovcnumberedit2.text + ',' + ovcnumberedit3.Text + ',' + ovcnumberedit1.Text + ',' + combobox8.Text + ',' + ovcnumberedit4.Text +')';


Sql Cümlesinde Hata Oldugunu Söylüyor ;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

'out of range' sanırım indexlerle ilgili bir hata. tablonun create kısmında hiç bir index tanımlanmamış. index tanımlayıp denemelisin.

ayrıca SQL_Cumlesi := SQL_Cumlesi + 'VALUES ..' gibi string eklemesi yaptığın satırlarda bir boşluk vermediğinden yazım hatası oluşmaktadır. bunu işlem sonunda showmessage(SQL_Cumles) deyip yazdırırsan daha iyi göreceksin.
... STOKTANIM'; stoktanim dan sonra bir boşluk veya value den önce bir boşluk bırakmalısın. vs.
Kullanıcı avatarı
altunway
Üye
Mesajlar: 217
Kayıt: 11 Haz 2003 09:16
Konum: İstanbul
İletişim:

Mesaj gönderen altunway »

S.A

Kafayı yemek üzereyim abilerim yaww.Bir sql cümlesini çalıştıramadım doğru düzgün.Recep abi 'nin dediği gibi index oluşturdum ama yine aynı..Sql_Cümlesi'nin içindeki boşlukları ayarladım ama column unknown adında başka bir hata daha vermeye başladı..Dua edin de kafayı sıyırmayayım.Bunu bir geçebilsem devamı gelecekte işte olmuyor :cry:
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7587
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Interbase kullanıyorsun herhalde. Önce Interbase tollarında SQL cümlesini deneyip, çalıştırdıktan sonra ekle.

Insert ile kayıt eklerken, grilmesi gerekli tüm alanlara değer vermelisin, eğer alan null olamaz diye işaretlemişsen değer vermelisin. AutoInc bir alan ise bunu es geçmelisin. String ve tarih ifadeleri tek tırnak içinde yazmalısın. Dediğim gibi Interbase toolları ile deneyip, öyle Delphi'ye aktar.

Kolay gelsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Mustafa nın da dediği gibi ibconsole gibi bir ara yüzden aynı işlemi yaptırmaya çalış. böylece her hangi bir hatayı daha kolay yakalarsın. ayrıca bahsettiğin "column unknown" hatası da olmayan bir alan anlamındadır. yazımda bir hata olabilir. select * ... ile bir dbgrid de alan isimlerini tekrar kontrol et.
Kullanıcı avatarı
altunway
Üye
Mesajlar: 217
Kayıt: 11 Haz 2003 09:16
Konum: İstanbul
İletişim:

Mesaj gönderen altunway »

S.A Recep Abi ..Interbase 'de Interactive Sql üzerinde aynı kodu yazıyorum insert ediyor fakat ibdataset olayında aynı kodu yazdığımda hata veriyor..Sizce IBDATASET ile en doğru kaydetme yöntemi nedir.? Nasıl yapmalıyım.

Şimdiden Teşekkür Ederim..Sizleride meşgul ediyorum hakkınızı helal edin.. :oops:
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Merhaba,

sanırım yanlışlık baştan kaynaklanıyor. Ben de IBX i daha önce kullanmadığımdan gözümden kaçmış.

Yapacağın olay şu; baştan anlatayım, formunda IBDatabase var ve gdb dosyasını DatabaseName inde path i ile birlikte belirtiyorsun (bu arada IBTransaction ı da eklemeyi unutma). Daha sonra tablo kullanacaksan IBTable i kullanıyorsun yoksa select, insert, delete ve update ler için IBQuery yi kullanmalısın. (daha doğrusu ise IBUpdateSQL i kullanmaktır).

IBQuery1.ExecSQL; demeden önce de
showmessage( IBQuery1.SQL.Text ); ile de sorgunun yada insert in son durumunu incelersen yazım hatası olup olmadığını da anlayabilirsin.

Umarım bu yolla çözersin..
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Datasetin üstüne sağ tıkla.
Dataset editore gel... Table ı seç. Table seçiminin altındaki 4 butona yukardan aşağıya doğru sırayla tıkla. Ok bas çık. Generator field alanını da object inspector den seç. Tıkır tıkır çalışır...
Sevgiler
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Kullanıcı avatarı
altunway
Üye
Mesajlar: 217
Kayıt: 11 Haz 2003 09:16
Konum: İstanbul
İletişim:

Mesaj gönderen altunway »

S.A Arkadaşlar

Sorunumu Hallettim ama IBdataset ile değil :lol:

IBquery kullandım.Gayet Güzel Kayıt yapabiliyorum.

Kodları ise ;

ibquery1.Close;
ibquery1.SQL.Clear;
ibquery1.SQL.Add('INSERT INTO STOKTANIM(KODU,OZELKODU,FIRMAKODU,STOKADI,STOKCINSI,STOKAMBARI,ACIKLAMA,ANABIRIM,IKIBIRIM,UCBIRIM,INDIRIMS,I NDIRIMA,KDV,BARKODTURU,BARKOD) VALUES (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)');
ibquery1.Open;
form1.DBTR.CommitRetaining;

Bu Şekilde Gayet Güzel Çalışıyor

Ama Dataset ile çalışmıyor

Son verdiği hata ise 'USE OPEN FOR A SELECT STATEMENT'

IBDataset1.Close;
IBDataset1.Unprepare;
IBDataset1.insertSQL.Clear;
IBDataset1.insertSQL.add('INSERT INTO STOKTANIM(KODU,OZELKODU,FIRMAKODU,STOKADI,STOKCINSI,STOKAMBARI,ACIKLAMA,ANABIRIM,IKIBIRIM,UCBIRIM,INDIRIMS,INDIRIMA,KDV,BARKODTURU,BARKOD) VALUES (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)');
IBDataset1.prepare;
IBDataset1.ExecSQL; (bu kod çalışmaya başlar başlamaz yukarıdaki hatayı veriyor)

Sql Kodumda hiçbir sorun yok.Bundan eminim ama dataset işte çıkaracak illa bir sorun

Dataset ile bir türlü kaydedemedim..Her yolu denedim her türlü kombinasyonu gerçekleştirdim(işlem sırasına göre) ama olmadı.Eğer bunun bir çözümünü bulabilirseniz çok sevineceğim.Ben Piknikten önce 3 gün piknikten sonra da iki gün olmak üzere toplam 5 gündür uğraşıyorum.


Yardımlarından dolayı herkese teşekkür ederim .
Neyse Herkese Teşekkür Ederim Kolay Gelsin Arkadaşlar
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

Delphi Interbase compenentlerini yazarken düşündüğü şey şuydu: Kaydetme, Silme, değiştirme gibi işlemler Dataset üzerinden yapılmalı, Sorgulama işlemleri Query üzerinden yapılmalı, Runtime StoredProcedure, Generator oluşturma gibi işlemler de IBSQL bileşeni üzerinden yapılmalı. Zaten componentlerinyapısına baktığınızda hatta bu componentlerin isimlerine baktığınızda da delphiyi yazanların böyle düşündüğünü açıkca görebiliyorsunuz. Bence Dataset kullanmayı öğrenmelisin. Queryi (adı üzerinde "sorgu") ise sorgulama işlemlerinde kullanmalısın. Datasetin nasıl kullanılacağına dair bi makale yazacağım.
Sevgiler...
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
sair
Kıdemli Üye
Mesajlar: 288
Kayıt: 16 Haz 2003 04:41
Konum: Kastamonu
İletişim:

Mesaj gönderen sair »

IBDataset bileşeninin nasıl kullanılacağına dair bi makale yazdım. Makaleler bölümünde. Ordan yararlanabilirsin.
Sevgiler...
Geçip gideriz bizde ağızsız,dilsiz ve sorgusuz
İstanbul gibi düşeriz iki kıtaya birden...
En aşağılık düş, en büyük sevdadan belki
Erkek ölümler; bir uzun iç çekişle büyür göğsümüz
Cevapla