ورود

View Full Version : سوال: مشکل در فیلتر کردن



a-azad
شنبه 25 خرداد 1387, 10:11 صبح
سلام.فیلتر روی بانکم به این صورت انجام داده ام
with ADOQuery1 do
begin
Filtered:=false;
Filter:='name='+QuotedStr(Edit1.Text);
Filtered:=true;
if not IsEmpty then
begin
tntEdit1.Text:=FieldValues['code'];
tntEdit3.Text:=FieldValues['center'];
tntEdit4.Text:=FieldValues['serial'];
tntEdit5.Text:=FieldValues['num'];
tntEdit6.Text:=FieldValues['feq'];
tntEdit7.Text:=FieldValues['bandwith'];
tntEdit8.Text:=FieldValues['type'];
tntEdit9.Text:=FieldValues['factory'];
tntEdit10.Text:=FieldValues['pos'];
tntEdit12.Text:=FieldValues['total'];
tntEdit13.Text:=FieldValues['source'];
tntEdit14.Text:=FieldValues['destination'];
tntEdit15.Text:=FieldValues['numdoc'];
tntEdit16.Text:=FieldValues['datedoc'];
TntMemo1.Text:=FieldValues['des'];

end;
end;


یک سری فیلدها allow nullهستند یعنی حتماً قرار نیست مقدارداشته باشند.حال وقتی این اطلاعات خالی باشند وفیلتر انجام می دهم . یک errorمیدهد
project1.exe raised exeption class evarienttypecasterror with message 'could not convert varient of type(null) into type(olestr)ممنون

delphiprog3000
شنبه 25 خرداد 1387, 12:57 عصر
با سلام.
میشه بگید کدوم فیلداتون Allow null هستند؟

a-azad
شنبه 25 خرداد 1387, 13:26 عصر
فیلد type,center,serial,,des,numdoc,datedoc

حمیدرضاصادقیان
شنبه 25 خرداد 1387, 14:56 عصر
سلام.بهترین کار اینه که شما روی خط اول همین تابع یک breakpoint بذاری بعد با f8 خط به خط جلو بری ببینی روی کدوم خط خطا میده.اونجوری راحتتر میشه مشکلو حل کرد.

vcldeveloper
شنبه 25 خرداد 1387, 17:15 عصر
مشکل از فیلتر نیست!

بجای FieldValues از FieldByName استفاده کنید:


MyEdit.Text := FieldByName('MyField').AsString;

این کار باعث میشه که داده Variant فیلد به یک نوع داده شناخته شده (مثل string) تبدیل بشه. اگر مقدار Variant هم null باشه، یک رشته تهی تولید کنه. ولی وقتی از FieldValues استفاده می کنید، مقدار Variant مستقیما به Text اختصاص پیدا میکنه که به علت null بودن، خطا دریافت می کنید. اگر می خواید از FieldValues استفاده کنید، باید از توابع تبدیل Variant به String در یونیت Variants استفاده کنید تا مطمئن باشید در صورت null بودن مقدار فیلد، رشته تهی به Text ارسال میشه

a-azad
یک شنبه 26 خرداد 1387, 11:25 صبح
سلام.اگه fieldbyname کنم فیلدها integear چیکار کنم

MyEdit.Text := intostr(FieldByName('MyField').Asintegear);
کجاش غلطه؟

حمیدرضاصادقیان
یک شنبه 26 خرداد 1387, 14:52 عصر
شما وقتی میخوای در داخل یک Text مینویسیم باید اخرش بنویسی


MyEdit.Text := FieldByName('MyField').Asstring;

a-azad
دوشنبه 27 خرداد 1387, 08:06 صبح
سلام.من مشکلم حل شد.از همه ممنون

اصغر (پآچ)
سه شنبه 28 خرداد 1387, 00:55 صبح
سلام.اگه fieldbyname کنم فیلدها integear چیکار کنم

MyEdit.Text := intostr(FieldByName('MyField').Asintegear);
کجاش غلطه؟

سلام دوست من
ما متغییری با اسم Integear نداریم بلکه Integer درسته پس کد رو اگه به صورت
MyEdit.Text := IntToStr(FieldByName('MyField').AsInteger); تغییر بدی درست میشه البته IntToStr درسته نه intostr

به املاء صحیح دستورات بیشتر دقت کن تا به مشکل کمتری بر بخوری! برای اینکه مطمئن بشی که املا دستورت درسته یا نه از کلید ترکیبی Ctrl + Space هنگام تایپ دستورات استفاده کن

موفق و موید باشی