PDA

View Full Version : سوال: استفاده از دستور ParseSQL و تشخیص خودکار نوع داده پارامترها در ADOQuery



metilgoli
دوشنبه 09 دی 1392, 14:32 عصر
با سلام به دوستان برنامه نویس: من یک رشته در دلفی تعریف کردم که دارای یک پارامتر است: (توجه داشته باشید نوع فیلد myID در اسکوال int است)



vSqlString :='Select * From myTable Where myID= :paramID'

این رشته را توسط دستور ParseSQL مربوط به پارامترهای ADOQuery برای اجرا آماده میکنم:
:



myADOQuery.Parameters.ParseSQL(vSqlString , True);

بعد از اجرای دستور بالا نوع داده پارامتر myADOQuery.Parameters.ParamByName('paramID').DataT ype بجای int نوع smallint است و مقادیر در محدوده int را قبول نمیکند.

برای رفع این اشکال می توان نوع داده پارامترها را مشخص کرد (Parameter[0].DataType:=ftIneteger) ولی راه حلی می خواهم که این مشکل را در Delphi XE4 برایم حل نماید. با تشکر

hadisalahi2
دوشنبه 09 دی 1392, 14:52 عصر
احتیاج به این همه دنگ وفنگ نداره که
اینطوری تعریف کن


ADOQuery1.Parameters.ParamByName('نام فیلد').Value:=هر مقداری با هر نوعی

metilgoli
دوشنبه 09 دی 1392, 15:08 عصر
مشکل همینجاست که وقتی من مثلا مقدار -1 به value می دهم سیستم زمان اجرا پیغام خطا می دهد چون توع پارامتر را به جای integer از نوع Smallint تشخیص می ده

hadisalahi2
دوشنبه 23 دی 1392, 12:26 عصر
من در استفاده از ADoStoredProcedure همچین مشکلی داشتم
برای همین یک کامپوننت برای خودم نوشتم که اول میاد ، پارامتر ها رو پاک میکنه ، بعد اونها رو خودش میسازه

یوسف زالی
دوشنبه 23 دی 1392, 13:00 عصر
چرا پارامترهاتون رو در زمان طراحی اد نمی کنید؟

metilgoli
شنبه 28 دی 1392, 00:00 صبح
این راه حل خوبیه که پارامترها رو اضافه کنم، ولی مشکل اینجاست که من یه پروژه بزرگ دارم که بیش از 200 بار از این دستور داخلش استفاده شده، دستور parsesql توی ورژن 7 درست کار میکرده ولی حالا که مهاجرت کردم روی XE4 با این مشکل مواجه شدم. از طرفی با استفاده از این دستور، زمانی که در پراسیجرهای SQL تغییری ایجاد بشه احتیاج کمتری به کد نویسی داخل دلفی هست.

hadisalahi2
یک شنبه 29 دی 1392, 10:00 صبح
این راه حل خوبیه که پارامترها رو اضافه کنم، ولی مشکل اینجاست که من یه پروژه بزرگ دارم که بیش از 200 بار از این دستور داخلش استفاده شده،
اصلا تعداد دفعات مورد استفاده مهم نیست
وقتی شما یک کامپوننت طراحی کنید و یا یک کلاس ، فقط کافیه پارامترها رو به متد دلخواه خودتون پاس بدید و دیگر هیچ ... :لبخند:


از طرفی با استفاده از این دستور، زمانی که در پراسیجرهای SQL تغییری ایجاد بشه احتیاج کمتری به کد نویسی داخل دلفی هست.

والا فک نکنم این حرفت صحیح باشه ، مسلما وقتی کدها رو ببری توی کامپوننت یا کلاس ، خطوط برنامه کمتر میشه

من پیشنهاد میکنم به سمت StoredProc بری
من خودم یک کامپوننت برای کار با این حالت طراحی کردم ، که هر نوع داده ای رو ارسال کنی ، به عنوان مقدار پارامتر قبول میکنه ، خواستی برات آپلودش میکنم

metilgoli
چهارشنبه 02 بهمن 1392, 07:50 صبح
با تشکر ازهمه .به من این راه حل رو دادن:
http://stackoverflow.com/questions/21194122/tadoquery-parsesql-do-not-work-in-xe4
http://stackoverflow.com/questions/20813585/using-parsesql-command-for-ado-parameters-cause-invalid-parameter-datatype