PDA

View Full Version : سوال: تبدیل نوع فیلد



sayeh293
سه شنبه 18 شهریور 1393, 19:41 عصر
سلام
من عضو جدید هستم و یک مشکل دارم لطفا اگه امکان داره راهنمائی کنید.
میخوام تو برنامه با استفاده از کد زیر فرمت فیلد رو تغییر بدیم ولی بعضی مواقع ایراد میگیره تو سایت گشتم در جایی دیدم چون فیلد از نوع widestring میشه این ارور میاد.از cast استفاده کردم ولی باز هم نشد.آیا راهی دیگه ای هست؟


(fdquery1.FieldByName('TotalField') as TFloatField).DisplayFormat := '##00.0';

BORHAN TEC
سه شنبه 18 شهریور 1393, 22:09 عصر
با سلام،
قبل از هر چیز ورودتون به این انجمن رو به شما تبریک میگم، و اما در مورد سوالتون:
اگر درست گفته باشم شما دارید از FireDac استفاده می کنید. خاصیت Active مربوط به FDQuery را در زمان Design Time به True ست کنید و سپس روی این کامپوننت کلیک راست کرده و از منوی ظاهر شده گزینه Fields Editor را انتخاب کنید. سپس در پنجره ظاهر شده راست کلیک کنید و از منوی ظاهر شده گزینه Add All Fields را انتخاب کنید. حال بعد از اضافه شدن فیلدها، فیلد مورد نظر را انتخاب کرده و از رویداد OnGetText فیلد مربوطه استفاده کنید تا فرمت نمایش رو به هر شکلی که دوست دارید تغییر بدید. طریقه استفاده هم چیزی شبیه به اینه:
procedure TF_ProjectsMgr.tblProjectDATE_TIMEGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
if (Sender.AsString <> '') then
Text := MiladyToShamsi(Sender.AsDateTime);
end;
موفق باشید...

sayeh293
سه شنبه 18 شهریور 1393, 23:17 عصر
خیلی ممنون بله درسته از firedac استفاده می کنم ولی تو این حالت یک ارور دیگه میده

fdquery1:Type mismatch for field 'TotalField',expecting: Float actual:widestring

وقتی کوئری چیزی پیدا نمی کنه این مشکل پیش میاد آیا راهی نیست که بشه یک فیلد در خود کوئری مجبور کرد که همیشه float باشه با cast که نشد.


Select (f1+f2+f3) as TotalField

online_com
سه شنبه 25 شهریور 1393, 10:55 صبح
سلام
البته مي تونيد كوئري تون رو طوري بنويسيد كه هيچ وقت خروجي null نده يه چيزي مثل
SELECT IFNULL(MAX(cod)+1,0) as cod FROM tabel1

sayeh293
سه شنبه 25 شهریور 1393, 22:25 عصر
می خوام از این کد برای تغییر نوع فیلد استفاده کنم ولی عمل نمیکه چرا؟


fdquery1.FieldByName('TotalField').SetFieldType(ft Float);

online_com
چهارشنبه 26 شهریور 1393, 15:57 عصر
می خوام از این کد برای تغییر نوع فیلد استفاده کنم ولی عمل نمیکه چرا؟


fdquery1.FieldByName('TotalField').SetFieldType(ft Float);

اگر اشتباه نكنم :متفکر::اشتباه:نمي شه وقتي از كوئري استفاده مي كنيد نوع يك فيلد رو تغيير بدهيد امكان تغيير نوع فقط زماني كه به يك جدول وصل هستيد وجود دارد
اگر مي خواهيد نوع فيلد را تغيير دهيد كوئري تون رو طوري تغيير دهيد كه خروجي با نوع فيلد مورد نظرتون رو بدهد
حالا اگر مي خواهيد فرمت خاصي رو به يكي از فيلدهاي كوئري تون براي حالت نمايش داشته باشيد مي تونيد از اين دستور استفاده كنيد

TFloatField(Query13.FieldByName('fieldname')).Disp layFormat:='###,###;-###,###;0';
البته فكر كنم دستور SetFieldType بيشتر براي فيلدهايي با نوع BLOB كاربرد دارد
باز هم اگه بگيد كه براي چي مي خواهيد تبديل نوع بكنيد شايد بتونيم راه حل بهتري رو برتون پيدا كنيم:متفکر::لبخندساده: