مشاهده نسخه کامل
: مشکل Update,Insert در ویستا
در هنگام استفاده از دستور Update,Insert در ویستا اجازه نمیده و پیغام میده که شما چون از Updateable Query استفاده کرده اید نمی توانید عملیات را ادامه دهید ولی در ویندوز XP بدون مشکل عملیات انجام میشود
لطفا هر نظری دارید ممنون میشم بنویسید
با تشکر
سلام
گمان نکنم مشکل از ویستا باشد.
دیتابیستان چیست؟
مطمئن هستید فایل دیتابیس ReadOnly نیست؟ یا قیدی در ConnectionString اضافه نکرده اید؟
نه اصلا Readonly نیست و فقط تو ویستا دچار مشکل می شه در حالی که در ویندوز XP هیچ مشکلی نداره حتی چند برنامه بانک اطلاعاتی دیگه هم این مشکل رو تو ویستا دارن ولی تو Xp نه
سلام
بانک اطلاعاتی شما چیست؟
در شبکه کار میکنید یا در local ?
من از اولین افرادی بودم که ویستا را نصب کردم و تا حالا همچین مشکلی نداشتم.
اگر میتوانید نمونه کدی که میگویید مشکل دارد را آپلود کنید تا بررسی کنم.
موفق باشید.
بانک اطلاعاتی اکسس هستش و شبکه هم نیست و نسخه ویستا Home Basic هستش
به عنوان نمونه نمونه از کد ذخیره پرداخت که اشکال می گیره
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ممنون میشم اگر بررسی کنید
سلام
این کد شما در صورتی درست جواب میدهد که تمام مقادیر فیلدهای جدول عددی باشند!
ضمن اینکه اگر تصحیحش هم کنید، باز میتواند برای کاراکترهای خاص به مشکل برخورد کند.
شما حتماً باید از روش پارامتری استفاده کنید.
اگر نوع تک تک فیلدها را ذکر کنید میتوانم کد مناسب پارامتری را برایتان بنویسم.
موفق باشید.
قبل از اجرای تابع تمام فیلدها بررسی میشن و کاراکتر غیر مجاز نمی تونه وارد تابع بشه و تابع به درستی کار میکنه در ضمن احتیاجی نیست تمام فیلدها عددی باشند چون فیلد کاراکتری با ' ' مشخص میشه مثل فیلد Discription .
ولی مشکل من این نیست مشکل اینه که تو ویستا با اون پیغامی که گفتم روبرو میشم در حالی که تو ایکس پی همچین مشکلی وجود ندارد
به هر حال مشخصات فیلدها رو براتون مینویسم به همون روشی که گفتید برام بنویسید اونم امتحان میکنم ببینم تو ویستا کار می کنه!
idfactor=LongInteger
cash=Currency
chk=Currency
lend=Currency
discount=Currency
discription=Text
State=Byte
IdsanadBox=Long
سلام
در ضمن احتیاجی نیست تمام فیلدها عددی باشند چون فیلد کاراکتری با ' ' مشخص میشه مثل فیلد Discription .
بله درست است، من متوجه وجود تک کتیشن ها در متن فوق نشدم (تشخیصش کمی سخت بود و است!)
=====
ضمناً برای مقادیر پولی در برنامه های ایرانی با توجه فقدان اعشار در مبالغ پولی ایران، بهتر است در انواع سیستم ها از نمونه های Currency و Money استفاده نکنید به جای آنها میتوانید از مقادیر صحیح و بسیار پرسرعت و با گنجایش زیاد Int32 و Int64 در انواع بانک ها استفاده کنید.
مقادیر Int32 تا حدود مثبت/منفی دو میلیارد ریال/تومان را میتوانند جای دهند.
و مقادیر Int64 تا حدود مثبت/منفی 9,000,000,000,000,000,000 ریال/تومان را میتواند جای دهد که ضمن سرعت بیشتر (و بعضاً حجم مساوی یا کمتر)، حدود 1000 بار بزرگتر از گنجایش مرسوم Currency است.
=====
در کل با انواع مطلوب خود شما من دستور زیر را پیشنهاد میکنم:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
=====
- cash و chke و... که متغییر هستند؟ و TextBox که نیستند؟
- اگر با اجرای دستور فوق هر خطایی دریافت کردید، حتماً متن کامل خطا را اینجا بگذارید
- اگر از نسخه 2008 استفاده نمیکنید به جای آن خط شامل If کد زیر را بنویسید
(IIf(String.IsNullOrEmpty(TxtFac.Text), System.DBNull.Value, TxtFac.Text
- میتوانید به جای دستورات CInt و CDec و... از توابع اصلی Parse هم استفاده کنید. (توصیه بازدهی بیشتر!!!)
- انشا ا... جواب خواهد داد.
موفق باشید.
کدی جالبیه حتما امتحانش میکنم
راستی Int32,Int64 معادل کدوم نوع داده در Access یا Sql هستند
از دستورات Cint , Cdec استفاده میکنم ولی اگر ممکنه درباره استفاده از توابع Parse یکم توضیح بدید
سلام
راستی Int32,Int64 معادل کدوم نوع داده در Access یا Sql هستند
معادل Int32 در access در واقع همان Long Integer است که در زمان طراحی داخل خود access نشان داده میشود.
ولی معادل دقیق و کاملی برای یک متغییر صحیح 8 بایتی (Int64) در access وجود ندارد، شاید نزدیکترین معادل Decimal باشد.
معادل Int32 در بانک اطلاعاتی قدرتمتد sqlserver نوع int است و معادل Int64 هم نوع bigint .
در دات نت هم که هم نوع Int32 را داریم که در vb به ان integer هم گفته میشود و در #c هم به آن int گفته میشود.
و نوع Int64 را هم داریم که در vb و #c به ان long هم گفته میشود.
[quote]
از دستورات Cint , Cdec استفاده میکنم ولی اگر ممکنه درباره استفاده از توابع Parse یکم توضیح بدید
[/qoute]
تابع Parse متدی عضو کلاسس است و ساختارهای اصلی که بتوانن از string تبدیل شود این متد را دارند.
در اصل این متد String را به نوع مطلوب تبدیل میکند.
مثلاً:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با توجه به اینکه دستورات تبدیلی مثل CInt دستور و جزء کلمات رزو شده VB هستند، کامپایلر در شرایط خاص آن را به دستورات مختلفی کامپایل میکند.
مثلاً سه CInt زیر به یک کد IL یکسان کامپایل نمیشوند!!!
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با وجود تفاوت ظاهری سه کد آخری ولی چون CInt کلمه رزو شده است، کامپایلر شرایط را سنجیده و کد مناسب را جایگزین میکند و این خیلی خوب است و استفاده از CInt را توجیح پذیر و منطقی تر میکند.
در واقع یک CInt با ورودی String خودش برای تبدیل از تابع Double.Parse استفاده میکند و بعد مقدار Double را به Integer تبدیل میکند!
نتیجتاً استفاده از Integer.Parse میتواند بهتر باشد ضمن اینکه Integer.TryParse بدون هیچ خطایی، یک boolean پس میدهد که نشان دهنده موفقیت/عدم موفقیت تبدیل است .
توضیح جالبی بود خیلی ممنون
اما مشکل اصلی هنوز وجود دارد .
درباره اون خطایی که گفتم وقتی که برنامه رو تو محیط VS2008 و تو ویندوز یستا Debug می کنی هیچ مشکلی نداره ولی وقتی اونو Setup می کنیم و روی سیستم دیگری که ویندوزش ویستا است(نه تو XP) نصب می کنیم این مشکل به وجود میاد .
در ضمن من همراه Setup راه اندازههای CrystalReports10_5 ,DotNetFX35 ,WindowsInstaller3_1 را هم نصب میکنم
در ضمن تو محیط ویستا اکسس نصب نیست.در محیط XP تا اکسس 2005 بدون نصب راه انداز قابل شناسایی است اما نی دونم تو ویستا چه چوریه .در ضمن بانک اطلاعاتی برنامه با اکسس 2007 ساحته شده ولی موقع ذخیره کردن با فرمت 2003 ذخیره شده
متن کامل خطای ارایه شده به شرح زیر است
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
اگر میتوانید کد داخل (AhanDar.Define_Define_People.cmdsave_Click(Object sender, EventArgs e را کامل + کد کامل ساخت DataAdapter را برایم بگذارید.
(اگر TypedDataAdapter باشد میتوانید فایلهای TypedDataSet را اپلود کنید و اگر DataAdapter معمولی باشد پس خودتان INsert و Update و Delete را مقدار دهی کرده اید و کدش را بگذارید.)
باشه آماده می کنم کدش رو همین جا میزارم
یا شاید همون فرم رو برات گذاشتم
این هم از لینک نمونه اون فرم
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
کدها رو مختصر کردم و فقط اون قسمتی که لازم بود فرستادم
همراه برنامه Setup هم گذاشتم اول SETUP رو نصب کنید تا فونتهای برنامه نصب شود و با SETUP برنامه رو امتحان کنید چون ارور چون برنامه نصب شده به وجود میاد
با تشکــــــــــــــــر
سلام
نیاز به آپلود کامل نبود.
متاسفانه با خوشبختانه گمانم ایراد از کد شما نباشد. (گرچه کد قابل مستحکم تر و بهینه تر شدن است.)
احتمال بسیار زیاد ایراد از مجوز های NTFS است.
چون برای اجرای یک دستور update ای در بانک access شما باید مجوز write برای فایل اصلی و مجوز create (معمولاً یک فایل مخفی در زمان ویرایش بانک mdb ساخته میشود) را داشته باشید.
دقت کنید خود فایل mdb در وضعیت ReadOnly نباشد و سپس...
در پوشه محل نصب برنامه احتمالاً یکی از این دو مجوز وجود ندارد.
برای حل مشکل باید این مجزها را صادر کرد. حداقل یکبار تست کنید و ببینید با این کار حل میشود؟
روی پوشه نهایی نصب برنامه راست کلیک کنید و ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آقا دمت گرم مشکل حل شد برنامه درست شد :20:
ولی چطوری میشه به صورت بر نامه نویسی این کارها رو انجام داد و بانک و پوشه رو از حالت Readonly درآورد و اونو FULL control کرد.چون خودتون میدوند اکثر افرادی که با نرم افزارهای حسابداری کار می کنند زیاد اطلاعاتی درست و حسابی از کامپیوتر ندارند و انجام این تنظیمات براشون مشکل هستش. :41:
در ضمن برای مستحکم کردن چه پیشنهادی دارید هر چند برنامه بدون مشکل کار میکند ولی اگر روش جالبتری دارید خوشحال میشم اونو بگید
با تشکــــــــــــــــــــــ ـــر
سلام
چون خودتون میدوند اکثر افرادی که با نرم افزارهای حسابداری کار می کنند زیاد اطلاعاتی درست و حسابی از کامپیوتر ندارند و انجام این تنظیمات براشون مشکل هستش
اگر مشکل از آن ReadOnly بوده هم در پروژه setup و هم در داخل برنتامه میتوان حلش کرد ولی اگر مشکل از امنیت بوده، به این راحتی قابل حل نیست.
شاید بهتر باشد از SqlServerExpress استفاده کنید و همراه setup نصبش کنید، در یک برنامه کوچک میتوانید به صورت دادن مسیر فایل هم (مثل mdb) به دیتابیس وصل شوید، ضمن اینکه امکانات بسیار بسیار بسیار بیشتر از mdb است و احتمالاً این مشکل امنیتی را هم ندارد.
در ضمن برای مستحکم کردن چه پیشنهادی دارید هر چند برنامه بدون مشکل کار میکند ولی اگر روش جالبتری دارید خوشحال میشم اونو بگید
- متغییر DataSource مشکلات اساسی دارد.
برنامه شما صددرصد در هر سیتم و ویندوزی اگر به داخل پوشه ای کپی شود که نامش شامل نقطه ویرگول باشد ; فوراً به خطا خواهد خورد.
نام پوشه را مثلاً A;B بگذارید و برنامه را در آن کپی و اجرا کنید!
ضمن اینکه در مبنای برنامه ای بزرگ این میتواند یک حفره امنیتی هم محصوب شود.
یا
در حال حاضر و با کد فعلی احتمال دارد در سیستم های مختلف یا بعد از آپدیتی در ویندوز یا در نگارش آینده ویندوز و... اگر برنامه شما به ریشه درایو کپی شود با خطا مواجه شود و اصلاً اجرا شود، گرچه الآن در ویستای من کار میکند و چیز مستحکمی نیست.
چرا؟
شما نوشته اید
"My.Application.Info.DirectoryPath + "\AhanDar.mdb
اگر برنامه از مسیر یک پوشه اجرا شود DirectoryPath بدون اسلش خواهد بود ولی برای ریشه درایو DirectoryPath جوابی با اسلش مثلاً به صورت \:C باز پس میدهد که با اجرای جمع شما میشود C:\\AhanDar.mdb یعنی دو اسلش پیاپی!
این معلوم نیست در سیستم ها و نسخه های آینده و اپدیتها دیگر ویندوز باعث چه رفتاری شود.
اینجا ها است که برنامه ها در شرایط خاص به مشکل برخورد میکنند و در یک سیستم کار میکنند و در دیگری نه، در یک پوشه جواب میدهند و در جای دیگر نه!!!
گرچه میتوان از DataDirectory هم استفاده کرد ولی حداقل کد زیر بهتر جواب دهد.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
- متغییر P_Idsanad بلا استفاده است و فقط و فقط یکجا مقدار دهی شده و بس و هیچکجا مصرف نشده.
- فراخانی dialog فرمها خیلی بهتر است با using همراه باشد تا تضمین آزاد سازی RAM و منابع سیستم عامل باشد.
مثلاً در متدهای MNu_People_Click و MNU_Pay_Click
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
- در جاهای دیگر هم اشیایی ساخته اید که باز تضمینی بر نابودیشان وجود ندارد،
گرچه جمع اوری کننده حافظه هرز دات نت قوی است و مایکروسافت اطمینان روی عملکرد داده ولی توصیه مایکروسافت در خصوص Dispose هم وجود دارد.
- خیلی از متد میتوان کدهای بهینه و با سرعت بیشتری نوشت
- در چندین متد از توابع و دستورات قدیمی VB که بیشتر برای هماهنگی با VB6 وجود دارند، استفاده شده، در حالی که استفاده از متدها و معادلهای جدید میتواند بهتر و کارامدتر باشد.
- چک کردن خالی بودن یک String را بهتر است با تابع String.IsNullOrEmpty چک شود تا هم وضعیت Null و هم وضعیت تهی چک شود و باز در شرایط خاص مشکل ساط نشود.
و...
موفق باشید.
متغییر P_Idsanad بلا استفاده نیست کاربردهای زیادی دارد فقط همون طور که گفتم کد را مختصر کردم وبقیه کاربردها رو حذف کردم تا فرم زیاد پیچیده نشه بهر حال از پیشنهاده و راهنمایهات خیلی ممنون
راستی برای اینکه گفته بودید تو سطح درایو کار نمی کنه اینطوری نیست کار می کنه من یه Setup رو تو سطح ریشه \:C نصب کردم و مسیر شد C:\\ahandar.bnk ولی بدون مشکل کار کرد
و یکبار دیگه اون تو یک پوشه با نام a''.,'][)(-_=+`~&^%$#@!b نصب کرد م و بازهم کار کرد
فقط تو پوشه a;b کار نکرد و اونم به خاطر وجود ; بود البته اونو تو صفحه Splash Screen برنامه کنترل کردم و مشکلی پیش نمیاد
چون همنطور که گفتم من فقط یه تیکه کوچولو از برنامه اونهم با حذف بیشتر کدهاش براتون فرستادم
البته بازهم ممنون
سلام
بله در سیستم من هم کار کرد، ولی بحث سر محکم کاری بود نه چیز دیگر، من هم نگفتم صد در صد کار نمیکند.
اگر دقت کرده باشید لفظ قطعی را فقط و فقط برای نقطه ویرگول به کار بردم.
این معلوم نیست در سیستم ها و نسخه های آینده و اپدیتها دیگر ویندوز باعث چه رفتاری شود.
در هر صورت انشا ا... هموراه پیروز باشید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.