PDA

View Full Version : مشکل در قسمت شرط دستور sql



salman_arak
یک شنبه 28 آبان 1385, 09:41 صبح
سلام
من تازه عضو سایت شدم و در حال یاد گیری می باشم .
اگه سوالام سطحی به نظر رسید بهم نخندید:خجالت: :قهقهه:
من یه بانک دارم که توش یه فیلد رشته ای گذاشتم که اعداد توش ذخیره می شه (لطفا نگید که نوع فیلد رو عددی کنم که امکانش نیست) حال با دستور selectمی خوام لیست بگیرم که اونایی که پلاک ماشینشون بیشتر از 313658 برام لیست کنه .:
('select pno ,type from car where pno>' + QuotedStr('313658'
با این دستور پلاکی مثلا به شماره 2120000 رو نشون نمی ده و منطقیی چون من دارم رشته ها رو با هم مقایسه کنم برای حلش باید به صورت عددی یش کنم بعد مقایسه کنم که البته راهشو بلد نیستم اگه میشه راهنماییم بفرمائید .
من اله توفیق.:اشتباه:

mzjahromi
یک شنبه 28 آبان 1385, 11:17 صبح
بانکتون چیه؟
میتونید از Cast یا Int(Pno) استفاده کنید

ali_gtp
یک شنبه 28 آبان 1385, 11:21 صبح
ی'select pno ,type from car where pno>' + QuotedStr('313658'


سلام این کد رو امتحان کنید شاید درست شه و شایدم یه راهنمایی براتون باشه چون منم در حال یاد گرفتن دلفی هستم:



m:=strtoint(TableName.fieldbyname('FieldName ').asstring);
with TableName do
begin
sql.clear;
sql.add('Select pno,type');
sql.add('From car');
sql.add('Where pno>'+m);

//در این خط شما در واقع باید با متغیری که در بالا مقدار رشته ای را به عددی تبدیل کرده اید مقایسه کنید.
end;



//اگه کار کرد بهم خبر بدید . ممنون.
//ali_moradi_2006@yahoo.com (http://barnamenevis.org/forum/)
//از این سایت هم دیدن کنید www.GtpLand.com (http://www.GtpLand.com)


:متفکر:

اگه کار نکرد به من نخندید:قهقهه: :قهقهه: :قهقهه:
----------------------------------------
از تگ Code استفاده کنید
mzj

arshia_
یک شنبه 28 آبان 1385, 12:17 عصر
cast(filedname as type)
type =نوعی که باید رشته به اون تبدیل بشه

salman_arak
یک شنبه 28 آبان 1385, 12:19 عصر
m:=strtoint(TableName.fieldbyname('FieldName ').asstring);
با سلام خدمت شما
با نوشتن این خط و سپس جمع کردن ان با یه رشته فکر می کنم خطا بده چون ئ مقدار عددی می گیره .
نه این کد اشتباه به نظر می رسه .
ممنونم .
--------------------



cast(filedname as type)
type =نوعی که باید رشته به اون تبدیل بشه


میشه بیشتر این مورد رو برای من تازه کار باز بفرمائید .

محمد دادودنیا
دوشنبه 29 آبان 1385, 01:10 صبح
مثلا اگر اسم فیلد شما F1 باشد واز نوع رشته ای میتوانید با دستور

Cast(F1 As Int)
مقدار را به صورت عددی داشته باشی

salman_arak
دوشنبه 29 آبان 1385, 07:13 صبح
مثلا اگر اسم فیلد شما F1 باشد واز نوع رشته ای میتوانید با دستور

مقدار را به صورت عددی داشته باشی
سلام
این جمله ای که شما فرمودید رو باید کجا بنویسم موضوع اینجوری :
('select pno ,type from car where pno>' + QuotedStr('313658'
خوب حالا این cast رو باید کجای این جمله بنویسم . البته یه جاهای امتحان کردم اما دلفی با اصل نوشتن cast مخالفه :اشتباه: نمی دونم چرا؟:چشمک: من خیلی خیلی به این موضوع نیاز دارم .
ممنون.

mzjahromi
دوشنبه 29 آبان 1385, 07:18 صبح
select Pno , ... From car where Cast(Pno,int)>...

ولی هنوز نگفتید بانکتون چیه؟

salman_arak
دوشنبه 29 آبان 1385, 07:44 صبح
select Pno , ... From car where Cast(Pno,int)>...

ولی هنوز نگفتید بانکتون چیه؟

شرمنده ام بانکم روم به دیوار access ه :اشتباه: بانک یه تازه کار چی می تونه باشه .
چه فرقی می کنه ؟

ممنون

mzjahromi
دوشنبه 29 آبان 1385, 07:47 صبح
خوب پس این کار رو کنید


('select pno ,type from car where int(pno)>313658'

شرمندگی هم نداره هنوز هم برای یه سری کارا اکسس مناسب تره

salman_arak
دوشنبه 29 آبان 1385, 07:59 صبح
; ((( where '+ int(sh) + opr +QuotedStr(trim(Edit4.Text ...

سلام
اقای کشاورز راه حلی که شما فرمودید مشکل منو حل نکرد حالا من قسمت where دستور selectام رو نوشتم . این دستور به صورت پارامتری کار می کنه : sh نام فیلد بانکم و oprعملگر و اون عدده داخل ادیته حال با نوشتن دستور فوق خطای icompatible type رو دریافت می کنم .
منتظرم .

mzjahromi
دوشنبه 29 آبان 1385, 12:10 عصر
دستورتون رو دقیقا همونی که داخل دلفی نوشتید اینجا پیست کنید ببینیم مشکل کجاست
اینی که من می بینم مشکلش اینه که Int(sh) داخل کوتیشن باید باشه


; ((( where int(sh)' + opr +QuotedStr(trim(Edit4.Text ...

salman_arak
دوشنبه 29 آبان 1385, 12:43 عصر
SQL.Clear;
sql.Add('select a.pno,a.fname,a.lname,a.costn1,'+ sh +' from( vazeyat c inner join shakhsi b'+
' on c.id=b.id) inner join shakhsi1 a on a.pno=b.pno where '+ (sh) + opr +QuotedStr(trim(Edit4.Text)));
open;



لازم بگم که shنام فیلد توی بانکم نیست بلکه یه متغیری یه که در بالای این دستورات به صورت زیر مقدار دهی می شه :
'sh:='c.vazn
از اینکه در صورت سوال دو گانگی پیش اومد عذر خواهم من سوال تاپیک رو با یه مثال ساده مطرح کردم اما حالا که شما امر فرمودید من متن اصلی اس کیو الم رو گذاشتم .
باز ام اگه مبهمه بگو تا بیشتر مسئله رو باز کنم .
ممنون و منتظر.

mzjahromi
دوشنبه 29 آبان 1385, 13:24 عصر
اینجوری


SQL.Clear;
sql.Add('select a.pno,a.fname,a.lname,a.costn1,'+ sh +' from( vazeyat c inner join shakhsi b'+
' on c.id=b.id) inner join shakhsi1 a on a.pno=b.pno where int('+ (sh)+')' + opr +QuotedStr(trim(Edit4.Text)));
open;

salman_arak
دوشنبه 29 آبان 1385, 13:32 عصر
سلام
امتحان کردم خطای زیر رو میده :
ممنون و منتظر .

mzjahromi
دوشنبه 29 آبان 1385, 13:37 عصر
حتما یه جائی توی Edit یا توی جدول غیر از عدد حرف یا یه کاراکتر غیر عددی دیگه داری. کلا اینکه بجای عدد یه رشته رو بگیری همین مشکل رو داره چون ممکنه کاراکتری باشه که دیده نشه

salman_arak
دوشنبه 29 آبان 1385, 13:49 عصر
منظورتو نفهمیدم اما با توجه به فرمایش جنابعالی فیلدهارو در بانکم به integer تغییر دادم اما بازم همون خطا رو می ده دارم کلافه می شم
ممنون و منتظر.

mzjahromi
دوشنبه 29 آبان 1385, 13:56 عصر
معمولا راههائی که خودم تست میکنم ایناست
1- دقیقا همون Query رو ببرید تو اکسس ببینید روی چی خطا میده
2- قبل از open بنویسید ShowMessage(Query1.SQL.Text) تا متن کوئری رو نشونتون بده ببینید مشکل از کجاست

salman_arak
دوشنبه 29 آبان 1385, 14:09 عصر
;(( sh+ opr + trim(Edit4.Text ...

دوست عزیز با تغییر اخر کد مثل بالا مشکلم حل شد اما مجبور شدم فیلدهای رو که می شدinteger کنم اما یه فیلد دارم که فشار خون توش ذخیره می شه که فرمت اون به صورت
999/ 999 ه
من برای ورود اطلاعات از کاربر به وسیله یه stringgridاین کارو انجام میدم بنابراین نتونستم از maskeditبرای این فیلد استفاده کنم حال اگه بخوام نسبت به این فیلد گزارش بگیرم که مثلا افراد فشار خون بالای 10/120 رو نشون بده چی کار کنم
ممنون و منتظر .

ali_gtp
جمعه 03 آذر 1385, 11:08 صبح
کدی که من نوشته بودم اشتباه بود؟

vcldeveloper
شنبه 04 آذر 1385, 09:04 صبح
اقای کشاورز راه حلی که شما فرمودید مشکل منو حل نکرد
Off Topic:
توی فکرم که کدوم راه حل رو میگید؟!! من که اصلا توی تاپیک پستی نزدم!

محمد دادودنیا
یک شنبه 05 آذر 1385, 05:53 صبح
Select * From Table Where F1>"120/12"

/* F1=فیلد فشار خون
Table=اسم جدول Access شما
*/