XSQLDA index out of range Hatası
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
XSQLDA index out of range Hatası
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)
);
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)
);
Kod: Tümünü seç
IBdataset1.Paramcheck:=False;
ile bir deneyin.
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.
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.
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.
daha sonra bunu ekleyip, ExecSQL ile çalıştır.
Kolay gelsin.
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 + ',' ......+')';
Kolay gelsin.
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 ;
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 ;
'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.
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.
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
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

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.
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.
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.
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..
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..
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
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
İ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
S.A Arkadaşlar
Sorunumu Hallettim ama IBdataset ile değil
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
Sorunumu Hallettim ama IBdataset ile değil

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
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...
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
İ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
IBDataset bileşeninin nasıl kullanılacağına dair bi makale yazdım. Makaleler bölümünde. Ordan yararlanabilirsin.
Sevgiler...
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
İ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