PDA

View Full Version : سوال: چرا این error رو می گیره "فوری"



دلفی در قلب من
شنبه 13 مهر 1387, 10:39 صبح
با سلام در حال نوشتن برنامه ای در دلفی هستم در هنگام insert اطلاعات در بانک روی چند فیلد خاص error زیر رو میده در صورتی که دیگر فیلد های مشابه ان این خطا رو نمیگره
لطفا من رو راهنمایی کنید با تشکر
در ضمن بانک sql
Application uese a value of the worng type for the current operation

s.mostafa.rahmani
شنبه 13 مهر 1387, 11:29 صبح
معني خطا اينه كه نوع داده‌اي كه داري به فيلد مي‌دي با نوع خود فيلد يكي نيست.
بعضي وقتها، اگه مقدار يك Edit رو به فيلد نسبت بدي و اون Edit خالي باشه اين خطا رو مي‌ده.
براي رفعش بايد تست كني كه اگه مقدار (مثلاً) Edit1.Text خالي بود، به جاش null رو به فيلد نسبت بدي.
مثال:

if Trim(Edit1.Text) = '' then
insert1.parameters.parameterbyname('test').value := null
else
insert1.parameters.parameterbyname('test').value := Edit1.Text;

دلفی در قلب من
شنبه 13 مهر 1387, 13:29 عصر
با تشکر از پاسختون این کار رو قبلا انجام دادم ولی هنوز همین خطا رو میده

s.mostafa.rahmani
شنبه 13 مهر 1387, 15:47 عصر
اگه از Stored Procedure استفاده مي‌كنيد ممكنه نوع پارامتري كه در دلفي براي پروسيجر تعريف شده با نوعي كه در SQL تعريف شده فرق داشته باشه.
يا ممكنه مثلاً شما نوع tinyint در SQL گرفته باشي ولي حالا مقدار عددي خيلي بزرگي داري بهش نسبت مي‌دي كه نمي‌تونه قبول كنه (كه با تغيير به نوع int مشكل حل مي‌شه) يا چيزهايي شبيه به اين.
به هر حال موضوع اختلاف نوع داده است.

دلفی در قلب من
یک شنبه 14 مهر 1387, 08:06 صبح
بچه ها لطفا کمکم کنید بد جوری گیر افتادم حالا همون خطا رو برای فیلدهایی که قبلا درست بوده میده چیکار کنم . حتی دلفی رو هم عوض کردم دو و سه بار هم سیستم رو خاموش کردم :گریه::عصبانی++:

دلفی در قلب من
یک شنبه 14 مهر 1387, 08:15 صبح
بابا یکی یک فکری بکنه امروز باید تحویل بدم مجبور شدم نوع فیلدام رو یکی یکی تغییر بدم اما اینجوری که نمی شه مقدارشون خیلی زیاده . اشکال از کجاست ؟؟

vcldeveloper
یک شنبه 14 مهر 1387, 09:33 صبح
می تونید نوع هر فیلدی که خطا میگیره و نوع آن فیلد در دلفی را مشخص کنید. مثلا وقتی شما در SQL Server فیلدی از نوع nvarchar دارید، دلفی آن را از نوع WideString تعریف میکنه. حالا شما همچین برای برنامه تون همچین چیزی بنویسید:
فیلد الف: nvarchar - WideString
فیلد ب: integer - integer
فیلد ج: Image - TBlobField
و...

بعد بررسی کنید که برای هر نوع داده ایی نوع داده متناسبی متناظر با آن انتخاب شده باشه، همچنین مقادیر ورودی هر کدام را بررسی کنید که مقدار غیرمجازی وارد نشده باشه، بخصوص نوع داده هر یک از پارامترهایی که تعریف کردید

دلفی در قلب من
یک شنبه 14 مهر 1387, 10:53 صبح
بازم منون . آقای کشاورز من درست منظورتون رو متوجه نمی شم

vcldeveloper
یک شنبه 14 مهر 1387, 11:11 صبح
آقای کشاورز من درست منظورتون رو متوجه نمی شم
فعلا فقط بررسی کنید که نوع داده ایی که برای هر یک از پارامترها تعریف کردید، با نوع داده فیلد متناظر با آنها مطابقت داره یا نه، مثلا اگر نوع فیلد شما Integer هست، نوع داده پارامتر را هم Integer تعیین کردید؟
علاوه بر نوع داده، آیا نوع داده مقادیری که به پارامترها میدید، با نوع داده پارامترها یکی هست؟ مثلا اگر پارامتر شما نوعش Integer هست، بهش فرضا مقدار Edit1.Text نمیدید؟! خصوصیت Value مربوط به پارامترها از نوع Variant هست، هر چی بهش بدید قبول میکنه و کد کامپایل میشه، ولی در زمان اجرا اگر نوع ها با هم مطابقت نداشته باشند، یا به درستی تبدیل نشند، به مشکل بر می خورید!

دلفی در قلب من
دوشنبه 15 مهر 1387, 09:52 صبح
:عصبانی++::عصبانی++::عصبانی++:س لام امروز به مرز دیوانگی رسیدم از تمام فیلدهای برنامه این خطا رو می گیره به نظر شما مشکل از چیه ؟ قبلا تمام فیلدها رو درست در جدول ثبت می کرد!!!!!! در ضمن فیلدهای قبلی رو نوع داده شون رو در بانک تغییر دادم و تمام جوانب کار را چک کردم از نظر تفاوت نوع چیزی مشاهده نکردم . اگه کمکم کنید یک آدم رو از خود کشی نجات داید هم خیر دنیا نسیبتون میشه و هم آخرت !!!

vcldeveloper
دوشنبه 15 مهر 1387, 10:20 صبح
نوع داده پارامترها رو چک کردید؟
یک نمونه از ساختار جدول مورد نظر و برنامه کوچکی که عمل Insert شما را - با همان کدها - شبیه سازی کنه، اینجا بزارید