PDA

View Full Version : مشکل midas در دلفی 2009



accpascal
چهارشنبه 02 بهمن 1387, 09:41 صبح
من قبلا یک پروژه client/server با استفاده ازپروتکلsoap در دلفی 7 نوشته بودم و بخوبی اجرا می شد
حالا همان پروژه را در دلفی 2009 نوشته ام ولی متاسفانه گویا دلفی 2009 با midas مشکل دارد و error می دهد لطفا در این مورد مرا راهنمایی فرمایید

vcldeveloper
چهارشنبه 02 بهمن 1387, 11:57 صبح
خب چه errorایی میده؟! دلفی 2009 با خودش DataSnap 2009 را معرفی کرده که با نسخه های قبلی DataSnap فرق میکنه، ولی همچنان از نسخه های قبلی پشتیبانی میشه، و میشه از همون DataSnap قدیمی استفاده کرد، و اجباری به استفاده از DataSnap 2009 نیست. کد شما هم باید توش کار کنه، به شرطی که کد خودش مشکلی نداشته باشه.

accpascal
چهارشنبه 02 بهمن 1387, 21:20 عصر
در ابتدای برنامه هنگام یک select ساده این ارور را می دهد
acces violation at address 4db06c42 in module 'midas.dll' read of address 00000000

vcldeveloper
پنج شنبه 03 بهمن 1387, 00:31 صبح
بجاش یونیت Midas را به لیست uses یکی از فرم ها اضافه کنید، و پروژه را Build کنید، ببینید باز هم همین error رو میده؟

اگر آره، بهتر هست یک نمونه کوچک از سورس کد بزارید که این مشکل را نمایش بده، و بشه آن را بررسی کرد.

accpascal
پنج شنبه 03 بهمن 1387, 00:46 صبح
یونیت را اضافه کردم مشکل حل نشد
source به این صورت می باشد

with datamod.clientdatasetTmp do
begin
active:=false;
commandtext:='select *from paramdb';
open;

vcldeveloper
پنج شنبه 03 بهمن 1387, 01:31 صبح
نه، اون چند خط که مشکلی را برطرف نمیکنه، و احتمالا در سیستم من هم بدون مشکل کار میکنه.
یک نمونه برنامه کوچک آماده کنید که با اجرای آن، همین مشکل بوجود بیاد، بعد سورس آن را اینجا بزارید تا بشه بررسی کرد.

accpascal
پنج شنبه 03 بهمن 1387, 15:28 عصر
من یک برنامه کوچک آماده کردم متاسفانه با امکانات این سایت آشنا نیستم لطفا بگویدد چگونه می توانم فایل زیپ شده را در اینجا قرار دهم

vcldeveloper
جمعه 04 بهمن 1387, 02:18 صبح
دکمه ارسال پاسخ را کلیک کنید، در پایین صفحه باز شده، دکمه "مدیریت ضمیمه ها" را کلیک کنید، و از طریق پنجره باز شده، فایل Zip را به پست خودتان ضمیمه کنید.

accpascal
جمعه 04 بهمن 1387, 19:50 عصر
یک مثال کوچک در فایل ضمیمه ارسال می گردد
توضیح اینکه مثال فوق با استفاده از sql2000 وایجاد یک دیتابیس نمونه بنام custdata ایجاد شده است

vcldeveloper
شنبه 05 بهمن 1387, 02:09 صبح
خطایی با این پیغام میده:
Variant or safe array is locked

متاسفانه این یک خطای شناخته شده هست، و در Quality Central هم با Severity بالا ثبت شده:
http://qc.codegear.com/wc/qcmain.aspx?d=69462

میشه امیدوار بود که این مشکل در بروزرسانی بعدی دلفی 2009، که ظاهرا به زودی منتشر خواهد شد، برطرف بشه.

تا اون موقع، بهتری کاری که ما می تونیم بکنیم این هست که به آدرس بالا مراجعه کنیم، و به گزارش داده شده Vote بدیم، تا افزایش تعداد Voteها باعث افزایش اهمیت گزارش بشه، و CodeGear براساس آن Priority آن را بالا ببرد. برای رای دادن به گزارش باید در سایت CodeGear ثبت نام کنید.

