PDA

View Full Version : هر که این مشکل منو حل کنه جایزه داره



addmean
دوشنبه 16 آبان 1384, 20:26 عصر
سلام
آقا من یه برنامه تو وی بی نوشتم که توش از Dataenvironment ، DataGrid و DataCombo استفاده کردم.
با Dataenvironment به سرور اسکیو ال وصل میشم .
یه مشکل قبلا داشتم که اطلاعات جدید وارد شده تو بانک توسط DataGrid بطور لحظه ای نشون داده نمیشد که راه اونو پیدا کردم.
مشکل الان من اینه که من با کنترل DataCombo همین مشکل رو دارم. یانی این که وقتی تو بانک یه رکورد رو وارد میکنم و می خوام یکی از فیلد های اونو با دیتا کمبو نشون بدم اطلاعات جدید رو نشون نمیده مگر این که برنامه رو یه بار ببندم و دوباره اجرا کنم که البته این راه درستی نیست.
من از Refresh و ReFill هم استفاده کردم ولی نشد.
خواهش می کنم اگه کسی راه حلی میدونه منو راهنمایی کنه.
یه جایزه هم در حد مقدورات تقدیم میکنم.
یه پروژه لنگش رو هواست، کمک کنید

PalizeSoftware
دوشنبه 16 آبان 1384, 21:37 عصر
از ADO‌استفاده کردی یا DAO؟

ehsan_ansaripoor
دوشنبه 16 آبان 1384, 22:09 عصر
دوست عزیز همان طور که پالیز جان اشاره کردند اگر از ADO استفاده می کنی با Refresh تنها مشکلت حله ولی اگر از DAO استفاده می کنی علاوه بر Refresh باید از UpdateControl هم استفاده کنی
و اگر از DataEnvironment استفاده می کنی یه :


DataEnvironment.Recordest.Close
Unload DataEnvironment

انجام بدی

jk
سه شنبه 17 آبان 1384, 13:06 عصر
در مورد
Datagrid
مشکل چه جوری حل می شه

addmean
سه شنبه 17 آبان 1384, 16:28 عصر
سلام
آقای Palize من از ADO استفاده کردم در حقیقت Microsoft OLE DB Provider for SQL Server.
احسان عزیز نه با Refresh مشکل حل میشه نه با Refill .
این
DataEnvironment.Recordest.Close
Unload DataEnvironment
رو انجام دادم فقط چجوری دوباره لود کنم
با
load DataEnvironment
لود کردم ولی ظاهرا لود نشد تا ببینم این روش جواب میده یا نه.


در جواب دوستمون که پرسیده بود تو دیتا گرید چجوری مشکل حل میشه کدش رو اینجا میزارم:


DataEnvironment1.rscmdMyTable.Requery
If DataEnvironment1.rscmdMyTable.State = 1 Then
DataEnvironment1.rscmdMyTable.Close
DataEnvironment1.rscmdMyTable.Open
End If
Set DataGrid1.DataSource = Project1.DataEnvironment1
DataGrid1.Refresh

منتظر راه حل برای دیتا کمبو هستم
ممنون

ehsan_ansaripoor
سه شنبه 17 آبان 1384, 18:40 عصر
دوست عزیز در مورد
DataEnvironment.Recordest.Close
Unload DataEnvironment
بعد از Load DataEnvironment باید Recordest بسته شده را دوباره Open کنی

PalizeSoftware
سه شنبه 17 آبان 1384, 19:02 عصر
چه نسخه‌ای از ADO‌ رو استفاده می‌کنی، 2 ،2.1 ، 2.5 ، 2.6؟

addmean
چهارشنبه 18 آبان 1384, 16:50 عصر
پالیز گرامی ، چجوری میشه فهمید ADO ورژن چنده؟

و احسان عزیز، من از روش Unload Dataenvironment و لود مجدد و Open کردن رکورد سورس هم نتیجه نگرفتم و کماکان فیلد رکوردی رو که در لحظه وارد میکنیم نشون نمیده.

من حتی کنترل دیتا کمبوی Sheridan رو هم تست کردم، اونم همین مشکل رو داره.

-=(میشه نتیجه گرفت مشکل از دیتا کمبو نیست و گیر کار یه جا دیگه است؟ )=-

نمیدونم چکار کنم.

PalizeSoftware
چهارشنبه 18 آبان 1384, 19:36 عصر
دوست عزیز پنجره References رو باز کن (از منوی Project) و گزینه Microsoft ActiveX Date Object x.x library رو ببین.
x.x نسخه مورد استفاده رو مشخص می‌کنه.

addmean
چهارشنبه 18 آبان 1384, 20:06 عصر
دوست عزیز پنجره References رو باز کن (از منوی Project) و گزینه Microsoft ActiveX Date Object x.x library رو ببین.
x.x نسخه مورد استفاده رو مشخص می‌کنه.


پالیز جان اینو دیدم نسخه ٢.٥ بود.
البته نسخه های بالاتر تا ٢.٨ هم بود ولی تیک نخورده بود.

PalizeSoftware
چهارشنبه 18 آبان 1384, 20:34 عصر
خب دوست من به احتمال زیاد مشکل شما بخاطر عدم refresh بانک هست. خود مایکروسافت هم اینو می‌دونه و بهمین خاطر کلاسی ساخته بنام JRO که سبب میشه تا اطلاعات درون کش اعلام بشه. چون ممکنه که شما این فایل رو نداشته باشی من ضمیمه این پست کردم تا بگیری.
فایل رو بگیر و اون رو رجیستر کن.(فایل رو بهتره که توی شاخه system32 ویندوز کپی کنی و از پنجره References دکمه Browse‌ رو بزن و فایل رو انتخاب کن.)
اینجوری به پروژه‌ات اضافه می‌شه.
بعد هرجا که می‌خوای گزارش بگیری یا اطلاعات بانک رو بخونی(مثلا قبل از اینکه combo‌ رو refresh کنی) همچین دستوری رو اجرا کن:


