SQL Server Update SP' sinde verdiği hata..

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
efkan
Üye
Mesajlar: 155
Kayıt: 31 Oca 2004 07:47
Konum: Tekirdağ
İletişim:

SQL Server Update SP' sinde verdiği hata..

Mesaj gönderen efkan »

Herkese merhaba,

ADOStored Proc. kullanarak hazırlamakta olduğum bi programda kayıt ekleyebiliyorum ancak kayıt güncellemek için yazdığım SP de şöyle bir hata msjı alıyorum;
Project Project1.exe raised exception class EOleException with message 'Error converting data type varchar to int'. Process stopped. Use Step or Run to continue.
Kodları aşağıda veriyorum. Yapılan iş "DBText.caption" da yazılı olan numarayı alacak ve SP ye parametre olarak gönderecek. SP nin işide o numaraya uyan @personelid nin verilerini formdakilerle değiştirecek..

Kod: Tümünü seç

else if (DBText1.Caption<>'') then

          Begin

              //kayit güncelleme sp si seçiliyor..
              ADOStoredProc1.Active:=false;
              ADOStoredProc1.Connection:=ADOConnection1;
              ADOStoredProc1.ProcedureName:='personelkayitguncelle';

              //parametreleri sil ve yenilerini oluştur..
              ADOStoredProc1.Parameters.Clear;
              ADOStoredProc1.Parameters.AddParameter.Name:='@adi';
              ADOStoredProc1.Parameters.ParamByName('@adi').DataType:=ftString;
              ADOStoredProc1.Parameters.ParamByName('@adi').Direction:=pdInput;
              ADOStoredProc1.Parameters.ParamByName('@adi').Size:=50;
              ADOStoredProc1.Parameters.ParamByName('@adi').Value:=edit1.Text;

              ADOStoredProc1.Parameters.AddParameter.Name:='@soyadi';
              ADOStoredProc1.Parameters.ParamByName('@soyadi').DataType:=ftString;
              ADOStoredProc1.Parameters.ParamByName('@soyadi').Direction:=pdInput;
              ADOStoredProc1.Parameters.ParamByName('@soyadi').Size:=15;
              ADOStoredProc1.Parameters.ParamByName('@soyadi').Value:=edit2.Text;

              ADOStoredProc1.Parameters.addParameter.Name:='@bolum';
              ADOStoredProc1.Parameters.ParamByName('@bolum').DataType:=ftString;
              ADOStoredProc1.Parameters.ParamByName('@bolum').Direction:=pdInput;
              ADOStoredProc1.Parameters.ParamByName('@bolum').Size:=14;
              ADOStoredProc1.Parameters.ParamByName('@bolum').Value:=edit3.Text;

              ADOStoredProc1.Parameters.addParameter.Name:='@deposorumlusu';
              ADOStoredProc1.Parameters.ParamByName('@deposorumlusu').DataType:=ftString;
              ADOStoredProc1.Parameters.ParamByName('@deposorumlusu').Direction:=pdInput;
              ADOStoredProc1.Parameters.ParamByName('@deposorumlusu').Size:=5;
              if CheckBox1.Checked=true then
                begin
                    ADOStoredProc1.Parameters.ParamByName('@deposorumlusu').Value:='1';
                end
           else
                begin
                    ADOStoredProc1.Parameters.ParamByName('@deposorumlusu').Value:='0';
                end;


              ADOStoredProc1.Parameters.addParameter.Name:='@personelid';
              ADOStoredProc1.Parameters.ParamByName('@personelid').DataType:=ftSmallint;
              ADOStoredProc1.Parameters.ParamByName('@personelid').Direction:=pdInput;
              ADOStoredProc1.Parameters.ParamByName('@personelid').Size:=10;
              ADOStoredProc1.Parameters.ParamByName('@personelid').Value:=StrToInt(DBText1.Caption);

              ADOStoredProc1.ExecProc;
              ADOTable1.CLOSE;
              ADOTable1.Open;
        end

yardımcı olacak arkadaşlara şimdiden teşekkürler..
Bilgisayar Programcısı/Analyst ve Sistem Yöneticisi
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

data type varchar to int
alfanümerik tipi nümerik e çeviriken sorun oluyor sanırım..

Kod: Tümünü seç

ADOStoredProc1.Parameters.ParamByName('@personelid').Value:=DBText1.Caption;
bu şekilde denermisin.
Resim

..::|YeşilMavi|::..
Kullanıcı avatarı
efkan
Üye
Mesajlar: 155
Kayıt: 31 Oca 2004 07:47
Konum: Tekirdağ
İletişim:

Mesaj gönderen efkan »

Evet öylede denemiştim. Hemde defalarca. Ama ne yazık ki çare olmadı..

İlgin için teşekkürler.

Hata mesajı dahi değişmiyor. Sanırım Borlandın ADO ya verdiği önemden kaynaklanıyor bu hata :)

iyi çalışmalar dilerim..

Nedense pek kimse yaşamamış bu sorunu. Delphi yi mi yeniden kursam acaba ama kuralı daha 2 hafta oldu ve hataya sebebiyet verecek bi işlem yapmadım.
Bilgisayar Programcısı/Analyst ve Sistem Yöneticisi
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Arkadaşım bunun borland yada delphi ile ilgili olduğunu sanmıyorum. Sonuçta ParamByName().Value Variant dır ve her tipi kabul eder. Bence Bu parametreleri DesignTime da oluşturun Runtime da sadece değer ataması yap eğer sorun hala devam ederse veritabanındaki alanı kontrol et.
Resim

