Delphi Can

Orjinalini görmek için tıklayınız: Matematiksel İşlem
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Database den çektiğimiz string bir formülümüz var. 
Bu formülümüz genislik*yukseklik diyelim. 
Hesaplama esnasında bu formülü çekerek, baska bir tablodan genislik ve yukseklik (float) değerini alıp hesaplama sonucunun çıktısını nasıl alırız?


Normal şartlarda ;

var sformul:string;
mgenislik,myukseklik,mformul:double;
begin
mgenislik:=1500 ;
myukseklik:=1500 ;
sformul:='mgenislik*myukseklik/1000000'; //burdaki formülü tablodan alıp,
mformul:= mgenislik*myukseklik/1000000;  buraya aktararak hesaplama nasıl yapabiliriz?
sedit1.Text:= floattostr(mformul);
end;
(19-03-2022, Saat: 15:35)apachi2006 Adlı Kullanıcıdan Alıntı: [ -> ]Database den çektiğimiz string bir formülümüz var. 
Bu formülümüz genislik*yukseklik diyelim. 
Hesaplama esnasında bu formülü çekerek, baska bir tablodan genislik ve yukseklik (float) değerini alıp hesaplama sonucunun çıktısını nasıl alırız?


Normal şartlarda ;

var sformul:string;
mgenislik,myukseklik,mformul:double;
begin
mgenislik:=1500 ;
myukseklik:=1500 ;
sformul:='mgenislik*myukseklik/1000000'; //burdaki formülü tablodan alıp,
mformul:= mgenislik*myukseklik/1000000;  buraya aktararak hesaplama nasıl yapabiliriz?
sedit1.Text:= floattostr(mformul);
end;



Alternatif olarak veritabanından formül ve parametreleri çekerken Execute Statement ile de çözebilirsin.

Ben sql Server da örneklendirdim, kullandığın veritabanına göre kod değişebilir.


[attachment=1994]
(19-03-2022, Saat: 17:46)frmman Adlı Kullanıcıdan Alıntı: [ -> ]https://github.com/Crownie88/Delphi-math...Parser.pas

Math sınıfı ekli olmasına rağmen pas dosyasında  94:Stack[0] := Power(Stack[1], Stack[0]);// Power  bu satırda hata veriyor.
Kullanımı konusunda bilgi verebilir misiniz?

(19-03-2022, Saat: 19:00)bydelphi Adlı Kullanıcıdan Alıntı: [ -> ]
(19-03-2022, Saat: 15:35)apachi2006 Adlı Kullanıcıdan Alıntı: [ -> ]Database den çektiğimiz string bir formülümüz var. 
Bu formülümüz genislik*yukseklik diyelim. 
Hesaplama esnasında bu formülü çekerek, baska bir tablodan genislik ve yukseklik (float) değerini alıp hesaplama sonucunun çıktısını nasıl alırız?


Normal şartlarda ;

var sformul:string;
mgenislik,myukseklik,mformul:double;
begin
mgenislik:=1500 ;
myukseklik:=1500 ;
sformul:='mgenislik*myukseklik/1000000'; //burdaki formülü tablodan alıp,
mformul:= mgenislik*myukseklik/1000000;  buraya aktararak hesaplama nasıl yapabiliriz?
sedit1.Text:= floattostr(mformul);
end;



Alternatif olarak veritabanından formül ve parametreleri çekerken Execute Statement ile de çözebilirsin.

Ben sql Server da örneklendirdim, kullandığın veritabanına göre kod değişebilir.


Kod:
procedure TForm8.sBitBtn1Click(Sender: TObject);
var mgenislik,myukseklik:double;
begin
UniConnection1.Connected:=true;
UniQuery1.Active:=true;
qrecete.Active:=true;
mgenislik:=1500 ;
myukseklik:=1500 ;
UniQuery1.SQL.Clear;
UniQuery1.SQL.add('declare @formul varchar(100)');
UniQuery1.SQL.add('set @formul = genislik*yukseklik');
UniQuery1.SQL.add('set @formul = replace(@formul,genislik,mgenislik');
UniQuery1.SQL.add('set @formul = replace(@formul,yukseklik,myukseklik');
UniQuery1.SQL.add('set @formul = select +@formul+sonuc');
UniQuery1.SQL.add('exec(@formul)');
ShowMessage(UniQuery1sonuc.Text);

