دلفي 2007 مخصوصا با كامپوننتهاي تعريف شده توسط برنامه نويس چقدر مشگل ساز است به عنوان نمونه خطاهايي مي دهد كه در دلفي 7 نمي داد. بعضي از اين خطاها را بصورت تصوير ضميمه كرده ام آيا راهي براي رفع اين خطاها وجود دارد؟
دلفي 2007 مخصوصا با كامپوننتهاي تعريف شده توسط برنامه نويس چقدر مشگل ساز است به عنوان نمونه خطاهايي مي دهد كه در دلفي 7 نمي داد. بعضي از اين خطاها را بصورت تصوير ضميمه كرده ام آيا راهي براي رفع اين خطاها وجود دارد؟
علتش رو خودش داره توی پیغام خطا میگه:
بسته ایی تحت عنوان RM روی دلفی 2007 خودتون نصب کردید که در آن از یونیتی با نام ADODB استفاده شده، از طرفی کامپوننت های ADO در دلفی از یونیتی با همین نام استفاده می کنند، چون بسته RM زودتر از بسته adortl10 که بسته زمان اجرای ADO هست، بارگزاری میشه، ADO نمیتونه از یونیتی با همون نام ADODB استفاده کنه، از طرفی، کامپوننت های ADO مثل AdoTable, AdoQuery و... در همین یونیت تعریف شدند، اگر این یونیت لود نشه، امکان لود شدن اون کامپوننت ها هم نیست.
راه حل:
1- از لیست Package های نصب شده دلفی Package مربوط به RM را uninstall کنید، تا این بسته با بسته ADO تداخل پیدا نکنه.
2- یونیت ADODB استفاده شده در اون Package را تغییر نام بدید، تا ADO بتونه به شکل عادی از یونیت خودش استفاده کنه.
در هر حال، این مشکل از دلفی نیست، مشکل از کامپوننت هایی هست که نصب کردید.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
آقاي كشاورز من در آن كامپوننتها مجبورم كه در قسمت uses آن unit از ADODB استفاده كنم چون متغيرهايي در روالهاي آن استفاده شده چه عنوان آرگومان چه به صورت متغيرهاي محلي و ... كه از نوع TADOQuery و ... بوده اند و در صورت درج نشدن نام ADODB در قسمت uses خطاهاي كامپايلري به خاطر نشناخته بودن پيش مي آيد. چرا در دلفي 7 اين مشكلات پيش نيامد با وجودي كه همين كامپوننتهاي خودم بدون هيچ تغييري در دلفي 7 نصب كرده بودم در مورد تغيير نام اگر امكان دارد بيشتر توضيح دهيد.
آخرین ویرایش به وسیله rezamahdizadeh : چهارشنبه 13 شهریور 1387 در 18:16 عصر
دقت کنید در پست قبلی چی گفتم. من گفتم شما هر جا ADODB در uses دارید، آن را حذف کنید؟!
گفتم بسته ایی با نام RM روی دلفی شما نصب هست که یونیتی با نام ADODB داره، یعنی یونیت بسته RM با یونیت ADO هم نام شده. نمی تونید دو یونیت متفاوت با نام های یکسان داشته باشید، پس باید یکی از این بسته ها را uninstall کنید. ADO را که نمیخواید Uninstall کنید، پس باید RM را به نحوی که در کد بالا گفتم، Uninstallکنید. اگر به بسته RM هم نیاز دارید، باید نام یونیت آن را تغییر بدید.
توی دلفی بسته استانداردی بنام RM وجود نداره. شما این بسته را نصب کردید. مشکلی هم که الان براتون پیش اومده بخاطر این بسته هست. نویسنده اون بسته باید می دونسته که یونیت ADODB در بسته ADO دلفی که یک بسته استاندارد هست، استفاده میشه، و نباید از نام آن در بسته خودش استفاده میکرده.چرا در دلفي 7 اين مشكلات پيش نيامد با وجودي كه همين كامپوننتها بود
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
در بسته RM يونيتي بنام ADODB وجود ندارد ـ به اين نام ايجاد نكرده امبسته ایی با نام RM روی دلفی شما نصب هست که یونیتی با نام ADODB داره، یعنی یونیت بسته RM با یونیت ADO هم نام شده
لازم نیست مستقیما وجود داشته باشه، اگر Implicitly هم از یونیتی با این نام استفاده کرده باشه، با ADO مشکل پیدا میکنه. شما فعلا RM را uninstall کنید.در بسته RM يونيتي بنام ADODB وجود ندارد ـ به اين نام ايجاد نكرده ام
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
آقاي كشاورز فايلهايي با پسوند DCP كه اين كامپوننت از كلاسهاي آنها مشتق شده بود را به بسته اضافه كردم مشگل رفع شد
سلام
آقای کشاورز چرا پست من را پاک کرده اید؟
**لطفا اول سوال را با دقت بخوانید بعد پست را پاک کنید**
مشکل من در دلفی 2007 و ADO می باشد.
*این کار شما بی انصافیست !*
*اگر جواب را نمی دانید چرا پست را پاک می کنید*
متشکرم
پست اول تاپیک را بخوانید، سوال شما اصلا شباهتی به اون سوال داره؟!!آقای کشاورز چرا پست من را پاک کرده اید؟
**لطفا اول سوال را با دقت بخوانید بعد پست را پاک کنید**
مشکل من در دلفی 2007 و ADO می باشد.
*این کار شما بی انصافیست !*
*اگر جواب را نمی دانید چرا پست را پاک می کنید*
در تاپیک جداگانه ایی بپرسید.
خواهش می کنممتشکرم
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
اسم اون یونیتی که RM استفاده کرده را Rename کنید تا با یونیت مورد استفاده ADO تداخل نداشته باشه.اما با uninstall كردن RM مشگل حل نمي شود چون در اكثر فرمها از كامپووننتهاي موجود در RM استفاده كرده ام.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
با توجه به کدی که نوشتید و برای من ارسال کردید، دو مسئله وجود داره:
1- شما دارید از یونیتی متفاوت ولی با نام مشابه استفاده نمی کنید، بلکه دارید دقیقا از یونیت مربوط به ADO استفاده می کنید، یعنی باید نام یونیت مورد نظر را از لیست یونیت های Package خودتون حذف کنید، بجاش اسم Package مربوط به ADO را به لیست Requires از Package خودتون اضافه کنید.
2- یک کامپوننت گرید نباید به روش اتصال خاصی (مثل ADO, BDE, DBExpress و...) وابسته باشه، پس کلا استفاده شما از یونیت های ADO در اون کامپوننت (مثل یونیت ADODB) توجیه خاصی نمیتونه داشته باشه.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
اگر نام يونيت ADODB را در قسمت uses ذكر نكنيم كامپايلر به كدهايي مانند Self.DataSource.DataSet is TCustomADODataSet خطا مي گيرد. زيرا مي گويد متغير TCustomADODataSet تعريف نشده است. اگر بخواهيم Package مربوط به ADODB را به قسمت Requires اضافه كنيم نمي دانم اسم و فايل اين Package چيست و در ضمن پسوند Package ها در دلفي dkp يا dpkw است در حاليكه CodeGear 2007 فقط فايلهايي با پسوند dcp را مي پذيرد.
اسمش را توی همون پیغام خطا باید نشون بده، غیر از اون، در پنجره Install Packages هم می تونید اسمش را پیدا کنید.اگر بخواهيم Package مربوط به ADODB را به قسمت Requires اضافه كنيم نمي دانم اسم و فايل اين Package چيست و در ضمن پسوند Package ها در دلفي dkp يا dpkw است در حاليكه CodeGear 2007 فقط فايلهايي با پسوند dcp را مي پذيرد.
چون در کدنویسی کامپوننت Gridایی که ساختید اشتباه کردید! یک کامپوننت Grid باید فقط TDataset را بشناسه، نه فرزنداش مثل TCustomAdoDataset. نتیجه همچین کدی این میشه که اگر هم کامپوننت نصب بشه، فقط با DataSourceهایی کار خواهد کرد که Datasetشان از TCustomAdoDataset مشتق شده!اگر نام يونيت ADODB را در قسمت uses ذكر نكنيم كامپايلر به كدهايي مانند Self.DataSource.DataSet is TCustomADODataSet خطا مي گيرد. زيرا مي گويد متغير TCustomADODataSet تعريف نشده است.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.