Değişken Tip Sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Değişken Tip Sorunu

Mesaj gönderen vipaydin »

Merhaba,

SQL Server 2000 kullanıyorum.
Veritabanında kullandığım alanlardan bir tanesi Integer.
Program dahilinde bunu MaskEdit ile bilgisini alıyorum.
Yalnız bir sorunum var.
MaskEdit e herhangi 4 basamaklı bir rakam girdiğimde sorun olmuyor. Veritabanına kayıt yapıyor.
Yalnız hiçbir şey girmediğim zaman
'Uygulama, geçerli işlem için yanlış türde bir değer kullanıyor' gibi bir hata alıyorum.
Benim yapmak istediğim Maskedit içi boşsa NULL değer ataması, eğer içinde bir rakam mevcut ise o rakamı veritabanına yazmak.
Kullanıcı avatarı
muskut
Kıdemli Üye
Mesajlar: 1118
Kayıt: 22 Ara 2003 09:50
Konum: Sandalyemden
İletişim:

Mesaj gönderen muskut »

Kullanmış olduğun bileşen Query ise ve parametereler ile maskedit'in içini gönderiyorsan, paramaterlerin default değerlerine birşeyler ata. bu şekilde sorununu çözeceğini düşünüyorum.
Misafir

Mesaj gönderen Misafir »

merhaba.
maskedit nesnesinin maske formatı nedir?örneğin boşken ____ gibi bir şeyse vtye texti gönderdiğin ekranda görülen bilgiyi gönderiyordur (sanırım).
kolay gelsin.
Kullanıcı avatarı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Mesaj gönderen Bil_Bakalım »

mask edit yaparken tabloya kayıt et seçeneği ne durumda bu etkiliyor olabilirmi acaba
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Arkadaşlar,

İlginize teşekkür ederim.
MaskEdit te herhangi bir Maske yok. Tek özelliği Maxlengh=4 tanımlı. Başka bir özelliği yok.

Parameters.ParamByName('V1').Value:=alan şeklinde bir tanımlaması mevcut.

Dediğim gibi herhangi bir rakam girersem sorun yok ama boş geçersem tiple alakalı sorun çıkarıyor.
Ne olduğunu çıkaramadım.
En son bir deneme daha yaptım, bunda da aynı sorunu verdi.
En son denememdeki Yazdığım kodlar.

Kod: Tümünü seç

procedure TForm3.Button1Click(Sender: TObject);
var  kg,cm:string;
      vd,vhn:string;
begin
vd:=MaskEdit63.Text;
vhn:=MaskEdit64.Text;
kg:=MaskEdit21.Text;
cm:=MaskEdit22.Text;
with AdoQuery2 do
begin
SQL.Text:='INSERT INTO Table1 (VD,VHN,KG,CM) VALUES (:V1,:V2,:V3,:V4)
Parameters.ParamByName('V1').Value:=vd;
Parameters.ParamByName('V2').Value:=vhn;
Parameters.ParamByName('V3').Value:=kg;
Parameters.ParamByName('V4').Value:=cm;
ExecSQL;
end;
kg ve cm veritabanında integer olarak tanımlı.
var kg,cm:integer
olarak tanımladığımda ise daha başka sorunlar çıkıyor.
Mesela
Maskedit in içindeki text bilgiyi hiç göremedim.
Misafir

Mesaj gönderen Misafir »

tekrar merhaba.
sql serverın integer tipinin nasıl davrandığını şu an tam olarak hatırlayamadım ancak boş değer girilmesi durumunda bir kırılmaya neden oluyor sanırım. maskeditin text özelliğini (ya da length(text)) özelliğini kontrol ederek boşsa "0" atayın bir de bu şekilde deneyin.
Misafir

Mesaj gönderen Misafir »

sql server da integer alanı null bıraksanız bile kırılmaya sebep olmaz :) sorun orad değil yani.
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Evet arkadaşlar,

SQL Server da integer alanı NULL bırakınca herhangi bir kırılma yok. Ama programda kırılıyor.
Ben zannediyorum ki değişken tiplerinde atladığım bir yer var.
Ama nerede?
Misafir

Mesaj gönderen Misafir »

kaydetmeden önce maskedit.texti bi kontrol edin, içeriği tam olarak ne?
Misafir

Mesaj gönderen Misafir »

şunu dene

Kod: Tümünü seç

var i : integer;
begin
i:= inttostr(maskedit1.text);
end;
bakalım gerçekten integer olabiliryor mu orası. ama muhtemelen boş olsa da hata verecektir. topiğin üst kısmında konuşulanları şu anda hatırlamıyorum.

şunu yapman gerekebilir. eğer maskedit boş ise direk olarak değil de null e çevirerek sql server a göndermen gerekebilir. yani belki hata sqlserver da değil de delphideki tip dönüşümü sırasında oluşuyordur.
Misafir

Mesaj gönderen Misafir »

parametrelerin tipleri nedir peki?
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Kod: Tümünü seç

var i : integer; 
begin 
i:= inttostr(maskedit1.text); 
end; 
Bu kod ile maskedit in içindeki text alınamıyor. Muhakkak bir hata veriyor.

Parametre olarak;
Parameters.ParamByName('V3').Value:=kg;

şeklinde bir tanımlama yapmıştım.
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Arkadaşlar pardon,

Şimdi sizin nasıl bir kod yazacağınızı isteyeceğim. Lütfen.

SQL Server da bir alan (integer)
Bir adet Maskedit. (Tek özellik olarak maxlenght 4 olacak şekilde)

Maskedit e herhangi bir rakam girilirse bu rakam,
girilmezse NULL veya NULL olmazsa yani integer bir alana NULL kaydedilemez ise 0 gibi değer kaydetmek istiyorum.

Sizden gelecek kod örnekleri ile kendileriminkini karşılaştıracağım.
Mutlaka hata yaptığım bir yer vardır.

Teşekkür ederim.
Misafir

Mesaj gönderen Misafir »

Kod: Tümünü seç

if maskedit1.text = '' then Parameters.ParamByName('V3').Value:=null else Parameters.ParamByName('V3').Value:=kg; 
Misafir

Mesaj gönderen Misafir »

tekrar sorayım, kullandığınız parametrenin tipi nedir?
Cevapla