accpascal
شنبه 05 بهمن 1387, 12:13 عصر
برخلاف تمایل مجبورم پروژه خود را با دات نت بنویسم
چاره دیگری دارم؟

vcldeveloper
شنبه 05 بهمن 1387, 16:58 عصر
چاره دیگری دارم؟ در همون لینکی که دادم، کاربر گزارش کننده تغییری در یکی از متدهای دلفی داده، که مشکل را تا حدودی برطرف کرده. به گفته خودش، با اون تغییر، مشکل فقط زمانی ظاهر میشه که به ClientDataset دیتاستی ارسال بشه که در داخل خودش دیتاست دیگه ایی داره، یعنی دیتاست تو در تو. اگر شما همچین ساختار داده ایی ندارید (که احتمالا هم ندارید)، می تونید با اعمال آن تغییری که فرد مربوطه اشاره کرده، مشکلتان را حل کنید. البته من خودم آن تغییر را اعمال نکردم که بدونم واقعا درست جواب میده یا نه.

برای تغییر سورس دلفی:
1- فایل مربوطه را در پوشه source دلفی پیدا کنید، و از آن backup بگیرید.
2- یک نسخه از فایل سورس مربوطه را به پوشه Lib کپی کنید، و فایل DCU مربوط به آن را از پوشه Lib، و پوشه Lib\Debug به محل دیگه ایی منتقل کنید (یعنی از این دو فایل DCU هم Backup بگیرید).
3- تغییر را در سورس کد کپی شده در پوشه Lib اعمال کنید.
4- یک بار پروژه را در حالت Debug کامپایل کنید. این کار باعث ساخته شدن یک DCU جدید با داده های دیباگ می شود. این DCU را به پوشه Lib\Debug منتقل کنید.
5- بار دیگه پروژه را در حالت Release کامپایل کنید (بهتر هست build کنید). این کار باعث ایجاد یک DCU بدون داده های دیباگ می شود.
6- فایل سورس تغییر داده شده را به پوشه Source منتقل کنید.

vcldeveloper
شنبه 05 بهمن 1387, 17:03 عصر
در ضمن، رای دادن به آن گزارش را فراموش نکنید! رای ندادن به یک گزارش خطا یعنی شما با آن قابلیت مشکل دار چندان کاری ندارید، و وجود آن مانع کار شما نیست، در نتیجه CodeGear عجله ایی در برطرف کردن آن نخواهد کرد!

البته یکی از خوبی های دلفی این هست که در صورت برخورد با اینگونه خطاهای runtime، معمولا اگر حوصله و مهارت کافی داشته باشید، می تونید محل خطا در سورس های دلفی را تشخیص بدید، و خودتون با تغییر سورس مورد نظر، یک راه حل موقت پیدا کنید.

accpascal
شنبه 05 بهمن 1387, 23:20 عصر
البته من رای دادم سعی می کنم از روشی که فرمودید مشکل را برطرف کنم زیرا تمایل و نیز همچنین توانایی کافی برای برنامه نویسی در دات نت ندارم اگر نتوانستم مزاحم می شوم

accpascal
یک شنبه 06 بهمن 1387, 17:56 عصر
جناب کشاورز نمی دانم آپدیت2 دلفی 2009 را انجام داده اید یا نه من همین یکساعت پیش آپدیت را انجام دادم و دیدم که مشکل midas حل شده به این ترتیب که اصلا کامپوننت webservice حذف شده است !!!
شاید مشکل از دلفی من باشد چون دلفی من آپدیت1 را ارور می دهد ولی آپدیت2 انجام می شود

vcldeveloper
یک شنبه 06 بهمن 1387, 18:47 عصر
من آپدیت 1 و 2 را مدتها ست که نصب کردم، و مشکلی که شما اشاره کردید را تا به امروز نداشتم! شاید بدون اینکه آپدیت اول را نصب کنید، آپدیت دوم را نصب کردید.

