PDA

View Full Version : سوال: استخراج Caption فرم ها با استفاده از نام موجود



ARData
شنبه 23 مهر 1390, 13:31 عصر
در یک جدول نام فرم ها در یک فیلد ذخیره می باشد و چون برای استخراج اطلاعات Caption هر فرمی از فرمول Form_Frmx.Caption استفاده می شود ... بنابر این اگه اطلاعات فیلد من frmx باشد چطوری می تونم این کد رو اجرا کنم :
مثلا : متغیر FrmName رو برابر همون مقدار فیلد می کنیم :
dim frmname as string
frmname="form_" & dlookup("[fldfrmname]","tblforms")
msgbox frmname.caption
هر کاری می کنم جواب نمیگیرم !!!

mazoolagh
شنبه 23 مهر 1390, 22:07 عصر
اینجا دو مشکل هست؛
اول اینکه کدتون از پایه نادرست هست چون string یک data type هست و نه object بنابراین فاقد property هست و بهمین دلیل frmname.caption معنی نداره.
شما باید یک آبجکت از نوع form تعریف کنین و بعد میتونین caption اون فرم رو بدست بیارین ولی مشکل بعدی اینجا بروز میکنه که وقتی اینکار میسر هست که فرم باز بشه (چه در حالت عادی چه در حالت طراحی).

اگر فرم مورد نظرتون باز هست که خب مشکلی نیست و میتونین از کد زیر استفاده کنین:

FORMS(frmname).CAPTION


اما اگر باز نیست مجبورین بازش کنین و بعد از خوندن CAPTION دوباره ببندینش که چندان کار جالبی بنظر نمیاد! مگر اینکه در حالت HIDDEN باشه :

DIM frmname, frmcap AS STRING
frmname="...."
DOCMD.OPENFORM frmname,,,,ACHIDDEN
frmcap=FORMS(frmname).CAPTION
DOCMD.CLOSE ACFORM,frmname,ACSAVENO

Abbas Amiri
شنبه 23 مهر 1390, 22:46 عصر
نام اشیای ایجاد شده و سیستمی اکسس در جدول MSysObjects نگهداری می شود
Dim fld As Field, rs As Recordset
Set rs = CurrentDb.OpenRecordset("MSysObjects")
Do While Not rs.EOF
If rs.Fields("Type") = -32768 Then
Debug.Print rs.Fields("Name")
End If
rs.MoveNext
Loop
Set rs = Nothing
End Sub

ARData
یک شنبه 24 مهر 1390, 08:29 صبح
من نام فرم ها رو با کد زیر استخراج می کنم و در جدول مربوطه ذخیره می کنم و نمی خوام هیچ فرمی هم باز بشه تا کپشن اونو بردارم : کپشن فرم در حالت unload فرم مد نظر منه :
Private Sub Command16_Click()
On Error Resume Next
Dim DB As Database
Dim rst As Recordset
Dim obj1 As AccessObject
Set DB = CurrentDb
Set rst = DB.OpenRecordset(" select * from TblSysForms ")
rst.MoveFirst
For Each obj1 In CurrentProject.AllForms
rst.Edit
rst.Fields(1) = obj1.name
rst.Update
rst.MoveNext
Next obj1
End Sub

Abbas Amiri
دوشنبه 25 مهر 1390, 00:01 صبح
کدی که نوشته اید تست کردم ، Error داشت . اولا باید جدول TblSysForms ایجاد کنیم بعد برای آپدیت کردن آن باید قبلا تعداد رکورد برابر تعداد فرمها داشته باشیم ویا اگر جدول خالی است AddNew. کنیم ،و درخط پنجم بجای AccessObject باید Object قراردهیم

mazoolagh
دوشنبه 25 مهر 1390, 09:49 صبح
اول از همه اینکه برای پیدا کردن اسامی تمام فرمها راه بهتر از خواندن جداول سیستمی هم هست.

دوم:

نمی خوام هیچ فرمی هم باز بشه تا کپشن اونو بردارم : کپشن فرم در حالت unload فرم مد نظر منه
همونطور که گفتم پاسخ بطور مطلق منفی هست.