Dim objJR As JRO.JetEngine
Set objJR = New JRO.JetEngine
objJR.RefreshCache Conn
Set objJR = Nothing

که در کد بالا Conn‌ متغیر کانکشن متصل به بانک هست . یادت باشه که کانکشن رو باز کرده باشی که معمولا بهتره کد رو بعد از اضافه کردن داده یا تغییر داده در بانک اجرا کنی.
اگه جواب گرفتی یادت باشه که این فایل رو باید به همراه پروژه نصب کنی.
امیدوارم که مشکلت اینجوری حل بشه.
اگه باز به مشکلی برخورد کردی من در خدمتم.
موفق باشی

addmean
جمعه 20 آبان 1384, 18:44 عصر
خب دوست من به احتمال زیاد مشکل شما بخاطر عدم refresh بانک هست. خود مایکروسافت هم اینو می‌دونه و بهمین خاطر کلاسی ساخته بنام JRO که سبب میشه تا اطلاعات درون کش اعلام بشه. چون ممکنه که شما این فایل رو نداشته باشی من ضمیمه این پست کردم تا بگیری.
فایل رو بگیر و اون رو رجیستر کن.(فایل رو بهتره که توی شاخه system32 ویندوز کپی کنی و از پنجره References دکمه Browse‌ رو بزن و فایل رو انتخاب کن.)
اینجوری به پروژه‌ات اضافه می‌شه.
بعد هرجا که می‌خوای گزارش بگیری یا اطلاعات بانک رو بخونی(مثلا قبل از اینکه combo‌ رو refresh کنی) همچین دستوری رو اجرا کن:


Dim objJR As JRO.JetEngine
Set objJR = New JRO.JetEngine
objJR.RefreshCache Conn
Set objJR = Nothing

که در کد بالا Conn‌ متغیر کانکشن متصل به بانک هست . یادت باشه که کانکشن رو باز کرده باشی که معمولا بهتره کد رو بعد از اضافه کردن داده یا تغییر داده در بانک اجرا کنی.
اگه جواب گرفتی یادت باشه که این فایل رو باید به همراه پروژه نصب کنی.
امیدوارم که مشکلت اینجوری حل بشه.
اگه باز به مشکلی برخورد کردی من در خدمتم.
موفق باشی

پالیز جان ممنون از راهنماییت.

من بجای conn گذاشتم Dataenvironment1.connection1 ولی کار نکرد و ارور داد.
اینجا تصویری از پروژه رو میگذارم شاید از روی این بتونی راهنماییم کنی که بجای متغییر conn چی باید بزارم

PalizeSoftware
جمعه 20 آبان 1384, 19:27 عصر
دوست عزیز اینجا که نباید قرار بدی.
ببینم شما اطلاعات رو کی توی بانک می‌ریزی؟
مگه با متد Execute کار نمی‌کنید. که اگه اینطوری باشه پس شما نیاز به یک کانکشن دارید. اگر نه که نمونه کدی رو که اطلاعات به بانک می‌ریزید رو اینجا بذارید ببینم.

addmean
شنبه 21 آبان 1384, 18:06 عصر
پالیز جان من با یه روش من درآوردی کارمو راه انداختم.به نظر من این روش به هیچ وجه راه حل اساسی نیست من اجبارا از این روش استفاده کردم.
روش کار رو برای دوستان توضیح میدم
به این صورت که یه کمبو باکس معمولی میزاریم تو فرم و با یه لوپ اطلاعات رو خودمون از بانک میخونیم و تو کمبو وارد میکنیم. کدش به این صورته :


Dim iI As Integer
Dim Bookmark As Variant
iI = 0
Combo1.Clear
If DataEnvironment1.rscmdMyTable.EOF <> True Then Bookmark = DataEnvironment1.rscmdMyTable.Bookmark
DataEnvironment1.rscmdMyTable.MoveFirst
Do While DataEnvironment1.rscmdMyTable.EOF = False
Combo1.List(iI) = DataEnvironment1.rscmdMyTable.Fields("MyData")
DataEnvironment1.rscmdMyTable.MoveNext
iI = iI + 1
Loop
If DataEnvironment1.rscmdMyTable.EOF <> True Then DataEnvironment1.rscmdMyTable.Bookmark = Bookmark


این کد رو برای یه event مثلا کلیک روی کمبو باکس یا یه چیز مناسب دیگه قرار میدیم.

راه درستش همونی بود که شما قبلا فرمودید ولی من نتونستم متغییر مناسب رو براش قرار بدم.

PalizeSoftware
یک شنبه 22 آبان 1384, 11:37 صبح
حتما توجه کردید که DataCombo چند خصوصیت بنام RowSource، RowMember و ListField داره. شما اینها رو مشخص کردید؟ من از همین روش شما جلو رفتم و مشکلی پیش نیومد. از کلاس JRO هم استفاده‌ای نکردم.
این مطلب رو تست کنید. انشاالله که مشکل حل بشه.

addmean
دوشنبه 23 آبان 1384, 10:22 صبح
ای بابا پالیز جان، تا این پراپرتی ها رو نزارم که اصلا چیزی رو نشون نمیده.
شما اگه این پراپرتی ها یا خصوصیات مشابه رو همزمان برای چند کنترل فعال کنید گمونم به مشکل من برخورد کنید.
گمونم یه جا تو هلپ JRO خوندم که این مشکل برای حالت مالتی یوزر پیش میاد.