Proje Hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
DotCom
Kıdemli Üye
Mesajlar: 1696
Kayıt: 11 Tem 2003 10:30
Konum: İzmir
İletişim:

Proje Hakkında

Mesaj gönderen DotCom »

Merhabalar Şimdiye kadar aldığım yardımlar için Mustafa bey`e Teşekkür ederim.

Sorularım Şunlar Olucaktı.

1)
Uğraştığım program bir fatura programı fatura basıyor vede aynı zamanda basılan faturalarıda kaydediyor. kaydetme işilemlerinin tamamında table kullandım. farklı bir form üzerinde belli tarihler arasını listelemek için query kullandım .

query1.SQL.Add('SELECT * FROM Fatura WHERE TARIH BETWEEN '+Edit1.Text+' AND '+Edit2.text+');

iki adet edit e girilen tarih aralıklarını listelettirmek istiyorum dbgrid de fakat bu komuta hata veriyor. sadece edit1 i kullanıp where ile tek kayıt bulmak istedeğimde ise type hatası veriyor. tarih kısmının field type i Date. bana bu konuda yardımcı olursanız sewinirim.

2) bir query1 im var birde datasource1 bunların ayarlamaları tam olrak yapılmış. herhangi bir sql cümlesi ile dbgrip e birşeyler döküyorum. ama table ın tüm kayıtları degil mesela iki tarih arası bişşiler listeledim. bu dbgrid de elde ettigim sonucu nasıl quickrep e aktara bilirim sadece o kayıtları yazdırmasını sağlaya bilirim bir rapor gibi.

3) Mustafa bey bir db edit deki para değerini yazı olarak yazan kod u bana göndermişti ama kod içerisinde procedure falan var bunları form içerisinde nasıl kullanacagımı bilmiyorum. kodu aşagıda yazıyorum. atıyorum benim dbedit1 die bir dbedit im var buna nasıl bu kodu uygulaya bilirim. Adım Adım Açıklarsanız sewinirim.

Kod:
function SayiToSozlu (Number :Double):String;
var
Text :Array [0..9,0..1] of String;
Sy, Syt, S : String;
function Oku(Deg:String):String;
var
B1,B2,B3 : String;
P : Integer;
begin
try
B1 := Text[strToInt(copy(Deg, 3, 1)), 0];
B2 := Text[strToInt(Copy(Deg, 2, 1)), 1];
P := strToInt(Copy(Deg, 1, 1));
except
P := 0;
end;

if P > 1 then
b3 := Text[P, 0] + 'Yüz'
else if P = 1 then
b3 := 'Yüz'
else b3 := '';

Oku := b3 + B2 + B1;
end;
begin
Text[0, 0] :='';
Text[1, 0] := 'Bir';
Text[2, 0] := 'İki';
Text[3, 0] := 'Üç';
Text[4, 0] := 'Dört';
Text[5, 0] := 'Beş';
Text[6, 0] := 'Altı';
Text[7, 0] := 'Yedi';
Text[8, 0] := 'Sekiz';
Text[9, 0] := 'Dokuz';
Text[1, 1] := 'On';
Text[2, 1] := 'Yirmi';
Text[3, 1] := 'Otuz';
Text[4, 1] := 'Kırk';
Text[5, 1] := 'Elli';
Text[6, 1] := 'Altmış';
Text[7, 1] := 'Yetmiş';
Text[8, 1] := 'Seksen';
Text[9, 1] := 'Doksan';

if Number <= 0 then
begin
Result := '';
Exit;
end;

S := FormatFloat('0',Number);
S := '000000000000000' + S;
S := Copy(S, Length(s)-14, 15);
Sy := '';
syt := '';

{Boluk$ := MID$(S$, 13, 3): Bolok Boluk$, Sy$, Text$()}
syt := Oku(copy(S, 13, 3));
if Oku(copy(S, 10, 3)) <> '' then
if strToInt(copy(S, 10, 3)) = 1 then
syt := 'Bin' +Syt
else
syt := Oku(copy(S, 10, 3))+'Bin' +Syt;

if Oku(copy(S, 7, 3)) <> '' then
syt := Oku(Copy(S, 7, 3)) + 'Milyon' + Syt;

if Oku(Copy(S, 4, 3)) <> '' then
syt := Oku(Copy(S, 4, 3)) + 'Milyar' + Syt;

if Oku(Copy(S, 1, 3)) <> '' then
syt := Oku(Copy(S, 7, 3)) + 'Trilyon' + Syt;

SayiToSozlu := syt;
end;

function SayiAdiniBul(N: LongWord): string;
begin
case N of
1..19 : Result := YirmidenKucukler[N];
20..99 : Result := Onluklar[N Div 10] + ' ' + SayiAdiniBul(N Mod 10);
100..999 : Result := YirmidenKucukler[N Div 100] + ' HUNDRED ' + SayiAdiniBul(N Mod 100);
1000..999999 : Result := SayiAdiniBul(N Div 1000) + ' THOUSAND ' + SayiAdiniBul(N Mod 1000);
1000000..999999999 : Result := SayiAdiniBul(N Div 1000000) + ' MILLION ' + SayiAdiniBul(N Mod 1000000);
1000000000..4294967295 : Result := SayiAdiniBul(N Div 1000000000) + ' BILLION ' + SayiAdiniBul(N Mod 1000000000);
end; {case}
end;

function SayiOku(Sayi : Real): String;
begin
if Sayi = 0 then
Result := ''
else
if (Sayi >= EnKucuk) and (Sayi <= EnBuyuk) then
begin
Result := SayiAdiniBul(Round(Int(Sayi)));
if not(Frac(Sayi)=0.00) Then Result:=Result+' and '+IntToStr(Round(Frac(Sayi)*100))+'/100';
end
else
Raise ERangeError.CreateFmt('%g ' + HataMesaji + ' %g..%g', [Sayi, EnKucuk, EnBuyuk]);
end;

4) Son olarak Sorum Şu : Hangi programı yapmaya başlarsam başlayım şöyle bir problem ile karşılaşıyorum. Şirketlere program yarzarken para hesaplarında problem yaşıyorum mesela integer tanımladım hesaplıyacagım değerleri. 3 veya 4 milyarsan daha fazla hesap yapamıyorum mesela 300 - 400 milyar. Bu sorunun cvp ı double ile çözülüyor sanırım. ama yapmayı beceremedim. iki adet sayıyı yani 20 - 30 milyar lira bunları toplayıp yazdıran bir program kodunu yazarsanız çok ama çok sewinirim.


Vereceginiz cvp lara şiimdiden teşekkür ederim. İyi Çalışmalar. Kolay Gelsin.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

1. Tarih değerlerini tek tırnak içerisinde yazman lazım. Yani WHERE TARIH BETWEEN '01.08.2003' and '30.08.2003' gibi. Buna göre Delphiden eklerken de

query1.SQL.Add('SELECT * FROM Fatura WHERE TARIH BETWEEN ''' + Edit1.Text+''' AND ''' + Edit2.text + '''');

olmalı. ' eklemek için 2 tane ' yani '' yazman lazım.

2. Qr'nin dataset'ine bu Query'i bağla.

3. Onun kullanımı için sadece SayiToSozlu(sayıyı_yada_değişkeni_yaz);

parametre olarak Double tipinde sayı verirsin, sana string olarak yazıyla döndürür. SayıToSozlu (123456) gibi.

4. Integer tanımlarsan geçemezsin. Float veya Currency/Money tipinde tanımla alanı.

Kolay gelsin.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

1 soruna daha pratik bir cevap vereyim. Query ye paramaetre olarak gönder. Query i string olarak verirseniz özellikle date tiplerinde tarih ayıracı yüzünden hatalarla karşılaşabilirsiniz. Amma parametre gönderirseniz problem çıkmaz

try
query1.Clear;
query1.SQL.Add('SELECT * FROM Fatura WHERE TARIH BETWEEN :Ilk AND :Son');
query1.Prepare;
query1.ParamByname('Ilk').AsDate := DateTimePicker1.Date;
query1.ParamByname('Son').AsDate := DateTimePicker2.Date;
query1.Open;
except
ShowMessage('Queryde Hata Oluştu');
end;
Kolay Gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla