PDA

View Full Version : مشکل با ADO در دلفي 2007



rezamahdizadeh
پنج شنبه 31 مرداد 1387, 07:56 صبح
دلفي 2007 مخصوصا با كامپوننتهاي تعريف شده توسط برنامه نويس چقدر مشگل ساز است به عنوان نمونه خطاهايي مي دهد كه در دلفي 7 نمي داد. بعضي از اين خطاها را بصورت تصوير ضميمه كرده ام آيا راهي براي رفع اين خطاها وجود دارد؟

vcldeveloper
چهارشنبه 13 شهریور 1387, 01:29 صبح
علتش رو خودش داره توی پیغام خطا میگه:
بسته ایی تحت عنوان RM روی دلفی 2007 خودتون نصب کردید که در آن از یونیتی با نام ADODB استفاده شده، از طرفی کامپوننت های ADO در دلفی از یونیتی با همین نام استفاده می کنند، چون بسته RM زودتر از بسته adortl10 که بسته زمان اجرای ADO هست، بارگزاری میشه، ADO نمیتونه از یونیتی با همون نام ADODB استفاده کنه، از طرفی، کامپوننت های ADO مثل AdoTable, AdoQuery و... در همین یونیت تعریف شدند، اگر این یونیت لود نشه، امکان لود شدن اون کامپوننت ها هم نیست.

راه حل:
1- از لیست Package های نصب شده دلفی Package مربوط به RM را uninstall کنید، تا این بسته با بسته ADO تداخل پیدا نکنه.
2- یونیت ADODB استفاده شده در اون Package را تغییر نام بدید، تا ADO بتونه به شکل عادی از یونیت خودش استفاده کنه.

در هر حال، این مشکل از دلفی نیست، مشکل از کامپوننت هایی هست که نصب کردید.

rezamahdizadeh
چهارشنبه 13 شهریور 1387, 17:57 عصر
آقاي كشاورز من در آن كامپوننتها مجبورم كه در قسمت uses آن unit از ADODB استفاده كنم چون متغيرهايي در روالهاي آن استفاده شده چه عنوان آرگومان چه به صورت متغيرهاي محلي و ... كه از نوع TADOQuery و ... بوده اند و در صورت درج نشدن نام ADODB در قسمت uses خطاهاي كامپايلري به خاطر نشناخته بودن پيش مي آيد. چرا در دلفي 7 اين مشكلات پيش نيامد با وجودي كه همين كامپوننتهاي خودم بدون هيچ تغييري در دلفي 7 نصب كرده بودم در مورد تغيير نام اگر امكان دارد بيشتر توضيح دهيد.

vcldeveloper
چهارشنبه 13 شهریور 1387, 18:12 عصر
دقت کنید در پست قبلی چی گفتم. من گفتم شما هر جا ADODB در uses دارید، آن را حذف کنید؟!
گفتم بسته ایی با نام RM روی دلفی شما نصب هست که یونیتی با نام ADODB داره، یعنی یونیت بسته RM با یونیت ADO هم نام شده. نمی تونید دو یونیت متفاوت با نام های یکسان داشته باشید، پس باید یکی از این بسته ها را uninstall کنید. ADO را که نمیخواید Uninstall کنید، پس باید RM را به نحوی که در کد بالا گفتم، Uninstallکنید. اگر به بسته RM هم نیاز دارید، باید نام یونیت آن را تغییر بدید.


چرا در دلفي 7 اين مشكلات پيش نيامد با وجودي كه همين كامپوننتها بود
توی دلفی بسته استانداردی بنام RM وجود نداره. شما این بسته را نصب کردید. مشکلی هم که الان براتون پیش اومده بخاطر این بسته هست. نویسنده اون بسته باید می دونسته که یونیت ADODB در بسته ADO دلفی که یک بسته استاندارد هست، استفاده میشه، و نباید از نام آن در بسته خودش استفاده میکرده.

rezamahdizadeh
چهارشنبه 13 شهریور 1387, 18:26 عصر
بسته ایی با نام RM روی دلفی شما نصب هست که یونیتی با نام ADODB داره، یعنی یونیت بسته RM با یونیت ADO هم نام شده
در بسته RM يونيتي بنام ADODB وجود ندارد ـ به اين نام ايجاد نكرده ام

vcldeveloper
چهارشنبه 13 شهریور 1387, 21:33 عصر
در بسته RM يونيتي بنام ADODB وجود ندارد ـ به اين نام ايجاد نكرده ام
لازم نیست مستقیما وجود داشته باشه، اگر Implicitly هم از یونیتی با این نام استفاده کرده باشه، با ADO مشکل پیدا میکنه. شما فعلا RM را uninstall کنید.

rezamahdizadeh
پنج شنبه 14 شهریور 1387, 05:54 صبح
آقاي كشاورز فايلهايي با پسوند DCP كه اين كامپوننت از كلاسهاي آنها مشتق شده بود را به بسته اضافه كردم مشگل رفع شد

hamed322
جمعه 15 شهریور 1387, 15:54 عصر
سلام
آقای کشاورز چرا پست من را پاک کرده اید؟
**لطفا اول سوال را با دقت بخوانید بعد پست را پاک کنید**
مشکل من در دلفی 2007 و ADO می باشد.
*این کار شما بی انصافیست !*
*اگر جواب را نمی دانید چرا پست را پاک می کنید*
متشکرم

vcldeveloper
جمعه 15 شهریور 1387, 16:11 عصر
آقای کشاورز چرا پست من را پاک کرده اید؟
**لطفا اول سوال را با دقت بخوانید بعد پست را پاک کنید**
مشکل من در دلفی 2007 و ADO می باشد.
*این کار شما بی انصافیست !*
*اگر جواب را نمی دانید چرا پست را پاک می کنید*
پست اول تاپیک را بخوانید، سوال شما اصلا شباهتی به اون سوال داره؟!!
در تاپیک جداگانه ایی بپرسید.

متشکرمخواهش می کنم

rezamahdizadeh
جمعه 29 شهریور 1387, 17:50 عصر
لازم نیست مستقیما وجود داشته باشه، اگر Implicitly هم از یونیتی با این نام استفاده کرده باشه، با ADO مشکل پیدا میکنه. شما فعلا RM را uninstall کنید.
بله بصورت ضمني import شده اند اما با uninstall كردن RM مشگل حل نمي شود چون در اكثر فرمها از كامپووننتهاي موجود در RM استفاده كرده ام.

vcldeveloper
جمعه 29 شهریور 1387, 18:30 عصر
اما با uninstall كردن RM مشگل حل نمي شود چون در اكثر فرمها از كامپووننتهاي موجود در RM استفاده كرده ام.
اسم اون یونیتی که RM استفاده کرده را Rename کنید تا با یونیت مورد استفاده ADO تداخل نداشته باشه.

vcldeveloper
شنبه 30 شهریور 1387, 23:14 عصر
با توجه به کدی که نوشتید و برای من ارسال کردید، دو مسئله وجود داره:
1- شما دارید از یونیتی متفاوت ولی با نام مشابه استفاده نمی کنید، بلکه دارید دقیقا از یونیت مربوط به ADO استفاده می کنید، یعنی باید نام یونیت مورد نظر را از لیست یونیت های Package خودتون حذف کنید، بجاش اسم Package مربوط به ADO را به لیست Requires از Package خودتون اضافه کنید.

2- یک کامپوننت گرید نباید به روش اتصال خاصی (مثل ADO, BDE, DBExpress و...) وابسته باشه، پس کلا استفاده شما از یونیت های ADO در اون کامپوننت (مثل یونیت ADODB) توجیه خاصی نمیتونه داشته باشه.

rezamahdizadeh
دوشنبه 01 مهر 1387, 06:17 صبح
اگر نام يونيت ADODB را در قسمت uses ذكر نكنيم كامپايلر به كدهايي مانند Self.DataSource.DataSet is TCustomADODataSet خطا مي گيرد. زيرا مي گويد متغير TCustomADODataSet تعريف نشده است. اگر بخواهيم Package مربوط به ADODB را به قسمت Requires اضافه كنيم نمي دانم اسم و فايل اين Package چيست و در ضمن پسوند Package ها در دلفي dkp يا dpkw است در حاليكه CodeGear 2007 فقط فايلهايي با پسوند dcp را مي پذيرد.

vcldeveloper
دوشنبه 01 مهر 1387, 10:16 صبح
اگر بخواهيم Package مربوط به ADODB را به قسمت Requires اضافه كنيم نمي دانم اسم و فايل اين Package چيست و در ضمن پسوند Package ها در دلفي dkp يا dpkw است در حاليكه CodeGear 2007 فقط فايلهايي با پسوند dcp را مي پذيرد.
اسمش را توی همون پیغام خطا باید نشون بده، غیر از اون، در پنجره Install Packages هم می تونید اسمش را پیدا کنید.


اگر نام يونيت ADODB را در قسمت uses ذكر نكنيم كامپايلر به كدهايي مانند Self.DataSource.DataSet is TCustomADODataSet خطا مي گيرد. زيرا مي گويد متغير TCustomADODataSet تعريف نشده است.
چون در کدنویسی کامپوننت Gridایی که ساختید اشتباه کردید! یک کامپوننت Grid باید فقط TDataset را بشناسه، نه فرزنداش مثل TCustomAdoDataset. نتیجه همچین کدی این میشه که اگر هم کامپوننت نصب بشه، فقط با DataSourceهایی کار خواهد کرد که Datasetشان از TCustomAdoDataset مشتق شده!