accpascal
یک شنبه 06 بهمن 1387, 22:22 عصر
شاید بدون اینکه آپدیت اول را نصب کنید، آپدیت دوم را نصب کردید.
همانگونه که گفتم نمی دانم چرا آپدیت 1 ارور می دهد من از آپدین خود دلفی استفاده کردم
ولی ارور می دهد.

accpascal
شنبه 12 بهمن 1387, 22:07 عصر
جناب کشاورز
خوشبختانه امروز توانستم تغییرات فوق را انجام دهم و مشکل نیز حل شد

accpascal
یک شنبه 13 بهمن 1387, 18:03 عصر
متاسفانه مشکل جدیدی باز هم ایجاد شد
dbgrid هایی که bidimod انها راست به چب باشد در هنگام پیمایش جدول مشکلهای مختلف دارند
مثلا هنگام کلیک روی جدول بعضی مواقع فوکوس نمی گیرند و یا هنگام استفاده از کلیدهای arrow فوکوس روی جدول حرکت نمی کند که تمام انها با چب به راست کردن حل می شود
این را دیگر چکارکنم
البته این مشکل درپروژه های soap پیش می آید

accpascal
دوشنبه 14 بهمن 1387, 00:32 صبح
این مشکل درپروژه های soap پیش می آید
این مشکل در socketserver هم وجود دارد
ضمنا نکته جالب اینکه پروژه ای که من در دلفی 2009 نوشتم با run کردن socketserver دلفی 7 اجرا می شود ولی با run کردن دلفی 2009 اجرا نمی شود
مثل اینکه فعلا برنامه های مولتی تیر با دلفی 2009 امکان پذیر نباشد!!

vcldeveloper
دوشنبه 14 بهمن 1387, 01:31 صبح
البته این مشکل درپروژه های soap پیش می آید
مشکل ربطی به SOAP نداره، هر DBGridایی که به ClientDataset وصل باشه، و راست-به-چپ شده باشه، این مشکل براش پیش میاد.


ضمنا نکته جالب اینکه پروژه ای که من در دلفی 2009 نوشتم با run کردن socketserver دلفی 7 اجرا می شود ولی با run کردن دلفی 2009 اجرا نمی شود
مثل اینکه فعلا برنامه های مولتی تیر با دلفی 2009 امکان پذیر نباشد!!
امکان پذیر هست. در واقع این قابلیت هایی که شما ازش استفاده می کنید، مربوط به نسخه های قبل از DataSnap 2009 هستند که در دلفی 2009 فقط برای Backward Compatibility حفظ شدند. ساختار DataSnap 2009 کلا با نسخه های قبلی فرق میکنه، و براساس DBX4 هست. DataSnap 2009 قابلیت های بیشتر از نسخه های قبلی ارائه میکنه، ولی فعلا دو مشکل عمده داره:
1- برای اتصال به بانک اطلاعاتی فقط باید از dbExpress استفاده کنید.
2- فقط یک نوع اتصال آن هم از نوع Socket را پشتیبانی میکنه. یعنی برای ایجاد یک اتصال SOAP هنوز هم مجبورید از همان DataSnap قدیمی در دلفی 2009 استفاده کنید، در حالی که به نظر میرسه در دلفی 2009 زمانی صرف رفع اشکالات DataSnap قدیمی نشده، و همه توانشان در این زمینه را صرف DataSnap 2009 کردند!

قرار هست که به زودی یک آپدیت جدید، و ظاهرا بزرگ برای دلفی 2009 ارائه بشه. یک نسخه جدید از دلفی هم قرار هست تا اواسط سال 2009 عرضه بشه. امیدوارم تا اون زمان، قابلیت های بیشتری به DataSnap 2009 اضافه بشه، و حداقل قابلیت اتصال از طریق SOAP را داشته باشه.

تا اون زمان، اگر دنبال یک فریم ورک جایگزین در دلفی می گردید، می تونید درباره kbmMW یا RemObjects DataAbstract تحقیق کنید.