PDA

View Full Version : سوال: مشکل در جستجو فیلدی از نوع Money در بانک اطلاعاتی



delphiprog3000
چهارشنبه 08 مهر 1388, 14:28 عصر
با سلام به دوستان و اساتید محترم.

بنده در یک جدول سه فیلد دارم.
که به ترتیب مربوط به شماره مشتری.تاریخ.مبلغ واریزی میباشد.



Customer_id,date,Price

دوفیلد غیر از مبلغ از نوع Varchar و فیلد مبلغ(Price) از نوع Money میباشد.

در جستجوی این فیلد به مشکل برخوردم که کد مورد نظر را قرار میدهم.به انضمام متن خطا امیدوارم دوستان راهنمایی نمایند.



with DataModule1.Qry_tbl_take_money do
begin
close;
SQL.text:='select * from tbl_take_money where customer_id like '+QuotedStr(customer_id)+' and price like'+QuotedStr(inttostr(price))+' and date like'+QuotedStr(date);
open;
end;
همانطور که در بالا مشاهده میفرمایید.مقادیری را به این فیلدها نسبت داده ام.که در مورد Price به دلیل اینکه متن دستور ما Sql ایست و به صورت تکست میباشد خطایی در این باره که مقدار عدد با مقدار رشته مطابقت ندارد را میدهد.
بنده عکس متن خطا را نیز در پایین قرار داده ام.

سوال بنده اینست که چگونه مقداری به این فیلد که در رشته Sql نوشته شده اختصاص بدیم که نتیجه به ما برگرداند.

با تشکر...........

merced
چهارشنبه 08 مهر 1388, 15:47 عصر
نيازي نيست و البته نبايد مقادير فيلدهاي عددي (از جمله پولي) را درون كوتيشن بگذاريد. QoutedStr رو بردار

delphiprog3000
چهارشنبه 08 مهر 1388, 16:07 عصر
نيازي نيست و البته نبايد مقادير فيلدهاي عددي (از جمله پولي) را درون كوتيشن بگذاريد. QoutedStr رو بردار

با سلام. دوست گرامی اینکارو انجام دادم.با این خطا روبه رو میشه.

توضیح دادم خدمت شما این مقدار به دلیل اینکه داخل رشته است نمیشه جز رشته چیز دیگری پاس داد.

خود کامپایلر پیشنهاد داده که با استفاده از یک فانکشن اینکارو انجام بدم.بنده فانکشن Strtovalue خود Sql رو هم تست کردم که میگه جای استفاده این تابع اینجا نیست.

بازم بازنگری کنید. با تشکر...........

Ahmad Chehreghani
چهارشنبه 08 مهر 1388, 22:28 عصر
merced گفت که QoutedStr رو برداري. شما هم اونو برداشتيد و هم inttostr

delphiprog3000
پنج شنبه 09 مهر 1388, 00:59 صبح
merced گفت که QoutedStr رو برداري. شما هم اونو برداشتيد و هم inttostr

با سلام.دوست گرامی مشکل برداشتن یا گذاشتن این دو تابع نیست.
ببینید در صورت برداشتن و بودن inttostr این خطا را میدهد.

مشکل اینجاست که میباید به رشته نوع عددی پاس داد و این قابل انجام نیست.آیا دوستان راهی در این رابطه دارند؟

با تشکر...........

SYNDROME
پنج شنبه 09 مهر 1388, 07:12 صبح
آخرین اشکال شما مربوط به مقدار ارسالی است.
داخل متغییر Price چه مقدار است؟(فقط باید عدد باشد)
فیلد Price را Cast کنید به Nvarchar ببیند مشکلتان حل می شود.
موفق باشید

delphiprog3000
پنج شنبه 09 مهر 1388, 11:49 صبح
آخرین اشکال شما مربوط به مقدار ارسالی است.
داخل متغییر Price چه مقدار است؟(فقط باید عدد باشد)
فیلد Price را Cast کنید به Nvarchar ببیند مشکلتان حل می شود.
موفق باشید

با سلام.دوست من فیلد Price از نوع Money است که مبنای عددی دارد.
همانطور که بالا گفتم از توابعی مثل Strtovalue استفاده کردم اما جواب نداد.

کد رو قرار میدم ببینید :


SQL.text:='select * from tbl_take_money where customer_id like '+QuotedStr(customer_id)+' and price like cast('+inttostr(price)+' as money) and date like'+QuotedStr(date);
شما میتوانید در تکمیل این کد از Cast استفاده نمایید.و مثالی بزنید.

همانطور که قبلا هم ذکر نمودم. میخواهم نوع متغییر عددی را با نوع money در دیتابیس مقایسه کنم.

امیدوارم راهی برای این کار پیدا شود.

با تشکر.......

merced
پنج شنبه 09 مهر 1388, 14:33 عصر
چرا اينقدر سختش مي كني . مگه فيلد Price‌ از نوع Money نيست ؟؟‌ اينم كدش :



SQL.text:='select * from tbl_take_money where price = '+inttostr(price) + ' and ... ' ;

بقيه شرايط هم خودت بنويس. ....
براي فيلد هاي نوع عددي كه پولي هم جزو اوناست Like استفاده نمي شه

حمیدرضاصادقیان
شنبه 11 مهر 1388, 13:33 عصر
سلام.دوست عزیز شما چرا از پاراتر استفاده نمیکنی؟ اینجوری خیلی راحت میشه با sql injection برنامه رو برد رو هوا. از پارامتر استفاده کنید و مقادیر را با پارامتر ارسال کنید.
موفق باشید.

SYNDROME
شنبه 18 مهر 1388, 06:53 صبح
من با با گفتم که باید Price رو Cast کنی بدم Like رو استفاده کنی.


SQL.text:='select * from tbl_take_money where customer_id like '+QuotedStr(customer_id)+' and Cast(price As Nvarchar(20)) like '%''+inttostr(price)+''%' and date like'+QuotedStr(date);

موفق باشید