mgenislik ve myukseklik yerine değer verirsek sonuç döndürüyor, ama string değişimi yaptığı için değer döndürmüyor.
(19-03-2022, Saat: 19:19)apachi2006 Adlı Kullanıcıdan Alıntı: [ -> ]
(19-03-2022, Saat: 17:46)frmman Adlı Kullanıcıdan Alıntı: [ -> ]https://github.com/Crownie88/Delphi-math...Parser.pas

Math sınıfı ekli olmasına rağmen pas dosyasında  94:Stack[0] := Power(Stack[1], Stack[0]);// Power  bu satırda hata veriyor.
Kullanımı konusunda bilgi verebilir misiniz?

(19-03-2022, Saat: 19:00)bydelphi Adlı Kullanıcıdan Alıntı: [ -> ]Alternatif olarak veritabanından formül ve parametreleri çekerken Execute Statement ile de çözebilirsin.

Ben sql Server da örneklendirdim, kullandığın veritabanına göre kod değişebilir.


Kod:
procedure TForm8.sBitBtn1Click(Sender: TObject);
var mgenislik,myukseklik:double;
begin
UniConnection1.Connected:=true;
UniQuery1.Active:=true;
qrecete.Active:=true;
mgenislik:=1500 ;
myukseklik:=1500 ;
UniQuery1.SQL.Clear;
UniQuery1.SQL.add('declare @formul varchar(100)');

UniQuery1.SQL.add('set @formul = replace(@formul,genislik,mgenislik');
UniQuery1.SQL.add('set @formul = replace(@formul,yukseklik,myukseklik');
UniQuery1.SQL.add('set @formul = select +@formul+sonuc');
UniQuery1.SQL.add('exec(@formul)');
ShowMessage(UniQuery1sonuc.Text);

mgenislik ve myukseklik yerine değer verirsek sonuç döndürüyor, ama string değişimi yaptığı için değer döndürmüyor.


Sql server session ortamında varchar bir değişkene tırnak içerisinde değer atamanız gerekir.
string işlemleri için şöyle deneyin 

UniQuery1.SQL.add(  'set @formul = '+QuotedStr('genislik*yukseklik')  );

bu kod ile sql session ortamına string değişkenizin tırnak içerisisinde gidecek.
bunu diğer satırlarada uygulayın
(19-03-2022, Saat: 20:05)bydelphi Adlı Kullanıcıdan Alıntı: [ -> ]
(19-03-2022, Saat: 19:19)apachi2006 Adlı Kullanıcıdan Alıntı: [ -> ]Math sınıfı ekli olmasına rağmen pas dosyasında  94:Stack[0] := Power(Stack[1], Stack[0]);// Power  bu satırda hata veriyor.
Kullanımı konusunda bilgi verebilir misiniz?



Kod:
procedure TForm8.sBitBtn1Click(Sender: TObject);
var mgenislik,myukseklik:double;
begin
UniConnection1.Connected:=true;
UniQuery1.Active:=true;
qrecete.Active:=true;
mgenislik:=1500 ;
myukseklik:=1500 ;
UniQuery1.SQL.Clear;
UniQuery1.SQL.add('declare @formul varchar(100)');

UniQuery1.SQL.add('set @formul = replace(@formul,genislik,mgenislik');
UniQuery1.SQL.add('set @formul = replace(@formul,yukseklik,myukseklik');
UniQuery1.SQL.add('set @formul = select +@formul+sonuc');
UniQuery1.SQL.add('exec(@formul)');
ShowMessage(UniQuery1sonuc.Text);

mgenislik ve myukseklik yerine değer verirsek sonuç döndürüyor, ama string değişimi yaptığı için değer döndürmüyor.


Sql server session ortamında varchar bir değişkene tırnak içerisinde değer atamanız gerekir.
string işlemleri için şöyle deneyin 

UniQuery1.SQL.add(  'set @formul = '+QuotedStr('genislik*yukseklik')  );

bu kod ile sql session ortamına string değişkenizin tırnak içerisisinde gidecek.
bunu diğer satırlarada uygulayın

Kod:
UniConnection1.Connected:=true;
UniQuery1.Active:=true;
qrecete.Active:=true;
sformul:= qreceteformul.Text;
genislik:=1500 ;
yukseklik:=1500 ;
UniQuery1.SQL.Clear;
UniQuery1.SQL.add('declare @formul varchar(100)');
UniQuery1.SQL.add('set @formul = '+QuotedStr(sformul));  //genislik*yukseklik
UniQuery1.SQL.add('set @formul = replace(@formul,genislik,strtofloat(genislik)');
UniQuery1.SQL.add('set @formul = replace(@formul,yukseklik,strtofloat(yukseklik)');
UniQuery1.SQL.add('set @formul = select +@formul+sonuc');
UniQuery1.SQL.add('exec(@formul)');
ShowMessage(UniQuery1sonuc.Text);