..::|YeşilMavi|::..
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ç

ADOStoredProc1.Parameters.ParamByName('@deposorumlusu').Value:='1';
'0' ve '1' atadığın deposorumlusu tabloda da string mi :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

ADOStoredProc'a dizayn esnasında ProcedureName ataması yaparak Parametreleri direk getirtip, parametreleri yazdığınız koddakilerle aynı olup olmadığını bir karşılaştırın.

Eğer bunu denediyseniz:

Öncelikle hata mesajını hangi satırda verdiğini (galiba ADOStoredProc1.ExecProc' da veriyor) belirtip bir de STORED PROCEDURE'ünüzü de gösterirseniz belki problemin nereden kaynaklandığını daha net anlayabiliriz. Zira yazılımla ilgili problemlerin %99.999999'u yazılımcıdan kaynaklanır :lol:.

İyi çalışmalar.
Kullanıcı avatarı
efkan
Üye
Mesajlar: 155
Kayıt: 31 Oca 2004 07:47
Konum: Tekirdağ
İletişim:

Mesaj gönderen efkan »

merhabalar,

öncelikle problemin %99.999999 benden kaynaklandığını tahmin ediyorum ancak onlarca kez okunmasına karşın kimseden fikir çıkmayınca (Lazio hariç) bende her halde Borland ın hatasıdır dedim. İşe yaradı :) neyse..

Lazio ; Runtime da oluşturuyorum çünkü bu şekilde olması günler sonra bile dönüp baktığımda ne yaptığımı neyi nerden bağladığımı rahatlıkla görmemiz sağlıyor. Ayrıca formun üzerinde 1 veri nesnesinin olmasını 5 nesnenin olmasına tercih ederim. Çare kalmazsa önerini muhakkak yapacak. Denemedim ancak kesinlikle çalışcaktır.

RSimsek ; "@deposorumlusu" değişkeni tabloda bit tanımlı. Sanıyorum onunla alakalı bir problem değil biliyorsunuz kayıt ederken problemle karşılaşmıyorum. SP de ise alanlar nvarchar tanımlı..

Hakan Can ;
ADOStoredProc'a dizayn esnasında ProcedureName ataması yaparak Parametreleri direk getirtip, parametreleri yazdığınız koddakilerle aynı olup olmadığını bir karşılaştırın.

Eğer bunu denediyseniz:

Öncelikle hata mesajını hangi satırda verdiğini (galiba ADOStoredProc1.ExecProc' da veriyor) belirtip bir de STORED PROCEDURE'ünüzü de gösterirseniz belki problemin nereden kaynaklandığını daha net anlayabiliriz. Zira yazılımla ilgili problemlerin %99.999999'u yazılımcıdan kaynaklanır .

İyi çalışmalar.
diye yazmışsınız evet tahminler doğru. ADOStoredProc1.ExecProc' da hata mesajını alıyorum. İsteğiniz üzerine SP yi aşağıya ekliyorum..

Herkese çok teşekkür eder, iyi çalışmalar dilerim..

Kod: Tümünü seç

CREATE PROCEDURE personelkayitguncelle
    @personelid int,
    @adi nvarchar(50),
    @Soyadi nvarchar(15),
    @Bolum nvarchar(14),
    @deposorumlusu nvarchar(5)
AS

UPDATE
	personel
SET
	adi 	= @adi,
	soyadi 	= @soyadi,
	bolumu  = @bolum,
	deposorumlusu  = @deposorumlusu
WHERE
	personelid = @personelid
bu kadarcık koddan çıkamıyorum.. yazık...
Bilgisayar Programcısı/Analyst ve Sistem Yöneticisi
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Ne diyeyim Allah müstahakını versin :lol:.

Yani bir şey söyledim. İlla onaylattın (problemlerin %99.999999'u yazılımcıdan kaynaklanır) :lol:.

Parametreleri niye sırayla add etmezsin ki?

Yani STORED PROCEDURE'deki sırayla add etmelisin.

İyi çalışmalar.
Kullanıcı avatarı
efkan
Üye
Mesajlar: 155
Kayıt: 31 Oca 2004 07:47
Konum: Tekirdağ
İletişim:

Mesaj gönderen efkan »

:D Hakan ellerine sağlık..

ama bende demişim;
öncelikle problemin %99.999999 benden kaynaklandığını tahmin ediyorum ancak onlarca kez okunmasına karşın kimseden fikir çıkmayınca (Lazio hariç) bende her halde Borland ın hatasıdır dedim(ilgi çekebilmek için). İşe yaradı :) neyse..
Hakikaten oldu yauw..

Herkese tekrar teşekkürler..
Bilgisayar Programcısı/Analyst ve Sistem Yöneticisi
asilpol
Üye
Mesajlar: 2
Kayıt: 02 Kas 2013 02:52

Re: SQL Server Update SP' sinde verdiği hata..

Mesaj gönderen asilpol »

Hakan Can Kardeşim çok özür dileyerek Delphiye yeni başladım sayılır. Aynı hatayı bende alıyorum ve Sen arkadaşa bir yanıt vermişsin niye Add etmezsinki arkadaş hemen çözmüş olayı ama ben anlayamadım, şu Add etme olayını bana açıklayabilir misin şimdiden çok teşekkür ederim.
Cevapla