SQL de değer alma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: SQL de değer alma

Mesaj gönderen emin_as »

Sorun yazdırmada degil, programlama-algoritma bilgisinin sıfır olması. Günlerdir burada 2-3 kod için ugraşıyorsun, oysa bir ögleden sonranı algoritmaya ve sql e ayırsan zaten bu soruları sormak zorunda kalmayacaksın.

CSRehber.fieldbyname('ECIK_KODU').asinteger:=CSRehber.fieldbyname('ECIK_KODU').asinteger+1;
Bu kodla ECIK_KODU 1 artırmaya çalışıyorsun, ama artıramazsın çünkü csrehber sql sorgusu ve readonly çalışır. Sadece sonuç döndürür.

Edit1.Text:=IntToStr(StrToInt(Edit1.Text)+1);
Bu kodla Edit1 in içerigindeki rakamı neyse 1 artırıyorsun, bu procedure girdiginde program her seferinde 1 artıracaktır. Bu da son derece gereksiz.

CSRehber.Active:=True;
CSRehber i open ile işlettin bir daha niye aktif yapıyorsun.

Algoritmada programı kafanda satır satır işletip, ne zaman ne olacagına karar verirsin. Burada kodun ne yaptıgı konusunda en ufak fikrin yok, sagdan soldan buldugun kodları birleştirip birşey yapmaya çalışıyorsun.

Dogru kod şu şekilde olmalı:

Kod: Tümünü seç

CSRehber.Close;
CSRehber.sql.clear;
CSRehber.sql.add('SELECT MAX(ECIK_KODU) from TBLEMANET');
CSRehber.open;
if not csrehber.Fields[0].isNull then Edit1.Text:=IntToStr(csRehber.Fields[0].AsInteger+1);
CSRehber.Close;
 
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: SQL de değer alma

Mesaj gönderen unicorn64 »

ozcank yazdı:Sorguya bir bakarmısınız? Her forma girdiği zaman TBLEMANET tablosundaki ECIK_KODU nu bir artırıp Edit1 e yazdırmak istiyorum MAX ile ECIK_KODU en son değerini buluyorum ama "CSRehber.fieldbyname('ECIK_KODU').asinteger:=CSRehber.fieldbyname('ECIK_KODU').asinteger+1" bu satırda
CSRehber:Field 'ECIK_KODU' not Found diyor lütfen bir el atın .

Kod: Tümünü seç

procedure TCARehber.FormActivate(Sender: TObject);
begin
CSRehber.Close;
CSRehber.sql.clear;
CSRehber.sql.add('SELECT MAX(ECIK_KODU) ECIKKODU from TBLEMANET');
CSRehber.open;
CSRehber.fieldbyname('ECIK_KODU').asinteger:=CSRehber.fieldbyname('ECIK_KODU').asinteger+1;
Edit1.Text:=IntToStr(StrToInt(Edit1.Text)+1);
CSRehber.Active:=True;
end;
ozcank yazdı:SQL server da çalıştırıyorum zaten en son değeri max ile alıyor ben sadece Edit1 e bir artırıp yazdırmada sorun yaşıyorum.
sadece çalıştırıp aa tamam sonuç geliyor işte demekle olmaz ki, çıkan sonuca baksan göreceksin aslında... kodunda mantık hatası eksiklikleri var zaten de,
Field 'ECIK_KODU' not Found hatasının sebebi sql de MAX(ECIK_KODU) için ECIKKODU diye isimlendirme yapıp sonra bunu programda CSRehber.fieldbyname('ECIK_KODU') diye almaya çalışman, hatada ECIK_KODU alanı yok diyor zaten...
isimlendirme doğru olsaydı da kod istediğinizi yapmayacaktı tabi... @emin_as nin verdiği kod işinizi görür...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Cevapla