Replace yapılan yerdeki genislik yerine string genislik değilde 1500 olan genişlik değerinin gelmesi gerekiyor.
(19-03-2022, Saat: 20:31)apachi2006 Adlı Kullanıcıdan Alıntı: [ -> ]
(19-03-2022, Saat: 20:05)bydelphi Adlı Kullanıcıdan Alıntı: [ -> ]Sql server session ortamında varchar bir değişkene tırnak içerisinde değer atamanız gerekir.
string işlemleri için şöyle deneyin 

UniQuery1.SQL.add(  'set @formul = '+QuotedStr('genislik*yukseklik')  );

bu kod ile sql session ortamına string değişkenizin tırnak içerisisinde gidecek.
bunu diğer satırlarada uygulayın

Kod:
UniConnection1.Connected:=true;
UniQuery1.Active:=true;
qrecete.Active:=true;
sformul:= qreceteformul.Text;
genislik:=1500 ;
yukseklik:=1500 ;
UniQuery1.SQL.Clear;
UniQuery1.SQL.add('declare @formul varchar(100)');
UniQuery1.SQL.add('set @formul = '+QuotedStr(sformul));  //genislik*yukseklik
UniQuery1.SQL.add('set @formul = replace(@formul,genislik,strtofloat(genislik)');
UniQuery1.SQL.add('set @formul = replace(@formul,yukseklik,strtofloat(yukseklik)');
UniQuery1.SQL.add('set @formul = select +@formul+sonuc');
UniQuery1.SQL.add('exec(@formul)');
ShowMessage(UniQuery1sonuc.Text);

Replace yapılan yerdeki genislik yerine string genislik değilde 1500 olan genişlik değerinin gelmesi gerekiyor.


Hangi veritabanını kullanıyorsunuz Sql Server Mı
(19-03-2022, Saat: 19:19)apachi2006 Adlı Kullanıcıdan Alıntı: [ -> ]
(19-03-2022, Saat: 17:46)frmman Adlı Kullanıcıdan Alıntı: [ -> ]https://github.com/Crownie88/Delphi-math...Parser.pas

Math sınıfı ekli olmasına rağmen pas dosyasında  94:Stack[0] := Power(Stack[1], Stack[0]);// Power  bu satırda hata veriyor.
Kullanımı konusunda bilgi verebilir misiniz?


Şu şekilde kullanabilirsiniz.


uses
 MathExpParser;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 xx: TExpressionParser;
 sonuc: double;
 denklem: string;
 x, y: integer;
begin

 xx := TExpressionParser.Create();

 denklem := 'X+Y+5';

 x := 30;
 y := 50;
 denklem := StringReplace(denklem, 'X', x.ToString, [rfReplaceAll, rfIgnoreCase]);
 denklem := StringReplace(denklem, 'Y', y.ToString, [rfReplaceAll, rfIgnoreCase]);

 sonuc := xx.ParseExpressionToFloat(denklem);
 edit1.Text := denklem;  // 30+50+5
 edit2.Text := sonuc.ToString; // sonuç 85

 xx.Free;
end;
(19-03-2022, Saat: 23:03)frmman Adlı Kullanıcıdan Alıntı: [ -> ]
(19-03-2022, Saat: 19:19)apachi2006 Adlı Kullanıcıdan Alıntı: [ -> ]Math sınıfı ekli olmasına rağmen pas dosyasında  94:Stack[0] := Power(Stack[1], Stack[0]);// Power  bu satırda hata veriyor.
Kullanımı konusunda bilgi verebilir misiniz?


Şu şekilde kullanabilirsiniz.


uses
 MathExpParser;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 xx: TExpressionParser;
 sonuc: double;
 denklem: string;
 x, y: integer;
begin

 xx := TExpressionParser.Create();

 denklem := 'X+Y+5';

 x := 30;
 y := 50;
 denklem := StringReplace(denklem, 'X', x.ToString, [rfReplaceAll, rfIgnoreCase]);
 denklem := StringReplace(denklem, 'Y', y.ToString, [rfReplaceAll, rfIgnoreCase]);

 sonuc := xx.ParseExpressionToFloat(denklem);
 edit1.Text := denklem;  // 30+50+5
 edit2.Text := sonuc.ToString; // sonuç 85

 xx.Free;
end;

Teşekkürler