ورود

View Full Version : مشکل در append کردن رکورد



p_ooya
سه شنبه 20 مرداد 1388, 20:58 عصر
کد زیر را درنظر بگیرید :

DataModule1.Table_temp_Host.Append;
DataModule1.Table_temp_Host.FieldValues['buyer']:=sComboBox9.Text+' '+sComboBox1.Text;
DataModule1.Table_temp_Host.FieldValues['date_d']:=SolarDatePicker1.Text;
DataModule1.Table_temp_Host.FieldValues['comments']:=sMemo1.Lines.Text;
DataModule1.Table_temp_Host.FieldValues['user_1']:=user_fullname;
DataModule1.Table_temp_Host.FieldValues['date_1']:=SolarDatePicker2.Text;
DataModule1.Table_temp_Host.FieldValues['last_modified']:=1234;
DataModule1.Table_temp_Host.FieldValues['state']:=0;
DataModule1.Table_temp_Host.Post;ساختار جدول :

CREATE TABLE `tb_name`.`orders` (
`id` int(10) unsigned NOT NULL auto_increment,
`buyer` varchar(30) collate utf8_persian_ci NOT NULL,
`user_1` varchar(30) collate utf8_persian_ci NOT NULL,
`date_1` char(10) collate utf8_persian_ci NOT NULL,
`last_modified` int(10) unsigned NOT NULL,
`state` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;وقتی کد بالا رو اجرا می کنم خطای زیر ر اتفاق می افته :

cannot access field last_modified as type variantدلیلش چیه؟ چکار کنم؟ توضیح رو هم بدم که این فیلد اول از نوع datetime بود بعد عوضش کردم و int شد.

ghabil
سه شنبه 20 مرداد 1388, 22:38 عصر
راستش دلیل این رو نمیدونم ، ولی کلا کار کردن با واریانت کار بسیار پرهزینه (از لحاظ پرفرمنس) و بسیار نا امن از نظر باگ دار شدن برنامه هست و استفاده ازش فقط در زمانهای خاص توصیه میشه در حات عادی باید بنویسی FieldByname.AsInteger یا .... اگر مشکل داشتی بازم بگو ببینیم مشکل چیه...

p_ooya
سه شنبه 20 مرداد 1388, 23:54 عصر
راستش دلیل این رو نمیدونم ، ولی کلا کار کردن با واریانت کار بسیار پرهزینه (از لحاظ پرفرمنس) و بسیار نا امن از نظر باگ دار شدن برنامه هست و استفاده ازش فقط در زمانهای خاص توصیه میشه در حات عادی باید بنویسی FieldByname.AsInteger یا .... اگر مشکل داشتی بازم بگو ببینیم مشکل چیه...
سپاس. با تغییر واریانت مشکل حل شد اما کماکان برام سواله که چرا؟!؟؟

ghabil
سه شنبه 27 مرداد 1388, 00:45 صبح
ببین مکانیزم تبدیل واریانت به تایپ مکانیزمه نسبتا پیچیده ای هست، البته سورسش موجود هست و میتونی بخونی ، اما همینطوری توی نگاه اول حدسی میگم که شاید کامپایلر ععدت رو از نوع Float تشخیص میده بجای Integer و در نتیجه مثلا مقداری که ست میشه 1234.00 هست که موجب خطا میشه

Modernidea
پنج شنبه 29 مرداد 1388, 15:29 عصر
سلام
برای ذخیره تاریخ به صورت شمسی بهترین راه استفاده از NVarchar 10 یا در اکسس استفاده از TEXT 10 است.
--یاهوو--

ghabil
پنج شنبه 29 مرداد 1388, 21:43 عصر
بهترین راه ذخیره تاریخ شمسی و میلادی استفاده از تایپ Date هست. جستجو کنید قبلا توضیح داده شده چرا