Matematiksel İşlem - apachi2006 - 19-03-2022
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;
Matematiksel İşlem - frmman - 19-03-2022
https://github.com/Crownie88/Delphi-mathematic-expression-parser/blob/master/MathExpParser.pas
Cvp: Matematiksel İşlem - bydelphi - 19-03-2022
(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]
Cvp: Matematiksel İşlem - apachi2006 - 19-03-2022
(19-03-2022, Saat: 17:46)frmman Adlı Kullanıcıdan Alıntı: https://github.com/Crownie88/Delphi-mathematic-expression-parser/blob/master/MathExpParser.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.
Cvp: Matematiksel İşlem - bydelphi - 19-03-2022
(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-mathematic-expression-parser/blob/master/MathExpParser.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
Cvp: Matematiksel İşlem - apachi2006 - 19-03-2022
(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.
Cvp: Matematiksel İşlem - bydelphi - 19-03-2022
(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ı
Cvp: Matematiksel İşlem - frmman - 19-03-2022
(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-mathematic-expression-parser/blob/master/MathExpParser.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;
Cvp: Matematiksel İşlem - apachi2006 - 20-03-2022
(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
|