SQL HATASI

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
bimsamsy
Üye
Mesajlar: 25
Kayıt: 04 Mar 2005 04:42

SQL HATASI

Mesaj gönderen bimsamsy »

sql bileşeninde

SELECT * FROM PUANTAJ
where BIRIMKOD=:birimkod and DONEM=:donem

SQL bileşeninde HAFTASONU alanını DIŞARDAM EKLEDİM

SQLBirimPersonelBulCalcFields içerinde

dm.SQLBirimPersonelBulHAFTASONU.Text:=20;

komut var

SELECT * FROM PUANTAJ
where BIRIMKOD=:birimkod and DONEM=:donem
order by HAFTASONU

komutu çalışınca

sql hatası 3çok az parametre 3. bekleniyor diyor


amacım HAFTASONU ALANINA GÖRE SIRALAMA
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

CalcField (hesaplanmış alan) ları SQL içinde düşünmeyin. Onlar sadece DataSet te bir alan olarak kullanılabilirler. Buradaki Select/Sorgu yapısında kullanamazsınız. Ayrıca sorguda iki adet parametreniz var onlara değer atıyor musunuz :?:

Kod: Tümünü seç

dm.SQLBirimPersonelBul.ParamByName('birimkod').AsInteger := ... veya .Value := değer;  her ne tür ise.
dm.SQLBirimPersonelBul.ParamByName('donem').AsInteger := ...
komut var...
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
bimsamsy
Üye
Mesajlar: 25
Kayıt: 04 Mar 2005 04:42

sql hatası

Mesaj gönderen bimsamsy »

SELECT * FROM PUANTAJ
where BIRIMKOD=:birimkod and DONEM=:donem
komutunda hatam yok

sadece order by HAFTASONU nu ekleyince hata veriyor

burdaki HAFTASONU CalcField (hesaplanmış alan) dır.

aslında SQL den aldığım sonucu dbgridde gösteriyorum. fakat 200 e yakın kayıt var en üsteki kaydın HAFTASONU değerini CalcField (hesaplanmış alan) ile hesaplatıp yazdırıyorum. DBGRİD alanı küçük olunca her HAFTASONU kayıt girişinde kayıtlar üste gelmektedir.

tekrar mouse ile alttadi kaydı seçip giriş yapmam lazım. Bende kendimce HAFTASONU alanına göre sıralrırsam dedim(boş alanlar yukarıda olacak şekilde) giriş yapan kişi eksik kayıt girmemiş olur dedim.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

merhaba,

Yanlış anlamış olabilirim. ilgili datasetin fields özelliğine gelerek new fields de calc alan oluşturduğunzda ve datasetin select sql sinde order by olarak bu alanı kullandığınızda işlem gerçekleşmiyor mu.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Hesaplanan alanı SQL'de yapsan ve öyle sıralasan. Delphi tarafında hesaplanan bir alanı SQL'de sıralayamazsın.

select a,b,c,d=a+b
from tablo
order by d

Burda d alanı a ve b'nin toplamı calculated bir alan. Firebird gibi bir veritabanı kullanıyorsan direk tabloya calculated alan ekleyebiliyorsun. Formül yazabiliyorsun.

Bir ikinci not "d=a+b" her veritabanında yemeyebilir. "a+b as d" şeklinde deneyebilirsin.

Kolay gelsin.
bimsamsy
Üye
Mesajlar: 25
Kayıt: 04 Mar 2005 04:42

sql hatası

Mesaj gönderen bimsamsy »

aşağıda CalcFields alanı oldukça karışık bunu sqlde hesaplatmam zor.

başka çözüm bulamadım

Kod: Tümünü seç

procedure TDM.SQLBirimPersonelBulCalcFields(DataSet: TDataSet);
var
a,b,hsfc,hifc,vc,yemek,e,bayramcalisma,seyyargorev:string;
sirano:integer;
begin

a := 'G'+copy(frmpuantaj.Edit3.text,1,2);
sirano:=dm.SQLBirimPersonelBulSIRANO.Value;
b:=copy(gunbul(sirano,a),1,2);
hifc:=copy(gunbul(sirano,a),3,2)+','+copy(gunbul(sirano,a),5,2);
hsfc:=copy(gunbul(sirano,a),7,2)+','+copy(gunbul(sirano,a),9,2);
vc:=copy(gunbul(sirano,a),11,2)+','+copy(gunbul(sirano,a),13,2);
yemek:=copy(gunbul(sirano,a),19,1);
seyyargorev:=copy(gunbul(sirano,a),20,1);
bayramcalisma:=copy(gunbul(sirano,a),15,2)+','+copy(gunbul(sirano,a),17,2);

dm.SQLBirimPersonelBulFAZLACALISMA.Text:=hifc;
dm.SQLBirimPersonelBulHAFTASONU.Text:=hsfc;
dm.SQLBirimPersonelBulVARDIYACALISMA.Text:=vc;
dm.SQLBirimPersonelBulYEMEK.Text:=yemek;
dm.SQLBirimPersonelBulBAYRAMCALISMA.Text:=bayramcalisma;
dm.SQLBirimPersonelBulSEYYARGOREV.Text:=seyyargorev;
dm.SQLBirimPersonelBulPUANTAJ.Text:=puantajkodbul1(copy(gunbul(sirano,a),1,2));
end;
Not: Kodları [ code ] [ /code ] etiketleri arasına yazalım.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kardeşim ısrarla aynı şeyi söylüyoruz ya sanırım anlaşılamadı :? Delphi tarafta oluşturulan herhangi bir değeri sorgunun bir parçası gibi kullanamazsın :!: Sadece parametre değerlerini geçirebilirsin. CalcField e göre sıralama yapman gerekiyorsa oluşan sorguyu kullanacağın bir geçici Mem_Table a HAFTASONU alanı indeks olarak tanımlanmış halde atayıp istediğin gibi sıralatmış olursun :idea: Mem_Table lara genelde tek bir komutla da diğer bir DataSet (Query gibi) atama yapabilirsin;

Kod: Tümünü seç

Mem_Table.Open;
Mem_Table.LoadFromDataSet(Query, []); 
//...
gibi :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla