PDA

View Full Version : محاسبه دو فیلد و جستجوی نتیجه توسط کاربر



Delphi7_love
سه شنبه 06 مهر 1389, 17:09 عصر
دوتا فیلد دارم که باید فیلد اولی در یک عدد به دلخواه کاربر تقسیم شه و نتیجه در فیلد دوم ضرب شه ، حالا یک عدد جدید بدست میاد که باید کلیه رکورد ها رو به همین شکل حساب کنم (همه رکورد ها فقط در یک عدد تقسیم میشه یعنی همون عدد که کاربر وارد کرده و رهمه رکوردها فقط در همون عدد تقسیم میشن) و نتیجه کلیه رکوردها رو مورد جستجو قرار بدم و بازیابی کنم
با adoquery
لطفا سریع کمک کنید کارم گیره ، ممنون

MOJTABAATEFEH
سه شنبه 06 مهر 1389, 17:33 عصر
دوست عزیز از دستور زیر استفاده نمایید


adoquery1.sql.clear;
adoquery1.sql.text:='select (field1 * (field2 / '+edit1.text+')) as total from table1';
adoquery1.open;


موفق باشید

Delphi7_love
سه شنبه 06 مهر 1389, 21:19 عصر
من با کد زیر جستجو رو انجام میدم و میخوام هم این پارامتر ها و هم پارامتر های بالا جستجو بشن
چطور میتونم این کارو انجام بدم ؟
با تشکر



adq.SQL.Clear;
Adq.SQL.Add('select * from s_melk where s_zirbana_tejari>='+e20.Text+' and s_zirbana_tejari<='+e21.Text+' order by s_tar');
adq.Open;

mohsensaghafi
سه شنبه 06 مهر 1389, 22:24 عصر
من با کد زیر جستجو رو انجام میدم و میخوام هم این پارامتر ها و هم پارامتر های بالا جستجو بشن
چطور میتونم این کارو انجام بدم ؟

سلام دوست عزیز.
من اصلا متوجه نشدم منظورتون چی بود!؟!!

Delphi7_love
چهارشنبه 07 مهر 1389, 13:02 عصر
فرض کنید 4 تا فیلد دارم با توجه به پست 3 دو فیلد 1 و 2 با هم محاسبه میشه و نتیجه اون در یک ستون جدید ریخته میشه (فرض کنید اسم این ستون جدید new باشه) حالا میخوام یه جستجو بر اساس فیلد 3 و 4 و فیلد new انجام بدم
مثلا تمام رکورد هایی که فیلد 3 برابر با ادیت 1 ، فیلد 4 برابر با ادیت 2 و فیلد new برابر با ادیت 3 باشه ، امیدوارم منظورم رو درست گفته باشم
متشکرم

MOJTABAATEFEH
چهارشنبه 07 مهر 1389, 17:26 عصر
فرض کنید 4 تا فیلد دارم با توجه به پست 3 دو فیلد 1 و 2 با هم محاسبه میشه و نتیجه اون در یک ستون جدید ریخته میشه (فرض کنید اسم این ستون جدید new باشه) حالا میخوام یه جستجو بر اساس فیلد 3 و 4 و فیلد new انجام بدم
مثلا تمام رکورد هایی که فیلد 3 برابر با ادیت 1 ، فیلد 4 برابر با ادیت 2 و فیلد new برابر با ادیت 3 باشه ، امیدوارم منظورم رو درست گفته باشم
متشکرم

دوست عزیز به صورت زیر عمل نمایید:



'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 into #t from table1'
'select new,field3,field4 from #t where new=+'edit3.text+' and field3='+edit1.text+' and field4='+edit2.text
'drop table #t'

موفق باشید

Delphi7_love
چهارشنبه 07 مهر 1389, 22:12 عصر
از اینکه وقت میذارید واقعا سپاسگزارم
من کد رو به این شکل نوشتم ولی موقع اجرا خطا میده
کد شمارو که کپی کردم اجرا نمیشد البته یه + اضافه کردم اجرا شد ولی خطا میده اگه زحمت نیست ببینید مشکل کجاست
در ضمن #t چیه؟
مجددا تشکر میکنم


adoquery3.SQL.Clear;
adoquery3.SQL.Add(
'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 into #t from table1 select new,field3,field4 from #t where new='+edit3.text+' and field3='+edit1.text+' and field4='+edit2.text+'drop table #t');
adoquery3.Open;

mohsensaghafi
پنج شنبه 08 مهر 1389, 11:22 صبح
از اینکه وقت میذارید واقعا سپاسگزارم
من کد رو به این شکل نوشتم ولی موقع اجرا خطا میده
کد شمارو که کپی کردم اجرا نمیشد البته یه + اضافه کردم اجرا شد ولی خطا میده اگه زحمت نیست ببینید مشکل کجاست
در ضمن #t چیه؟
مجددا تشکر میکنم


سلام دوست عزیز.
#t یک جدول موقت هست. واسه کوئری هم باید دو تا سیمیکولن اضافه کنی. به این شکل می شه.

adoquery3.SQL.Add(
'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 into #t from table1;select new,field3,field4 from #t where new='+edit3.text+' and field3='+edit1.text+' and field4='+edit2.text+'; drop table #t');

Delphi7_love
پنج شنبه 08 مهر 1389, 16:31 عصر
سلام دوستان

این کد رو هم امتحان کردم و خطا میده
مشکل سر همون #t هست چون وقتی کد رو به شکل :

'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 into #t from table1');


مینویسم خطا میده . اینم خطاش :

The SELECT statement includes a reserved word or an argument name
that is missing or the punctuation in incorrect.

ولی اگه into #T رو حذف کنم درست جواب میده

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

ممنون

MOJTABAATEFEH
پنج شنبه 08 مهر 1389, 18:04 عصر
از اینکه وقت میذارید واقعا سپاسگزارم
من کد رو به این شکل نوشتم ولی موقع اجرا خطا میده
کد شمارو که کپی کردم اجرا نمیشد البته یه + اضافه کردم اجرا شد ولی خطا میده اگه زحمت نیست ببینید مشکل کجاست
در ضمن #t چیه؟
مجددا تشکر میکنم


adoquery3.SQL.Clear;
adoquery3.SQL.Add(
'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 into #t from table1 select new,field3,field4 from #t where new='+edit3.text+' and field3='+edit1.text+' and field4='+edit2.text+'drop table #t');
adoquery3.Open;

دوست عزیز فاصله بین رشته ها رو رعایت کنید:

adoquery1.sql.clear;
adoquery1.sql.add('select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 into #t from table1');
adoquery1.sql.add('select new,field3,field4 from #t where new='+edit3.text+' and field3='+edit1.text+' and field4='+edit2.text);
adoquery1.sql.add('drop table #t');
adoquery1.open;



موفق باشید

Delphi7_love
پنج شنبه 08 مهر 1389, 18:50 عصر
من دقیقا کد شمارو کپی میکنم ولی بازم خطای بالا رو میده

خودتون تست میکنید؟

mohsensaghafi
جمعه 09 مهر 1389, 15:33 عصر
من دقیقا کد شمارو کپی میکنم ولی بازم خطای بالا رو میده

خودتون تست میکنید؟

سلام دوست عزیز
کدی که دوستمون واستون نوشتن پارامتری هست. با کپی و پیست کردنش قطعا نباید اجرا بشه.
شما باید اسم فیلد ها و اسم جدولتون رو تغییر بدین به اسم جدول و فیلد هایی که خودتون تو بانکتون دارید.
از چه DBMSی استفاده می کنید؟ SQL Server 2008, SQL Server 2005, My SQL?

Delphi7_love
شنبه 10 مهر 1389, 10:12 صبح
سلام
اسم جدول و فیلدهای بانکم همینه و مشکلی نیست
از بانک اکسس استفاده میکنم

نمیتونید در قالب یه نمونه برام بذارید؟
شرمنده

Delphi7_love
یک شنبه 11 مهر 1389, 17:17 عصر
دوستان عزیز نمیتونید کمکم کنید؟
کارم بد جوری گیر داره:متفکر:

MOJTABAATEFEH
یک شنبه 11 مهر 1389, 19:56 عصر
سلام
اسم جدول و فیلدهای بانکم همینه و مشکلی نیست
از بانک اکسس استفاده میکنم

نمیتونید در قالب یه نمونه برام بذارید؟
شرمنده

ذوست عزیز چک کنید:


نام فیلدها و جدول شما مثل پرامترهای مثال باشد
در اکسس برای ارسال مقادیر به فیلدهای متنی حتما باید کتیشن گذاری صحیح رو رعایت کنید برای فیلدهای متنی در کدی که من براتون گذاشتم از Quotedstr() استفاده نمایید مانند زیر:



'...... where field3='quotedstr(edit1.text)


موفق باشید

Delphi7_love
یک شنبه 11 مهر 1389, 21:00 عصر
نام فیلدها و جدول شما مثل پرامترهای مثال باشد

در اکسس برای ارسال مقادیر به فیلدهای متنی حتما باید کتیشن گذاری صحیح رو رعایت کنید برای فیلدهای متنی در کدی که من براتون گذاشتم از Quotedstr() استفاده نمایید مانند زیر:

'...... where field3='quotedstr(edit1.text)



ممنون دوست عزیز

درسته که آماتورم ولی نه دیگه اینقد...
نام فیلدها با نام جدول با نام پارامترها یکیه
کتیشن ها درسته
برای فیلدهای متنی در کدی که من براتون گذاشتم از Quotedstr() استفاده نمایید مانند زیر:همه فیلد های من عددی تعریف شده اند

مشکل فقط همون #t هست چون اگه به شکل زیر بنوسم خطا داره و اجرا نمیشه

'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 into #t from table1'
ولی اگه از همین کد #t رو حذف کنم (به شکل زیر) اجرا میشه ولی چیزی که میخوام نیست

'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 from table1'

mohsensaghafi
دوشنبه 12 مهر 1389, 14:14 عصر
سلام دوست عزیز.
کوئری رو به شکل زیر تغییر بده ببین درست می شه؟!

'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 from table1'
'where new='+edit3.text+' and field3='+edit1.text+' and field4='+edit2.text

Delphi7_love
دوشنبه 12 مهر 1389, 17:27 عصر
نشد ، باید همون جدول ساخته بشه t ساخته شهچون خطا میده که فیلد new وجود نداره

mohsensaghafi
سه شنبه 13 مهر 1389, 13:37 عصر
نشد ، باید همون جدول ساخته بشه t ساخته شهچون خطا میده که فیلد new وجود نداره

سلام
این رو چک کن.

'select (field1 * (field2 / '+edit1.text+')) as new,field3,field4 from table1'
'where (field1 * (field2 / '+edit1.text+'))='+edit3.text+' and field3='+edit1.text+' and field4='+edit2.text

Delphi7_love
سه شنبه 13 مهر 1389, 15:24 عصر
سلام دوست خوبم

از اینکه حوصله به خرج دادین واقعا ممنونم
مشکل حل شد