ورود

View Full Version : سوال: قرار دادن مقدار یک فیلد با مقدار فیلد قبل



G.hemati
شنبه 22 مهر 1391, 23:16 عصر
با سلام خدمت اساتید گرامی
من در یک فیلد میخواستم مقدارم رو برابر با فیلد قبلی قرار بدم . بنابراین در رویداد On click یه باتون از کد زیر استفاده کردم

Me.Text1 = Nz(DLookup("Baste", Me.RecordSource, "ID=" & ID - 1), 0)

حالا مشکل اینجاست که وقتی Record Source رو از Select استفاده میکنم (چندین جدول فرم رو تشکیل میدم ) Error تصویر زیر رو میده
ولی وقتی RecordSource رو مستقیم به جدول وصل میکنم مشکلی نداره .
نیاز من برای قسمت اول یعنی استفاده از Select میباشد .
ممنون میشم راهنمایی بفرمایین

Abbas Amiri
شنبه 22 مهر 1391, 23:51 عصر
سلام
باید خطای 3078 صادرمی شد
شما دو راه دارید : یا کوئری ایجادکنید که مقدار مشخص شده را برگرداند و یا ازیک تابع توسط Recordset
در مورد دوم تابع زیر را دریک ماژول کپی کنید


Function GetFieldValue(strSource As String, FieldName As String)
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(strSource)
GetFieldValue = rs(FieldName)
Set rs = Nothing
End Function



وبه اینصورت آنرا فراخوانی کنید

Me.Text1=GetFieldValue("SELECT Basteh FROM (" & Me.RecordSource & ") WHERE ID=" & Me.ID -1, "Basteh")

G.hemati
یک شنبه 23 مهر 1391, 23:09 عصر
با سلام و تشکر بابت لطفتون استاد امیری
من از ماژول شما استفاده کردم ولی موفق نشدم و خطای تصویر زیر را میگیرد . در مورد استفاده از کوئری هم همینطور چون کوئری باید فیلتر هم بشود


من هر دو روش را بر روی نمونه زیر اعمال کردم . اگه زحمتی نیست ایراد کارمو رفع کنین .

بسیار بسیار ممنون

Abbas Amiri
دوشنبه 24 مهر 1391, 00:01 صبح
فایل اصلاح شد

G.hemati
دوشنبه 24 مهر 1391, 22:20 عصر
بسیار سپاس از زحمتی که کشیدین
استاد عزیز فقط یه مشکل با این فایل دارم که اگه مرحمت کنین و اون رو هم راهنمایی بفرمایین ممنون میشم

میخوام ابتدا مقادیر با فیلد NPlanID فیلتر بشه و رکورد قبلی، از این مقادیر فیلتر شده رو برگردونه . در کوئری موجود در نمونه فوق عمل فیلتر رو انجام دادم ولی موفق به برگرداندن مقدار فیلد قبل نشدم .
آیا از طرق ماژول یا کد نویسی میشه عمل فیلتر رو انجام داد

Abbas Amiri
دوشنبه 24 مهر 1391, 22:58 عصر
سلام
یعنی شما میخواهید به هررکوردی رفتید بطور اتماتیک مقدار فیلد قبلی را داشته باشید ؟ در این صورت بصورت دستی نمیتوانید مقداردهی کنید وپس از هربار ورود به رکورد مقدار آپدیت خواهد شد. مگر اینکه ...

G.hemati
دوشنبه 24 مهر 1391, 23:26 عصر
با سلام
استاد بدلیل همون مشکلی که فرمودید "در این صورت بصورت دستی نمیتوانید مقداردهی کنید وپس از هربار ورود به رکورد مقدار آپدیت خواهد شد " من از یه باتون استفاده کردم که بشه مقادیر رو تغییر داد .

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

فرض میکنیم رکورد شماره 1- 3 - 5 از یک شماره برنامه باشد پس وقتی ما در رکورد شماره 5 قرار بگیریم . رکورد قبلی این برنامه رکورد شماره 3 میباشد نه 4 و باید مقدار رکورد شماره 3 را برگرداند

ممنون

Abbas Amiri
دوشنبه 24 مهر 1391, 23:38 عصر
نمونه شما اصلاح شد

G.hemati
دوشنبه 24 مهر 1391, 23:48 عصر
بسیار ممنون و سپاسگذار از زحمتی که کشیدین
خدا خیرتون بده استاد

G.hemati
چهارشنبه 29 آبان 1392, 22:44 عصر
با سلام خدمت تمامی دوستان و اساتید گرامی

این کدهای استاد امیری است که بسیار مشکل مرا حل نمود که مجدداً از ایشان کمال تشکر را دارم

Function GetFieldValue(strSource As String, FieldName As String) As Long
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(strSource)
If rs.RecordCount Then
GetFieldValue = Nz(rs(FieldName), 0)
End If

Set rs = Nothing
End Function

Private Sub Command30_Click()
Dim s As String
s = Trim(Me.RecordSource)
If Right(s, 1) = ";" Then s = Left(s, Len(s) - 1)
Me.Last_Baste = GetFieldValue("SELECT Last(Baste) As LastBaste FROM (" & s & ") WHERE codeF < " & _
Me.codeF & " AND nplanID='" & Me.nplanID & "'", "LastBaste")
End Sub



ولی بعضی مواقع عملکرد صحیح ندارد و عدد را به اشتباه نشان میدهد . جالب این است که با Compact and Repair کردن ، درست میشود

ممنون میشوم راهنمایی بفرمایین

G.hemati
پنج شنبه 30 آبان 1392, 22:35 عصر
اساتید گرامی
منتظر راهنمایی شما خوبان هستم